Name: series-workflow5p2m9 Phase: Succeeded StartedAt: 2026-08-31 13:22:15 +0000 UTC FinishedAt: 2026-08-31 17:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[0] Phase: Succeeded StartedAt: 2026-08-31 13:22:15 +0000 UTC FinishedAt: 2026-08-31 13:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 13:22:15 +0000 UTC FinishedAt: 2026-08-31 13:34:31 +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": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE" ], "series_id": "56f61641-1f39-47fd-89ca-af5e03b98a32" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_handle_frame_finish", "br_get_rx_handler" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9oYW5kbGVfZnJhbWVfZmluaXNoJiMzNDssCiAgICAmIzM0O2JyX2dldF9yeF9oYW5kbGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cblxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWI2OTRlZGQxNjllOGI0MGEyNGYzZGJkNTgxMjllMTNlOTVkN2NmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEzOjIzOjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuaW5kZXggZDg3YTVmOWZhOTJiNy4uMGQwOGMzYzIwMzZmNyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMjcsNiAmIzQzOzI3LDEyIEBAIHN0YXRpYyBpbnRcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4mIzQzO1xuJiM0MztcdC8qIFJlLWluamVjdGVkIGZvciBsb2NhbCBkZWxpdmVyeTogZG8gbm90IGxldCBnZW5lcmljIFhEUCBydW4gb24gdGhlXG4mIzQzO1x0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuJiM0MztcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDticl9nZXRfcnhfaGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicl9pbnB1dC5jIGJ5IHNldHRpbmcgdGhlIHNrYiByZWRpcmVjdGVkIGZsYWcgdmlhIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKCkgd2hlbiBwYXNzaW5nIGJyaWRnZSBmcmFtZXMgdXAgZm9yIGxvY2FsIGRlbGl2ZXJ5LCBwcmV2ZW50aW5nIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIG9yIHJlYWxsb2NhdGluZyBtZW1vcnkuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjY5NGVkZDE2OWU4YjQwYTI0ZjNkYmQ1ODEyOWUxM2U5NWQ3Y2ZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uMGQwOGMzYzIwMzZmNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMjcsNiAmIzQzOzI3LDEyIEBAIHN0YXRpYyBpbnQKIGJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWJyX2Ryb3BfZmFrZV9ydGFibGUoc2tiKTsKJiM0MzsKJiM0MzsJLyogUmUtaW5qZWN0ZWQgZm9yIGxvY2FsIGRlbGl2ZXJ5OiBkbyBub3QgbGV0IGdlbmVyaWMgWERQIHJ1biBvbiB0aGUKJiM0MzsJICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYQomIzQzOwkgKiBwc2tiX2V4cGFuZF9oZWFkKCkgYW5kIGZyZWUgYSBidWZmZXIgc3RpbGwgaW4gdXNlLgomIzQzOwkgKi8KJiM0MzsJc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7CiAJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBSZXZpZXcgYW5kIEZ1enppbmcgVHJpYWdlOiBMaW51eCBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgdGhlIExpbnV4IGtlcm5lbCBhbmQgdGhlIHRhc2sgaXMgdG8gZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBmdXp6aW5nIGFuZCwgaWYgc28sIHRvIGlkZW50aWZ5IHRoZSBrZXkgZWxlbWVudHMgdG8gdGFyZ2V0LiBGaXJzdCwgSSYjMzk7bGwgZG8gYSBxdWljayByaXNrIGFuYWx5c2lzLiBGcm9tIHdoYXQgSSBzZWUgdGhpcyBpcyBhIHByZXR0eSBsb3ctcmlzaywgbGlrZWx5IGJlbmlnbiBwYXRjaC4gSXQgbG9va3MgbGlrZSB0eXBpY2FsIGRldmVsb3BlciBRQS9tYWludGFpbmVyIHJldmlldywgbm90aGluZyBzY3JlYW1pbmcgJiMzNDt2dWxuZXJhYmlsaXR5JiMzNDsgYXQgbWUgcmlnaHQgb2ZmIHRoZSBiYXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBkaWZmIGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBtb2RpZnlpbmcgYG5ldC9icmlkZ2UvYnJfaW5wdXQuY2AuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBkaXNhYmxpbmcgZ2VuZXJpYyBYRFAgZnVuY3Rpb25hbGl0eSBpbiBhIHJlLWluamVjdGlvbiBzY2VuYXJpbyB0byBhdm9pZCBwb3RlbnRpYWwgZG91YmxlLWZyZWVzIHdoZW4gYSBidWZmZXIgaGFzIGJlZW4gcmVhbGxvY2F0ZWQuIFNvIGl0JiMzOTtzIGFuIG9wdGltaXphdGlvbiBvciBidWdmaXggcmVsYXRlZCB0byBoYW5kbGluZyByZS1pbmplY3RlZCBwYWNrZXRzIG9uIGEgYnJpZGdlIGRldmljZS4gTm90IGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBidXQgYnJpZGdlIGNvZGUgaGFzIGFsd2F5cyBoYWQgYSB3YXkgb2YgYmVpbmcuLi5pbnRlcmVzdGluZy4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdC4KCkkmIzM5O2xsIHF1aWNrbHkgZ3JhYiBteSB0b29scyBhbmQgZGlnIGludG8gdGhlIGNvZGUgbW9yZSB0aG9yb3VnaGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCBvZiBjb3Vyc2UsIGFuZCBgbmV0L2JyaWRnZS9LY29uZmlnYCB0byBzZWUgaG93IHRoaXMgYXJlYSBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCBuZWFyYnkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIGZvY3VzIHN5bWJvbHMgYW5kIGVuYWJsZSBjb25maWdzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY2hhbmdlIG1vZGlmaWVzIGFueSBjcnVjaWFsIGNvbnRyb2wgZmxvdyBvciBpbnRyb2R1Y2VzIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBBbnkgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgYWx3YXlzIHdhcnJhbnQgbW9yZSBhdHRlbnRpb24uIE9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdC8qXG4gICAzOlx0ICpcdEhhbmRsZSBpbmNvbWluZyBmcmFtZXNcbiAgIDQ6XHQgKlx0TGludXggZXRoZXJuZXQgYnJpZGdlXG4gICA1Olx0ICpcbiAgIDY6XHQgKlx0QXV0aG9yczpcbiAgIDc6XHQgKlx0TGVubmVydCBCdXl0ZW5oZWtcdFx0XHUwMDNjYnV5dGVuaEBnbnUub3JnXHUwMDNlXG4gICA4Olx0ICovXG4gICA5Olx0XG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2VcbiAgMTU6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oXHUwMDNlXG4gIDE3Olx0I2VuZGlmXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmVpZ2hib3VyLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYXJwLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFwmIzM0O2JyX3ByaXZhdGUuaFwmIzM0O1xuICAyNDpcdCNpbmNsdWRlIFwmIzM0O2JyX3ByaXZhdGVfdHVubmVsLmhcJiMzNDtcbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgaW50XG4gIDI3Olx0YnJfbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gIDI4Olx0e1xuICAyOTpcdFx0YnJfZHJvcF9mYWtlX3J0YWJsZShza2IpO1xuICAzMDpcdFxuICAzMTpcdFx0LyogUmUtaW5qZWN0ZWQgZm9yIGxvY2FsIGRlbGl2ZXJ5OiBkbyBub3QgbGV0IGdlbmVyaWMgWERQIHJ1biBvbiB0aGVcbiAgMzI6XHRcdCAqIGJyaWRnZSBkZXZpY2UgYSBzZWNvbmQgdGltZSwgaXQgY291bGQgcmVhbGxvY2F0ZSB0aGUgaGVhZCB2aWFcbiAgMzM6XHRcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXG4gIDM0Olx0XHQgKi9cbiAgMzU6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xuICAzNjpcdFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHByb21pc2MpXG4gIDQwOlx0e1xuICA0MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqYnJkZXYgPSBCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2VicmRldjtcbiAgNDI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGJyZGV2KTtcbiAgNDM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuICA0NDpcdFxuICA0NTpcdFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChicmRldiwgc2tiLVx1MDAzZWxlbik7XG4gIDQ2Olx0XG4gIDQ3Olx0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiAgNDg6XHRcbiAgNDk6XHRcdC8qIFJlc2V0IHRoZSBvZmZsb2FkX2Z3ZF9tYXJrIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgYSBzdGFja2VkXG4gIDUwOlx0XHQgKiBicmlkZ2UgYWJvdmUsIGFuZCBpdCBzaG91bGQgbm90IHRoaW5rIHRoaXMgYnJpZGdlIGl0IGRvaW5nXG4gIDUxOlx0XHQgKiB0aGF0IGJyaWRnZSYjMzk7cyB3b3JrIGZvcndhcmRpbmcgb3V0IGl0cyBwb3J0cy5cbiAgNTI6XHRcdCAqL1xuICA1MzpcdFx0YnJfc3dpdGNoZGV2X2ZyYW1lX3VubWFyayhza2IpO1xuICA1NDpcdFxuICA1NTpcdFx0LyogQnJpZGdlIGlzIGp1c3QgbGlrZSBhbnkgb3RoZXIgcG9ydC4gIE1ha2Ugc3VyZSB0aGVcbiAgNTY6XHRcdCAqIHBhY2tldCBpcyBhbGxvd2VkIGV4Y2VwdCBpbiBwcm9taXNjIG1vZGUgd2hlbiBzb21lb25lXG4gIDU3Olx0XHQgKiBtYXkgYmUgcnVubmluZyBwYWNrZXQgY2FwdHVyZS5cbiAgNTg6XHRcdCAqL1xuICA1OTpcdFx0aWYgKCEoYnJkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSBcdTAwMjZcdTAwMjZcbiAgNjA6XHRcdCAgICAhYnJfYWxsb3dlZF9lZ3Jlc3ModmcsIHNrYikpIHtcbiAgNjE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDYyOlx0XHRcdHJldHVybiBORVRfUlhfRFJPUDtcbiAgNjM6XHRcdH1cbiAgNjQ6XHRcbiAgNjU6XHRcdGluZGV2ID0gc2tiLVx1MDAzZWRldjtcbiAgNjY6XHRcdHNrYi1cdTAwM2VkZXYgPSBicmRldjtcbiAgNjc6XHRcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcbiAgNjg6XHRcdGlmICghc2tiKVxuICA2OTpcdFx0XHRyZXR1cm4gTkVUX1JYX0RST1A7XG4gIDcwOlx0XHQvKiB1cGRhdGUgdGhlIG11bHRpY2FzdCBzdGF0cyBpZiB0aGUgcGFja2V0IGlzIElHTVAvTUxEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBmdW5jdGlvbiBiZXR0ZXIsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIFdoZXJlICpleGFjdGx5KiBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/IEkgbmVlZCB0byBpZGVudGlmeSBpdHMgY2FsbGVycyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgdGhvc2UgY2FsbCBzaXRlcy4gQW5kIG5vdCBqdXN0IHdpdGhpbiBgYnJfaW5wdXQuY2AgZWl0aGVyLiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC4KClRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgaW4gYGJyX2lucHV0LmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGgsIG9yIGlmIG90aGVyIG1vZHVsZXMgb3Igc291cmNlIGZpbGVzIGFyZSBpbnZvbHZlZCBhcyB3ZWxsLCBJJiMzOTtsbCB0cmFjZSB0aGVtLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1hcCBpbiBteSBtaW5kIG9mIHRoaXMgZW50aXJlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIEkmIzM5O20gYWZ0ZXIgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCB0b3AgdG8gYm90dG9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX25ldGlmX3JlY2VpdmVfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lucHV0LmM9MjY9c3RhdGljIGludFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI3OmJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI4LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9Mzk9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNzctXHRcdCAgICAgICBkZXZfbmV0KGluZGV2KSwgTlVMTCwgc2tiLCBpbmRldiwgTlVMTCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo3ODpcdFx0ICAgICAgIGJyX25ldGlmX3JlY2VpdmVfc2tiKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJyX3Bhc3NfZnJhbWVfdXBgIGZ1bmN0aW9uLiBBcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSBrbm93IGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IHdpdGhpbiB0aGUgYnJpZGdlLCBwYXJ0aWN1bGFybHkgaG93IGZyYW1lcyBhcmUgaGFuZGxlZCBhbmQgcGFzc2VkIHVwIHRoZSBzdGFjay4gU28sIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uLgoKKipUcmFjaW5nIGBicl9wYXNzX2ZyYW1lX3VwYCBpbiBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCoqCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBpZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgYnJfcGFzc19mcmFtZV91cGAgYmVjYXVzZSB0aGF0IHRlbGxzIG1lICp3aGVuKiBhIGZyYW1lIHJlYWNoZXMgdGhpcyBwb2ludCBpbiBwcm9jZXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgbG9naWMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbiDigJMgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGJyX3Bhc3NfZnJhbWVfdXBgLCBhbmQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgY2FsbCwgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgYSBmcmFtZSBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBicmlkZ2luZyBwcm9jZXNzLiBUaGlzIGtpbmQgb2YgY2FsbCBhbmFseXNpcyBvZnRlbiBpbGx1bWluYXRlcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgZnJhbWUgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgYW4gaW1wb3J0YW50IGNhbGwgYW5kIHdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdC8qIHVwZGF0ZSB0aGUgbXVsdGljYXN0IHN0YXRzIGlmIHRoZSBwYWNrZXQgaXMgSUdNUC9NTEQgKi9cbiAgNzE6XHRcdGJyX211bHRpY2FzdF9jb3VudChiciwgTlVMTCwgc2tiLCBicl9tdWx0aWNhc3RfaWdtcF90eXBlKHNrYiksXG4gIDcyOlx0XHRcdFx0ICAgQlJfTUNBU1RfRElSX1RYKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdEJSX0lOUFVUX1NLQl9DQihza2IpLVx1MDAzZXByb21pc2MgPSBwcm9taXNjO1xuICA3NTpcdFxuICA3NjpcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19CUklER0UsIE5GX0JSX0xPQ0FMX0lOLFxuICA3NzpcdFx0XHQgICAgICAgZGV2X25ldChpbmRldiksIE5VTEwsIHNrYiwgaW5kZXYsIE5VTEwsXG4gIDc4Olx0XHRcdCAgICAgICBicl9uZXRpZl9yZWNlaXZlX3NrYik7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuICA4MjpcdGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA4MzpcdHtcbiAgODQ6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuICA4NTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0X3JjdShza2ItXHUwMDNlZGV2KTtcbiAgODY6XHRcdGVudW0gYnJfcGt0X3R5cGUgcGt0X3R5cGUgPSBCUl9QS1RfVU5JQ0FTVDtcbiAgODc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0ID0gTlVMTDtcbiAgODg6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4O1xuICA4OTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0O1xuICA5MDpcdFx0Ym9vbCBsb2NhbF9yY3YsIG1jYXN0X2hpdCA9IGZhbHNlO1xuICA5MTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eDtcbiAgOTI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XG4gIDkzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XG4gIDk0Olx0XHRib29sIHByb21pc2M7XG4gIDk1Olx0XHR1MTYgdmlkID0gMDtcbiAgOTY6XHRcdHU4IHN0YXRlO1xuICA5NzpcdFxuICA5ODpcdFx0aWYgKCFwKVxuICA5OTpcdFx0XHRnb3RvIGRyb3A7XG4gMTAwOlx0XG4gMTAxOlx0XHRiciA9IHAtXHUwMDNlYnI7XG4gMTAyOlx0XG4gMTAzOlx0XHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpIHtcbiAxMDQ6XHRcdFx0c3RhdGUgPSBCUl9TVEFURV9GT1JXQVJESU5HO1xuIDEwNTpcdFx0fSBlbHNlIHtcbiAxMDY6XHRcdFx0aWYgKHAtXHUwMDNlc3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpIHtcbiAxMDc6XHRcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQlJJREdFX0lOR1JFU1NfU1RQX1NUQVRFO1xuIDEwODpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMDk6XHRcdFx0fVxuIDExMDpcdFxuIDExMTpcdFx0XHRzdGF0ZSA9IHAtXHUwMDNlc3RhdGU7XG4gMTEyOlx0XHR9XG4gMTEzOlx0XG4gMTE0Olx0XHRicm1jdHggPSBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZW11bHRpY2FzdF9jdHg7XG4gMTE1Olx0XHRwbWN0eCA9IFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eDtcbiAxMTY6XHRcdGlmICghYnJfYWxsb3dlZF9pbmdyZXNzKHAtXHUwMDNlYnIsIG5icF92bGFuX2dyb3VwX3JjdShwKSwgc2tiLCBcdTAwMjZ2aWQsXG4gMTE3Olx0XHRcdFx0XHRcdTAwMjZzdGF0ZSwgXHUwMDI2dmxhbikpXG4gMTE4Olx0XHRcdGdvdG8gb3V0O1xuIDExOTpcdFxuIDEyMDpcdFx0aWYgKHRlc3RfYml0KEJSX1BPUlRfTE9DS0VEX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpIHtcbiAxMjE6XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGJfc3JjID1cbiAxMjI6XHRcdFx0XHRicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSwgdmlkKTtcbiAxMjM6XHRcbiAxMjQ6XHRcdFx0aWYgKCFmZGJfc3JjKSB7XG4gMTI1Olx0XHRcdFx0LyogRkRCIG1pc3MuIENyZWF0ZSBsb2NrZWQgRkRCIGVudHJ5IGlmIE1BQiBpcyBlbmFibGVkXG4gMTI2Olx0XHRcdFx0ICogYW5kIGRyb3AgdGhlIHBhY2tldC5cbiAxMjc6XHRcdFx0XHQgKi9cbiAxMjg6XHRcdFx0XHRpZiAodGVzdF9iaXQoQlJfUE9SVF9NQUJfQklULCBcdTAwMjZwLVx1MDAzZWZsYWdzKSlcbiAxMjk6XHRcdFx0XHRcdGJyX2ZkYl91cGRhdGUoYnIsIHAsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbiAxMzA6XHRcdFx0XHRcdFx0ICAgICAgdmlkLCBCSVQoQlJfRkRCX0xPQ0tFRCkpO1xuIDEzMTpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMzI6XHRcdFx0fSBlbHNlIGlmIChSRUFEX09OQ0UoZmRiX3NyYy1cdTAwM2Vkc3QpICE9IHAgfHxcbiAxMzM6XHRcdFx0XHQgICB0ZXN0X2JpdChCUl9GREJfTE9DQUwsIFx1MDAyNmZkYl9zcmMtXHUwMDNlZmxhZ3MpKSB7XG4gMTM0Olx0XHRcdFx0LyogRkRCIG1pc21hdGNoLiBEcm9wIHRoZSBwYWNrZXQgd2l0aG91dCByb2FtaW5nLiAqL1xuIDEzNTpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMzY6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChCUl9GREJfTE9DS0VELCBcdTAwMjZmZGJfc3JjLVx1MDAzZWZsYWdzKSkge1xuIDEzNzpcdFx0XHRcdC8qIEZEQiBtYXRjaCwgYnV0IGVudHJ5IGlzIGxvY2tlZC4gUmVmcmVzaCBpdCBhbmQgZHJvcFxuIDEzODpcdFx0XHRcdCAqIHRoZSBwYWNrZXQuXG4gMTM5Olx0XHRcdFx0ICovXG4gMTQwOlx0XHRcdFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLCB2aWQsXG4gMTQxOlx0XHRcdFx0XHQgICAgICBCSVQoQlJfRkRCX0xPQ0tFRCkpO1xuIDE0MjpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxNDM6XHRcdFx0fVxuIDE0NDpcdFx0fVxuIDE0NTpcdFxuIDE0NjpcdFx0bmJwX3N3aXRjaGRldl9mcmFtZV9tYXJrKHAsIHNrYik7XG4gMTQ3Olx0XG4gMTQ4Olx0XHQvKiBpbnNlcnQgaW50byBmb3J3YXJkaW5nIGRhdGFiYXNlIGFmdGVyIGZpbHRlcmluZyB0byBhdm9pZCBzcG9vZmluZyAqL1xuIDE0OTpcdFx0aWYgKHRlc3RfYml0KEJSX0xFQVJOSU5HX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpXG4gMTUwOlx0XHRcdGJyX2ZkYl91cGRhdGUoYnIsIHAsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSwgdmlkLCAwKTtcbiAxNTE6XHRcbiAxNTI6XHRcdHByb21pc2MgPSAhIShici1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKTtcbiAxNTM6XHRcdGxvY2FsX3JjdiA9IHByb21pc2M7XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkpIHtcbiAxNTY6XHRcdFx0LyogYnkgZGVmaW5pdGlvbiB0aGUgYnJvYWRjYXN0IGlzIGFsc28gYSBtdWx0aWNhc3QgYWRkcmVzcyAqL1xuIDE1NzpcdFx0XHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkpIHtcbiAxNTg6XHRcdFx0XHRwa3RfdHlwZSA9IEJSX1BLVF9CUk9BRENBU1Q7XG4gMTU5Olx0XHRcdFx0bG9jYWxfcmN2ID0gdHJ1ZTtcbiAxNjA6XHRcdFx0fSBlbHNlIHtcbiAxNjE6XHRcdFx0XHRwa3RfdHlwZSA9IEJSX1BLVF9NVUxUSUNBU1Q7XG4gMTYyOlx0XHRcdFx0aWYgKGJyX211bHRpY2FzdF9yY3YoXHUwMDI2YnJtY3R4LCBcdTAwMjZwbWN0eCwgdmxhbiwgc2tiLCB2aWQpKVxuIDE2MzpcdFx0XHRcdFx0Z290byBkcm9wO1xuIDE2NDpcdFx0XHR9XG4gMTY1Olx0XHR9XG4gMTY2Olx0XG4gMTY3Olx0XHRpZiAoc3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHtcbiAxNjg6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0JSSURHRV9JTkdSRVNTX1NUUF9TVEFURTtcbiAxNjk6XHRcdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhciBhbmQgR2VuZXJpYyBYRFAvUmVkaXJlY3RlZCBTS0IgRmxhZ3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAgZnVuY3Rpb25zLCBhbmQgbW9yZSBicm9hZGx5LCB0aGUgYmVoYXZpb3Igb2YgdGhvc2UgZ2VuZXJpYyBYRFAgYW5kIHJlZGlyZWN0ZWQgU0tCIGZsYWdzLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhlIG51YW5jZXMuIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIFhEUCBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgcGFja2V0IHJlZGlyZWN0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGltcGxpY2F0aW9ucyBvZiAqbm90KiBjbGVhcmluZyBzb21lIG9mIHRoZSBmbGFncz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgYW5kIG9wdGltaXphdGlvbnMgaW52b2x2ZWQ/IEl0IGlzIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3VidGxldGllcyBvZiB0aGUgZmxhZyBtYW5hZ2VtZW50IGZvciBvcHRpbWFsIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb3JyZWN0IGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gdG8gc29saWRpZnkgbXkga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU0Mzk9c3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0My1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQ0NDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0NS1cdFx0XHRcdFx0ICAgICAgYm9vbCBmcm9tX2luZ3Jlc3MpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3PWJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNC1cdCAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM1Olx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzYtXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxNTUtXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZmlsdGVyLmM6MjE1NjpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBmdW5jdGlvbiBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXJgIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gV2hhdCBleGFjdGx5IGlzIGl0IGRvaW5nPyBJIGtub3cgaG93IGNyaXRpY2FsIFNLQnMgYXJlIGZvciB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgdGhlIHJlZGlyZWN0aW9uIGZsYWdzIGlzIGtleSB0byBncmFzcGluZyBob3cgdHJhZmZpYyBpcyByZXJvdXRlZCwgcG9zc2libHkgYnkgZmVhdHVyZXMgbGlrZSBOQVQgb3IgcG9saWN5IHJvdXRpbmcsIHdpdGhvdXQgbmVjZXNzYXJpbHkgY2xlYXJpbmcgZXhpc3RpbmcgZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHNldHRpbmcgdGhlIGZsYWcsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBmb3IgbGF0ZXIgcHJvY2Vzc2luZyBzdGFnZXMuIERvZXMgdGhpcyBmdW5jdGlvbiwgYXMgdGhlICYjMzQ7bm9jbGVhciYjMzQ7IHN1Z2dlc3RzLCBsZWF2ZSBwcmV2aW91cyByb3V0aW5nIGRlY2lzaW9ucyBpbnRhY3Q/IFdoYXQgaXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgbm90IGNsZWFyaW5nIHByZXZpb3VzIGZsYWdzPyBBcmUgdGhlcmUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgaXMgZXNzZW50aWFsLCB0byBtYWludGFpbiwgZm9yIGV4YW1wbGUsIGEgZmxvdyYjMzk7cyBzdGF0ZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXNhZ2UsIGVzcGVjaWFsbHkgdW5kZXIgaGlnaCBsb2FkLiBJIG5lZWQgdG8gc2VlIGhvdyBpdHMgYmVoYXZpb3IgYWZmZWN0cyB0aGUgdmFyaW91cyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4gTGV0JiMzOTtzIGdldCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MzA6XHR7XG41NDMxOlx0XHRza2ItXHUwMDNlcmVkaXJlY3RlZCA9IDE7XG41NDMyOlx0I2lmZGVmIENPTkZJR19ORVRfUkVESVJFQ1RcbjU0MzM6XHRcdHNrYi1cdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XG41NDM0Olx0XHRpZiAoc2tiLVx1MDAzZWZyb21faW5ncmVzcylcbjU0MzU6XHRcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuNTQzNjpcdCNlbmRpZlxuNTQzNzpcdH1cbjU0Mzg6XHRcbjU0Mzk6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG41NDQwOlx0e1xuNTQ0MTpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xuNTQ0MjpcdH1cbjU0NDM6XHRcbjU0NDQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjU0NDU6XHRcdFx0XHRcdFx0ICAgICAgYm9vbCBmcm9tX2luZ3Jlc3MpXG41NDQ2Olx0e1xuNTQ0NzpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAxO1xuNTQ0ODpcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG41NDQ5Olx0XHRza2ItXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xuNTQ1MDpcdCNlbmRpZlxuNTQ1MTpcdH1cbjU0NTI6XHRcbjU0NTM6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2NzdW1faXNfc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQ1NDpcdHtcbjU0NTU6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBfU0NUUClcbjU0NTY6XHRcdHJldHVybiBza2ItXHUwMDNlY3N1bV9ub3RfaW5ldDtcbjU0NTc6XHQjZWxzZVxuNTQ1ODpcdFx0cmV0dXJuIDA7XG41NDU5Olx0I2VuZGlmXG41NDYwOlx0fVxuNTQ2MTpcdFxuNTQ2MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfY3N1bV9ub3RfaW5ldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQ2MzpcdHtcbjU0NjQ6XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuNTQ2NTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9TQ1RQKVxuNTQ2NjpcdFx0c2tiLVx1MDAzZWNzdW1fbm90X2luZXQgPSAwO1xuNTQ2NzpcdCNlbmRpZlxuNTQ2ODpcdH1cbjU0Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBTS0IgUmVkaXJlY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYHNrYi0mZ3Q7cmVkaXJlY3RlZGAgZmxhZyBnZXRzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgbW9zdCBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0aWZfcmVjZWl2ZV9za2JgIGFuZCB0aGUgdmFyaW91cyBwYXRocyBpbiBnZW5lcmljIFhEUC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaW1wYWN0IG9mIHJlZGlyZWN0aW9uIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmbGFnIGltcGFjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZvcndhcmRpbmcgbG9naWMgaW4gdGhlc2Uga2V5IG5ldHdvcmsgaW50ZXJmYWNlIHJvdXRpbmVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25kaXRpb25hbCBqdW1wcywgZWFybHkgZXhpdHMsIG9yIGVudGlyZWx5IGRpZmZlcmVudCBwcm9jZXNzaW5nIHBhdGhzIGJhc2VkIG9uIHRoaXMgZmxhZz8gV2hhdCYjMzk7cyB0aGUgY29zdCBvZiBjaGVja2luZyB0aGlzIGZsYWcgaW4gYSB0aWdodCBsb29wIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBmb2xsb3cgdGhlIGNvbnRyb2wgZmxvdyBmcm9tIHRob3NlIHBvaW50cy4gVW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmxhZyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gbWFwIHRoZSB1c2FnZSBvZiB0aGlzIGZpZWxkIGluIHJlbGF0aW9uIHRvIGRpZmZlcmVudCBOSUMgZHJpdmVycyBhbmQgbmV0d29ya2luZyBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWRpcmVjdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lmLmM9MTgwPWludCBuYnBfYmFja3VwX2NoYW5nZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDQtXHRpZiAob2xkX2JhY2t1cClcbm5ldC9icmlkZ2UvYnJfaWYuYzoyMDU6XHRcdG9sZF9iYWNrdXAtXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250LS07XG5uZXQvYnJpZGdlL2JyX2lmLmMtMjA2LVxubmV0L2JyaWRnZS9icl9pZi5jLTIwNy1cdGlmIChiYWNrdXBfcClcbm5ldC9icmlkZ2UvYnJfaWYuYzoyMDg6XHRcdGJhY2t1cF9wLVx1MDAzZWJhY2t1cF9yZWRpcmVjdGVkX2NudCYjNDM7JiM0Mzs7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMjA5LVx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXHUwMDNlYmFja3VwX3BvcnQsIGJhY2t1cF9wKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MjE0PXN0YXRpYyB2b2lkIG5icF9iYWNrdXBfY2xlYXIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjE2LVx0bmJwX2JhY2t1cF9jaGFuZ2UocCwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX2lmLmM6MjE3Olx0aWYgKHAtXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KSB7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMjE4LVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpjdXJfcDtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjI4LVxubmV0L2JyaWRnZS9icl9pZi5jOjIyOTpcdFdBUk5fT04ocmN1X2FjY2Vzc19wb2ludGVyKHAtXHUwMDNlYmFja3VwX3BvcnQpIHx8IHAtXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KTtcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMzAtfVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNz1icl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQtXHQgKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM2LVx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzE9YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzU5LSAqIGNoYW5nZSB0aGUgZGVzdGluYXRpb24gTUFDIGFkZHJlc3Mgc28gdGhhdCB0aGUgcGFja2V0IHdpbGxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzYwOiAqIGxhdGVyIGJlIHBhc3NlZCB1cCB0byB0aGUgSVAgc3RhY2sgdG8gYmUgcm91dGVkLiBGb3IgYSByZWRpcmVjdGVkXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM2MS0gKiBwYWNrZXQsIGlwX3JvdXRlX2lucHV0KCkgd2lsbCBnaXZlIGJhY2sgdGhlIGxvY2FsaG9zdCBhcyBvdXRwdXQgZGV2aWNlLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM5Mj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NTAtXHR1MTZcdFx0XHRcdGdyb3VwX2Z3ZF9tYXNrO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDUxOlx0dTE2XHRcdFx0XHRiYWNrdXBfcmVkaXJlY3RlZF9jbnQ7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NTItXG4tLVxubmV0L2NvcmUvZGV2LmM9NTYzOD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2NDctXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjU2NDg6XHRpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSlcbm5ldC9jb3JlL2Rldi5jLTU2NDktXHRcdHJldHVybiBYRFBfUEFTUztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxNTUtXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZmlsdGVyLmM6MjE1NjpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuLS1cbm5ldC9kc2EvdGFnX25ldGMuYy0yMS0jZGVmaW5lIE5FVENfVEFHX1RPX0hPU1RcdFx0MlxubmV0L2RzYS90YWdfbmV0Yy5jOjIyOi8qIFN1YlR5cGUwOiBmcmFtZXMgcmVkaXJlY3RlZCBvciBjb3BpZWQgdG8gQ1BVIHBvcnQgKi9cbm5ldC9kc2EvdGFnX25ldGMuYy0yMy0jZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUwXHRcdDBcbm5ldC9kc2EvdGFnX25ldGMuYzoyNDovKiBTdWJUeXBlMTogZnJhbWVzIHJlZGlyZWN0ZWQgb3IgY29waWVkIHRvIENQVSBwb3J0IHdpdGggdGltZXN0YW1wICovXG5uZXQvZHNhL3RhZ19uZXRjLmMtMjUtI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMVx0XHQxXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xMzc2PXZvaWQgaXB2NF9wa3RpbmZvX3ByZXBhcmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGRyb3BfZHN0KVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTM4OS1cdFx0ICogKGUuZy4sIHByb2Nlc3MgYmluZHMgc29ja2V0IHRvIGV0aDAgZm9yIFR4IHdoaWNoIGlzXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEzOTA6XHRcdCAqIHJlZGlyZWN0ZWQgdG8gbG9vcGJhY2sgaW4gdGhlIHJ0YWJsZS9kc3QpLlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMzkxLVx0XHQgKi9cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTg3NT1zdGF0aWMgdm9pZCBpcHY0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvcm91dGUuYy04OTItICpcdCAgIGR1cmluZyBpcF9ydF9yZWRpcmVjdF9zaWxlbmNlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgaG9zdFxubmV0L2lwdjQvcm91dGUuYzo4OTM6ICpcdCAgIGZvcmdvdCByZWRpcmVjdGVkIHJvdXRlIGFuZCBzdGFydCB0byBzZW5kIHJlZGlyZWN0cyBhZ2Fpbi5cbm5ldC9pcHY0L3JvdXRlLmMtODk0LSAqXG4tLVxubmV0L2lwdjQvcm91dGUuYz05MDI9dm9pZCBpcF9ydF9zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvcm91dGUuYy05MjgtXG5uZXQvaXB2NC9yb3V0ZS5jOjkyOTpcdC8qIE5vIHJlZGlyZWN0ZWQgcGFja2V0cyBkdXJpbmcgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZTtcbm5ldC9pcHY0L3JvdXRlLmMtOTMwLVx0ICogcmVzZXQgdGhlIGFsZ29yaXRobS5cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTkzNy1cdC8qIFRvbyBtYW55IGlnbm9yZWQgcmVkaXJlY3RzOyBkbyBub3Qgc2VuZCBhbnl0aGluZ1xubmV0L2lwdjQvcm91dGUuYzo5Mzg6XHQgKiBzZXQgZHN0LnJhdGVfbGFzdCB0byB0aGUgbGFzdCBzZWVuIHJlZGlyZWN0ZWQgcGFja2V0LlxubmV0L2lwdjQvcm91dGUuYy05MzktXHQgKi9cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTIwODI9c3RhdGljIHZvaWQgcnQ2X2V4Y2VwdGlvbnNfdXBkYXRlX3BtdHUoc3RydWN0IGluZXQ2X2RldiAqaWRldixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIwOTYtXG5uZXQvaXB2Ni9yb3V0ZS5jOjIwOTc6XHRcdFx0LyogRm9yIFJURl9DQUNIRSB3aXRoIHJ0NmlfcG10dSA9PSAwIChpLmUuIGEgcmVkaXJlY3RlZFxubmV0L2lwdjYvcm91dGUuYy0yMDk4LVx0XHRcdCAqIHJvdXRlKSwgdGhlIG1ldHJpY3Mgb2YgaXRzIHJ0LVx1MDAzZWZyb20gaGF2ZSBhbHJlYWR5XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTI0PXN0YXRpYyB2b2lkIG5mdF9md2RfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0zMy1cdHNrYi1cdTAwM2Vza2JfaWlmID0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jOjM0Olx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgbmZ0X2hvb2socGt0KSA9PSBORl9ORVRERVZfSU5HUkVTUyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtMzUtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmM9MjE9c3RhdGljIHZvaWQgbmZ0X3Rwcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYy02OC1cdFx0Lyogbm8sIHRoZXJlJiMzOTtzIG5vIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24sIGNoZWNrIGlmXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzo2OTpcdFx0ICogdGhlcmUmIzM5O3MgYSBsaXN0ZW5lciBvbiB0aGUgcmVkaXJlY3RlZCBhZGRyL3BvcnRcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTcwLVx0XHQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYz04ND1zdGF0aWMgdm9pZCBuZnRfdHByb3h5X2V2YWxfdjYoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE0MC1cdFx0Lyogbm8gdGhlcmUmIzM5O3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jOjE0MTpcdFx0ICogdGhlcmUmIzM5O3MgYSBsaXN0ZW5lciBvbiB0aGUgcmVkaXJlY3RlZCBhZGRyL3BvcnRcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE0Mi1cdFx0ICovXG4tLVxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYz0zNj10cHJveHlfdGc0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGxhZGRyLCBfX2JlMTYgbHBvcnQsXG4tLVxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy02NS1cdFx0Lyogbm8sIHRoZXJlJiMzOTtzIG5vIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24sIGNoZWNrIGlmXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jOjY2Olx0XHQgKiB0aGVyZSYjMzk7cyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydCAqL1xubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy02Ny1cdFx0c2sgPSBuZl90cHJveHlfZ2V0X3NvY2tfdjQobmV0LCBza2IsIGlwaC1cdTAwM2Vwcm90b2NvbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jPTExMT10cHJveHlfdGc2X3YxKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jLTE1NC1cdFx0Lyogbm8gdGhlcmUmIzM5O3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmM6MTU1Olx0XHQgKiB0aGVyZSYjMzk7cyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydCAqL1xubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy0xNTYtXHRcdHNrID0gbmZfdHByb3h5X2dldF9zb2NrX3Y2KHh0X25ldChwYXIpLCBza2IsIHRob2ZmLFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTc0Mj1jb25maWcgTkVUX0FDVF9NSVJSRURcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03NDUtXHRoZWxwXG5uZXQvc2NoZWQvS2NvbmZpZzo3NDY6XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0cyB0byBiZSBtaXJyb3JlZCBvciByZWRpcmVjdGVkIHRvXG5uZXQvc2NoZWQvS2NvbmZpZy03NDctXHQgIG90aGVyIGRldmljZXMuXG4tLVxubmV0L3NjaGVkL2FjdF9pZmUuYz03ODc9c3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtODY4LSAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHlcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODY5OiAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQmIzM5O3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxubmV0L3NjaGVkL2FjdF9pZmUuYy04NzAtICogZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UuXG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYz0yNTQ9c3RhdGljIGludCB0Y2ZfbWlycmVkX3RvX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX21pcnJlZCAqbSxcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTI5OS1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6MzAwOlx0LyogQWxsIG1pcnJlZC9yZWRpcmVjdGVkIHNrYnMgc2hvdWxkIGNsZWFyIHByZXZpb3VzIGN0IGluZm8gKi9cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzAxLVx0bmZfcmVzZXRfY3Qoc2tiX3RvX3NlbmQpO1xuLS1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI1LVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYzozMjY6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZChza2JfdG9fc2VuZCwgc2tiX3RvX3NlbmQtXHUwMDNldGNfYXRfaW5ncmVzcyk7XG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTMyNy1cbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTM0ND1zdGF0aWMgaW50IHRjZl9ibG9ja2Nhc3RfcmVkaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9taXJyZWQgKm0sXG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zNzQtXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjM3NTpcdC8qIElmIHRoZSBwYWNrZXQgd2FzbiYjMzk7dCByZWRpcmVjdGVkLCB3ZSBoYXZlIHRvIHJlZ2lzdGVyIGFzIGEgZHJvcCAqL1xubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zNzYtXHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jPTEwMDE9cnBjcmRtYV9pbmxpbmVfZml4dXAoc3RydWN0IHJwY19ycXN0ICpycXN0LCBjaGFyICpzcmNwLCBpbnQgY29weV9sZW4sIGludCBwYWQpXG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwMDgtXG5uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmM6MTAwOTpcdC8qIFRoZSBoZWFkIGlvdmVjIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIFJQQyByZXBseSBtZXNzYWdlXG5uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMtMTAxMC1cdCAqIGluIHRoZSByZWNlaXZlIGJ1ZmZlciwgdG8gYXZvaWQgYSBtZW1jb3B5LlxuLS1cbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYy0xMDYyLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jOjEwNjM6XHQvKiBUaGUgdGFpbCBpb3ZlYyBpcyByZWRpcmVjdGVkIHRvIHRoZSByZW1haW5pbmcgZGF0YVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwNjQtXHQgKiBpbiB0aGUgcmVjZWl2ZSBidWZmZXIsIHRvIGF2b2lkIGEgbWVtY29weS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWERQIGFuZCBCcmlkZ2UgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IFhEUCBpbnRlcmFjdHMgd2l0aCBicmlkZ2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLiBJIHNlZSB0aGUgY3J1Y2lhbCBjaGVjazogYGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKSByZXR1cm4gWERQX1BBU1M7YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGF0IHRoZSBYRFAgbG9naWMgc3BlY2lmaWNhbGx5IGF2b2lkcyBydW5uaW5nICphZ2Fpbiogb24gYSBwYWNrZXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlZGlyZWN0ZWQuIEl0JiMzOTtzIGEga2V5IG9wdGltaXphdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGJyX3Bhc3NfZnJhbWVfdXBgLiBUaGlzIGlzIHdoZXJlIGZyYW1lcyBjb21pbmcgKnVwKiBmcm9tIGEgYnJpZGdlIHBvcnQgdG8gdGhlIGhvc3QmIzM5O3MgbmV0d29yayBzdGFjayBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBgTkZfSE9PSyguLi4sIGJyX25ldGlmX3JlY2VpdmVfc2tiKWAuIEFoYSEgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBpcyB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBzcGVjaWZpY2FsbHkgZHJvcHMgdGhlIGZha2Ugcm91dGUgdGFibGUsIG1hcmtzIHRoZSBTS0IgYXMgcmVkaXJlY3RlZCB1c2luZyBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSlgLCBhbmQgKnRoZW4qIGNhbGxzIGBuZXRpZl9yZWNlaXZlX3NrYihza2IpYC4gVGhpcyBpcyB0aGUgY3J1eC4KClRoZSBvdmVyYWxsIGdvYWwgaXMgY2xlYXI6IHByZXZlbnQgZ2VuZXJpYyBYRFAgZnJvbSBydW5uaW5nIG9uIHRoZSBicmlkZ2UgKmFnYWluKiwgcGFydGljdWxhcmx5IHdoZW4gaXQmIzM5O3MgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCAob3IsIGV2ZW4gbW9yZSBjcnVjaWFsLCBwcmV2ZW50aW5nIGEgcmUtYWxsb2NhdGlvbiBvZiBwYWNrZXQgZGF0YSB2aWEgYHBza2JfZXhwYW5kX2hlYWQoKWAgd2hlbiBidWZmZXJzIGFyZSBpbiB1c2UgZnJvbSBhIHByZXZpb3VzIFhEUCBydW4pLiBUaGlzIGF2b2lkcyByZWR1bmRhbnQgcHJvY2Vzc2luZyBhbmQgcHJldmVudHMgcG90ZW50aWFsIGJ1ZmZlciBjb3JydXB0aW9uLiBUaGlzIGFsbCBtYWtlcyBzZW5zZSwgdG8gcHJldmVudCBkb3VibGUtcHJvY2Vzc2luZyBvbiBhbHJlYWR5IHJlZGlyZWN0ZWQgcGFja2V0cy4KCk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbi4gV2hlcmUgaXMgdGhlIGJyaWRnZSBjb2RlIGNvbXBpbGVkPyBXaGF0JiMzOTtzIHRoZSByZWxldmFudCBjb25maWcgc3ltYm9sPyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgYG5ldC9icmlkZ2VgIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSSURHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWctNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xubmV0L2JyaWRnZS9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnOjM4Olx0ZGVwZW5kcyBvbiBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy0zOS1cdGRlcGVuZHMgb24gSU5FVFxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy00OS1cbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXHRib29sIFwmIzM0O1ZMQU4gZmlsdGVyaW5nXCYjMzQ7XG5uZXQvYnJpZGdlL0tjb25maWc6NTI6XHRkZXBlbmRzIG9uIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnLTUzLVx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXG5uZXQvYnJpZGdlL0tjb25maWctNjUtXHRib29sIFwmIzM0O01SUCBwcm90b2NvbFwmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnOjY2Olx0ZGVwZW5kcyBvbiBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy02Ny1cdGRlZmF1bHQgblxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cbm5ldC9icmlkZ2UvS2NvbmZpZzo3Njpjb25maWcgQlJJREdFX0NGTVxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtDRk0gcHJvdG9jb2xcJiMzNDtcbm5ldC9icmlkZ2UvS2NvbmZpZzo3ODpcdGRlcGVuZHMgb24gQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNzktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzUzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYnJfaW5wdXQuYyoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYGJyX2lucHV0LmNgLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gcHJlY2lzZWx5IHdoaWNoIG9iamVjdCB0aGlzIGZpbGUgaXMgY29tcGlsZWQgaW50byB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBzdWJzeXN0ZW0uIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyBpdOKAmXMgbGlrZWx5IHBhcnQgb2YgdGhlIGNvcmUgYnJpZGdlIG1vZHVsZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4gb2YgdGhlIGRlcGVuZGVuY3kgYW5kIG92ZXJhbGwgYnVpbGQgY29uZmlndXJhdGlvbi4gSnVtcGluZyBpbnRvIGBuZXQvYnJpZGdlL01ha2VmaWxlYCBzZWVtcyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gZmluZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEEgcXVpY2sgc2NhbiBvZiB0aGF0IE1ha2VmaWxlIHNob3VsZCByZXZlYWwgd2hldGhlciBgYnJfaW5wdXQuY2AgaXMgbGlua2VkIGRpcmVjdGx5IGludG8gYSBzcGVjaWZpYyBtb2R1bGUsIG9yIHBlcmhhcHMgaW5kaXJlY3RseSB2aWEgYSBsaWJyYXJ5IG9yIG9iamVjdCBhZ2dyZWdhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgc3RyZWFtbGluZSBmdXJ0aGVyIGFuYWx5c2lzIGlmIEkgbmVlZCB0byBleGFtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgYnJpZGdlIGNvbXBvbmVudHMsIG9yIGlmIEkgbmVlZCB0byBtb2RpZnkgdGhlIGJ1aWxkIHByb2Nlc3MuIEEgbGl0dGxlIGludmVzdGlnYXRpb24gdXAtZnJvbnQsIHNhdmVzIGEgbG90IG9mIHdhc3RlZCB0aW1lIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQlJJREdFKSAmIzQzOz0gYnJpZGdlLm9cbiAgIDc6XHRcbiAgIDg6XHRicmlkZ2UteVx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXG4gICA5Olx0XHRcdFx0YnJfaW9jdGwubyBicl9zdHAubyBicl9zdHBfYnBkdS5vIFxcXG4gIDEwOlx0XHRcdFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXG4gIDExOlx0XHRcdFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xuICAxMjpcdFxuICAxMzpcdGJyaWRnZS0kKENPTkZJR19TWVNGUykgJiM0Mzs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xuICAxNDpcdFxuICAxNTpcdGJyaWRnZS0kKHN1YnN0IG0seSwkKENPTkZJR19CUklER0VfTkVURklMVEVSKSkgJiM0Mzs9IGJyX25mX2NvcmUub1xuICAxNjpcdFxuICAxNzpcdGJyX25ldGZpbHRlci15IDo9IGJyX25ldGZpbHRlcl9ob29rcy5vXG4gIDE4Olx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xuICAxOTpcdG9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbiAgMjA6XHRcbiAgMjE6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbiAgMjI6XHRcbiAgMjM6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbiAgMjQ6XHRcbiAgMjU6XHRicmlkZ2UtJChDT05GSUdfTkVUX1NXSVRDSERFVikgJiM0Mzs9IGJyX3N3aXRjaGRldi5vXG4gIDI2Olx0XG4gIDI3Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUikgJiM0Mzs9IG5ldGZpbHRlci9cbiAgMjg6XHRcbiAgMjk6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX01SUClcdCYjNDM7PSBicl9tcnBfc3dpdGNoZGV2Lm8gYnJfbXJwLm8gYnJfbXJwX25ldGxpbmsub1xuICAzMDpcdFxuICAzMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVx0JiM0Mzs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cbiAgMzI6XHRcbiAgMzM6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxuICAzNDpcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxuICAzNTpcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaG9va3MubyA6PSB5XG4gIDM2Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxuICAzNzpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEJyaWRnZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX0JSSURHRWAgaXMgZW5hYmxlZCwgd2hpY2ggaW1tZWRpYXRlbHkgcHVsbHMgaW4gYGJyaWRnZS5vYC4gQW5kIHdpdGhpbiB0aGF0LCB3ZSYjMzk7dmUgZ290IGBicl9pbnB1dC5vYC4gR290IGl0LiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxhdGVkIHRvIGBDT05GSUdfQlJJREdFYC4gTmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSB3b3JraW5nLCBvciBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGNvbm5lY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJSSURHRVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTExDXG4gICA5Olx0XHRzZWxlY3QgU1RQXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cbiAgMTI6XHRcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcbiAgMTM6XHRcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxuICAxNDpcdFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcbiAgMTU6XHRcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxuICAxNjpcdFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxuICAxNzpcdFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UmIzM5O2xsIG5lZWQgdGhlIGJyaWRnZVxuICAyMDpcdFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFx1MDAzZVxuICAyMTpcdFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxuICAyMjpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XG4gIDI1Olx0XHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxuICAyNjpcdFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXG4gIDI3Olx0XHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXG4gIDI4Olx0XHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxuICAyOTpcdFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxuICAzMzpcdFxuICAzNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xuICAzNzpcdFx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgMzk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0MDpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDkxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgSGllcmFyY2h5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgbmV0L2JyaWRnZS9LY29uZmlnYCBpcyBwdWxsZWQgaW50byB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L0tjb25maWdgLiBJdCYjMzk7cyB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzbyBpdCYjMzk7cyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRvIGhhbmRsZSB0aGUgaW5jbHVzaW9uIG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2NhbiBmb3IgYW55IGBzb3VyY2VgIG9yIHNpbWlsYXIgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHBvaW50IHRvIHdoZXJlIGBuZXQvYnJpZGdlL0tjb25maWdgIGlzIGluY2x1ZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIgSSBuZWVkIGluIG5vIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MjU5PXNvdXJjZSBcJiMzNDtuZXQvODAyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2MDpzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNjEtc291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZSBiZXR0ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSBpcyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydCB3aGVuIGRpZ2dpbmcgaW50byBuZXR3b3JrLXJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBIbW0sIGxpbmUgMjU5Li4uIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gd2hlcmUgdGhpbmdzIGFyZSBnb2luZyBzaWRld2F5cy4gSSBleHBlY3QgdG8gZmluZCBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRlZmluaXRpb24sIG1heWJlIGEgY29uZGl0aW9uYWwgYmxvY2ssIG9yIHBlcmhhcHMgYW4gaW5jbHVkZXMgc3RhdGVtZW50IHRoYXQgbGVhZHMgbWUgdG8gdGhlIHNwZWNpZmljIHN1Yi1jb25maWd1cmF0aW9uIGFyZWEgSSBuZWVkIHRvIGV4YW1pbmUuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0c291cmNlIFwmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNTE6XHRcbiAyNTI6XHRlbmRpZiAjIGlmIE5FVEZJTFRFUlxuIDI1MzpcdFxuIDI1NDpcdHNvdXJjZSBcJiMzNDtuZXQvc2N0cC9LY29uZmlnXCYjMzQ7XG4gMjU1Olx0c291cmNlIFwmIzM0O25ldC9yZHMvS2NvbmZpZ1wmIzM0O1xuIDI1NjpcdHNvdXJjZSBcJiMzNDtuZXQvdGlwYy9LY29uZmlnXCYjMzQ7XG4gMjU3Olx0c291cmNlIFwmIzM0O25ldC9hdG0vS2NvbmZpZ1wmIzM0O1xuIDI1ODpcdHNvdXJjZSBcJiMzNDtuZXQvbDJ0cC9LY29uZmlnXCYjMzQ7XG4gMjU5Olx0c291cmNlIFwmIzM0O25ldC84MDIvS2NvbmZpZ1wmIzM0O1xuIDI2MDpcdHNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL0tjb25maWdcJiMzNDtcbiAyNjE6XHRzb3VyY2UgXCYjMzQ7bmV0L2RzYS9LY29uZmlnXCYjMzQ7XG4gMjYyOlx0c291cmNlIFwmIzM0O25ldC84MDIxcS9LY29uZmlnXCYjMzQ7XG4gMjYzOlx0c291cmNlIFwmIzM0O25ldC9sbGMvS2NvbmZpZ1wmIzM0O1xuIDI2NDpcdHNvdXJjZSBcJiMzNDtuZXQveDI1L0tjb25maWdcJiMzNDtcbiAyNjU6XHRzb3VyY2UgXCYjMzQ7bmV0L2xhcGIvS2NvbmZpZ1wmIzM0O1xuIDI2NjpcdHNvdXJjZSBcJiMzNDtuZXQvcGhvbmV0L0tjb25maWdcJiMzNDtcbiAyNjc6XHRzb3VyY2UgXCYjMzQ7bmV0LzZsb3dwYW4vS2NvbmZpZ1wmIzM0O1xuIDI2ODpcdHNvdXJjZSBcJiMzNDtuZXQvaWVlZTgwMjE1NC9LY29uZmlnXCYjMzQ7XG4gMjY5Olx0c291cmNlIFwmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJyX2lucHV0LmNgIGZpbGUuCgoqKkluc3BlY3RpbmcgYnJfaW5wdXQuYyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzIGlucHV0IGhhbmRsaW5nIG1vZHVsZS4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgKnB1YmxpY2x5KiBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gYGJyX2lucHV0LmNgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgZmlsZSwgZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiB3aWxsIGJlLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IHRob3NlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFx0fVxuIDE3MTpcdFxuIDE3MjpcdFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXHUwMDNlYnJkZXYgPSBici1cdTAwM2VkZXY7XG4gMTczOlx0XHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2VzcmNfcG9ydF9pc29sYXRlZCA9IHRlc3RfYml0KEJSX0lTT0xBVEVEX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncyk7XG4gMTc0Olx0XG4gMTc1Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2XG4gMTc2Olx0XHQgICAgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApIHx8XG4gMTc3Olx0XHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9SQVJQKSkpIHtcbiAxNzg6XHRcdFx0YnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHNrYiwgYnIsIHZpZCwgcCk7XG4gMTc5Olx0XHR9IGVsc2UgaWYgKGlwdjZfbW9kX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjZcbiAxODA6XHRcdFx0ICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFx1MDAyNlx1MDAyNlxuIDE4MTpcdFx0XHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbiAxODI6XHRcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbiAxODM6XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFx1MDAyNlx1MDAyNlxuIDE4NDpcdFx0XHQgICBpcHY2X2hkcihza2IpLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcbiAxODU6XHRcdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2c7XG4gMTg2Olx0XG4gMTg3Olx0XHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG4gMTg4Olx0XHRcdFx0aWYgKG1zZylcbiAxODk6XHRcdFx0XHRcdGJyX2RvX3N1cHByZXNzX25kKHNrYiwgYnIsIHZpZCwgcCwgbXNnKTtcbiAxOTA6XHRcdH1cbiAxOTE6XHRcbiAxOTI6XHRcdHN3aXRjaCAocGt0X3R5cGUpIHtcbiAxOTM6XHRcdGNhc2UgQlJfUEtUX01VTFRJQ0FTVDpcbiAxOTQ6XHRcdFx0bWRzdCA9IGJyX21kYl9lbnRyeV9za2JfZ2V0KGJybWN0eCwgc2tiLCB2aWQpO1xuIDE5NTpcdFx0XHRpZiAoKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgXHUwMDI2XHUwMDI2XG4gMTk2Olx0XHRcdCAgICBicl9tdWx0aWNhc3RfcXVlcmllcl9leGlzdHMoYnJtY3R4LCBldGhfaGRyKHNrYiksIG1kc3QpKSB7XG4gMTk3Olx0XHRcdFx0aWYgKChtZHN0IFx1MDAyNlx1MDAyNiBtZHN0LVx1MDAzZWhvc3Rfam9pbmVkKSB8fFxuIDE5ODpcdFx0XHRcdCAgICBicl9tdWx0aWNhc3RfaXNfcm91dGVyKGJybWN0eCwgc2tiKSB8fFxuIDE5OTpcdFx0XHRcdCAgICBici1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuIDIwMDpcdFx0XHRcdFx0bG9jYWxfcmN2ID0gdHJ1ZTtcbiAyMDE6XHRcdFx0XHRcdERFVl9TVEFUU19JTkMoYnItXHUwMDNlZGV2LCBtdWx0aWNhc3QpO1xuIDIwMjpcdFx0XHRcdH1cbiAyMDM6XHRcdFx0XHRtY2FzdF9oaXQgPSB0cnVlO1xuIDIwNDpcdFx0XHR9IGVsc2Uge1xuIDIwNTpcdFx0XHRcdGxvY2FsX3JjdiA9IHRydWU7XG4gMjA2Olx0XHRcdFx0REVWX1NUQVRTX0lOQyhici1cdTAwM2VkZXYsIG11bHRpY2FzdCk7XG4gMjA3Olx0XHRcdH1cbiAyMDg6XHRcdFx0YnJlYWs7XG4gMjA5Olx0XHRjYXNlIEJSX1BLVF9VTklDQVNUOlxuIDIxMDpcdFx0XHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QsIHZpZCk7XG4gMjExOlx0XHRcdGlmICh1bmxpa2VseSghZHN0IFx1MDAyNlx1MDAyNiB2aWQgXHUwMDI2XHUwMDI2XG4gMjEyOlx0XHRcdFx0ICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wKSkpIHtcbiAyMTM6XHRcdFx0XHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QsIDApO1xuIDIxNDpcdFx0XHRcdGlmIChkc3QgXHUwMDI2XHUwMDI2XG4gMjE1Olx0XHRcdFx0ICAgICghdGVzdF9iaXQoQlJfRkRCX0xPQ0FMLCBcdTAwMjZkc3QtXHUwMDNlZmxhZ3MpIHx8XG4gMjE2Olx0XHRcdFx0ICAgICB0ZXN0X2JpdChCUl9GREJfQURERURfQllfVVNFUiwgXHUwMDI2ZHN0LVx1MDAzZWZsYWdzKSkpXG4gMjE3Olx0XHRcdFx0XHRkc3QgPSBOVUxMO1xuIDIxODpcdFx0XHR9XG4gMjE5Olx0XHRcdGJyZWFrO1xuIDIyMDpcdFx0ZGVmYXVsdDpcbiAyMjE6XHRcdFx0YnJlYWs7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoZHN0KSB7XG4gMjI1Olx0XHRcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbiAyMjY6XHRcbiAyMjc6XHRcdFx0aWYgKHRlc3RfYml0KEJSX0ZEQl9MT0NBTCwgXHUwMDI2ZHN0LVx1MDAzZWZsYWdzKSlcbiAyMjg6XHRcdFx0XHRyZXR1cm4gYnJfcGFzc19mcmFtZV91cChza2IsIGZhbHNlKTtcbiAyMjk6XHRcbiAyMzA6XHRcdFx0aWYgKG5vdyAhPSBSRUFEX09OQ0UoZHN0LVx1MDAzZXVzZWQpKVxuIDIzMTpcdFx0XHRcdFdSSVRFX09OQ0UoZHN0LVx1MDAzZXVzZWQsIG5vdyk7XG4gMjMyOlx0XHRcdGJyX2ZvcndhcmQoUkVBRF9PTkNFKGRzdC1cdTAwM2Vkc3QpLCBza2IsIGxvY2FsX3JjdiwgZmFsc2UpO1xuIDIzMzpcdFx0fSBlbHNlIHtcbiAyMzQ6XHRcdFx0aWYgKCFtY2FzdF9oaXQpXG4gMjM1Olx0XHRcdFx0YnJfZmxvb2QoYnIsIHNrYiwgcGt0X3R5cGUsIGxvY2FsX3JjdiwgZmFsc2UsIHZpZCk7XG4gMjM2Olx0XHRcdGVsc2VcbiAyMzc6XHRcdFx0XHRicl9tdWx0aWNhc3RfZmxvb2QobWRzdCwgc2tiLCBicm1jdHgsIGxvY2FsX3JjdiwgZmFsc2UpO1xuIDIzODpcdFx0fVxuIDIzOTpcdFxuIDI0MDpcdFx0aWYgKGxvY2FsX3JjdilcbiAyNDE6XHRcdFx0cmV0dXJuIGJyX3Bhc3NfZnJhbWVfdXAoc2tiLCBwcm9taXNjKTtcbiAyNDI6XHRcbiAyNDM6XHRvdXQ6XG4gMjQ0Olx0XHRyZXR1cm4gMDtcbiAyNDU6XHRkcm9wOlxuIDI0NjpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4gMjQ3Olx0XHRnb3RvIG91dDtcbiAyNDg6XHR9XG4gMjQ5Olx0RVhQT1JUX1NZTUJPTF9HUEwoYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XG4gMjUwOlx0XG4gMjUxOlx0c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXG4gMjUyOlx0e1xuIDI1MzpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0X3JjdShza2ItXHUwMDNlZGV2KTtcbiAyNTQ6XHRcdHUxNiB2aWQgPSAwO1xuIDI1NTpcdFxuIDI1NjpcdFx0LyogY2hlY2sgaWYgdmxhbiBpcyBhbGxvd2VkLCB0byBhdm9pZCBzcG9vZmluZyAqL1xuIDI1NzpcdFx0aWYgKHRlc3RfYml0KEJSX0xFQVJOSU5HX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gMjU4Olx0XHQgICAgbmJwX3N0YXRlX3Nob3VsZF9sZWFybihwKSBcdTAwMjZcdTAwMjZcbiAyNTk6XHRcdCAgICAhYnJfb3B0X2dldChwLVx1MDAzZWJyLCBCUk9QVF9OT19MTF9MRUFSTikgXHUwMDI2XHUwMDI2XG4gMjYwOlx0XHQgICAgYnJfc2hvdWxkX2xlYXJuKHAsIHNrYiwgXHUwMDI2dmlkKSlcbiAyNjE6XHRcdFx0YnJfZmRiX3VwZGF0ZShwLVx1MDAzZWJyLCBwLCBldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsIHZpZCwgMCk7XG4gMjYyOlx0fVxuIDI2MzpcdFxuIDI2NDpcdC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuIDI2NTpcdHN0YXRpYyBpbnQgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAyNjY6XHR7XG4gMjY3Olx0XHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcbiAyNjg6XHRcbiAyNjk6XHRcdC8qIHJldHVybiAxIHRvIHNpZ25hbCB0aGUgb2tmbigpIHdhcyBjYWxsZWQgc28gaXQmIzM5O3Mgb2sgdG8gdXNlIHRoZSBza2IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gYWJvdXQgdG8gZG86CgoqKkFuYWx5emluZyBgYnJfaW5wdXQuY2AgZm9yIE5vbi1TdGF0aWMgRnVuY3Rpb25zKioKClJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgYnJfaW5wdXQuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgcGFzdCB0aGUgc3RhdGljIG9uZXMsIGFzIHRob3NlIGFyZSB1c3VhbGx5IGludGVybmFsIHRvIHRoZSBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGV4cG9zZWQsIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGlmIHlvdSB3aWxsLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gdG8gaW5zcGVjdCB0aGVzZSBmdW5jdGlvbnMgLSB3aGV0aGVyIHRoYXQmIzM5O3MgZm9yIHJlZmFjdG9yaW5nLCB1bmRlcnN0YW5kaW5nIGV4dGVybmFsIGRlcGVuZGVuY2llcywgb3IgZXh0ZW5kaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHdoYXRldmVyIHByb2plY3QgdGhpcyBpcyBwYXJ0IG9mLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHJldHVybiB0eXBlcywgYW5kIGFueSBjb21tZW50cyB0aGF0IGFyZSB0aGVyZSB0byBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSBhbmQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkgd2FudCBhIGNvbmNpc2UgdW5kZXJzdGFuZGluZyBvZiBpdHMgY2FwYWJpbGl0aWVzIG91dHNpZGUgb2YgYW55IGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRyZXR1cm4gMTtcbiAyNzE6XHR9XG4gMjcyOlx0XG4gMjczOlx0c3RhdGljIGludCBuZl9ob29rX2JyaWRnZV9wcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIDI3NDpcdHtcbiAyNzU6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gMjc2Olx0XHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gTlVMTDtcbiAyNzc6XHRcdHN0cnVjdCBuZl9ob29rX3N0YXRlIHN0YXRlO1xuIDI3ODpcdFx0dW5zaWduZWQgaW50IHZlcmRpY3QsIGk7XG4gMjc5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gMjgwOlx0XHRpbnQgcmV0O1xuIDI4MTpcdFxuIDI4MjpcdFx0bmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiAyODM6XHQjaWZkZWYgQ09ORklHX0pVTVBfTEFCRUxcbiAyODQ6XHRcdGlmICghc3RhdGljX2tleV9mYWxzZShcdTAwMjZuZl9ob29rc19uZWVkZWRbTkZQUk9UT19CUklER0VdW05GX0JSX1BSRV9ST1VUSU5HXSkpXG4gMjg1Olx0XHRcdGdvdG8gZnJhbWVfZmluaXNoO1xuIDI4NjpcdCNlbmRpZlxuIDI4NzpcdFxuIDI4ODpcdFx0ZSA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlbmYuaG9va3NfYnJpZGdlW05GX0JSX1BSRV9ST1VUSU5HXSk7XG4gMjg5Olx0XHRpZiAoIWUpXG4gMjkwOlx0XHRcdGdvdG8gZnJhbWVfZmluaXNoO1xuIDI5MTpcdFxuIDI5MjpcdFx0bmZfaG9va19zdGF0ZV9pbml0KFx1MDAyNnN0YXRlLCBORl9CUl9QUkVfUk9VVElORyxcbiAyOTM6XHRcdFx0XHQgICBORlBST1RPX0JSSURHRSwgc2tiLVx1MDAzZWRldiwgTlVMTCwgTlVMTCxcbiAyOTQ6XHRcdFx0XHQgICBuZXQsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xuIDI5NTpcdFxuIDI5NjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDI5NzpcdFx0XHR2ZXJkaWN0ID0gbmZfaG9va19lbnRyeV9ob29rZm4oXHUwMDI2ZS1cdTAwM2Vob29rc1tpXSwgc2tiLCBcdTAwMjZzdGF0ZSk7XG4gMjk4Olx0XHRcdHN3aXRjaCAodmVyZGljdCBcdTAwMjYgTkZfVkVSRElDVF9NQVNLKSB7XG4gMjk5Olx0XHRcdGNhc2UgTkZfQUNDRVBUOlxuIDMwMDpcdFx0XHRcdGlmIChCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2Vicl9uZXRmaWx0ZXJfYnJvdXRlKSB7XG4gMzAxOlx0XHRcdFx0XHQqcHNrYiA9IHNrYjtcbiAzMDI6XHRcdFx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4gMzAzOlx0XHRcdFx0fVxuIDMwNDpcdFx0XHRcdGJyZWFrO1xuIDMwNTpcdFx0XHRjYXNlIE5GX0RST1A6XG4gMzA2Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzA3Olx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG4gMzA4Olx0XHRcdGNhc2UgTkZfUVVFVUU6XG4gMzA5Olx0XHRcdFx0cmV0ID0gbmZfcXVldWUoc2tiLCBcdTAwMjZzdGF0ZSwgaSwgdmVyZGljdCk7XG4gMzEwOlx0XHRcdFx0aWYgKHJldCA9PSAxKVxuIDMxMTpcdFx0XHRcdFx0Y29udGludWU7XG4gMzEyOlx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG4gMzEzOlx0XHRcdGRlZmF1bHQ6IC8qIFNUT0xFTiAqL1xuIDMxNDpcdFx0XHRcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuIDMxNTpcdFx0XHR9XG4gMzE2Olx0XHR9XG4gMzE3Olx0ZnJhbWVfZmluaXNoOlxuIDMxODpcdFx0bmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiAzMTk6XHRcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2gobmV0LCBOVUxMLCBza2IpO1xuIDMyMDpcdCNlbHNlXG4gMzIxOlx0XHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYik7XG4gMzIyOlx0I2VuZGlmXG4gMzIzOlx0XHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiAzMjQ6XHR9XG4gMzI1Olx0XG4gMzI2Olx0LyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXG4gMzI3Olx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gMzI4Olx0ICovXG4gMzI5Olx0c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiAzMzA6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMzMTpcdHtcbiAzMzI6XHRcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4gMzMzOlx0XG4gMzM0Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbiAzMzU6XHRcdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4gMzM2Olx0XHRcdFx0cmV0dXJuIHRtcC1cdTAwM2VmcmFtZV9oYW5kbGVyKHAsIHNrYik7XG4gMzM3Olx0XG4gMzM4Olx0XHRyZXR1cm4gMDtcbiAzMzk6XHR9XG4gMzQwOlx0XG4gMzQxOlx0LypcbiAzNDI6XHQgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxuIDM0MzpcdCAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuIDM0NDpcdCAqL1xuIDM0NTpcdHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gMzQ2Olx0e1xuIDM0NzpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4gMzQ4Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuIDM0OTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiO1xuIDM1MDpcdFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCA9IGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3Q7XG4gMzUxOlx0XG4gMzUyOlx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSykpXG4gMzUzOlx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4gMzU0Olx0XG4gMzU1Olx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlKSkge1xuIDM1NjpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTUFDX0lOVkFMSURfU09VUkNFO1xuIDM1NzpcdFx0XHRnb3RvIGRyb3A7XG4gMzU4Olx0XHR9XG4gMzU5Olx0XG4gMzYwOlx0XHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiAzNjE6XHRcdGlmICghc2tiKVxuIDM2MjpcdFx0XHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiAzNjM6XHRcbiAzNjQ6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3QgYnJfaW5wdXRfc2tiX2NiKSk7XG4gMzY1Olx0XHRicl90Y19za2JfbWlzc19zZXQoc2tiLCBmYWxzZSk7XG4gMzY2Olx0XG4gMzY3Olx0XHRwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi1cdTAwM2VkZXYpO1xuIDM2ODpcdFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpXG4gMzY5Olx0XHRcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBiZWFyaW5ncyBpbiB0aGlzIGJyaWRnaW5nIGNvZGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGluY29taW5nIGZyYW1lcyBhcmUgYWN0dWFsbHkgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHM6IHdoZXJlIGRvIHRoZSBpbmNvbWluZyBwYWNrZXRzIGFjdHVhbGx5ICpsYW5kKiB3aXRoaW4gdGhlIHN5c3RlbT8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgcnhfaGFuZGxlcmAgYW5kIGFueSBwb3RlbnRpYWwgJiMzNDtmcmFtZSBlbnRyeSYjMzQ7IGZ1bmN0aW9ucyDigJMgeW91IGtub3csIHRoZSBvbmVzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsbHkgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBkYXRhLgoKT25jZSBJIGhhdmUgdGhvc2UgaWRlbnRpZmllZCwgSSYjMzk7bGwgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgYGJyX2lucHV0LmNgIGZpbGUgd2lsbCBoYXZlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgcmVzdCBvZiBpdCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBpbml0aWFsIHJlY2VpdmUgaGFuZGxlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGlzIGtleSB0byBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoZSBnb2FsIGlzIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBwYXRoIGZyb20gcGh5c2ljYWwgaW50ZXJmYWNlIHRvIHRoZSBicmlkZ2UmIzM5O3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNzA6XHRcbiAzNzE6XHRcdGlmICh1bmxpa2VseShpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoZGVzdCkpKSB7XG4gMzcyOlx0XHRcdHUxNiBmd2RfbWFzayA9IHAtXHUwMDNlYnItXHUwMDNlZ3JvdXBfZndkX21hc2tfcmVxdWlyZWQ7XG4gMzczOlx0XG4gMzc0Olx0XHRcdC8qXG4gMzc1Olx0XHRcdCAqIFNlZSBJRUVFIDgwMi4xRCBUYWJsZSA3LTEwIFJlc2VydmVkIGFkZHJlc3Nlc1xuIDM3NjpcdFx0XHQgKlxuIDM3NzpcdFx0XHQgKiBBc3NpZ25tZW50XHRcdCBcdFx0VmFsdWVcbiAzNzg6XHRcdFx0ICogQnJpZGdlIEdyb3VwIEFkZHJlc3NcdFx0MDEtODAtQzItMDAtMDAtMDBcbiAzNzk6XHRcdFx0ICogKE1BQyBDb250cm9sKSA4MDIuM1x0XHQwMS04MC1DMi0wMC0wMC0wMVxuIDM4MDpcdFx0XHQgKiAoTGluayBBZ2dyZWdhdGlvbikgODAyLjNcdDAxLTgwLUMyLTAwLTAwLTAyXG4gMzgxOlx0XHRcdCAqIDgwMi4xWCBQQUUgYWRkcmVzc1x0XHQwMS04MC1DMi0wMC0wMC0wM1xuIDM4MjpcdFx0XHQgKlxuIDM4MzpcdFx0XHQgKiA4MDIuMUFCIExMRFAgXHRcdDAxLTgwLUMyLTAwLTAwLTBFXG4gMzg0Olx0XHRcdCAqXG4gMzg1Olx0XHRcdCAqIE90aGVycyByZXNlcnZlZCBmb3IgZnV0dXJlIHN0YW5kYXJkaXphdGlvblxuIDM4NjpcdFx0XHQgKi9cbiAzODc6XHRcdFx0ZndkX21hc2sgfD0gcC1cdTAwM2Vncm91cF9md2RfbWFzaztcbiAzODg6XHRcdFx0c3dpdGNoIChkZXN0WzVdKSB7XG4gMzg5Olx0XHRcdGNhc2UgMHgwMDpcdC8qIEJyaWRnZSBHcm91cCBBZGRyZXNzICovXG4gMzkwOlx0XHRcdFx0LyogSWYgU1RQIGlzIHR1cm5lZCBvZmYsXG4gMzkxOlx0XHRcdFx0ICAgdGhlbiBtdXN0IGZvcndhcmQgdG8ga2VlcCBsb29wIGRldGVjdGlvbiAqL1xuIDM5MjpcdFx0XHRcdGlmIChwLVx1MDAzZWJyLVx1MDAzZXN0cF9lbmFibGVkID09IEJSX05PX1NUUCB8fFxuIDM5MzpcdFx0XHRcdCAgICBmd2RfbWFzayBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBkZXN0WzVdKSlcbiAzOTQ6XHRcdFx0XHRcdGdvdG8gZm9yd2FyZDtcbiAzOTU6XHRcdFx0XHQqcHNrYiA9IHNrYjtcbiAzOTY6XHRcdFx0XHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcbiAzOTc6XHRcdFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuIDM5ODpcdFxuIDM5OTpcdFx0XHRjYXNlIDB4MDE6XHQvKiBJRUVFIE1BQyAoUGF1c2UpICovXG4gNDAwOlx0XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX01BQ19JRUVFX01BQ19DT05UUk9MO1xuIDQwMTpcdFx0XHRcdGdvdG8gZHJvcDtcbiA0MDI6XHRcbiA0MDM6XHRcdFx0Y2FzZSAweDBFOlx0LyogODAyLjFBQiBMTERQICovXG4gNDA0Olx0XHRcdFx0ZndkX21hc2sgfD0gcC1cdTAwM2Vici1cdTAwM2Vncm91cF9md2RfbWFzaztcbiA0MDU6XHRcdFx0XHRpZiAoZndkX21hc2sgXHUwMDI2ICgxdSBcdTAwM2NcdTAwM2MgZGVzdFs1XSkpXG4gNDA2Olx0XHRcdFx0XHRnb3RvIGZvcndhcmQ7XG4gNDA3Olx0XHRcdFx0KnBza2IgPSBza2I7XG4gNDA4Olx0XHRcdFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XG4gNDA5Olx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbiA0MTA6XHRcbiA0MTE6XHRcdFx0ZGVmYXVsdDpcbiA0MTI6XHRcdFx0XHQvKiBBbGxvdyBzZWxlY3RpdmUgZm9yd2FyZGluZyBmb3IgbW9zdCBvdGhlciBwcm90b2NvbHMgKi9cbiA0MTM6XHRcdFx0XHRmd2RfbWFzayB8PSBwLVx1MDAzZWJyLVx1MDAzZWdyb3VwX2Z3ZF9tYXNrO1xuIDQxNDpcdFx0XHRcdGlmIChmd2RfbWFzayBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBkZXN0WzVdKSlcbiA0MTU6XHRcdFx0XHRcdGdvdG8gZm9yd2FyZDtcbiA0MTY6XHRcdFx0fVxuIDQxNzpcdFxuIDQxODpcdFx0XHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2Vwcm9taXNjID0gZmFsc2U7XG4gNDE5Olx0XG4gNDIwOlx0XHRcdC8qIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgYmUgaGl0IHdoZW4gbmZfaG9vaygpOlxuIDQyMTpcdFx0XHQgKiAgIC0gcmV0dXJucyBcdTAwM2MgMCAoZHJvcC9lcnJvcilcbiA0MjI6XHRcdFx0ICogICAtIHJldHVybnMgPSAwIChzdG9sZW4vbmZfcXVldWUpXG4gNDIzOlx0XHRcdCAqIFRodXMgcmV0dXJuIDEgZnJvbSB0aGUgb2tmbigpIHRvIHNpZ25hbCB0aGUgc2tiIGlzIG9rIHRvIHBhc3NcbiA0MjQ6XHRcdFx0ICovXG4gNDI1Olx0XHRcdGlmIChORl9IT09LKE5GUFJPVE9fQlJJREdFLCBORl9CUl9MT0NBTF9JTixcbiA0MjY6XHRcdFx0XHQgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxuIDQyNzpcdFx0XHRcdCAgICBicl9oYW5kbGVfbG9jYWxfZmluaXNoKSA9PSAxKSB7XG4gNDI4Olx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbiA0Mjk6XHRcdFx0fSBlbHNlIHtcbiA0MzA6XHRcdFx0XHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiA0MzE6XHRcdFx0fVxuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbiA0MzU6XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbiA0MzY6XHRcbiA0Mzc6XHRmb3J3YXJkOlxuIDQzODpcdFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxuIDQzOTpcdFx0XHRnb3RvIGRlZmVyX3N0cF9maWx0ZXJpbmc7XG4gNDQwOlx0XG4gNDQxOlx0XHRzd2l0Y2ggKHAtXHUwMDNlc3RhdGUpIHtcbiA0NDI6XHRcdGNhc2UgQlJfU1RBVEVfRk9SV0FSRElORzpcbiA0NDM6XHRcdGNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6XG4gNDQ0Olx0ZGVmZXJfc3RwX2ZpbHRlcmluZzpcbiA0NDU6XHRcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwocC1cdTAwM2Vici1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGRlc3QpKVxuIDQ0NjpcdFx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0XHRyZXR1cm4gbmZfaG9va19icmlkZ2VfcHJlKHNrYiwgcHNrYik7XG4gNDQ5Olx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnJfaGFuZGxlX2ZyYW1lYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYGJyX2hhbmRsZV9mcmFtZWAgaXMgYWN0aW5nIGFzIGEgcmVjZWl2ZSBoYW5kbGVyLCB3aGljaCBtZWFucyBpdCYjMzk7cyBzaXR0aW5nIHRoZXJlIHdhaXRpbmcgdG8gcHJvY2VzcyBpbmNvbWluZyBmcmFtZXMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNlIHdpdGhpbiB0aGUgYnJpZGdpbmcgc3Vic3lzdGVtLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYW4gYHJ4X2hhbmRsZXJgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgb3IgcmVmZXJlbmNlZC4gQSBjcm9zcy1yZWZlcmVuY2Ugc2VhcmNoLCBsaWtlbHkgdGhyb3VnaCBgZ3JlcGAgb3IgbXkgSURFJiMzOTtzIGZ1bmN0aW9uYWxpdHksIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zIHRvIG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIGZyYW1lIHByb2Nlc3NpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGZyYW1lcyBhcmUgY2F0ZWdvcml6ZWQgb3Igd2hhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfaGFuZGxlX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lucHV0LmM9Mzk9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODEtLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6ODI6aW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODMte1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNDgtfVxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNTAtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5My1cdFx0XHQgICBORlBST1RPX0JSSURHRSwgc2tiLVx1MDAzZWRldiwgTlVMTCwgTlVMTCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyOTQ6XHRcdFx0ICAgbmV0LCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yOTUtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMxOC1cdG5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzE5Olx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzIxOlx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyMi0jZW5kaWZcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0NC0gKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNDYte1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjMtICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDY0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZV9kdW1teShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDY1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDY5PXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzEtXHRpZiAobmV0ZGV2X3VzZXNfZHNhKGRldikpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDcyOlx0XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lX2R1bW15O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3My1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzQ6XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3NS19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNTU9dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzMtICogZG9uJiMzOTt0LCB3ZSB1c2UgdGhlIG5laWdoYm91ciBmcmFtZXdvcmsgdG8gZmluZCBvdXQuIEluIGJvdGggY2FzZXMsIHdlIG1ha2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc0OiAqIHN1cmUgdGhhdCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKCkgaXMgY2FsbGVkIGFmdGVyd2FyZHMuXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3NS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mjc2PWludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzA2LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMDc6XHRcdFx0cmV0ID0gYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIHNrLCBza2IpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMDgtXHRcdH0gZWxzZSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zNzY9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzAtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzE6XHRcdFx0ICBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDMyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDA1PXN0YXRpYyB2b2lkIGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Vfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyNi1cdG5mX2JyaWRnZS1cdTAwM2VwaHlzb3V0ZGV2ID0gTlVMTDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAyNzpcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyOC19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTEwMT1zdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTMtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE1NDpcdFx0XHQgIHNrYi1cdTAwM2VkZXYsIE5VTEwsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE1NS1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Mjk9aW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzEtLyogYnJfaW5wdXQuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTMyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTkzMy1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjE5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgUGFja2V0IFByb2Nlc3NpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGludG8gdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGxhbmRlZCBpbiB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiB0aGV5JiMzOTtyZSBwYXNzZWQgdXAgdG8gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoYXQgYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgLCB3aGljaCBpcyBhIGdsb2JhbGx5IGV4cG9ydGVkIGZ1bmN0aW9uLCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGhlcmUuIEl0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IGRpcmVjdGx5IGxlYWRzIHRvIGBicl9wYXNzX2ZyYW1lX3VwYCwgd2hpY2ggdGhlbiBjYWxscyBgTkZfSE9PS2Agb24gYGJyX25ldGlmX3JlY2VpdmVfc2tiYC4gVGhpcyBpcyB3aGVyZSB0aGUgcGF0Y2ggdG91Y2hlcyB0aGluZ3MsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSlgIGNoYW5nZS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYnJvYWRlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBuZXQvYnJpZGdlL2Agb3IgZXZlbiBgbmV0L2NvcmUvYD8gV2hhdCBoYXBwZW5zIHdoZW4geW91IGhhdmUgZ2VuZXJpYyBYRFAgYXR0YWNoZWQgdG8gYSBicmlkZ2UgaW50ZXJmYWNlLCBvciBhbnkgbmV0ZGV2PyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBwYWNrZXRzIGZsb3cgZnJvbSBhIGJyaWRnZSBzbGF2ZSBpbnRlcmZhY2UsIHRocm91Z2ggdGhlIGJyaWRnZSAoYGJyX2hhbmRsZV9mcmFtZWApLCBhbmQgdGhlbiB1cCB0byBsb2NhbCBkZWxpdmVyeSAoYGJyX3Bhc3NfZnJhbWVfdXBgIHRvIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgYW5kIGV2ZW50dWFsbHkgYG5ldGlmX3JlY2VpdmVfc2tiYCkuCgpBaCwgeWVzLCBhbmQgSSByZWNhbGwgdGhhdCBpbnNpZGUgYG5ldGlmX3JlY2VpdmVfc2tiYCwgYGRvX3hkcF9nZW5lcmljYCBhbmQgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLCBnZW5lcmljIFhEUCBoYXMgdGhpcyBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl9pc19yZWRpcmVjdGVkKHNrYikpIHJldHVybiBYRFBfUEFTUztgLiBUaGlzIHBhdGNoIHNldHMgYHNrYi0mZ3Q7cmVkaXJlY3RlZGAsIHdoaWNoIG1lYW5zIGdlbmVyaWMgWERQICpzaG91bGRuJiMzOTt0KiBydW4gYSBzZWNvbmQgdGltZSBvbiB0aGUgbG9jYWwgYnJpZGdlIGRldmljZSBhbmQgcmVhbGxvY2F0ZSB0aGUgaGVhZCBvciBmcmVlIHRoZSBidWZmZXJzIHdoaWxlIHN0aWxsIGluIHVzZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpbywgc28gaXQgbWFrZXMgdG90YWwgc2Vuc2UuCgpOb3csIHRoaXMgZmVlbHMgbGlrZSBpdCBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgSSBoYXZlIHRvIGJlIHN1cmUgdGhpcyBpcyBhcHBsaWNhYmxlIHRvIG15IHdvcmsuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O2Qgd2FudCB0byB0ZXN0IGluIGEgbGFiLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgUUVNVSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gT2YgY291cnNlIGl0IGlzISBFdGhlcm5ldCBicmlkZ2luZywgZ2VuZXJpYyBYRFAsIHZldGgsIHRhcCwgbWFjdnRhcCwgdmlydGlvLW5ldCwgYWxsIG9mIHRoZXNlIGFyZSB2ZXJ5IGNvbW1vbiwgYWxsIHdpZGVseSB1c2VkIGluIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcsIGFuZCBmdWxseSBzdXBwb3J0ZWQgaW4gUUVNVS4gVGhhdCYjMzk7cyBnb29kIG5ld3MuCgpTbyB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgbW9kaWZpZXMgY29yZSBicmlkZ2UgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIGVzcGVjaWFsbHkgZHVyaW5nIHRoYXQgaGFuZG92ZXIgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdmlhIGBuZXRpZl9yZWNlaXZlX3NrYmAuIFRoaXMgbWVhbnMgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcHJldmVudCBnZW5lcmljIFhEUCByZS1leGVjdXRpb24gYnVnczogc3BlY2lmaWNhbGx5LCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgZG91YmxlLWV4ZWN1dGlvbiwgYm90aCB2ZXJ5IGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIHN0cmFpZ2h0LiBXZSBuZWVkIGBCUklER0VgIHRvIGVuYWJsZSB0aGUgYG5ldC9icmlkZ2VgIG1vZHVsZS4gTG9va2luZyBhdCB0aGUgS2NvbmZpZywgQlJJREdFIGRlcGVuZHMgb24gYE5FVGAgaW1wbGljaXRseSAodmlhIG5ldC9LY29uZmlnKSwgaXQgYWxzbyB1c2VzIGBMTENgIGFuZCBgU1RQYC4gVGhlbiwgb2YgY291cnNlLCBmb3IgdGhlIGdlbmVyaWMgWERQIHN0dWZmLCB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfUkVESVJFQ1RgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYENPTkZJR19ORVRfUkVESVJFQ1RgIGlzIGRlZmluZWQgaW4gS2NvbmZpZyBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfUkVESVJFQ1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xNDk9Y29uZmlnIElGQlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMTUxLVx0ZGVwZW5kcyBvbiBORVRfQUNUX01JUlJFRCB8fCBORlRfRldEX05FVERFVlxuZHJpdmVycy9uZXQvS2NvbmZpZzoxNTI6XHRzZWxlY3QgTkVUX1JFRElSRUNUXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1My1cdGhlbHBcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nj1zdHJ1Y3Qgc2tfYnVmZiB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDE5LVx0X191OFx0XHRcdHJlZGlyZWN0ZWQ6MTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTAyMDojaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDIxLVx0X191OFx0XHRcdGZyb21faW5ncmVzczoxO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnJvbV9pbmdyZXNzKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQzMS1cdHNrYi1cdTAwM2VyZWRpcmVjdGVkID0gMTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQzMjojaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMzLVx0c2tiLVx1MDAzZWZyb21faW5ncmVzcyA9IGZyb21faW5ncmVzcztcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU0NDQ9c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ3LVx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAxO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDQ4OiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDktXHRza2ItXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xuLS1cbm5ldC9LY29uZmlnPTU1PWNvbmZpZyBORVRfWEdSRVNTXG4tLVxubmV0L0tjb25maWctNTktXG5uZXQvS2NvbmZpZzo2MDpjb25maWcgTkVUX1JFRElSRUNUXG5uZXQvS2NvbmZpZy02MS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMDgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYnJpZGdlIHN1YnN5c3RlbSwgYW5kIGBDT05GSUdfQlJJREdFYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCDigJMgdGhhdCBlbmFibGVzIHRoZSB3aG9sZSBzaGViYW5nLCBpbmNsdWRpbmcgYGJyX2lucHV0LmNgLiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCYjMzk7cyBub3QgYWx3YXlzIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzZWUgaWYgYENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRWAgb3IgYENPTkZJR19CUklER0VfTkVURklMVEVSYCBoYXZlIGFueSBiZWFyaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyBvbi4gVGhlc2UgZmlsdGVyIG9wdGlvbnMgY291bGQgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IHRoZSBicmlkZ2UgaW50ZXJhY3RzIHdpdGggdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCwgaWYgYW55LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBkaXZpbmcgaW50byBgbmV0L2JyaWRnZS9LY29uZmlnYCBhbmQgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdgIGlzIGVzc2VudGlhbCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJwbGF5IGFuZCB3aGVyZSBJIG1pZ2h0IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cywgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvIEkmIzM5O20gZGVhbGluZyB3aXRoLiBObyBwb2ludCBndWVzc2luZyB3aGVuIHRoZSBhbnN3ZXIgaXMgaW4gdGhlIEtjb25maWcgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNDc9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE0ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTE0OS1DT05GSUdfTkZfQ09OTlRSQUNLPW1cbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE2Mz1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTY0OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTY1LUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTc5PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxODA6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xODEtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvYm1pcHNfc3RiX2RlZmNvbmZpZz03NT1DT05GSUdfQlJJREdFPXlcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc6NzY6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9taXBzL2NvbmZpZ3MvYm1pcHNfc3RiX2RlZmNvbmZpZy03Ny1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTYxPUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24zX2RlZmNvbmZpZzo2MjpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnLTYzLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZz00Nz1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZzo0ODojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZy00OS1DT05GSUdfTkZfQ09OTlRSQUNLPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnPTQ0PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzo0NTojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWctNDYtQ09ORklHX05GX0NPTk5UUkFDSz1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9NDY9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZzo0NzojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnLTQ4LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxuLS1cbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc9NjY9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjY3OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNjgtQ09ORklHX05GX0NPTk5UUkFDSz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTE4MD1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxODE6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTE4Mi1DT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTE3MT1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxNzI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTE3My1DT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSz1tXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDozOiNkZWZpbmUgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg9OD1zdHJ1Y3QgbmZfYnJpZGdlX2ZyYWdfZGF0YSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMTQtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTE2LVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5fcHJlcm91dGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg1LX1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjg2OiNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtODctXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODU9c3RydWN0IHRzX2NvbmZpZztcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjg2LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4OC1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA0Mz1lbnVtIHNrYl9leHRfaWQge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDQ0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDQ1LVx0U0tCX0VYVF9CUklER0VfTkYsXG4tLVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg9NDg0PXN0YXRpYyBpbmxpbmUgaW50IG5laWdoX2V2ZW50X3NlbmQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDg4LVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg6NDg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDkwLXN0YXRpYyBpbmxpbmUgaW50IG5laWdoX2hoX2JyaWRnZShzdHJ1Y3QgaGhfY2FjaGUgKmhoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaD05PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2VfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMC17XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTItXHRzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKmIgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9NDM9c3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICpicmlkZ2VfcGFyZW50X3J0YWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTQ0LXtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDo0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC00Ni1cdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQ7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg9MTM9c3RydWN0IG5mX3F1ZXVlX2VudHJ5IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0xOS1cdHVuc2lnbmVkIGludFx0XHRob29rX2luZGV4O1x0LyogaW5kZXggaW4gaG9va19lbnRyaWVzLVx1MDAzZWhvb2tbXSAqL1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0yMS1cdHN0cnVjdCBuZXRfZGV2aWNlXHQqYnJpZGdlX2Rldjtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzojZGVmaW5lIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtNC1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTM0PWVudW0gbmZfYnJfaG9va19wcmlvcml0aWVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQ0LVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDo0NTojZW5kaWYgLyogX1VBUElfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSCAqL1xuLS1cbm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG4tLVxubmV0L0tjb25maWctMjMwLVxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXG5uZXQvS2NvbmZpZy0yMzItXHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTM9YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSAmIzQzOz0gYnJfc3lzZnNfaWYubyBicl9zeXNmc19ici5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE0LVxubmV0L2JyaWRnZS9NYWtlZmlsZToxNTpicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICYjNDM7PSBicl9uZl9jb3JlLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMTYtXG4tLVxubmV0L2JyaWRnZS9NYWtlZmlsZT0xOD1icl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBicl9uZXRmaWx0ZXJfaXB2Ni5vXG5uZXQvYnJpZGdlL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXG4tLVxubmV0L2JyaWRnZS9ici5jPTQyNT1zdGF0aWMgaW50IF9faW5pdCBicl9pbml0KHZvaWQpXG4tLVxubmV0L2JyaWRnZS9ici5jLTQ2Ni1cbm5ldC9icmlkZ2UvYnIuYzo0Njc6I2lmIElTX01PRFVMRShDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnIuYy00NjgtXHRwcl9pbmZvKFwmIzM0O2JyaWRnZTogZmlsdGVyaW5nIHZpYSBhcnAvaXAvaXA2dGFibGVzIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0yMDQ9c3RhdGljIGludCBicl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjExLVx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVRVX1NFVF9CWV9VU0VSLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MjEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0yMTMtXHQvKiByZW1lbWJlciB0aGUgTVRVIGluIHRoZSBydGFibGUgZm9yIFBNVFUgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1NC0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTU2LVx0aWYgKGRhdGFbSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTXSkge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2MTk9c3RhdGljIHNpemVfdCBicl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTY2Ny0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE2Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjY5LVx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpICYjNDM7ICAgICAvKiBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjc4PXN0YXRpYyBpbnQgYnJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzkxLSNlbmRpZlxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc5MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTMtXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFUyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNC1cdHN0cnVjdCBsaXN0X2hlYWRcdFx0cG9ydF9saXN0O1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTE2LVx0dW5pb24ge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIwMjM9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZl9icl9vcHMgX19yY3UgKm5mX2JyX29wcztcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI1LS8qIGJyX25ldGZpbHRlci5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMDI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAyNy1pbnQgYnJfbmZfY29yZV9pbml0KHZvaWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYz03NzE9c3RhdGljIERFVklDRV9BVFRSX1JXKG11bHRpY2FzdF9tbGRfdmVyc2lvbik7XG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3My0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo3NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNzc1LXN0YXRpYyBzc2l6ZV90IG5mX2NhbGxfaXB0YWJsZXNfc2hvdyhcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9OTM1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpicmlkZ2VfYXR0cnNbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc2LSNlbmRpZlxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjk3NzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy05NzgtXHRcdTAwMjZkZXZfYXR0cl9uZl9jYWxsX2lwdGFibGVzLmF0dHIsXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xubmV0L2NvcmUvc2tidWZmLmM6NTE1MTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9jb3JlL3NrYnVmZi5jLTUxNTItXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jOjIwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0yNzM9dm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxMy1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjMxNDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxNS1cdC8qIElmIHdlIHVzZSBpcF9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYz0zMTM9dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODItXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzozODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODQtXHQvKiBJZiB3ZSB1c2UgaXA2X2xvY2FsX291dCBmb3IgYnJpZGdlZCB0cmFmZmljLCB0aGUgTUFDIHNvdXJjZSBvblxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDg1PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODYtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3BoeXNkZXZcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4NzpcdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBCUklER0VfTkVURklMVEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ4OC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTEyOD1oYXNoX25ldGlmYWNlNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxMzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTQwLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfcGh5c2luZGV2X25hbWUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xNTY9aGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3Ny1cdGlmIChvcHQtXHUwMDNlY21kZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjE3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNzktXHRcdGNvbnN0IGNoYXIgKmVpZmFjZSA9IFNSQ0RJUiA/IGdldF9waHlzaW5kZXZfbmFtZShza2IsIHh0X25ldChwYXIpKSA6XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM3Nz1oYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzk1LVx0aWYgKG9wdC1cdTAwM2VjbWRmbGFncyBcdTAwMjYgSVBTRVRfRkxBR19QSFlTREVWKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5Ny1cdFx0Y29uc3QgY2hhciAqZWlmYWNlID0gU1JDRElSID8gZ2V0X3BoeXNpbmRldl9uYW1lKHNrYiwgeHRfbmV0KHBhcikpIDpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2xvZ19zeXNsb2cuYz0xMTM9bmZfbG9nX2R1bXBfcGFja2V0X2NvbW1vbihzdHJ1Y3QgbmZfbG9nX2J1ZiAqbSwgdTggcGYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTI2LVx0XHRcdG91dCA/IG91dC1cdTAwM2VuYW1lIDogXCYjMzQ7XCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jOjEyNzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyOC1cdHBoeXNpbmRldiA9IG5mX2JyaWRnZV9nZXRfcGh5c2luZGV2KHNrYiwgbmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9NTk9c3RhdGljIHZvaWQgbmZfcXVldWVfZW50cnlfcmVsZWFzZV9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTY5LVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTcxLVx0ZGV2X3B1dChlbnRyeS1cdTAwM2VicmlkZ2VfZGV2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9ODQ9c3RhdGljIHZvaWQgX19uZl9xdWV1ZV9lbnRyeV9pbml0X3BoeXNkZXZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODUte1xubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTg3LVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGVudHJ5LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9MTEyPWJvb2wgbmZfcXVldWVfZW50cnlfZ2V0X3JlZnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTIyLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjEyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy0xMjQtXHRkZXZfaG9sZChlbnRyeS1cdTAwM2VicmlkZ2VfZGV2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy00MS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDMtI2luY2x1ZGUgXCYjMzQ7Li4vYnJpZGdlL2JyX3ByaXZhdGUuaFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTQyMj1zdGF0aWMgaW50IG5mdWxubF9wdXRfYnJpZGdlKHN0cnVjdCBuZnVsbmxfaW5zdGFuY2UgKmluc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDUzLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NDU0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDU1LXN0YXRpYyBpbnQgbmZsb2dfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NDc0PV9fYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5mbmxfbG9nX25ldCAqbG9nLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTUwOS1cdGlmIChpbmRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTEwOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTUxMS1cdFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVx1MDAzZXNrYiwgTkZVTEFfSUZJTkRFWF9JTkRFVixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01NDUtXHRpZiAob3V0ZGV2KSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo1NDY6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ3LVx0XHRpZiAobmxhX3B1dF9iZTMyKGluc3QtXHUwMDNlc2tiLCBORlVMQV9JRklOREVYX09VVERFVixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz03MTg9bmZ1bG5sX2xvZ19wYWNrZXQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTc1Ni1cdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXHQvKiBpZmluZGV4ICovXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo3NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTgtXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVx0LyogaWZpbmRleCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01MS0jaW5jbHVkZSBcJiMzNDsuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz00Njc9c3RhdGljIGJvb2wgbmZfYnJpZGdlX3BvcnRzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTQ2OC17XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjQ2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDcwLVx0aWYgKCFuZl9icmlkZ2VfcG9ydF92YWxpZChlbnRyeS1cdTAwM2VwaHlzaW4pIHx8XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz02NzU9c3RhdGljIGludCBuZl9xdWV1ZV9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICplbnRza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODItXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjY4MzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNjg0LXN0YXRpYyBpbnQgbmZxbmxfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MTI9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM3LVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcdC8qIGlmaW5kZXggKi9cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03MzktXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVx0LyogaWZpbmRleCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODMyLVx0aWYgKGluZGV2KSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgzMzojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgzNC1cdFx0aWYgKG5sYV9wdXRfYmUzMihza2IsIE5GUUFfSUZJTkRFWF9JTkRFViwgaHRvbmwoaW5kZXYtXHUwMDNlaWZpbmRleCkpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODYzLVx0aWYgKG91dGRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4NjQ6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04NjUtXHRcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfT1VUREVWLCBodG9ubChvdXRkZXYtXHUwMDNlaWZpbmRleCkpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA0OD1uZl9xdWV1ZV9lbnRyeV9kdXAoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA2MS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA2My0vKiBXaGVuIGNhbGxlZCBmcm9tIGJyaWRnZSBuZXRmaWx0ZXIsIHNrYi1cdTAwM2VkYXRhIG11c3QgcG9pbnQgdG8gTUFDIGhlYWRlclxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQ5OT1kZXZfY21wKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGxvbmcgaWZpbmRleClcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTUwMC17XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE1MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE1MDItXHRpbnQgcGh5c2luaWYsIHBoeXNvdXRpZjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZz03PUNPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnOjg6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctOS1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJyaWRnZSBGcmFtZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJyaWRnZSBmcmFtZXMgYXJlIGhhbmRsZWQuIEZpcnN0LCBgQ09ORklHX0JSSURHRWAgaXMgdGhlIGtleSDigJMgdGhhdCYjMzk7cyB3aGF0IGNvbXBpbGVzIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYGJyX2lucHV0LmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBhIGNvdXBsZSBvZiBzeW1ib2xzLiBgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaGAganVtcHMgb3V0IGJlY2F1c2UgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBjcnVjaWFsbHksIGNhbGxzIGBicl9wYXNzX2ZyYW1lX3VwYCwgd2hpY2ggaW4gdHVybiBsZWFkcyB0byBgTkZfSE9PS2AgZm9yIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAuIFRoYXQmIzM5O3MgYSBkaXJlY3QgY2hhaW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGBicl9nZXRfcnhfaGFuZGxlcmAgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLCBhbmQgaW4gYGJyX2lucHV0LmNgLgoKTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgYW5kIGFsc28gaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGluZyB0byByZWNlaXZpbmcgb3IgaGFuZGxpbmcgZnJhbWVzIG9uIHRoZSBicmlkZ2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBvZiBhbnl0aGluZyBJIG1heSBoYXZlIG1pc3NlZCBpbiBgYnJfaW5wdXQuY2AuIEkgc2hvdWxkIGFsc28gY2hlY2sgYGJyX3ByaXZhdGUuaGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQsIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9oYW5kbGVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz03Mz1zdGF0aWMgdm9pZCBfX2JyX2ZvcndhcmQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODAtXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4MTpcdC8qIE1hcmsgdGhlIHNrYiBmb3IgZm9yd2FyZGluZyBvZmZsb2FkIGVhcmx5IHNvIHRoYXQgYnJfaGFuZGxlX3ZsYW4oKVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODItXHQgKiBjYW4ga25vdyB3aGV0aGVyIHRvIHBvcCB0aGUgVkxBTiBoZWFkZXIgb24gZWdyZXNzIG9yIGtlZXAgaXQuXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODYtXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdSh0byk7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4NzpcdHNrYiA9IGJyX2hhbmRsZV92bGFuKHRvLVx1MDAzZWJyLCB0bywgdmcsIHNrYik7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04OC1cdGlmICghc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zOT1zdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy02Ni1cdHNrYi1cdTAwM2VkZXYgPSBicmRldjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo2NzpcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy02OC1cdGlmICghc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy04MS0vKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo4MjppbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy04My17XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI0OC19XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI1MC1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyNTE6c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjY0LS8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI2NTpzdGF0aWMgaW50IGJyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjY2LXtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyNjc6XHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNjgtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5My1cdFx0XHQgICBORlBST1RPX0JSSURHRSwgc2tiLVx1MDAzZWRldiwgTlVMTCwgTlVMTCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyOTQ6XHRcdFx0ICAgbmV0LCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yOTUtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMxOC1cdG5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzE5Olx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzIxOlx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyMi0jZW5kaWZcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0NC0gKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNDYte1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNjgtXHRpZiAodGVzdF9iaXQoQlJfVkxBTl9UVU5ORUxfQklULCBcdTAwMjZwLVx1MDAzZWZsYWdzKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNjk6XHRcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzAtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM5NS1cdFx0XHQqcHNrYiA9IHNrYjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozOTY6XHRcdFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzk3LVx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQwNy1cdFx0XHQqcHNrYiA9IHNrYjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0MDg6XHRcdFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDA5LVx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQyNi1cdFx0XHQgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQyNzpcdFx0XHQgICAgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaCkgPT0gMSkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQyOC1cdFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjMtICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDY0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZV9kdW1teShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDY1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDY5PXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzEtXHRpZiAobmV0ZGV2X3VzZXNfZHNhKGRldikpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDcyOlx0XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lX2R1bW15O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3My1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzQ6XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3NS19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNTU9dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzMtICogZG9uJiMzOTt0LCB3ZSB1c2UgdGhlIG5laWdoYm91ciBmcmFtZXdvcmsgdG8gZmluZCBvdXQuIEluIGJvdGggY2FzZXMsIHdlIG1ha2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc0OiAqIHN1cmUgdGhhdCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKCkgaXMgY2FsbGVkIGFmdGVyd2FyZHMuXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3NS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mjc2PWludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzA2LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMDc6XHRcdFx0cmV0ID0gYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIHNrLCBza2IpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMDgtXHRcdH0gZWxzZSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zNzY9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzAtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzE6XHRcdFx0ICBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDMyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDA1PXN0YXRpYyB2b2lkIGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Vfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyNi1cdG5mX2JyaWRnZS1cdTAwM2VwaHlzb3V0ZGV2ID0gTlVMTDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAyNzpcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyOC19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTEwMT1zdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTMtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE1NDpcdFx0XHQgIHNrYi1cdTAwM2VkZXYsIE5VTEwsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE1NS1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Mjk9aW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzEtLyogYnJfaW5wdXQuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTMyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTkzMy1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU4OT1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTkwOnN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTkxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3MTY9c3RhdGljIGlubGluZSBib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3MjEtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzIyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmJyX2hhbmRsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3MjMtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg9NDM9dm9pZCB2bGFuX3R1bm5lbF9pbmZvX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00NC1cdFx0XHQgIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjQ1OnZvaWQgYnJfaGFuZGxlX2luZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00Ni1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtNDctXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6NDg6aW50IGJyX2hhbmRsZV9lZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00OS1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg9NzI9c3RhdGljIGlubGluZSB2b2lkIHZsYW5fdHVubmVsX2luZm9fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC03Ni1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaDo3NzpzdGF0aWMgaW5saW5lIGludCBicl9oYW5kbGVfaW5ncmVzc192bGFuX3R1bm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTc4LVx0XHRcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9NDQ2PXN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDc5LVxubmV0L2JyaWRnZS9icl92bGFuLmM6NDgwOnN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00ODEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNTMxLVx0aWYgKHAgXHUwMDI2XHUwMDI2IChwLVx1MDAzZWZsYWdzIFx1MDAyNiBCUl9WTEFOX1RVTk5FTCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo1MzI6XHQgICAgYnJfaGFuZGxlX2VncmVzc192bGFuX3R1bm5lbChza2IsIHYpKSB7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy01MzMtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYz0xNTc9dm9pZCB2bGFuX3R1bm5lbF9kZWluaXQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE2MS1cbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYzoxNjI6dm9pZCBicl9oYW5kbGVfaW5ncmVzc192bGFuX3R1bm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE2My1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE4NS1cbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYzoxODY6aW50IGJyX2hhbmRsZV9lZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYy0xODctXHRcdFx0XHQgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NjUKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogQnJpZGdlZCBOZXR3b3JrIEZyYW1lIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYCBhbmQgYGJyX2dldF9yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZyYW1lIHByb2Nlc3NpbmcgcGF0aCwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaGAuIEZyb20gbXkgZXhwZXJpZW5jZSwgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBlbGVtZW50LCBzaXR0aW5nIGluIGBicl9pbnB1dC5jYC4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBgYnJfcGFzc19mcmFtZV91cGAsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgZ2V0cyBpbnZvbHZlZC4gVGhhdCYjMzk7cyBhIHZpdGFsIGNvbm5lY3Rpb24gZm9yIG1lLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBjb25maXJtIHRoZSByZXF1aXJlbWVudHMuIFdlJiMzOTt2ZSBnb3QgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIChnb29kISksIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGluZGVlZCB0aGUgb25lcyBJIHBpY2tlZDogYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgIGFuZCBgYnJfZ2V0X3J4X2hhbmRsZXJgLiAgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGJyaWRnZSwgc28gdGhlIGBFbmFibGVDb25maWdzYCBpbmNsdWRlIGBCUklER0VgLCBhcyBleHBlY3RlZC4gIFRoYXQmIzM5O3MgYWxsIGFkZGluZyB1cC4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkgdGhpbmsgd2UgaGF2ZSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIG1vdmUgZm9yd2FyZCBhbmQgbWFrZSB0aGUgbmVjZXNzYXJ5IGNhbGxzIHRvIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgd2UmIzM5O3JlIHJlYWR5IHRvIHByb2NlZWQgYW5kIGRpZyBpbnRvIHRoZSBmdXp6aW5nIHByb2Nlc3MgaXRzZWxmIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDticl9nZXRfcnhfaGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicl9pbnB1dC5jIGJ5IHNldHRpbmcgdGhlIHNrYiByZWRpcmVjdGVkIGZsYWcgdmlhIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKCkgd2hlbiBwYXNzaW5nIGJyaWRnZSBmcmFtZXMgdXAgZm9yIGxvY2FsIGRlbGl2ZXJ5LCBwcmV2ZW50aW5nIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIG9yIHJlYWxsb2NhdGluZyBtZW1vcnkuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2hhbmRsZV9mcmFtZV9maW5pc2gmIzM0OywKICAgICYjMzQ7YnJfZ2V0X3J4X2hhbmRsZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cblxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWI2OTRlZGQxNjllOGI0MGEyNGYzZGJkNTgxMjllMTNlOTVkN2NmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEzOjIzOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjBkMDhjM2MyMDM2ZjcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTI3LDYgJiM0MzsyNywxMiBAQCBzdGF0aWMgaW50CiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7CiYjNDM7CiYjNDM7CS8qIFJlLWluamVjdGVkIGZvciBsb2NhbCBkZWxpdmVyeTogZG8gbm90IGxldCBnZW5lcmljIFhEUCBydW4gb24gdGhlCiYjNDM7CSAqIGJyaWRnZSBkZXZpY2UgYSBzZWNvbmQgdGltZSwgaXQgY291bGQgcmVhbGxvY2F0ZSB0aGUgaGVhZCB2aWEKJiM0MzsJICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS4KJiM0MzsJICovCiYjNDM7CXNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpOwogCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4CgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBJbnB1dCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgZnVuY3Rpb24uCgpJIHNlZSB0aGF0IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtgIGlzIGJlaW5nIGFkZGVkIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRvIGBuZXRpZl9yZWNlaXZlX3NrYihza2IpYC4gU28sIHRoZSBpbnRlbnQgaXMgY2xlYXJseSByZWxhdGVkIHRvIHRoZSAmIzM0O3JlZGlyZWN0ZWQmIzM0OyBzdGF0ZSBvZiB0aGUgU0tCLCBhbmQsIGNydWNpYWxseSwgaXQgcHJldmVudHMgY2xlYXJpbmcgdGhhdCBmbGFnIGxhdGVyIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBzcGVjaWZpYyBhZGRpdGlvbiBpcyByZWxldmFudC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCBhcm91bmQgbGluZSAyNy4gSSBhbHNvIG5lZWQgYSByZWZyZXNoZXIgb24gZXhhY3RseSB3aGF0IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAgaXMgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFNwZWNpZmljYWxseSwgd2hhdCBkb2VzIHRoaXMgZnVuY3Rpb24gKmRvKiB3aGVuIHNldCB0byBmYWxzZT8gQW5kIHdoYXQgaW1wYWN0IGRvZXMgKnByZXZlbnRpbmcgdGhlIGNsZWFyaW5nKiBvZiB0aGUgZmxhZyBoYXZlIG9uIHRoZSBzdWJzZXF1ZW50IGBuZXRpZl9yZWNlaXZlX3NrYmAgY2FsbD8gVGhpcyBpcyBsaWtlbHkgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UsIGFuZCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKlx0SGFuZGxlIGluY29taW5nIGZyYW1lc1xuICAgNDpcdCAqXHRMaW51eCBldGhlcm5ldCBicmlkZ2VcbiAgIDU6XHQgKlxuICAgNjpcdCAqXHRBdXRob3JzOlxuICAgNzpcdCAqXHRMZW5uZXJ0IEJ1eXRlbmhla1x0XHRcdTAwM2NidXl0ZW5oQGdudS5vcmdcdTAwM2VcbiAgIDg6XHQgKi9cbiAgIDk6XHRcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFx1MDAzZVxuICAxNTpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmhcdTAwM2VcbiAgMTc6XHQjZW5kaWZcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZWlnaGJvdXIuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY25ldC9hcnAuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXCYjMzQ7YnJfcHJpdmF0ZS5oXCYjMzQ7XG4gIDI0Olx0I2luY2x1ZGUgXCYjMzQ7YnJfcHJpdmF0ZV90dW5uZWwuaFwmIzM0O1xuICAyNTpcdFxuICAyNjpcdHN0YXRpYyBpbnRcbiAgMjc6XHRicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgMjg6XHR7XG4gIDI5Olx0XHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4gIDMwOlx0XG4gIDMxOlx0XHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxuICAzMjpcdFx0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuICAzMzpcdFx0ICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS5cbiAgMzQ6XHRcdCAqL1xuICAzNTpcdFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gIDM2Olx0XHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiAgMzc6XHR9XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbiAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsICpicmRldiA9IEJSX0lOUFVUX1NLQl9DQihza2IpLVx1MDAzZWJyZGV2O1xuICA0MjpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoYnJkZXYpO1xuICA0MzpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gIDQ0Olx0XG4gIDQ1Olx0XHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGJyZGV2LCBza2ItXHUwMDNlbGVuKTtcbiAgNDY6XHRcbiAgNDc6XHRcdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xuICA0ODpcdFxuICA0OTpcdFx0LyogUmVzZXQgdGhlIG9mZmxvYWRfZndkX21hcmsgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHN0YWNrZWRcbiAgNTA6XHRcdCAqIGJyaWRnZSBhYm92ZSwgYW5kIGl0IHNob3VsZCBub3QgdGhpbmsgdGhpcyBicmlkZ2UgaXQgZG9pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3NldF9yZWRpcmVjdGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jPTQxMT1tbHg1ZV90Y19pbnRfcG9ydF9kZXZfZndkKHN0cnVjdCBtbHg1ZV90Y19pbnRfcG9ydF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ0OC1cdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYzo0NDk6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjL2ludF9wb3J0LmMtNDUwLVx0XHQqZm9yd2FyZF90eCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1My1cdFx0c2tiX3B1c2hfcmNzdW0oc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYzo0NTQ6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1NS1cdFx0KmZvcndhcmRfdHggPSB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQyND1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2lzX3JlZGlyZWN0ZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0MjgtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjU0Mjk6c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZyb21faW5ncmVzcylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQzMC17XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01NDM5PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDMtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjU0NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDUtXHRcdFx0XHRcdCAgICAgIGJvb2wgZnJvbV9pbmdyZXNzKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9ODAzPWludCBjcHVfbWFwX2dlbmVyaWNfcmVkaXJlY3Qoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtODA4LVx0X19za2JfcHVsbChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbmtlcm5lbC9icGYvY3B1bWFwLmM6ODA5Olx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgZmFsc2UpO1xua2VybmVsL2JwZi9jcHVtYXAuYy04MTAtXHRfX3B0cl9zZXRfYml0KDAsIFx1MDAyNnNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3PWJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNC1cdCAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM1Olx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzYtXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxNTUtXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZmlsdGVyLmM6MjE1NjpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYz0yND1zdGF0aWMgdm9pZCBuZnRfZndkX25ldGRldl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtMzMtXHRza2ItXHUwMDNlc2tiX2lpZiA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleDtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzozNDpcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIG5mdF9ob29rKHBrdCkgPT0gTkZfTkVUREVWX0lOR1JFU1MpO1xubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTM1LVxuLS1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM9MjU0PXN0YXRpYyBpbnQgdGNmX21pcnJlZF90b19kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9taXJyZWQgKm0sXG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMjUtXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjMyNjpcdFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYl90b19zZW5kLCBza2JfdG9fc2VuZC1cdTAwM2V0Y19hdF9pbmdyZXNzKTtcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIgTXlzdGVyeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBmb3J3YXJkaW5nIG9yIHJlZGlyZWN0aW9uIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2ssIGxpa2VseSB3aXRoIHNvbWUgb3B0aW1pemF0aW9uIGNvbmNlcm5pbmcgY2xlYXJpbmcgZGF0YS4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NDI0LiBUaGF0IHNob3VsZCBiZSB0aGUgZGVmaW5pdGlvbiwgb3IgYXQgbGVhc3QgdGhlIHZpY2luaXR5IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWNsYXJhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgc3Vycm91bmRpbmcgY29tbWVudHMgYXJlIGluc2lnaHRmdWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBmbGFncyBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYXMgcmVkaXJlY3RlZCBhbmQsIGNydWNpYWxseSwgKndoeSogdGhlICYjMzk7bm9jbGVhciYjMzk7IGFzcGVjdCBpcyBpbXBvcnRhbnQg4oCTIHdoYXQgZGF0YSBpcyAqbm90KiBiZWluZyBjbGVhcmVkIGFuZCBpbiB3aGF0IGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIHByb2JhYmx5IGdpdmUgbWUgdGhlIGtleSBpbnNpZ2h0IEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQyMDpcdFx0ICovXG41NDIxOlx0XHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGw0X2hkciwgY3N1bV9zdGFydCAtIGw0X2hkciwgcGFydGlhbCk7XG41NDIyOlx0fVxuNTQyMzpcdFxuNTQyNDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfaXNfcmVkaXJlY3RlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQyNTpcdHtcbjU0MjY6XHRcdHJldHVybiBza2ItXHUwMDNlcmVkaXJlY3RlZDtcbjU0Mjc6XHR9XG41NDI4Olx0XG41NDI5Olx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZyb21faW5ncmVzcylcbjU0MzA6XHR7XG41NDMxOlx0XHRza2ItXHUwMDNlcmVkaXJlY3RlZCA9IDE7XG41NDMyOlx0I2lmZGVmIENPTkZJR19ORVRfUkVESVJFQ1RcbjU0MzM6XHRcdHNrYi1cdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XG41NDM0Olx0XHRpZiAoc2tiLVx1MDAzZWZyb21faW5ncmVzcylcbjU0MzU6XHRcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuNTQzNjpcdCNlbmRpZlxuNTQzNzpcdH1cbjU0Mzg6XHRcbjU0Mzk6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG41NDQwOlx0e1xuNTQ0MTpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xuNTQ0MjpcdH1cbjU0NDM6XHRcbjU0NDQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjU0NDU6XHRcdFx0XHRcdFx0ICAgICAgYm9vbCBmcm9tX2luZ3Jlc3MpXG41NDQ2Olx0e1xuNTQ0NzpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAxO1xuNTQ0ODpcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG41NDQ5Olx0XHRza2ItXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xuNTQ1MDpcdCNlbmRpZlxuNTQ1MTpcdH1cbjU0NTI6XHRcbjU0NTM6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2NzdW1faXNfc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQ1NDpcdHtcbjU0NTU6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBfU0NUUClcbjU0NTY6XHRcdHJldHVybiBza2ItXHUwMDNlY3N1bV9ub3RfaW5ldDtcbjU0NTc6XHQjZWxzZVxuNTQ1ODpcdFx0cmV0dXJuIDA7XG41NDU5Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBQYWNrZXQgUmVkaXJlY3Rpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBza2JfaXNfcmVkaXJlY3RlZGAgb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgYHNrYi0mZ3Q7cmVkaXJlY3RlZGAgZmxhZyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBhbmQgKmhvdyogdGhlc2UgZWxlbWVudHMgYXJlIGVtcGxveWVkLiBJdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYSBwYWNrZXQmIzM5O3MgcmVkaXJlY3Rpb24gc3RhdHVzIGlzIGFzc2Vzc2VkIGFuZCBtYW5pcHVsYXRlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBwcmFjdGljYWwgdXNhZ2UgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cy4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUsIHNlYXJjaGluZyBmb3IgYWxsIGluc3RhbmNlcyBvZiB0aGVzZSBzeW1ib2xzLiBJZGVudGlmeWluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIHRoZSBkaWZmZXJlbnQgbW9kdWxlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyByZWRpcmVjdGVkIHBhY2tldHMuIEnigJltIHRoaW5raW5nIHRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBleGFtaW5pbmcgcm91dGluZywgTkFULCBvciBwb3NzaWJseSBldmVuIHR1bm5lbCBoYW5kbGluZyBjb2RlLiBNeSBnb2FsIGlzIGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGFja2V0IGxpZmVjeWNsZSByZWxhdGVkIHRvIHRoaXMgcmVkaXJlY3Rpb24gc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9pc19yZWRpcmVjdGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NTQwOD1zdGF0aWMgaW5saW5lIF9fd3N1bSBsY29fY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQyMy1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQyNDpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2lzX3JlZGlyZWN0ZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQyNS17XG4tLVxubmV0L2NvcmUvZGV2LmM9NTYzOD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2NDctXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjU2NDg6XHRpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSlcbm5ldC9jb3JlL2Rldi5jLTU2NDktXHRcdHJldHVybiBYRFBfUEFTUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3MAoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgbGluZTogYGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKSByZXR1cm4gWERQX1BBU1M7YC4gVGhlIHBhdGNoIGNvbW1lbnQgbWVudGlvbnMgdGhpcyBpcyB0byBwcmV2ZW50IGdlbmVyaWMgWERQIGZyb20gcnVubmluZyB0d2ljZSBvbiB0aGUgYnJpZGdlIGRldmljZSwgcGFydGljdWxhcmx5IGFmdGVyIGEgcmUtaW5qZWN0aW9uIHNjZW5hcmlvLiBBcHBhcmVudGx5LCB0aGlzIGRvdWJsZSBydW4gd2FzIGNhdXNpbmcgYHBza2JfZXhwYW5kX2hlYWQoKWAgdG8gcG90ZW50aWFsbHkgcmVhbGxvY2F0ZSB0aGUgU0tCIGhlYWQgYW5kIGZyZWVpbmcgdGhlIG9sZCBidWZmZXIgd2hpbGUgYSByZWZlcmVuY2Ugc3RpbGwgZXhpc3RlZCwgbGVhZGluZyB0byBhIG5hc3R5IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgYnVmZmVyIGNvcnJ1cHRpb24gc2NlbmFyaW8uCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbmVlZHMgdG8gY2F0Y2guIFNvIEkmIzM5O20gcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgKipJbmZvLWxlYWsgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoZSBwYXRjaCBzaW1wbHkgZmxhZ3MgYSBwYWNrZXQgYW5kIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoyLiAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBwYXRjaCBzaW1wbHkgc2V0cyBzb21lIFNLQiBmbGFncy4gVGhlIHZhbHVlcyBhcmUgY29uc3RhbnQuCjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBObywgaXTigJlzIGp1c3Qgc2V0dGluZyBhbiBleGlzdGluZyBmbGFnLgo0LiAgKipBbHRlcmluZyBib3VuZHMgY2hlY2tzIG9yIGRhdGEgbGVuZ3RocywgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuCgpHaXZlbiBhbGwgb2YgdGhpcywgdGhlIGNvcmUgaXNzdWUgdGhlIHBhdGNoIGlzIHNvbHZpbmcgc2VlbXMgdG8gYmUgYSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvIC0tIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIC0tIGNhdXNlZCBieSBpbmNvcnJlY3QgYnVmZmVyIGhhbmRsaW5nIGR1cmluZyBTS0IgcmUtaW5qZWN0aW9uIHdoZW4gZ2VuZXJpYyBYRFAgcnVucyB0d2ljZS4gVGhpcyAqdHlwZSogb2YgYnVnIGlzIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIEtBU0FOLgoKU28sIGRpZ2dpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggaW4gYGJyX25ldGlmX3JlY2VpdmVfc2tiKClgIGNhbGxzIGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKWAgd2hpY2ggY2FsbHMgYG5ldGlmX3JlY2VpdmVfc2tiKClgLCB3aGljaCBjb3JyZWN0bHkgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBydW5uaW5nIGEgc2Vjb25kIHRpbWUgb24gdGhlIGJyaWRnZSBhbmQgcHJldmVudGluZyBgcHNrYl9leHBhbmRfaGVhZCgpYCwgdGhlIGNvcmUgaXNzdWUuCgpUaGlzIHBhdGNoIGF2b2lkcyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gS01TQU4gYmVjYXVzZSBpdCYjMzk7cyBub3QgYWN0dWFsbHkgKmRlYWxpbmcqIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGp1c3QgZml4ZXMgYSBtZW1vcnkgbGlmZWN5Y2xlIHByb2JsZW0gYnkgcHJldmVudGluZyBhIGJ1ZyBmcm9tIGhhcHBlbmluZyB0aGF0IGNvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gSXQmIzM5O3Mgc2FmZSB0byBzYXkgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4gVGltZSB0byBtYWtlIHRoYXQgY2FsbC4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cblxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1hcmtzIHRoZSBza2IgYXMgcmVkaXJlY3RlZCAoc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSkpIGluIGJyX25ldGlmX3JlY2VpdmVfc2tiKCkgcHJpb3IgdG8gY2FsbGluZyBuZXRpZl9yZWNlaXZlX3NrYigpLiBUaGlzIHByZXZlbnRzIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGR1cmluZyBsb2NhbCBkZWxpdmVyeSByZS1pbmplY3Rpb24sIHdoaWNoIG90aGVyd2lzZSByaXNrZWQgcmVhbGxvY2F0aW5nIHRoZSBza2IgaGVhZCBidWZmZXIgKHBza2JfZXhwYW5kX2hlYWQpIGFuZCBjYXVzaW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzIGJ1Z3MuXG5cblN1Y2ggYnVmZmVyIHJlYWxsb2NhdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBjb25kaXRpb25hbCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHktdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIzOjM5LjQyMDY2MjY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNjQ0NjU2NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2hhbmRsZV9mcmFtZV9maW5pc2hcIixcbiAgICBcImJyX2dldF9yeF9oYW5kbGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYXJrcyB0aGUgc2tiIGFzIHJlZGlyZWN0ZWQgKHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpKSBpbiBicl9uZXRpZl9yZWNlaXZlX3NrYigpIHByaW9yIHRvIGNhbGxpbmcgbmV0aWZfcmVjZWl2ZV9za2IoKS4gVGhpcyBwcmV2ZW50cyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBkdXJpbmcgbG9jYWwgZGVsaXZlcnkgcmUtaW5qZWN0aW9uLCB3aGljaCBvdGhlcndpc2Ugcmlza2VkIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgYnVmZmVyIChwc2tiX2V4cGFuZF9oZWFkKSBhbmQgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2VzcyBidWdzLlxcblxcblN1Y2ggYnVmZmVyIHJlYWxsb2NhdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBjb25kaXRpb25hbCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHktdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyMzozOS40MjA2NjY2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTQwODM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViNjk0ZWRkMTY5ZThiNDBhMjRmM2RiZDU4MTI5ZTEzZTk1ZDdjZmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXFxuaW5kZXggZDg3YTVmOWZhOTJiNy4uMGQwOGMzYzIwMzZmNyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG5AQCAtMjcsNiArMjcsMTIgQEAgc3RhdGljIGludFxcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XFxuK1xcbitcXHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxcbitcXHQgKiBicmlkZ2UgZGV2aWNlIGEgc2Vjb25kIHRpbWUsIGl0IGNvdWxkIHJlYWxsb2NhdGUgdGhlIGhlYWQgdmlhXFxuK1xcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXFxuK1xcdCAqL1xcbitcXHRza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIzOjQwLjg1NjY4ODc2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDI5NjE4ODA1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2hhbmRsZV9mcmFtZV9maW5pc2hcIixcbiAgICBcImJyX2dldF9yeF9oYW5kbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjY5NGVkZDE2OWU4YjQwYTI0ZjNkYmQ1ODEyOWUxM2U5NWQ3Y2ZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjBkMDhjM2MyMDM2ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTI3LDYgKzI3LDEyIEBAIHN0YXRpYyBpbnRcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4rXG4rXHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxuK1x0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuK1x0ICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS5cbitcdCAqL1xuK1x0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyMzo0MC44NTY2ODk5MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTg0NzU3NzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBSZXZpZXcgYW5kIEZ1enppbmcgVHJpYWdlOiBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgZm9yIHRoZSBMaW51eCBrZXJuZWwgYW5kIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgZnV6emluZyBhbmQsIGlmIHNvLCB0byBpZGVudGlmeSB0aGUga2V5IGVsZW1lbnRzIHRvIHRhcmdldC4gRmlyc3QsIEknbGwgZG8gYSBxdWljayByaXNrIGFuYWx5c2lzLiBGcm9tIHdoYXQgSSBzZWUgdGhpcyBpcyBhIHByZXR0eSBsb3ctcmlzaywgbGlrZWx5IGJlbmlnbiBwYXRjaC4gSXQgbG9va3MgbGlrZSB0eXBpY2FsIGRldmVsb3BlciBRQS9tYWludGFpbmVyIHJldmlldywgbm90aGluZyBzY3JlYW1pbmcgXCJ2dWxuZXJhYmlsaXR5XCIgYXQgbWUgcmlnaHQgb2ZmIHRoZSBiYXQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgZGlmZiBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBtb2RpZnlpbmcgYG5ldC9icmlkZ2UvYnJfaW5wdXQuY2AuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSB0aGV5J3JlIGRpc2FibGluZyBnZW5lcmljIFhEUCBmdW5jdGlvbmFsaXR5IGluIGEgcmUtaW5qZWN0aW9uIHNjZW5hcmlvIHRvIGF2b2lkIHBvdGVudGlhbCBkb3VibGUtZnJlZXMgd2hlbiBhIGJ1ZmZlciBoYXMgYmVlbiByZWFsbG9jYXRlZC4gU28gaXQncyBhbiBvcHRpbWl6YXRpb24gb3IgYnVnZml4IHJlbGF0ZWQgdG8gaGFuZGxpbmcgcmUtaW5qZWN0ZWQgcGFja2V0cyBvbiBhIGJyaWRnZSBkZXZpY2UuIE5vdCBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiwgYnV0IGJyaWRnZSBjb2RlIGhhcyBhbHdheXMgaGFkIGEgd2F5IG9mIGJlaW5nLi4uaW50ZXJlc3RpbmcuIEknbGwgbWFrZSBhIG5vdGUgb2YgdGhhdC5cblxuSSdsbCBxdWlja2x5IGdyYWIgbXkgdG9vbHMgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUgdGhvcm91Z2hseS4gSSdsbCBiZSBsb29raW5nIGF0IGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCBvZiBjb3Vyc2UsIGFuZCBgbmV0L2JyaWRnZS9LY29uZmlnYCB0byBzZWUgaG93IHRoaXMgYXJlYSBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJJ2xsIGFsc28gd2FudCB0byBsb29rIGF0IG5lYXJieSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSBmb2N1cyBzeW1ib2xzIGFuZCBlbmFibGUgY29uZmlncy4gTGV0J3Mgc2VlIGlmIHRoaXMgY2hhbmdlIG1vZGlmaWVzIGFueSBjcnVjaWFsIGNvbnRyb2wgZmxvdyBvciBpbnRyb2R1Y2VzIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBBbnkgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgYWx3YXlzIHdhcnJhbnQgbW9yZSBhdHRlbnRpb24uIE9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNDoyMi43MDQyNjg4MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqXFx0SGFuZGxlIGluY29taW5nIGZyYW1lc1xcbiAgIDQ6XFx0ICpcXHRMaW51eCBldGhlcm5ldCBicmlkZ2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKlxcdEF1dGhvcnM6XFxuICAgNzpcXHQgKlxcdExlbm5lcnQgQnV5dGVuaGVrXFx0XFx0XFx1MDAzY2J1eXRlbmhAZ251Lm9yZ1xcdTAwM2VcXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaFxcdTAwM2VcXG4gIDE3OlxcdCNlbmRpZlxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25laWdoYm91ci5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hcnAuaFxcdTAwM2VcXG4gIDIwOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFxcImJyX3ByaXZhdGUuaFxcXCJcXG4gIDI0OlxcdCNpbmNsdWRlIFxcXCJicl9wcml2YXRlX3R1bm5lbC5oXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRzdGF0aWMgaW50XFxuICAyNzpcXHRicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDI4OlxcdHtcXG4gIDI5OlxcdFxcdGJyX2Ryb3BfZmFrZV9ydGFibGUoc2tiKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0LyogUmUtaW5qZWN0ZWQgZm9yIGxvY2FsIGRlbGl2ZXJ5OiBkbyBub3QgbGV0IGdlbmVyaWMgWERQIHJ1biBvbiB0aGVcXG4gIDMyOlxcdFxcdCAqIGJyaWRnZSBkZXZpY2UgYSBzZWNvbmQgdGltZSwgaXQgY291bGQgcmVhbGxvY2F0ZSB0aGUgaGVhZCB2aWFcXG4gIDMzOlxcdFxcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXFxuICAzNDpcXHRcXHQgKi9cXG4gIDM1OlxcdFxcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xcbiAgMzY6XFx0XFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuICAzNzpcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHByb21pc2MpXFxuICA0MDpcXHR7XFxuICA0MTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsICpicmRldiA9IEJSX0lOUFVUX1NLQl9DQihza2IpLVxcdTAwM2VicmRldjtcXG4gIDQyOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGJyZGV2KTtcXG4gIDQzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGJyZGV2LCBza2ItXFx1MDAzZWxlbik7XFxuICA0NjpcXHRcXG4gIDQ3OlxcdFxcdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHQvKiBSZXNldCB0aGUgb2ZmbG9hZF9md2RfbWFyayBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgc3RhY2tlZFxcbiAgNTA6XFx0XFx0ICogYnJpZGdlIGFib3ZlLCBhbmQgaXQgc2hvdWxkIG5vdCB0aGluayB0aGlzIGJyaWRnZSBpdCBkb2luZ1xcbiAgNTE6XFx0XFx0ICogdGhhdCBicmlkZ2UncyB3b3JrIGZvcndhcmRpbmcgb3V0IGl0cyBwb3J0cy5cXG4gIDUyOlxcdFxcdCAqL1xcbiAgNTM6XFx0XFx0YnJfc3dpdGNoZGV2X2ZyYW1lX3VubWFyayhza2IpO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHQvKiBCcmlkZ2UgaXMganVzdCBsaWtlIGFueSBvdGhlciBwb3J0LiAgTWFrZSBzdXJlIHRoZVxcbiAgNTY6XFx0XFx0ICogcGFja2V0IGlzIGFsbG93ZWQgZXhjZXB0IGluIHByb21pc2MgbW9kZSB3aGVuIHNvbWVvbmVcXG4gIDU3OlxcdFxcdCAqIG1heSBiZSBydW5uaW5nIHBhY2tldCBjYXB0dXJlLlxcbiAgNTg6XFx0XFx0ICovXFxuICA1OTpcXHRcXHRpZiAoIShicmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykgXFx1MDAyNlxcdTAwMjZcXG4gIDYwOlxcdFxcdCAgICAhYnJfYWxsb3dlZF9lZ3Jlc3ModmcsIHNrYikpIHtcXG4gIDYxOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNjI6XFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbiAgNjM6XFx0XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRpbmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAgNjY6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBicmRldjtcXG4gIDY3OlxcdFxcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcXG4gIDY4OlxcdFxcdGlmICghc2tiKVxcbiAgNjk6XFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbiAgNzA6XFx0XFx0LyogdXBkYXRlIHRoZSBtdWx0aWNhc3Qgc3RhdHMgaWYgdGhlIHBhY2tldCBpcyBJR01QL01MRCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNDoyMi43MDQzNTAxMzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcyNDk1OTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYGJyX25ldGlmX3JlY2VpdmVfc2tiYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgZnVuY3Rpb24gYmV0dGVyLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBJIG5lZWQgdG8gaWRlbnRpZnkgaXRzIGNhbGxlcnMgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgdGhvc2UgY2FsbCBzaXRlcy4gQW5kIG5vdCBqdXN0IHdpdGhpbiBgYnJfaW5wdXQuY2AgZWl0aGVyLiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGluIGBicl9pbnB1dC5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGl0IGludGVyYWN0cyB3aXRoLCBvciBpZiBvdGhlciBtb2R1bGVzIG9yIHNvdXJjZSBmaWxlcyBhcmUgaW52b2x2ZWQgYXMgd2VsbCwgSSdsbCB0cmFjZSB0aGVtLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1hcCBpbiBteSBtaW5kIG9mIHRoaXMgZW50aXJlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIEknbSBhZnRlciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIHRvcCB0byBib3R0b20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI0OjQ1LjQyOTMxMTQzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9uZXRpZl9yZWNlaXZlX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNj1zdGF0aWMgaW50XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI3OmJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yOC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9Mzk9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03Ny1cXHRcXHQgICAgICAgZGV2X25ldChpbmRldiksIE5VTEwsIHNrYiwgaW5kZXYsIE5VTEwsXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjc4OlxcdFxcdCAgICAgICBicl9uZXRpZl9yZWNlaXZlX3NrYik7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTc5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjQ6NDUuNDc1OTg0MzY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwNTEyMzUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBicl9wYXNzX2ZyYW1lX3VwYCBmdW5jdGlvbi4gQXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIEkga25vdyBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IHdpdGhpbiB0aGUgYnJpZGdlLCBwYXJ0aWN1bGFybHkgaG93IGZyYW1lcyBhcmUgaGFuZGxlZCBhbmQgcGFzc2VkIHVwIHRoZSBzdGFjay4gU28sIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uLlxuXG4qKlRyYWNpbmcgYGJyX3Bhc3NfZnJhbWVfdXBgIGluIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgKipcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgb2YgYGJyX3Bhc3NfZnJhbWVfdXBgIGJlY2F1c2UgdGhhdCB0ZWxscyBtZSAqd2hlbiogYSBmcmFtZSByZWFjaGVzIHRoaXMgcG9pbnQgaW4gcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBvdmVyYWxsIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbiDigJMgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGJyX3Bhc3NfZnJhbWVfdXBgLCBhbmQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgY2FsbCwgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgYSBmcmFtZSBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBicmlkZ2luZyBwcm9jZXNzLiBUaGlzIGtpbmQgb2YgY2FsbCBhbmFseXNpcyBvZnRlbiBpbGx1bWluYXRlcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgZnJhbWUgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgYW4gaW1wb3J0YW50IGNhbGwgYW5kIHdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjU6MTIuNTI3MjIxMjMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHQvKiB1cGRhdGUgdGhlIG11bHRpY2FzdCBzdGF0cyBpZiB0aGUgcGFja2V0IGlzIElHTVAvTUxEICovXFxuICA3MTpcXHRcXHRicl9tdWx0aWNhc3RfY291bnQoYnIsIE5VTEwsIHNrYiwgYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpLFxcbiAgNzI6XFx0XFx0XFx0XFx0ICAgQlJfTUNBU1RfRElSX1RYKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZXByb21pc2MgPSBwcm9taXNjO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sXFxuICA3NzpcXHRcXHRcXHQgICAgICAgZGV2X25ldChpbmRldiksIE5VTEwsIHNrYiwgaW5kZXYsIE5VTEwsXFxuICA3ODpcXHRcXHRcXHQgICAgICAgYnJfbmV0aWZfcmVjZWl2ZV9za2IpO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHQvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG4gIDgyOlxcdGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuICA4NTpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG4gIDg2OlxcdFxcdGVudW0gYnJfcGt0X3R5cGUgcGt0X3R5cGUgPSBCUl9QS1RfVU5JQ0FTVDtcXG4gIDg3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0ID0gTlVMTDtcXG4gIDg4OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4O1xcbiAgODk6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0O1xcbiAgOTA6XFx0XFx0Ym9vbCBsb2NhbF9yY3YsIG1jYXN0X2hpdCA9IGZhbHNlO1xcbiAgOTE6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eDtcXG4gIDkyOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XFxuICA5MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuICA5NDpcXHRcXHRib29sIHByb21pc2M7XFxuICA5NTpcXHRcXHR1MTYgdmlkID0gMDtcXG4gIDk2OlxcdFxcdHU4IHN0YXRlO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRpZiAoIXApXFxuICA5OTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGJyID0gcC1cXHUwMDNlYnI7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmIChicl9tc3RfaXNfZW5hYmxlZChwKSkge1xcbiAxMDQ6XFx0XFx0XFx0c3RhdGUgPSBCUl9TVEFURV9GT1JXQVJESU5HO1xcbiAxMDU6XFx0XFx0fSBlbHNlIHtcXG4gMTA2OlxcdFxcdFxcdGlmIChwLVxcdTAwM2VzdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkge1xcbiAxMDc6XFx0XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0JSSURHRV9JTkdSRVNTX1NUUF9TVEFURTtcXG4gMTA4OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTA5OlxcdFxcdFxcdH1cXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0XFx0c3RhdGUgPSBwLVxcdTAwM2VzdGF0ZTtcXG4gMTEyOlxcdFxcdH1cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0YnJtY3R4ID0gXFx1MDAyNnAtXFx1MDAzZWJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4O1xcbiAxMTU6XFx0XFx0cG1jdHggPSBcXHUwMDI2cC1cXHUwMDNlbXVsdGljYXN0X2N0eDtcXG4gMTE2OlxcdFxcdGlmICghYnJfYWxsb3dlZF9pbmdyZXNzKHAtXFx1MDAzZWJyLCBuYnBfdmxhbl9ncm91cF9yY3UocCksIHNrYiwgXFx1MDAyNnZpZCxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGF0ZSwgXFx1MDAyNnZsYW4pKVxcbiAxMTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdGlmICh0ZXN0X2JpdChCUl9QT1JUX0xPQ0tFRF9CSVQsIFxcdTAwMjZwLVxcdTAwM2VmbGFncykpIHtcXG4gMTIxOlxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiX3NyYyA9XFxuIDEyMjpcXHRcXHRcXHRcXHRicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsIHZpZCk7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdFxcdGlmICghZmRiX3NyYykge1xcbiAxMjU6XFx0XFx0XFx0XFx0LyogRkRCIG1pc3MuIENyZWF0ZSBsb2NrZWQgRkRCIGVudHJ5IGlmIE1BQiBpcyBlbmFibGVkXFxuIDEyNjpcXHRcXHRcXHRcXHQgKiBhbmQgZHJvcCB0aGUgcGFja2V0LlxcbiAxMjc6XFx0XFx0XFx0XFx0ICovXFxuIDEyODpcXHRcXHRcXHRcXHRpZiAodGVzdF9iaXQoQlJfUE9SVF9NQUJfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpKVxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4gMTMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZpZCwgQklUKEJSX0ZEQl9MT0NLRUQpKTtcXG4gMTMxOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTMyOlxcdFxcdFxcdH0gZWxzZSBpZiAoUkVBRF9PTkNFKGZkYl9zcmMtXFx1MDAzZWRzdCkgIT0gcCB8fFxcbiAxMzM6XFx0XFx0XFx0XFx0ICAgdGVzdF9iaXQoQlJfRkRCX0xPQ0FMLCBcXHUwMDI2ZmRiX3NyYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIDEzNDpcXHRcXHRcXHRcXHQvKiBGREIgbWlzbWF0Y2guIERyb3AgdGhlIHBhY2tldCB3aXRob3V0IHJvYW1pbmcuICovXFxuIDEzNTpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDEzNjpcXHRcXHRcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEJSX0ZEQl9MT0NLRUQsIFxcdTAwMjZmZGJfc3JjLVxcdTAwM2VmbGFncykpIHtcXG4gMTM3OlxcdFxcdFxcdFxcdC8qIEZEQiBtYXRjaCwgYnV0IGVudHJ5IGlzIGxvY2tlZC4gUmVmcmVzaCBpdCBhbmQgZHJvcFxcbiAxMzg6XFx0XFx0XFx0XFx0ICogdGhlIHBhY2tldC5cXG4gMTM5OlxcdFxcdFxcdFxcdCAqL1xcbiAxNDA6XFx0XFx0XFx0XFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSwgdmlkLFxcbiAxNDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgQklUKEJSX0ZEQl9MT0NLRUQpKTtcXG4gMTQyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTQzOlxcdFxcdFxcdH1cXG4gMTQ0OlxcdFxcdH1cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0bmJwX3N3aXRjaGRldl9mcmFtZV9tYXJrKHAsIHNrYik7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdC8qIGluc2VydCBpbnRvIGZvcndhcmRpbmcgZGF0YWJhc2UgYWZ0ZXIgZmlsdGVyaW5nIHRvIGF2b2lkIHNwb29maW5nICovXFxuIDE0OTpcXHRcXHRpZiAodGVzdF9iaXQoQlJfTEVBUk5JTkdfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpKVxcbiAxNTA6XFx0XFx0XFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSwgdmlkLCAwKTtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0cHJvbWlzYyA9ICEhKGJyLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpO1xcbiAxNTM6XFx0XFx0bG9jYWxfcmN2ID0gcHJvbWlzYztcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0KSkge1xcbiAxNTY6XFx0XFx0XFx0LyogYnkgZGVmaW5pdGlvbiB0aGUgYnJvYWRjYXN0IGlzIGFsc28gYSBtdWx0aWNhc3QgYWRkcmVzcyAqL1xcbiAxNTc6XFx0XFx0XFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0KSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0cGt0X3R5cGUgPSBCUl9QS1RfQlJPQURDQVNUO1xcbiAxNTk6XFx0XFx0XFx0XFx0bG9jYWxfcmN2ID0gdHJ1ZTtcXG4gMTYwOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDE2MTpcXHRcXHRcXHRcXHRwa3RfdHlwZSA9IEJSX1BLVF9NVUxUSUNBU1Q7XFxuIDE2MjpcXHRcXHRcXHRcXHRpZiAoYnJfbXVsdGljYXN0X3JjdihcXHUwMDI2YnJtY3R4LCBcXHUwMDI2cG1jdHgsIHZsYW4sIHNrYiwgdmlkKSlcXG4gMTYzOlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTY0OlxcdFxcdFxcdH1cXG4gMTY1OlxcdFxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0aWYgKHN0YXRlID09IEJSX1NUQVRFX0xFQVJOSU5HKSB7XFxuIDE2ODpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQlJJREdFX0lOR1JFU1NfU1RQX1NUQVRFO1xcbiAxNjk6XFx0XFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNToxMi41MjczMDYzMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjY5NzUwNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyIGFuZCBHZW5lcmljIFhEUC9SZWRpcmVjdGVkIFNLQiBGbGFncyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAgZnVuY3Rpb25zLCBhbmQgbW9yZSBicm9hZGx5LCB0aGUgYmVoYXZpb3Igb2YgdGhvc2UgZ2VuZXJpYyBYRFAgYW5kIHJlZGlyZWN0ZWQgU0tCIGZsYWdzLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhlIG51YW5jZXMuIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIFhEUCBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgcGFja2V0IHJlZGlyZWN0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGltcGxpY2F0aW9ucyBvZiAqbm90KiBjbGVhcmluZyBzb21lIG9mIHRoZSBmbGFncz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgYW5kIG9wdGltaXphdGlvbnMgaW52b2x2ZWQ/IEl0IGlzIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3VidGxldGllcyBvZiB0aGUgZmxhZyBtYW5hZ2VtZW50IGZvciBvcHRpbWFsIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb3JyZWN0IGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gdG8gc29saWRpZnkgbXkga25vd2xlZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzY2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNToyMS4xOTcwNTk4NzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njc3NTUyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01NDM5PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0My1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjU0NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ1LVxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZnJvbV9pbmdyZXNzKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3PWJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTpcXHRza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzYtXFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjE1NS1cXHRza2ItXFx1MDAzZWRldiA9IGRldjtcXG5uZXQvY29yZS9maWx0ZXIuYzoyMTU2OlxcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjE1Ny1cXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjIyLjc2NDgzNTI2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDg5MDQ1OTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBjdXJpb3VzIGFib3V0IHRoZSBmdW5jdGlvbiBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXJgIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gV2hhdCBleGFjdGx5IGlzIGl0IGRvaW5nPyBJIGtub3cgaG93IGNyaXRpY2FsIFNLQnMgYXJlIGZvciB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBtYW5pcHVsYXRlcyB0aGUgcmVkaXJlY3Rpb24gZmxhZ3MgaXMga2V5IHRvIGdyYXNwaW5nIGhvdyB0cmFmZmljIGlzIHJlcm91dGVkLCBwb3NzaWJseSBieSBmZWF0dXJlcyBsaWtlIE5BVCBvciBwb2xpY3kgcm91dGluZywgd2l0aG91dCBuZWNlc3NhcmlseSBjbGVhcmluZyBleGlzdGluZyBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBzZXR0aW5nIHRoZSBmbGFnLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIGxhdGVyIHByb2Nlc3Npbmcgc3RhZ2VzLiBEb2VzIHRoaXMgZnVuY3Rpb24sIGFzIHRoZSBcIm5vY2xlYXJcIiBzdWdnZXN0cywgbGVhdmUgcHJldmlvdXMgcm91dGluZyBkZWNpc2lvbnMgaW50YWN0PyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIG5vdCBjbGVhcmluZyBwcmV2aW91cyBmbGFncz8gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGlzIGVzc2VudGlhbCwgdG8gbWFpbnRhaW4sIGZvciBleGFtcGxlLCBhIGZsb3cncyBzdGF0ZT8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1c2FnZSwgZXNwZWNpYWxseSB1bmRlciBoaWdoIGxvYWQuIEkgbmVlZCB0byBzZWUgaG93IGl0cyBiZWhhdmlvciBhZmZlY3RzIHRoZSB2YXJpb3VzIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiBMZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6Njk5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjM3LjY1NTI5NzEyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDMwOlxcdHtcXG41NDMxOlxcdFxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuNTQzMjpcXHQjaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxcbjU0MzM6XFx0XFx0c2tiLVxcdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XFxuNTQzNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vmcm9tX2luZ3Jlc3MpXFxuNTQzNTpcXHRcXHRcXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuNTQzNjpcXHQjZW5kaWZcXG41NDM3OlxcdH1cXG41NDM4OlxcdFxcbjU0Mzk6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjU0NDA6XFx0e1xcbjU0NDE6XFx0XFx0c2tiLVxcdTAwM2VyZWRpcmVjdGVkID0gMDtcXG41NDQyOlxcdH1cXG41NDQzOlxcdFxcbjU0NDQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXFxuNTQ0NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBib29sIGZyb21faW5ncmVzcylcXG41NDQ2OlxcdHtcXG41NDQ3OlxcdFxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuNTQ0ODpcXHQjaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxcbjU0NDk6XFx0XFx0c2tiLVxcdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XFxuNTQ1MDpcXHQjZW5kaWZcXG41NDUxOlxcdH1cXG41NDUyOlxcdFxcbjU0NTM6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl9jc3VtX2lzX3NjdHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG41NDU0OlxcdHtcXG41NDU1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9TQ1RQKVxcbjU0NTY6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlY3N1bV9ub3RfaW5ldDtcXG41NDU3OlxcdCNlbHNlXFxuNTQ1ODpcXHRcXHRyZXR1cm4gMDtcXG41NDU5OlxcdCNlbmRpZlxcbjU0NjA6XFx0fVxcbjU0NjE6XFx0XFxuNTQ2MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X2NzdW1fbm90X2luZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG41NDYzOlxcdHtcXG41NDY0OlxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcXG41NDY1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9TQ1RQKVxcbjU0NjY6XFx0XFx0c2tiLVxcdTAwM2Vjc3VtX25vdF9pbmV0ID0gMDtcXG41NDY3OlxcdCNlbmRpZlxcbjU0Njg6XFx0fVxcbjU0Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjM3LjY1NTY0NTk1OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzYwMjk5MzEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIFNLQiBSZWRpcmVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYHNrYi1cdTAwM2VyZWRpcmVjdGVkYCBmbGFnIGdldHMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb3N0IHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFyZWFzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXRpZl9yZWNlaXZlX3NrYmAgYW5kIHRoZSB2YXJpb3VzIHBhdGhzIGluIGdlbmVyaWMgWERQLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaW1wYWN0IG9mIHJlZGlyZWN0aW9uIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmbGFnIGltcGFjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZvcndhcmRpbmcgbG9naWMgaW4gdGhlc2Uga2V5IG5ldHdvcmsgaW50ZXJmYWNlIHJvdXRpbmVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25kaXRpb25hbCBqdW1wcywgZWFybHkgZXhpdHMsIG9yIGVudGlyZWx5IGRpZmZlcmVudCBwcm9jZXNzaW5nIHBhdGhzIGJhc2VkIG9uIHRoaXMgZmxhZz8gV2hhdCdzIHRoZSBjb3N0IG9mIGNoZWNraW5nIHRoaXMgZmxhZyBpbiBhIHRpZ2h0IGxvb3AgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGdyZXBwaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhbmQgZm9sbG93IHRoZSBjb250cm9sIGZsb3cgZnJvbSB0aG9zZSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZsYWcgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1hcCB0aGUgdXNhZ2Ugb2YgdGhpcyBmaWVsZCBpbiByZWxhdGlvbiB0byBkaWZmZXJlbnQgTklDIGRyaXZlcnMgYW5kIG5ldHdvcmtpbmcgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgyOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjU6NTEuMjU4NjQyMjA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk1NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWRpcmVjdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9pZi5jPTE4MD1pbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDQtXFx0aWYgKG9sZF9iYWNrdXApXFxubmV0L2JyaWRnZS9icl9pZi5jOjIwNTpcXHRcXHRvbGRfYmFja3VwLVxcdTAwM2ViYWNrdXBfcmVkaXJlY3RlZF9jbnQtLTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjA2LVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDctXFx0aWYgKGJhY2t1cF9wKVxcbm5ldC9icmlkZ2UvYnJfaWYuYzoyMDg6XFx0XFx0YmFja3VwX3AtXFx1MDAzZWJhY2t1cF9yZWRpcmVjdGVkX2NudCsrO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDktXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXFx1MDAzZWJhY2t1cF9wb3J0LCBiYWNrdXBfcCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9MjE0PXN0YXRpYyB2b2lkIG5icF9iYWNrdXBfY2xlYXIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMTYtXFx0bmJwX2JhY2t1cF9jaGFuZ2UocCwgTlVMTCk7XFxubmV0L2JyaWRnZS9icl9pZi5jOjIxNzpcXHRpZiAocC1cXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KSB7XFxubmV0L2JyaWRnZS9icl9pZi5jLTIxOC1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpjdXJfcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMjgtXFxubmV0L2JyaWRnZS9icl9pZi5jOjIyOTpcXHRXQVJOX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihwLVxcdTAwM2ViYWNrdXBfcG9ydCkgfHwgcC1cXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjMwLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNz1icl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNC1cXHQgKi9cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzU6XFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM2LVxcdHJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzE9YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNTktICogY2hhbmdlIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyBzbyB0aGF0IHRoZSBwYWNrZXQgd2lsbFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzYwOiAqIGxhdGVyIGJlIHBhc3NlZCB1cCB0byB0aGUgSVAgc3RhY2sgdG8gYmUgcm91dGVkLiBGb3IgYSByZWRpcmVjdGVkXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNjEtICogcGFja2V0LCBpcF9yb3V0ZV9pbnB1dCgpIHdpbGwgZ2l2ZSBiYWNrIHRoZSBsb2NhbGhvc3QgYXMgb3V0cHV0IGRldmljZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM5Mj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQ1MC1cXHR1MTZcXHRcXHRcXHRcXHRncm91cF9md2RfbWFzaztcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo0NTE6XFx0dTE2XFx0XFx0XFx0XFx0YmFja3VwX3JlZGlyZWN0ZWRfY250O1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQ1Mi1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU2Mzg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2NDctXFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NTY0ODpcXHRpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSlcXG5uZXQvY29yZS9kZXYuYy01NjQ5LVxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDU9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU1LVxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjIxNTY6XFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBza2JfYXRfdGNfaW5ncmVzcyhza2IpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4tLVxcbm5ldC9kc2EvdGFnX25ldGMuYy0yMS0jZGVmaW5lIE5FVENfVEFHX1RPX0hPU1RcXHRcXHQyXFxubmV0L2RzYS90YWdfbmV0Yy5jOjIyOi8qIFN1YlR5cGUwOiBmcmFtZXMgcmVkaXJlY3RlZCBvciBjb3BpZWQgdG8gQ1BVIHBvcnQgKi9cXG5uZXQvZHNhL3RhZ19uZXRjLmMtMjMtI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMFxcdFxcdDBcXG5uZXQvZHNhL3RhZ19uZXRjLmM6MjQ6LyogU3ViVHlwZTE6IGZyYW1lcyByZWRpcmVjdGVkIG9yIGNvcGllZCB0byBDUFUgcG9ydCB3aXRoIHRpbWVzdGFtcCAqL1xcbm5ldC9kc2EvdGFnX25ldGMuYy0yNS0jZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUxXFx0XFx0MVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xMzc2PXZvaWQgaXB2NF9wa3RpbmZvX3ByZXBhcmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGRyb3BfZHN0KVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMzg5LVxcdFxcdCAqIChlLmcuLCBwcm9jZXNzIGJpbmRzIHNvY2tldCB0byBldGgwIGZvciBUeCB3aGljaCBpc1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTM5MDpcXHRcXHQgKiByZWRpcmVjdGVkIHRvIGxvb3BiYWNrIGluIHRoZSBydGFibGUvZHN0KS5cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEzOTEtXFx0XFx0ICovXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTg3NT1zdGF0aWMgdm9pZCBpcHY0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTg5Mi0gKlxcdCAgIGR1cmluZyBpcF9ydF9yZWRpcmVjdF9zaWxlbmNlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgaG9zdFxcbm5ldC9pcHY0L3JvdXRlLmM6ODkzOiAqXFx0ICAgZm9yZ290IHJlZGlyZWN0ZWQgcm91dGUgYW5kIHN0YXJ0IHRvIHNlbmQgcmVkaXJlY3RzIGFnYWluLlxcbm5ldC9pcHY0L3JvdXRlLmMtODk0LSAqXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTI4LVxcbm5ldC9pcHY0L3JvdXRlLmM6OTI5OlxcdC8qIE5vIHJlZGlyZWN0ZWQgcGFja2V0cyBkdXJpbmcgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTkzMC1cXHQgKiByZXNldCB0aGUgYWxnb3JpdGhtLlxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy05MzctXFx0LyogVG9vIG1hbnkgaWdub3JlZCByZWRpcmVjdHM7IGRvIG5vdCBzZW5kIGFueXRoaW5nXFxubmV0L2lwdjQvcm91dGUuYzo5Mzg6XFx0ICogc2V0IGRzdC5yYXRlX2xhc3QgdG8gdGhlIGxhc3Qgc2VlbiByZWRpcmVjdGVkIHBhY2tldC5cXG5uZXQvaXB2NC9yb3V0ZS5jLTkzOS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjA4Mj1zdGF0aWMgdm9pZCBydDZfZXhjZXB0aW9uc191cGRhdGVfcG10dShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMDk2LVxcbm5ldC9pcHY2L3JvdXRlLmM6MjA5NzpcXHRcXHRcXHQvKiBGb3IgUlRGX0NBQ0hFIHdpdGggcnQ2aV9wbXR1ID09IDAgKGkuZS4gYSByZWRpcmVjdGVkXFxubmV0L2lwdjYvcm91dGUuYy0yMDk4LVxcdFxcdFxcdCAqIHJvdXRlKSwgdGhlIG1ldHJpY3Mgb2YgaXRzIHJ0LVxcdTAwM2Vmcm9tIGhhdmUgYWxyZWFkeVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTI0PXN0YXRpYyB2b2lkIG5mdF9md2RfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTMzLVxcdHNrYi1cXHUwMDNlc2tiX2lpZiA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzozNDpcXHRza2Jfc2V0X3JlZGlyZWN0ZWQoc2tiLCBuZnRfaG9vayhwa3QpID09IE5GX05FVERFVl9JTkdSRVNTKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtMzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYz0yMT1zdGF0aWMgdm9pZCBuZnRfdHByb3h5X2V2YWxfdjQoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmMtNjgtXFx0XFx0Lyogbm8sIHRoZXJlJ3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzo2OTpcXHRcXHQgKiB0aGVyZSdzIGEgbGlzdGVuZXIgb24gdGhlIHJlZGlyZWN0ZWQgYWRkci9wb3J0XFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmMtNzAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYz04ND1zdGF0aWMgdm9pZCBuZnRfdHByb3h5X2V2YWxfdjYoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmMtMTQwLVxcdFxcdC8qIG5vIHRoZXJlJ3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzoxNDE6XFx0XFx0ICogdGhlcmUncyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE0Mi1cXHRcXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmM9MzY9dHByb3h5X3RnNChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBsYWRkciwgX19iZTE2IGxwb3J0LFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy02NS1cXHRcXHQvKiBubywgdGhlcmUncyBubyBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLCBjaGVjayBpZlxcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmM6NjY6XFx0XFx0ICogdGhlcmUncyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydCAqL1xcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMtNjctXFx0XFx0c2sgPSBuZl90cHJveHlfZ2V0X3NvY2tfdjQobmV0LCBza2IsIGlwaC1cXHUwMDNlcHJvdG9jb2wsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jPTExMT10cHJveHlfdGc2X3YxKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMtMTU0LVxcdFxcdC8qIG5vIHRoZXJlJ3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jOjE1NTpcXHRcXHQgKiB0aGVyZSdzIGEgbGlzdGVuZXIgb24gdGhlIHJlZGlyZWN0ZWQgYWRkci9wb3J0ICovXFxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy0xNTYtXFx0XFx0c2sgPSBuZl90cHJveHlfZ2V0X3NvY2tfdjYoeHRfbmV0KHBhciksIHNrYiwgdGhvZmYsXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz03NDI9Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03NDUtXFx0aGVscFxcbm5ldC9zY2hlZC9LY29uZmlnOjc0NjpcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0cyB0byBiZSBtaXJyb3JlZCBvciByZWRpcmVjdGVkIHRvXFxubmV0L3NjaGVkL0tjb25maWctNzQ3LVxcdCAgb3RoZXIgZGV2aWNlcy5cXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmM9Nzg3PXN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODY4LSAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHlcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg2OTogKiBpcyBhbiBFdGhlcm5ldCBoZWFkZXIgYmVjYXVzZSB0aGUgc2tiIGNvdWxkJ3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODcwLSAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLlxcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYz0yNTQ9c3RhdGljIGludCB0Y2ZfbWlycmVkX3RvX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX21pcnJlZCAqbSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMjk5LVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6MzAwOlxcdC8qIEFsbCBtaXJyZWQvcmVkaXJlY3RlZCBza2JzIHNob3VsZCBjbGVhciBwcmV2aW91cyBjdCBpbmZvICovXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMDEtXFx0bmZfcmVzZXRfY3Qoc2tiX3RvX3NlbmQpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMjUtXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYzozMjY6XFx0XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYl90b19zZW5kLCBza2JfdG9fc2VuZC1cXHUwMDNldGNfYXRfaW5ncmVzcyk7XFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMjctXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTM0ND1zdGF0aWMgaW50IHRjZl9ibG9ja2Nhc3RfcmVkaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9taXJyZWQgKm0sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTM3NC1cXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjM3NTpcXHQvKiBJZiB0aGUgcGFja2V0IHdhc24ndCByZWRpcmVjdGVkLCB3ZSBoYXZlIHRvIHJlZ2lzdGVyIGFzIGEgZHJvcCAqL1xcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzc2LVxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4tLVxcbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYz0xMDAxPXJwY3JkbWFfaW5saW5lX2ZpeHVwKHN0cnVjdCBycGNfcnFzdCAqcnFzdCwgY2hhciAqc3JjcCwgaW50IGNvcHlfbGVuLCBpbnQgcGFkKVxcbi0tXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwMDgtXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jOjEwMDk6XFx0LyogVGhlIGhlYWQgaW92ZWMgaXMgcmVkaXJlY3RlZCB0byB0aGUgUlBDIHJlcGx5IG1lc3NhZ2VcXG5uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMtMTAxMC1cXHQgKiBpbiB0aGUgcmVjZWl2ZSBidWZmZXIsIHRvIGF2b2lkIGEgbWVtY29weS5cXG4tLVxcbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYy0xMDYyLVxcbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYzoxMDYzOlxcdC8qIFRoZSB0YWlsIGlvdmVjIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHJlbWFpbmluZyBkYXRhXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwNjQtXFx0ICogaW4gdGhlIHJlY2VpdmUgYnVmZmVyLCB0byBhdm9pZCBhIG1lbWNvcHkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjUxLjMyNTYwMzEyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTM3MDQ2NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFhEUCBhbmQgQnJpZGdlIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBob3cgWERQIGludGVyYWN0cyB3aXRoIGJyaWRnaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBzdGFydGluZyB3aXRoIGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYC4gSSBzZWUgdGhlIGNydWNpYWwgY2hlY2s6IGBpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSkgcmV0dXJuIFhEUF9QQVNTO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCB0aGUgWERQIGxvZ2ljIHNwZWNpZmljYWxseSBhdm9pZHMgcnVubmluZyAqYWdhaW4qIG9uIGEgcGFja2V0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZWRpcmVjdGVkLiBJdCdzIGEga2V5IG9wdGltaXphdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGBicl9wYXNzX2ZyYW1lX3VwYC4gVGhpcyBpcyB3aGVyZSBmcmFtZXMgY29taW5nICp1cCogZnJvbSBhIGJyaWRnZSBwb3J0IHRvIHRoZSBob3N0J3MgbmV0d29yayBzdGFjayBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBgTkZfSE9PSyguLi4sIGJyX25ldGlmX3JlY2VpdmVfc2tiKWAuIEFoYSEgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBpcyB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBzcGVjaWZpY2FsbHkgZHJvcHMgdGhlIGZha2Ugcm91dGUgdGFibGUsIG1hcmtzIHRoZSBTS0IgYXMgcmVkaXJlY3RlZCB1c2luZyBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSlgLCBhbmQgKnRoZW4qIGNhbGxzIGBuZXRpZl9yZWNlaXZlX3NrYihza2IpYC4gVGhpcyBpcyB0aGUgY3J1eC5cblxuVGhlIG92ZXJhbGwgZ29hbCBpcyBjbGVhcjogcHJldmVudCBnZW5lcmljIFhEUCBmcm9tIHJ1bm5pbmcgb24gdGhlIGJyaWRnZSAqYWdhaW4qLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCdzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgKG9yLCBldmVuIG1vcmUgY3J1Y2lhbCwgcHJldmVudGluZyBhIHJlLWFsbG9jYXRpb24gb2YgcGFja2V0IGRhdGEgdmlhIGBwc2tiX2V4cGFuZF9oZWFkKClgIHdoZW4gYnVmZmVycyBhcmUgaW4gdXNlIGZyb20gYSBwcmV2aW91cyBYRFAgcnVuKS4gVGhpcyBhdm9pZHMgcmVkdW5kYW50IHByb2Nlc3NpbmcgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBidWZmZXIgY29ycnVwdGlvbi4gVGhpcyBhbGwgbWFrZXMgc2Vuc2UsIHRvIHByZXZlbnQgZG91YmxlLXByb2Nlc3Npbmcgb24gYWxyZWFkeSByZWRpcmVjdGVkIHBhY2tldHMuXG5cbk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbi4gV2hlcmUgaXMgdGhlIGJyaWRnZSBjb2RlIGNvbXBpbGVkPyBXaGF0J3MgdGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2w/IEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIGBuZXQvYnJpZGdlYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNTo1Ni40NjI2NTI3MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzIwNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJSSURHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnLTUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG5uZXQvYnJpZGdlL0tjb25maWc6Mzg6XFx0ZGVwZW5kcyBvbiBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctMzktXFx0ZGVwZW5kcyBvbiBJTkVUXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxubmV0L2JyaWRnZS9LY29uZmlnOjUyOlxcdGRlcGVuZHMgb24gQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTUzLVxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxubmV0L2JyaWRnZS9LY29uZmlnOjY2OlxcdGRlcGVuZHMgb24gQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTY3LVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo3Njpjb25maWcgQlJJREdFX0NGTVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJDRk0gcHJvdG9jb2xcXFwiXFxubmV0L2JyaWRnZS9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTc5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjU6NTYuNTA3OTc3MjIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MTU2ODc2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGJyX2lucHV0LmMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYGJyX2lucHV0LmNgLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gcHJlY2lzZWx5IHdoaWNoIG9iamVjdCB0aGlzIGZpbGUgaXMgY29tcGlsZWQgaW50byB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBzdWJzeXN0ZW0uIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyBpdOKAmXMgbGlrZWx5IHBhcnQgb2YgdGhlIGNvcmUgYnJpZGdlIG1vZHVsZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4gb2YgdGhlIGRlcGVuZGVuY3kgYW5kIG92ZXJhbGwgYnVpbGQgY29uZmlndXJhdGlvbi4gSnVtcGluZyBpbnRvIGBuZXQvYnJpZGdlL01ha2VmaWxlYCBzZWVtcyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gZmluZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEEgcXVpY2sgc2NhbiBvZiB0aGF0IE1ha2VmaWxlIHNob3VsZCByZXZlYWwgd2hldGhlciBgYnJfaW5wdXQuY2AgaXMgbGlua2VkIGRpcmVjdGx5IGludG8gYSBzcGVjaWZpYyBtb2R1bGUsIG9yIHBlcmhhcHMgaW5kaXJlY3RseSB2aWEgYSBsaWJyYXJ5IG9yIG9iamVjdCBhZ2dyZWdhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgc3RyZWFtbGluZSBmdXJ0aGVyIGFuYWx5c2lzIGlmIEkgbmVlZCB0byBleGFtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgYnJpZGdlIGNvbXBvbmVudHMsIG9yIGlmIEkgbmVlZCB0byBtb2RpZnkgdGhlIGJ1aWxkIHByb2Nlc3MuIEEgbGl0dGxlIGludmVzdGlnYXRpb24gdXAtZnJvbnQsIHNhdmVzIGEgbG90IG9mIHdhc3RlZCB0aW1lIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjY6MDAuMDIzNjY2NzA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CUklER0UpICs9IGJyaWRnZS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJyaWRnZS15XFx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICs9IGJyX25mX2NvcmUub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xcbiAgMTg6XFx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBicl9uZXRmaWx0ZXJfaXB2Ni5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgKz0gYnJfbmV0ZmlsdGVyLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICs9IGJyX3N3aXRjaGRldi5vXFxuICAyNjpcXHRcXG4gIDI3OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXFx0Kz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXFx0Kz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxcbiAgMzQ6XFx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XFxuICAzNTpcXHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxcbiAgMzY6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxcbiAgMzc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjY6MDAuMDIzNzI4NDU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzYzNjAxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYENPTkZJR19CUklER0VgIGlzIGVuYWJsZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHB1bGxzIGluIGBicmlkZ2Uub2AuIEFuZCB3aXRoaW4gdGhhdCwgd2UndmUgZ290IGBicl9pbnB1dC5vYC4gR290IGl0LiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYENPTkZJR19CUklER0VgLiBOZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBjaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW52b2x2ZWQgaW4gZ2V0dGluZyB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgd29ya2luZywgb3IgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGNvbm5lY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjA0LjM4NzMzMjcwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcbiAgMTY6XFx0XFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxcbiAgMTc6XFx0XFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSdsbCBuZWVkIHRoZSBicmlkZ2VcXG4gIDIwOlxcdFxcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFx1MDAzZVxcbiAgMjE6XFx0XFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxcbiAgMjI6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcXG4gIDI1OlxcdFxcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXFxuICAyNjpcXHRcXHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cXG4gIDI3OlxcdFxcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cXG4gIDI4OlxcdFxcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXFxuICAyOTpcXHRcXHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzMjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJyaWRnZS5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG4gIDM3OlxcdFxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjA0LjM4NzM5MzUyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDc5OTY0MDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgSGllcmFyY2h5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZXQvYnJpZGdlL0tjb25maWdgIGlzIHB1bGxlZCBpbnRvIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBuZXQvS2NvbmZpZ2AuIEl0J3MgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgc28gaXQncyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRvIGhhbmRsZSB0aGUgaW5jbHVzaW9uIG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzY2FuIGZvciBhbnkgYHNvdXJjZWAgb3Igc2ltaWxhciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgcG9pbnQgdG8gd2hlcmUgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgaXMgaW5jbHVkZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQgaW4gbm8gdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwOTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjE1LjE4NzAzNjQzOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MjkzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJuZXQvYnJpZGdlL0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yNTk9c291cmNlIFxcXCJuZXQvODAyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjYwOnNvdXJjZSBcXFwibmV0L2JyaWRnZS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI2MS1zb3VyY2UgXFxcIm5ldC9kc2EvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjc6MTUuMjU4NjY4MTM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDE3MTA2NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlIGJldHRlci4gTGV0J3Mgc2VlLi4uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8gbmV0d29yay1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSG1tLCBsaW5lIDI1OS4uLiB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBIb3BlZnVsbHksIHRoYXQnbGwgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gd2hlcmUgdGhpbmdzIGFyZSBnb2luZyBzaWRld2F5cy4gSSBleHBlY3QgdG8gZmluZCBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRlZmluaXRpb24sIG1heWJlIGEgY29uZGl0aW9uYWwgYmxvY2ssIG9yIHBlcmhhcHMgYW4gaW5jbHVkZXMgc3RhdGVtZW50IHRoYXQgbGVhZHMgbWUgdG8gdGhlIHNwZWNpZmljIHN1Yi1jb25maWd1cmF0aW9uIGFyZWEgSSBuZWVkIHRvIGV4YW1pbmUuIExldCdzIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjQ3LjI3NTc3NzAxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0c291cmNlIFxcXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNTE6XFx0XFxuIDI1MjpcXHRlbmRpZiAjIGlmIE5FVEZJTFRFUlxcbiAyNTM6XFx0XFxuIDI1NDpcXHRzb3VyY2UgXFxcIm5ldC9zY3RwL0tjb25maWdcXFwiXFxuIDI1NTpcXHRzb3VyY2UgXFxcIm5ldC9yZHMvS2NvbmZpZ1xcXCJcXG4gMjU2OlxcdHNvdXJjZSBcXFwibmV0L3RpcGMvS2NvbmZpZ1xcXCJcXG4gMjU3OlxcdHNvdXJjZSBcXFwibmV0L2F0bS9LY29uZmlnXFxcIlxcbiAyNTg6XFx0c291cmNlIFxcXCJuZXQvbDJ0cC9LY29uZmlnXFxcIlxcbiAyNTk6XFx0c291cmNlIFxcXCJuZXQvODAyL0tjb25maWdcXFwiXFxuIDI2MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvS2NvbmZpZ1xcXCJcXG4gMjYxOlxcdHNvdXJjZSBcXFwibmV0L2RzYS9LY29uZmlnXFxcIlxcbiAyNjI6XFx0c291cmNlIFxcXCJuZXQvODAyMXEvS2NvbmZpZ1xcXCJcXG4gMjYzOlxcdHNvdXJjZSBcXFwibmV0L2xsYy9LY29uZmlnXFxcIlxcbiAyNjQ6XFx0c291cmNlIFxcXCJuZXQveDI1L0tjb25maWdcXFwiXFxuIDI2NTpcXHRzb3VyY2UgXFxcIm5ldC9sYXBiL0tjb25maWdcXFwiXFxuIDI2NjpcXHRzb3VyY2UgXFxcIm5ldC9waG9uZXQvS2NvbmZpZ1xcXCJcXG4gMjY3OlxcdHNvdXJjZSBcXFwibmV0LzZsb3dwYW4vS2NvbmZpZ1xcXCJcXG4gMjY4OlxcdHNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1xcXCJcXG4gMjY5OlxcdHNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNzo0Ny4yNzU4NTA1ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5Njk4MzIzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBicl9pbnB1dC5jYCBmaWxlLlxuXG4qKkluc3BlY3RpbmcgYnJfaW5wdXQuYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoaXMgaW5wdXQgaGFuZGxpbmcgbW9kdWxlLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSAqcHVibGljbHkqIGFjY2Vzc2libGUgZnVuY3Rpb25zIHdpdGhpbiBgYnJfaW5wdXQuY2AuIEknbSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIGZpbGUsIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiB3aWxsIGJlLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgdGhvc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODowNS4yNDU2ODU2OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0fVxcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYnJkZXYgPSBici1cXHUwMDNlZGV2O1xcbiAxNzM6XFx0XFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZXNyY19wb3J0X2lzb2xhdGVkID0gdGVzdF9iaXQoQlJfSVNPTEFURURfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjZcXG4gMTc2OlxcdFxcdCAgICAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApIHx8XFxuIDE3NzpcXHRcXHQgICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUkFSUCkpKSB7XFxuIDE3ODpcXHRcXHRcXHRicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc2tiLCBiciwgdmlkLCBwKTtcXG4gMTc5OlxcdFxcdH0gZWxzZSBpZiAoaXB2Nl9tb2RfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2XFxuIDE4MDpcXHRcXHRcXHQgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuIDE4MTpcXHRcXHRcXHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbiAxODI6XFx0XFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbiAxODM6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgbmRfbXNnKSkgXFx1MDAyNlxcdTAwMjZcXG4gMTg0OlxcdFxcdFxcdCAgIGlwdjZfaGRyKHNrYiktXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcXG4gMTg1OlxcdFxcdFxcdFxcdHN0cnVjdCBuZF9tc2cgKm1zZztcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0XFx0XFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XFxuIDE4ODpcXHRcXHRcXHRcXHRpZiAobXNnKVxcbiAxODk6XFx0XFx0XFx0XFx0XFx0YnJfZG9fc3VwcHJlc3NfbmQoc2tiLCBiciwgdmlkLCBwLCBtc2cpO1xcbiAxOTA6XFx0XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRzd2l0Y2ggKHBrdF90eXBlKSB7XFxuIDE5MzpcXHRcXHRjYXNlIEJSX1BLVF9NVUxUSUNBU1Q6XFxuIDE5NDpcXHRcXHRcXHRtZHN0ID0gYnJfbWRiX2VudHJ5X3NrYl9nZXQoYnJtY3R4LCBza2IsIHZpZCk7XFxuIDE5NTpcXHRcXHRcXHRpZiAoKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgXFx1MDAyNlxcdTAwMjZcXG4gMTk2OlxcdFxcdFxcdCAgICBicl9tdWx0aWNhc3RfcXVlcmllcl9leGlzdHMoYnJtY3R4LCBldGhfaGRyKHNrYiksIG1kc3QpKSB7XFxuIDE5NzpcXHRcXHRcXHRcXHRpZiAoKG1kc3QgXFx1MDAyNlxcdTAwMjYgbWRzdC1cXHUwMDNlaG9zdF9qb2luZWQpIHx8XFxuIDE5ODpcXHRcXHRcXHRcXHQgICAgYnJfbXVsdGljYXN0X2lzX3JvdXRlcihicm1jdHgsIHNrYikgfHxcXG4gMTk5OlxcdFxcdFxcdFxcdCAgICBici1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkge1xcbiAyMDA6XFx0XFx0XFx0XFx0XFx0bG9jYWxfcmN2ID0gdHJ1ZTtcXG4gMjAxOlxcdFxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMoYnItXFx1MDAzZWRldiwgbXVsdGljYXN0KTtcXG4gMjAyOlxcdFxcdFxcdFxcdH1cXG4gMjAzOlxcdFxcdFxcdFxcdG1jYXN0X2hpdCA9IHRydWU7XFxuIDIwNDpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMDU6XFx0XFx0XFx0XFx0bG9jYWxfcmN2ID0gdHJ1ZTtcXG4gMjA2OlxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMoYnItXFx1MDAzZWRldiwgbXVsdGljYXN0KTtcXG4gMjA3OlxcdFxcdFxcdH1cXG4gMjA4OlxcdFxcdFxcdGJyZWFrO1xcbiAyMDk6XFx0XFx0Y2FzZSBCUl9QS1RfVU5JQ0FTVDpcXG4gMjEwOlxcdFxcdFxcdGRzdCA9IGJyX2ZkYl9maW5kX3JjdShiciwgZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QsIHZpZCk7XFxuIDIxMTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWRzdCBcXHUwMDI2XFx1MDAyNiB2aWQgXFx1MDAyNlxcdTAwMjZcXG4gMjEyOlxcdFxcdFxcdFxcdCAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkpKSB7XFxuIDIxMzpcXHRcXHRcXHRcXHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0LCAwKTtcXG4gMjE0OlxcdFxcdFxcdFxcdGlmIChkc3QgXFx1MDAyNlxcdTAwMjZcXG4gMjE1OlxcdFxcdFxcdFxcdCAgICAoIXRlc3RfYml0KEJSX0ZEQl9MT0NBTCwgXFx1MDAyNmRzdC1cXHUwMDNlZmxhZ3MpIHx8XFxuIDIxNjpcXHRcXHRcXHRcXHQgICAgIHRlc3RfYml0KEJSX0ZEQl9BRERFRF9CWV9VU0VSLCBcXHUwMDI2ZHN0LVxcdTAwM2VmbGFncykpKVxcbiAyMTc6XFx0XFx0XFx0XFx0XFx0ZHN0ID0gTlVMTDtcXG4gMjE4OlxcdFxcdFxcdH1cXG4gMjE5OlxcdFxcdFxcdGJyZWFrO1xcbiAyMjA6XFx0XFx0ZGVmYXVsdDpcXG4gMjIxOlxcdFxcdFxcdGJyZWFrO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoZHN0KSB7XFxuIDIyNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdFxcdGlmICh0ZXN0X2JpdChCUl9GREJfTE9DQUwsIFxcdTAwMjZkc3QtXFx1MDAzZWZsYWdzKSlcXG4gMjI4OlxcdFxcdFxcdFxcdHJldHVybiBicl9wYXNzX2ZyYW1lX3VwKHNrYiwgZmFsc2UpO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRcXHRpZiAobm93ICE9IFJFQURfT05DRShkc3QtXFx1MDAzZXVzZWQpKVxcbiAyMzE6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShkc3QtXFx1MDAzZXVzZWQsIG5vdyk7XFxuIDIzMjpcXHRcXHRcXHRicl9mb3J3YXJkKFJFQURfT05DRShkc3QtXFx1MDAzZWRzdCksIHNrYiwgbG9jYWxfcmN2LCBmYWxzZSk7XFxuIDIzMzpcXHRcXHR9IGVsc2Uge1xcbiAyMzQ6XFx0XFx0XFx0aWYgKCFtY2FzdF9oaXQpXFxuIDIzNTpcXHRcXHRcXHRcXHRicl9mbG9vZChiciwgc2tiLCBwa3RfdHlwZSwgbG9jYWxfcmN2LCBmYWxzZSwgdmlkKTtcXG4gMjM2OlxcdFxcdFxcdGVsc2VcXG4gMjM3OlxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9mbG9vZChtZHN0LCBza2IsIGJybWN0eCwgbG9jYWxfcmN2LCBmYWxzZSk7XFxuIDIzODpcXHRcXHR9XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGlmIChsb2NhbF9yY3YpXFxuIDI0MTpcXHRcXHRcXHRyZXR1cm4gYnJfcGFzc19mcmFtZV91cChza2IsIHByb21pc2MpO1xcbiAyNDI6XFx0XFxuIDI0MzpcXHRvdXQ6XFxuIDI0NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjQ1OlxcdGRyb3A6XFxuIDI0NjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4gMjQ3OlxcdFxcdGdvdG8gb3V0O1xcbiAyNDg6XFx0fVxcbiAyNDk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0YXRpYyB2b2lkIF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNTI6XFx0e1xcbiAyNTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0X3JjdShza2ItXFx1MDAzZWRldik7XFxuIDI1NDpcXHRcXHR1MTYgdmlkID0gMDtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0LyogY2hlY2sgaWYgdmxhbiBpcyBhbGxvd2VkLCB0byBhdm9pZCBzcG9vZmluZyAqL1xcbiAyNTc6XFx0XFx0aWYgKHRlc3RfYml0KEJSX0xFQVJOSU5HX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbiAyNTg6XFx0XFx0ICAgIG5icF9zdGF0ZV9zaG91bGRfbGVhcm4ocCkgXFx1MDAyNlxcdTAwMjZcXG4gMjU5OlxcdFxcdCAgICAhYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTk9fTExfTEVBUk4pIFxcdTAwMjZcXHUwMDI2XFxuIDI2MDpcXHRcXHQgICAgYnJfc2hvdWxkX2xlYXJuKHAsIHNrYiwgXFx1MDAyNnZpZCkpXFxuIDI2MTpcXHRcXHRcXHRicl9mZGJfdXBkYXRlKHAtXFx1MDAzZWJyLCBwLCBldGhfaGRyKHNrYiktXFx1MDAzZWhfc291cmNlLCB2aWQsIDApO1xcbiAyNjI6XFx0fVxcbiAyNjM6XFx0XFxuIDI2NDpcXHQvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG4gMjY1OlxcdHN0YXRpYyBpbnQgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjY2OlxcdHtcXG4gMjY3OlxcdFxcdF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChza2IpO1xcbiAyNjg6XFx0XFxuIDI2OTpcXHRcXHQvKiByZXR1cm4gMSB0byBzaWduYWwgdGhlIG9rZm4oKSB3YXMgY2FsbGVkIHNvIGl0J3Mgb2sgdG8gdXNlIHRoZSBza2IgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjg6MDUuMjQ1NzczNTYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzA4MzcwMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBkbzpcblxuKipBbmFseXppbmcgYGJyX2lucHV0LmNgIGZvciBOb24tU3RhdGljIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgYnJfaW5wdXQuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBwYXN0IHRoZSBzdGF0aWMgb25lcywgYXMgdGhvc2UgYXJlIHVzdWFsbHkgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBleHBvc2VkLCB0aGUgcHVibGljIGludGVyZmFjZSBpZiB5b3Ugd2lsbC4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgYSBnb29kIHJlYXNvbiB0byBpbnNwZWN0IHRoZXNlIGZ1bmN0aW9ucyAtIHdoZXRoZXIgdGhhdCdzIGZvciByZWZhY3RvcmluZywgdW5kZXJzdGFuZGluZyBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIG9yIGV4dGVuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB3aGF0ZXZlciBwcm9qZWN0IHRoaXMgaXMgcGFydCBvZi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHJldHVybiB0eXBlcywgYW5kIGFueSBjb21tZW50cyB0aGF0IGFyZSB0aGVyZSB0byBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSBhbmQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkgd2FudCBhIGNvbmNpc2UgdW5kZXJzdGFuZGluZyBvZiBpdHMgY2FwYWJpbGl0aWVzIG91dHNpZGUgb2YgYW55IGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODY3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODoxOS41NTQxNDU4NDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0cmV0dXJuIDE7XFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4gMjc0OlxcdHtcXG4gMjc1OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjc2OlxcdFxcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSBOVUxMO1xcbiAyNzc6XFx0XFx0c3RydWN0IG5mX2hvb2tfc3RhdGUgc3RhdGU7XFxuIDI3ODpcXHRcXHR1bnNpZ25lZCBpbnQgdmVyZGljdCwgaTtcXG4gMjc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gMjgwOlxcdFxcdGludCByZXQ7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdG5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiAyODM6XFx0I2lmZGVmIENPTkZJR19KVU1QX0xBQkVMXFxuIDI4NDpcXHRcXHRpZiAoIXN0YXRpY19rZXlfZmFsc2UoXFx1MDAyNm5mX2hvb2tzX25lZWRlZFtORlBST1RPX0JSSURHRV1bTkZfQlJfUFJFX1JPVVRJTkddKSlcXG4gMjg1OlxcdFxcdFxcdGdvdG8gZnJhbWVfZmluaXNoO1xcbiAyODY6XFx0I2VuZGlmXFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdGUgPSByY3VfZGVyZWZlcmVuY2UobmV0LVxcdTAwM2VuZi5ob29rc19icmlkZ2VbTkZfQlJfUFJFX1JPVVRJTkddKTtcXG4gMjg5OlxcdFxcdGlmICghZSlcXG4gMjkwOlxcdFxcdFxcdGdvdG8gZnJhbWVfZmluaXNoO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRuZl9ob29rX3N0YXRlX2luaXQoXFx1MDAyNnN0YXRlLCBORl9CUl9QUkVfUk9VVElORyxcXG4gMjkzOlxcdFxcdFxcdFxcdCAgIE5GUFJPVE9fQlJJREdFLCBza2ItXFx1MDAzZWRldiwgTlVMTCwgTlVMTCxcXG4gMjk0OlxcdFxcdFxcdFxcdCAgIG5ldCwgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4gMjk3OlxcdFxcdFxcdHZlcmRpY3QgPSBuZl9ob29rX2VudHJ5X2hvb2tmbihcXHUwMDI2ZS1cXHUwMDNlaG9va3NbaV0sIHNrYiwgXFx1MDAyNnN0YXRlKTtcXG4gMjk4OlxcdFxcdFxcdHN3aXRjaCAodmVyZGljdCBcXHUwMDI2IE5GX1ZFUkRJQ1RfTUFTSykge1xcbiAyOTk6XFx0XFx0XFx0Y2FzZSBORl9BQ0NFUFQ6XFxuIDMwMDpcXHRcXHRcXHRcXHRpZiAoQlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZWJyX25ldGZpbHRlcl9icm91dGUpIHtcXG4gMzAxOlxcdFxcdFxcdFxcdFxcdCpwc2tiID0gc2tiO1xcbiAzMDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4gMzAzOlxcdFxcdFxcdFxcdH1cXG4gMzA0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMDU6XFx0XFx0XFx0Y2FzZSBORl9EUk9QOlxcbiAzMDY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMwNzpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gMzA4OlxcdFxcdFxcdGNhc2UgTkZfUVVFVUU6XFxuIDMwOTpcXHRcXHRcXHRcXHRyZXQgPSBuZl9xdWV1ZShza2IsIFxcdTAwMjZzdGF0ZSwgaSwgdmVyZGljdCk7XFxuIDMxMDpcXHRcXHRcXHRcXHRpZiAocmV0ID09IDEpXFxuIDMxMTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzEyOlxcdFxcdFxcdFxcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xcbiAzMTM6XFx0XFx0XFx0ZGVmYXVsdDogLyogU1RPTEVOICovXFxuIDMxNDpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gMzE1OlxcdFxcdFxcdH1cXG4gMzE2OlxcdFxcdH1cXG4gMzE3OlxcdGZyYW1lX2ZpbmlzaDpcXG4gMzE4OlxcdFxcdG5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiAzMTk6XFx0XFx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7XFxuIDMyMDpcXHQjZWxzZVxcbiAzMjE6XFx0XFx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4gMzIyOlxcdCNlbmRpZlxcbiAzMjM6XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuIDMyNDpcXHR9XFxuIDMyNTpcXHRcXG4gMzI2OlxcdC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMVxcbiAzMjc6XFx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXFxuIDMyODpcXHQgKi9cXG4gMzI5OlxcdHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFxcdTAwMjZwLVxcdTAwM2Vici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxcbiAzMzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHRtcC1cXHUwMDNldHlwZSA9PSBza2ItXFx1MDAzZXByb3RvY29sKSlcXG4gMzM2OlxcdFxcdFxcdFxcdHJldHVybiB0bXAtXFx1MDAzZWZyYW1lX2hhbmRsZXIocCwgc2tiKTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0cmV0dXJuIDA7XFxuIDMzOTpcXHR9XFxuIDM0MDpcXHRcXG4gMzQxOlxcdC8qXFxuIDM0MjpcXHQgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxcbiAzNDM6XFx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXFxuIDM0NDpcXHQgKi9cXG4gMzQ1OlxcdHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIDM0NjpcXHR7XFxuIDM0NzpcXHRcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4gMzQ4OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuIDM0OTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XFxuIDM1MDpcXHRcXHRjb25zdCB1bnNpZ25lZCBjaGFyICpkZXN0ID0gZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3Q7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSykpXFxuIDM1MzpcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSkpIHtcXG4gMzU2OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9NQUNfSU5WQUxJRF9TT1VSQ0U7XFxuIDM1NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDM1ODpcXHRcXHR9XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xcbiAzNjE6XFx0XFx0aWYgKCFza2IpXFxuIDM2MjpcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gMzYzOlxcdFxcbiAzNjQ6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3QgYnJfaW5wdXRfc2tiX2NiKSk7XFxuIDM2NTpcXHRcXHRicl90Y19za2JfbWlzc19zZXQoc2tiLCBmYWxzZSk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdHAgPSBicl9wb3J0X2dldF9yY3Uoc2tiLVxcdTAwM2VkZXYpO1xcbiAzNjg6XFx0XFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSlcXG4gMzY5OlxcdFxcdFxcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjg6MTkuNTU0MjM1NjI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzE4MTcyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgYmVhcmluZ3MgaW4gdGhpcyBicmlkZ2luZyBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpbmNvbWluZyBmcmFtZXMgYXJlIGFjdHVhbGx5IGhhbmRsZWQuIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHM6IHdoZXJlIGRvIHRoZSBpbmNvbWluZyBwYWNrZXRzIGFjdHVhbGx5ICpsYW5kKiB3aXRoaW4gdGhlIHN5c3RlbT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGByeF9oYW5kbGVyYCBhbmQgYW55IHBvdGVudGlhbCBcImZyYW1lIGVudHJ5XCIgZnVuY3Rpb25zIOKAkyB5b3Uga25vdywgdGhlIG9uZXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxseSByZWNlaXZpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGRhdGEuXG5cbk9uY2UgSSBoYXZlIHRob3NlIGlkZW50aWZpZWQsIEknbGwgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgYGJyX2lucHV0LmNgIGZpbGUgd2lsbCBoYXZlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgcmVzdCBvZiBpdCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBpbml0aWFsIHJlY2VpdmUgaGFuZGxlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGlzIGtleSB0byBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoZSBnb2FsIGlzIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBwYXRoIGZyb20gcGh5c2ljYWwgaW50ZXJmYWNlIHRvIHRoZSBicmlkZ2UncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI4OjIzLjYyNjA1NTI4MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcbiAzNzE6XFx0XFx0aWYgKHVubGlrZWx5KGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihkZXN0KSkpIHtcXG4gMzcyOlxcdFxcdFxcdHUxNiBmd2RfbWFzayA9IHAtXFx1MDAzZWJyLVxcdTAwM2Vncm91cF9md2RfbWFza19yZXF1aXJlZDtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0XFx0LypcXG4gMzc1OlxcdFxcdFxcdCAqIFNlZSBJRUVFIDgwMi4xRCBUYWJsZSA3LTEwIFJlc2VydmVkIGFkZHJlc3Nlc1xcbiAzNzY6XFx0XFx0XFx0ICpcXG4gMzc3OlxcdFxcdFxcdCAqIEFzc2lnbm1lbnRcXHRcXHQgXFx0XFx0VmFsdWVcXG4gMzc4OlxcdFxcdFxcdCAqIEJyaWRnZSBHcm91cCBBZGRyZXNzXFx0XFx0MDEtODAtQzItMDAtMDAtMDBcXG4gMzc5OlxcdFxcdFxcdCAqIChNQUMgQ29udHJvbCkgODAyLjNcXHRcXHQwMS04MC1DMi0wMC0wMC0wMVxcbiAzODA6XFx0XFx0XFx0ICogKExpbmsgQWdncmVnYXRpb24pIDgwMi4zXFx0MDEtODAtQzItMDAtMDAtMDJcXG4gMzgxOlxcdFxcdFxcdCAqIDgwMi4xWCBQQUUgYWRkcmVzc1xcdFxcdDAxLTgwLUMyLTAwLTAwLTAzXFxuIDM4MjpcXHRcXHRcXHQgKlxcbiAzODM6XFx0XFx0XFx0ICogODAyLjFBQiBMTERQIFxcdFxcdDAxLTgwLUMyLTAwLTAwLTBFXFxuIDM4NDpcXHRcXHRcXHQgKlxcbiAzODU6XFx0XFx0XFx0ICogT3RoZXJzIHJlc2VydmVkIGZvciBmdXR1cmUgc3RhbmRhcmRpemF0aW9uXFxuIDM4NjpcXHRcXHRcXHQgKi9cXG4gMzg3OlxcdFxcdFxcdGZ3ZF9tYXNrIHw9IHAtXFx1MDAzZWdyb3VwX2Z3ZF9tYXNrO1xcbiAzODg6XFx0XFx0XFx0c3dpdGNoIChkZXN0WzVdKSB7XFxuIDM4OTpcXHRcXHRcXHRjYXNlIDB4MDA6XFx0LyogQnJpZGdlIEdyb3VwIEFkZHJlc3MgKi9cXG4gMzkwOlxcdFxcdFxcdFxcdC8qIElmIFNUUCBpcyB0dXJuZWQgb2ZmLFxcbiAzOTE6XFx0XFx0XFx0XFx0ICAgdGhlbiBtdXN0IGZvcndhcmQgdG8ga2VlcCBsb29wIGRldGVjdGlvbiAqL1xcbiAzOTI6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWJyLVxcdTAwM2VzdHBfZW5hYmxlZCA9PSBCUl9OT19TVFAgfHxcXG4gMzkzOlxcdFxcdFxcdFxcdCAgICBmd2RfbWFzayBcXHUwMDI2ICgxdSBcXHUwMDNjXFx1MDAzYyBkZXN0WzVdKSlcXG4gMzk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZm9yd2FyZDtcXG4gMzk1OlxcdFxcdFxcdFxcdCpwc2tiID0gc2tiO1xcbiAzOTY6XFx0XFx0XFx0XFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XFxuIDM5NzpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHRcXHRjYXNlIDB4MDE6XFx0LyogSUVFRSBNQUMgKFBhdXNlKSAqL1xcbiA0MDA6XFx0XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX01BQ19JRUVFX01BQ19DT05UUk9MO1xcbiA0MDE6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHRjYXNlIDB4MEU6XFx0LyogODAyLjFBQiBMTERQICovXFxuIDQwNDpcXHRcXHRcXHRcXHRmd2RfbWFzayB8PSBwLVxcdTAwM2Vici1cXHUwMDNlZ3JvdXBfZndkX21hc2s7XFxuIDQwNTpcXHRcXHRcXHRcXHRpZiAoZndkX21hc2sgXFx1MDAyNiAoMXUgXFx1MDAzY1xcdTAwM2MgZGVzdFs1XSkpXFxuIDQwNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGZvcndhcmQ7XFxuIDQwNzpcXHRcXHRcXHRcXHQqcHNrYiA9IHNrYjtcXG4gNDA4OlxcdFxcdFxcdFxcdF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChza2IpO1xcbiA0MDk6XFx0XFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4gNDEwOlxcdFxcbiA0MTE6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gNDEyOlxcdFxcdFxcdFxcdC8qIEFsbG93IHNlbGVjdGl2ZSBmb3J3YXJkaW5nIGZvciBtb3N0IG90aGVyIHByb3RvY29scyAqL1xcbiA0MTM6XFx0XFx0XFx0XFx0ZndkX21hc2sgfD0gcC1cXHUwMDNlYnItXFx1MDAzZWdyb3VwX2Z3ZF9tYXNrO1xcbiA0MTQ6XFx0XFx0XFx0XFx0aWYgKGZ3ZF9tYXNrIFxcdTAwMjYgKDF1IFxcdTAwM2NcXHUwMDNjIGRlc3RbNV0pKVxcbiA0MTU6XFx0XFx0XFx0XFx0XFx0Z290byBmb3J3YXJkO1xcbiA0MTY6XFx0XFx0XFx0fVxcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRcXHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlcHJvbWlzYyA9IGZhbHNlO1xcbiA0MTk6XFx0XFxuIDQyMDpcXHRcXHRcXHQvKiBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIGJlIGhpdCB3aGVuIG5mX2hvb2soKTpcXG4gNDIxOlxcdFxcdFxcdCAqICAgLSByZXR1cm5zIFxcdTAwM2MgMCAoZHJvcC9lcnJvcilcXG4gNDIyOlxcdFxcdFxcdCAqICAgLSByZXR1cm5zID0gMCAoc3RvbGVuL25mX3F1ZXVlKVxcbiA0MjM6XFx0XFx0XFx0ICogVGh1cyByZXR1cm4gMSBmcm9tIHRoZSBva2ZuKCkgdG8gc2lnbmFsIHRoZSBza2IgaXMgb2sgdG8gcGFzc1xcbiA0MjQ6XFx0XFx0XFx0ICovXFxuIDQyNTpcXHRcXHRcXHRpZiAoTkZfSE9PSyhORlBST1RPX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sXFxuIDQyNjpcXHRcXHRcXHRcXHQgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxuIDQyNzpcXHRcXHRcXHRcXHQgICAgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaCkgPT0gMSkge1xcbiA0Mjg6XFx0XFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4gNDI5OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDQzMDpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gNDMxOlxcdFxcdFxcdH1cXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcXG4gNDM1OlxcdFxcdFxcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdGZvcndhcmQ6XFxuIDQzODpcXHRcXHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpXFxuIDQzOTpcXHRcXHRcXHRnb3RvIGRlZmVyX3N0cF9maWx0ZXJpbmc7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdHN3aXRjaCAocC1cXHUwMDNlc3RhdGUpIHtcXG4gNDQyOlxcdFxcdGNhc2UgQlJfU1RBVEVfRk9SV0FSRElORzpcXG4gNDQzOlxcdFxcdGNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6XFxuIDQ0NDpcXHRkZWZlcl9zdHBfZmlsdGVyaW5nOlxcbiA0NDU6XFx0XFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwocC1cXHUwMDNlYnItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGRlc3QpKVxcbiA0NDY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRcXHRyZXR1cm4gbmZfaG9va19icmlkZ2VfcHJlKHNrYiwgcHNrYik7XFxuIDQ0OTpcXHRcXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODoyMy42MjYxNTUxNzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMjkwMjg1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnJfaGFuZGxlX2ZyYW1lYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBgYnJfaGFuZGxlX2ZyYW1lYCBpcyBhY3RpbmcgYXMgYSByZWNlaXZlIGhhbmRsZXIsIHdoaWNoIG1lYW5zIGl0J3Mgc2l0dGluZyB0aGVyZSB3YWl0aW5nIHRvIHByb2Nlc3MgaW5jb21pbmcgZnJhbWVzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIHVzZSB3aXRoaW4gdGhlIGJyaWRnaW5nIHN1YnN5c3RlbS4gVGhlIGZhY3QgdGhhdCBpdCdzIHJlZ2lzdGVyZWQgYXMgYW4gYHJ4X2hhbmRsZXJgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgb3IgcmVmZXJlbmNlZC4gQSBjcm9zcy1yZWZlcmVuY2Ugc2VhcmNoLCBsaWtlbHkgdGhyb3VnaCBgZ3JlcGAgb3IgbXkgSURFJ3MgZnVuY3Rpb25hbGl0eSwgaXMgaW4gb3JkZXIuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gZnJhbWUgcHJvY2Vzc2luZy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyBmcmFtZXMgYXJlIGNhdGVnb3JpemVkIG9yIHdoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODo0Ni45NTUxODU2MTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzg3MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX2hhbmRsZV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zOT1zdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTgxLS8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo4MjppbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI0OC19XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjkzLVxcdFxcdFxcdCAgIE5GUFJPVE9fQlJJREdFLCBza2ItXFx1MDAzZWRldiwgTlVMTCwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mjk0OlxcdFxcdFxcdCAgIG5ldCwgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5NS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMTgtXFx0bmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMxOTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyMTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjItI2VuZGlmXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ0LSAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjMtICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ2NDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWVfZHVtbXkoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ2OT1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzEtXFx0aWYgKG5ldGRldl91c2VzX2RzYShkZXYpKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzI6XFx0XFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZV9kdW1teTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDczLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzQ6XFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDc1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MjU1PXZvaWQgbmZfYnJpZGdlX3VwZGF0ZV9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzMtICogZG9uJ3QsIHdlIHVzZSB0aGUgbmVpZ2hib3VyIGZyYW1ld29yayB0byBmaW5kIG91dC4gSW4gYm90aCBjYXNlcywgd2UgbWFrZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc0OiAqIHN1cmUgdGhhdCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKCkgaXMgY2FsbGVkIGFmdGVyd2FyZHMuXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzUtICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNzY9aW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTMwNi1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjMwNzpcXHRcXHRcXHRyZXQgPSBicl9oYW5kbGVfZnJhbWVfZmluaXNoKG5ldCwgc2ssIHNrYik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMDgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mzc2PXN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzAtXFx0YnJfbmZfaG9va190aHJlc2goTkZfQlJfUFJFX1JPVVRJTkcsIG5ldCwgc2ssIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzE6XFx0XFx0XFx0ICBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQzMi1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTAwNT1zdGF0aWMgdm9pZCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlX3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyNi1cXHRuZl9icmlkZ2UtXFx1MDAzZXBoeXNvdXRkZXYgPSBOVUxMO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAyNzpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyOC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM9MTAxPXN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTUzLVxcdGJyX25mX2hvb2tfdGhyZXNoKE5GX0JSX1BSRV9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE1NDpcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2LCBOVUxMLCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTU1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTI5PWludCBuYnBfYmFja3VwX2NoYW5nZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqYmFja3VwX2Rldik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzEtLyogYnJfaW5wdXQuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjkzMjppbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTMzLXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjg6NDcuMDA3OTgzNTcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODg5NDgxODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgUGFja2V0IFByb2Nlc3NpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBpbnRvIHRoaXMgcGF0Y2ggdGhhdCdzIGxhbmRlZCBpbiB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiB0aGV5J3JlIHBhc3NlZCB1cCB0byB0aGUgbmV0d29yayBzdGFjay4gSSBzZWUgdGhhdCBgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaGAsIHdoaWNoIGlzIGEgZ2xvYmFsbHkgZXhwb3J0ZWQgZnVuY3Rpb24sIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4gSXQncyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBkaXJlY3RseSBsZWFkcyB0byBgYnJfcGFzc19mcmFtZV91cGAsIHdoaWNoIHRoZW4gY2FsbHMgYE5GX0hPT0tgIG9uIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAuIFRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIHRvdWNoZXMgdGhpbmdzLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpYCBjaGFuZ2UuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBsb29rIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG5ldC9icmlkZ2UvYCBvciBldmVuIGBuZXQvY29yZS9gPyBXaGF0IGhhcHBlbnMgd2hlbiB5b3UgaGF2ZSBnZW5lcmljIFhEUCBhdHRhY2hlZCB0byBhIGJyaWRnZSBpbnRlcmZhY2UsIG9yIGFueSBuZXRkZXY/IEknbSB0aGlua2luZyBhYm91dCBob3cgcGFja2V0cyBmbG93IGZyb20gYSBicmlkZ2Ugc2xhdmUgaW50ZXJmYWNlLCB0aHJvdWdoIHRoZSBicmlkZ2UgKGBicl9oYW5kbGVfZnJhbWVgKSwgYW5kIHRoZW4gdXAgdG8gbG9jYWwgZGVsaXZlcnkgKGBicl9wYXNzX2ZyYW1lX3VwYCB0byBgYnJfbmV0aWZfcmVjZWl2ZV9za2JgIGFuZCBldmVudHVhbGx5IGBuZXRpZl9yZWNlaXZlX3NrYmApLlxuXG5BaCwgeWVzLCBhbmQgSSByZWNhbGwgdGhhdCBpbnNpZGUgYG5ldGlmX3JlY2VpdmVfc2tiYCwgYGRvX3hkcF9nZW5lcmljYCBhbmQgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLCBnZW5lcmljIFhEUCBoYXMgdGhpcyBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl9pc19yZWRpcmVjdGVkKHNrYikpIHJldHVybiBYRFBfUEFTUztgLiBUaGlzIHBhdGNoIHNldHMgYHNrYi1cdTAwM2VyZWRpcmVjdGVkYCwgd2hpY2ggbWVhbnMgZ2VuZXJpYyBYRFAgKnNob3VsZG4ndCogcnVuIGEgc2Vjb25kIHRpbWUgb24gdGhlIGxvY2FsIGJyaWRnZSBkZXZpY2UgYW5kIHJlYWxsb2NhdGUgdGhlIGhlYWQgb3IgZnJlZSB0aGUgYnVmZmVycyB3aGlsZSBzdGlsbCBpbiB1c2UuIFRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpbywgc28gaXQgbWFrZXMgdG90YWwgc2Vuc2UuXG5cbk5vdywgdGhpcyBmZWVscyBsaWtlIGl0IGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBJIGhhdmUgdG8gYmUgc3VyZSB0aGlzIGlzIGFwcGxpY2FibGUgdG8gbXkgd29yay4gVGhpcyBpcyBzb21ldGhpbmcgSSdkIHdhbnQgdG8gdGVzdCBpbiBhIGxhYi4gU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBpbiBhIFFFTVUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE9mIGNvdXJzZSBpdCBpcyEgRXRoZXJuZXQgYnJpZGdpbmcsIGdlbmVyaWMgWERQLCB2ZXRoLCB0YXAsIG1hY3Z0YXAsIHZpcnRpby1uZXQsIGFsbCBvZiB0aGVzZSBhcmUgdmVyeSBjb21tb24sIGFsbCB3aWRlbHkgdXNlZCBpbiBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nLCBhbmQgZnVsbHkgc3VwcG9ydGVkIGluIFFFTVUuIFRoYXQncyBnb29kIG5ld3MuXG5cblNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCBtb2RpZmllcyBjb3JlIGJyaWRnZSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgZXNwZWNpYWxseSBkdXJpbmcgdGhhdCBoYW5kb3ZlciB0byB0aGUgbmV0d29yayBzdGFjayB2aWEgYG5ldGlmX3JlY2VpdmVfc2tiYC4gVGhpcyBtZWFucyBpdCBoYXMgdGhlIHBvdGVudGlhbCB0byBwcmV2ZW50IGdlbmVyaWMgWERQIHJlLWV4ZWN1dGlvbiBidWdzOiBzcGVjaWZpY2FsbHksIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBkb3VibGUtZXhlY3V0aW9uLCBib3RoIHZlcnkgaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIHN0cmFpZ2h0LiBXZSBuZWVkIGBCUklER0VgIHRvIGVuYWJsZSB0aGUgYG5ldC9icmlkZ2VgIG1vZHVsZS4gTG9va2luZyBhdCB0aGUgS2NvbmZpZywgQlJJREdFIGRlcGVuZHMgb24gYE5FVGAgaW1wbGljaXRseSAodmlhIG5ldC9LY29uZmlnKSwgaXQgYWxzbyB1c2VzIGBMTENgIGFuZCBgU1RQYC4gVGhlbiwgb2YgY291cnNlLCBmb3IgdGhlIGdlbmVyaWMgWERQIHN0dWZmLCB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfUkVESVJFQ1RgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYENPTkZJR19ORVRfUkVESVJFQ1RgIGlzIGRlZmluZWQgaW4gS2NvbmZpZyBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIxOSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyOToyNS44OTc0NjgwNTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ4OTk1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1JFRElSRUNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTQ5PWNvbmZpZyBJRkJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTUxLVxcdGRlcGVuZHMgb24gTkVUX0FDVF9NSVJSRUQgfHwgTkZUX0ZXRF9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE1MjpcXHRzZWxlY3QgTkVUX1JFRElSRUNUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNTMtXFx0aGVscFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDE5LVxcdF9fdThcXHRcXHRcXHRyZWRpcmVjdGVkOjE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMDIwOiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDIxLVxcdF9fdThcXHRcXHRcXHRmcm9tX2luZ3Jlc3M6MTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnJvbV9pbmdyZXNzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMxLVxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDMyOiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMzLVxcdHNrYi1cXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01NDQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ3LVxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDQ4OiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ5LVxcdHNrYi1cXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xcbi0tXFxubmV0L0tjb25maWc9NTU9Y29uZmlnIE5FVF9YR1JFU1NcXG4tLVxcbm5ldC9LY29uZmlnLTU5LVxcbm5ldC9LY29uZmlnOjYwOmNvbmZpZyBORVRfUkVESVJFQ1RcXG5uZXQvS2NvbmZpZy02MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI5OjI3LjU1MjM3NTk0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTAxNDQ0NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYnJpZGdlIHN1YnN5c3RlbSwgYW5kIGBDT05GSUdfQlJJREdFYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCDigJMgdGhhdCBlbmFibGVzIHRoZSB3aG9sZSBzaGViYW5nLCBpbmNsdWRpbmcgYGJyX2lucHV0LmNgLiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCdzIG5vdCBhbHdheXMgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzZWUgaWYgYENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRWAgb3IgYENPTkZJR19CUklER0VfTkVURklMVEVSYCBoYXZlIGFueSBiZWFyaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIG9uLiBUaGVzZSBmaWx0ZXIgb3B0aW9ucyBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgdGhlIGJyaWRnZSBpbnRlcmFjdHMgd2l0aCB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLCBpZiBhbnkuXG5cblRoZXJlZm9yZSwgSSdsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBkaXZpbmcgaW50byBgbmV0L2JyaWRnZS9LY29uZmlnYCBhbmQgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdgIGlzIGVzc2VudGlhbCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJwbGF5IGFuZCB3aGVyZSBJIG1pZ2h0IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cywgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvIEknbSBkZWFsaW5nIHdpdGguIE5vIHBvaW50IGd1ZXNzaW5nIHdoZW4gdGhlIGFuc3dlciBpcyBpbiB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyOTo0NS42NTM4MjI0ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTcyMjg5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJJREdFX05FVEZJTFRFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTE0Nz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE0ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xNDktQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE2Mz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2NDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjUtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3OT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE4MDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xODEtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnPTc1PUNPTkZJR19CUklER0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc6NzY6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNzctQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTYxPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6NjI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWctNjMtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc9NDc9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnOjQ4OiMgQ09ORklHX0JSSURHRV9ORVRGSUxURVIgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZy00OS1DT05GSUdfTkZfQ09OTlRSQUNLPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc9NDQ9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzo0NTojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTQ2LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9NDY9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6NDc6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctNDgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTY2PUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc6Njc6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNjgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTgwPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxODE6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xODItQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTE3MT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTcyOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMTczLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LPW1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoyOiNpZm5kZWYgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDozOiNkZWZpbmUgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg9OD1zdHJ1Y3QgbmZfYnJpZGdlX2ZyYWdfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5fcHJlcm91dGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtODUtfVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjg2OiNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODU9c3RydWN0IHRzX2NvbmZpZztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4Ni1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4OC1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDQzPWVudW0gc2tiX2V4dF9pZCB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDQ0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0NS1cXHRTS0JfRVhUX0JSSURHRV9ORixcXG4tLVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ4ND1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDg4LVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oOjQ4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC00OTAtc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfYnJpZGdlKHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEwLXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEyLVxcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTQzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqYnJpZGdlX3BhcmVudF9ydGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDQte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDo0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDYtXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydDtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oPTEzPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0xOS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRob29rX2luZGV4O1xcdC8qIGluZGV4IGluIGhvb2tfZW50cmllcy1cXHUwMDNlaG9va1tdICovXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMjEtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqYnJpZGdlX2RldjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM6I2RlZmluZSBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zND1lbnVtIG5mX2JyX2hvb2tfcHJpb3JpdGllcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQ0LVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6NDU6I2VuZGlmIC8qIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0ggKi9cXG4tLVxcbm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZy0yMzAtXFxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXFxubmV0L0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTM9YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE0LVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTU6YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE2LVxcbi0tXFxubmV0L2JyaWRnZS9NYWtlZmlsZT0xOD1icl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGJyX25ldGZpbHRlcl9pcHY2Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSArPSBicl9uZXRmaWx0ZXIub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDI1PXN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00NjYtXFxubmV0L2JyaWRnZS9ici5jOjQ2NzojaWYgSVNfTU9EVUxFKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnIuYy00NjgtXFx0cHJfaW5mbyhcXFwiYnJpZGdlOiBmaWx0ZXJpbmcgdmlhIGFycC9pcC9pcDZ0YWJsZXMgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTIwND1zdGF0aWMgaW50IGJyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMS1cXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MjEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEzLVxcdC8qIHJlbWVtYmVyIHRoZSBNVFUgaW4gdGhlIHJ0YWJsZSBmb3IgUE1UVSAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1NC0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTYtXFx0aWYgKGRhdGFbSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTXSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTYxOT1zdGF0aWMgc2l6ZV90IGJyX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2NjctI2VuZGlmXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTY2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjY5LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAgICAvKiBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2Nzg9c3RhdGljIGludCBicl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5MS0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzkyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTMtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTE0LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwb3J0X2xpc3Q7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNi1cXHR1bmlvbiB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMDIzPWV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfYnJfb3BzIF9fcmN1ICpuZl9icl9vcHM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI1LS8qIGJyX25ldGZpbHRlci5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI3LWludCBicl9uZl9jb3JlX2luaXQodm9pZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NzcxPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhtdWx0aWNhc3RfbWxkX3ZlcnNpb24pO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3My0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6Nzc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy03NzUtc3RhdGljIHNzaXplX3QgbmZfY2FsbF9pcHRhYmxlc19zaG93KFxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTkzNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc2LSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo5Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk3OC1cXHRcXHUwMDI2ZGV2X2F0dHJfbmZfY2FsbF9pcHRhYmxlcy5hdHRyLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2NvcmUvc2tidWZmLmMtNTE1Mi1cXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmM6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjczPXZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzE1LVxcdC8qIElmIHdlIHVzZSBpcF9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jPTMxMz12b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzgyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjM4MzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODQtXFx0LyogSWYgd2UgdXNlIGlwNl9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDg1PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDg2LVxcdHRyaXN0YXRlICdcXFwicGh5c2RldlxcXCIgbWF0Y2ggc3VwcG9ydCdcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4NzpcXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBCUklER0VfTkVURklMVEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODgtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjg9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNDAtc3RhdGljIGNvbnN0IGNoYXIgKmdldF9waHlzaW5kZXZfbmFtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3Ny1cXHRpZiAob3B0LVxcdTAwM2VjbWRmbGFncyBcXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3OS1cXHRcXHRjb25zdCBjaGFyICplaWZhY2UgPSBTUkNESVIgPyBnZXRfcGh5c2luZGV2X25hbWUoc2tiLCB4dF9uZXQocGFyKSkgOlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM3Nz1oYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTUtXFx0aWYgKG9wdC1cXHUwMDNlY21kZmxhZ3MgXFx1MDAyNiBJUFNFVF9GTEFHX1BIWVNERVYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTctXFx0XFx0Y29uc3QgY2hhciAqZWlmYWNlID0gU1JDRElSID8gZ2V0X3BoeXNpbmRldl9uYW1lKHNrYiwgeHRfbmV0KHBhcikpIDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jPTExMz1uZl9sb2dfZHVtcF9wYWNrZXRfY29tbW9uKHN0cnVjdCBuZl9sb2dfYnVmICptLCB1OCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyNi1cXHRcXHRcXHRvdXQgPyBvdXQtXFx1MDAzZW5hbWUgOiBcXFwiXFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyOC1cXHRwaHlzaW5kZXYgPSBuZl9icmlkZ2VfZ2V0X3BoeXNpbmRldihza2IsIG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9NTk9c3RhdGljIHZvaWQgbmZfcXVldWVfZW50cnlfcmVsZWFzZV9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtNjktXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy03MS1cXHRkZXZfcHV0KGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYz04ND1zdGF0aWMgdm9pZCBfX25mX3F1ZXVlX2VudHJ5X2luaXRfcGh5c2RldnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODUte1xcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODctXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGVudHJ5LVxcdTAwM2Vza2I7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9MTEyPWJvb2wgbmZfcXVldWVfZW50cnlfZ2V0X3JlZnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy0xMjItXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjEyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTI0LVxcdGRldl9ob2xkKGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQzLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NDIyPXN0YXRpYyBpbnQgbmZ1bG5sX3B1dF9icmlkZ2Uoc3RydWN0IG5mdWxubF9pbnN0YW5jZSAqaW5zdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo0NTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDU1LXN0YXRpYyBpbnQgbmZsb2dfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz00NzQ9X19idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmZubF9sb2dfbmV0ICpsb2csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MDktXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTEwOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MTEtXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVxcdTAwM2Vza2IsIE5GVUxBX0lGSU5ERVhfSU5ERVYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01NDUtXFx0aWYgKG91dGRldikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjU0NjojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ3LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoaW5zdC1cXHUwMDNlc2tiLCBORlVMQV9JRklOREVYX09VVERFVixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTcxOD1uZnVsbmxfbG9nX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTYtXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcXHQvKiBpZmluZGV4ICovXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTc1OC1cXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVxcdC8qIGlmaW5kZXggKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTUxLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz00Njc9c3RhdGljIGJvb2wgbmZfYnJpZGdlX3BvcnRzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy00Njgte1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NDY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDcwLVxcdGlmICghbmZfYnJpZGdlX3BvcnRfdmFsaWQoZW50cnktXFx1MDAzZXBoeXNpbikgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9Njc1PXN0YXRpYyBpbnQgbmZfcXVldWVfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2ODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODQtc3RhdGljIGludCBuZnFubF9wdXRfbWFzdGVyX2lmaW5kZXgoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLCBpbnQgYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM3LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM5LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MzItXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MzM6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODM0LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfSU5ERVYsIGh0b25sKGluZGV2LVxcdTAwM2VpZmluZGV4KSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTg2My1cXHRpZiAob3V0ZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4NjQ6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODY1LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfT1VUREVWLCBodG9ubChvdXRkZXYtXFx1MDAzZWlmaW5kZXgpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA0OD1uZl9xdWV1ZV9lbnRyeV9kdXAoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjMtLyogV2hlbiBjYWxsZWQgZnJvbSBicmlkZ2UgbmV0ZmlsdGVyLCBza2ItXFx1MDAzZWRhdGEgbXVzdCBwb2ludCB0byBNQUMgaGVhZGVyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0OTk9ZGV2X2NtcChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBsb25nIGlmaW5kZXgpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAwLXtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE1MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAyLVxcdGludCBwaHlzaW5pZiwgcGh5c291dGlmO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc9Nz1DT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctOS1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjk6NDcuMTUxMDU1ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNjAxMTI2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJyaWRnZSBGcmFtZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBicmlkZ2UgZnJhbWVzIGFyZSBoYW5kbGVkLiBGaXJzdCwgYENPTkZJR19CUklER0VgIGlzIHRoZSBrZXkg4oCTIHRoYXQncyB3aGF0IGNvbXBpbGVzIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBicl9pbnB1dC5jYCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYSBjb3VwbGUgb2Ygc3ltYm9scy4gYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgIGp1bXBzIG91dCBiZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBjcnVjaWFsbHksIGNhbGxzIGBicl9wYXNzX2ZyYW1lX3VwYCwgd2hpY2ggaW4gdHVybiBsZWFkcyB0byBgTkZfSE9PS2AgZm9yIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAuIFRoYXQncyBhIGRpcmVjdCBjaGFpbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBgYnJfZ2V0X3J4X2hhbmRsZXJgIHdoaWNoIGlzIGFsc28gbm9uLXN0YXRpYywgYW5kIGluIGBicl9pbnB1dC5jYC5cblxuTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgYW5kIGFsc28gaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGluZyB0byByZWNlaXZpbmcgb3IgaGFuZGxpbmcgZnJhbWVzIG9uIHRoZSBicmlkZ2UuIEknbGwgbmVlZCB0byBrbm93IG9mIGFueXRoaW5nIEkgbWF5IGhhdmUgbWlzc2VkIGluIGBicl9pbnB1dC5jYC4gSSBzaG91bGQgYWxzbyBjaGVjayBgYnJfcHJpdmF0ZS5oYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCwgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGBuZXQvYnJpZGdlL2AgZGlyZWN0b3J5IHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTAxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjMwOjE0LjMxMTE3MDYwN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MDE5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfaGFuZGxlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTgwLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjgxOlxcdC8qIE1hcmsgdGhlIHNrYiBmb3IgZm9yd2FyZGluZyBvZmZsb2FkIGVhcmx5IHNvIHRoYXQgYnJfaGFuZGxlX3ZsYW4oKVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTgyLVxcdCAqIGNhbiBrbm93IHdoZXRoZXIgdG8gcG9wIHRoZSBWTEFOIGhlYWRlciBvbiBlZ3Jlc3Mgb3Iga2VlcCBpdC5cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTg2LVxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHRvKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4NzpcXHRza2IgPSBicl9oYW5kbGVfdmxhbih0by1cXHUwMDNlYnIsIHRvLCB2Zywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04OC1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zOT1zdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTY2LVxcdHNrYi1cXHUwMDNlZGV2ID0gYnJkZXY7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjY3OlxcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNjgtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODEtLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjgyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy04My17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjQ4LX1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNTAtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI1MTpzdGF0aWMgdm9pZCBfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNjQtLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI2NTpzdGF0aWMgaW50IGJyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI2Ni17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI2NzpcXHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjY4LVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjkzLVxcdFxcdFxcdCAgIE5GUFJPVE9fQlJJREdFLCBza2ItXFx1MDAzZWRldiwgTlVMTCwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mjk0OlxcdFxcdFxcdCAgIG5ldCwgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5NS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMTgtXFx0bmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMxOTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyMTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjItI2VuZGlmXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ0LSAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNjgtXFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzY5OlxcdFxcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzcwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM5NS1cXHRcXHRcXHQqcHNrYiA9IHNrYjtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mzk2OlxcdFxcdFxcdF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChza2IpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zOTctXFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00MDctXFx0XFx0XFx0KnBza2IgPSBza2I7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQwODpcXHRcXHRcXHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDA5LVxcdFxcdFxcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDI2LVxcdFxcdFxcdCAgICBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldiwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDI3OlxcdFxcdFxcdCAgICBicl9oYW5kbGVfbG9jYWxfZmluaXNoKSA9PSAxKSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQyOC1cXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ2My0gKi9cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDY0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZV9kdW1teShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ2NS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDY5PXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3MS1cXHRpZiAobmV0ZGV2X3VzZXNfZHNhKGRldikpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ3MjpcXHRcXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lX2R1bW15O1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzMtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ3NDpcXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzUtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNTU9dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3My0gKiBkb24ndCwgd2UgdXNlIHRoZSBuZWlnaGJvdXIgZnJhbWV3b3JrIHRvIGZpbmQgb3V0LiBJbiBib3RoIGNhc2VzLCB3ZSBtYWtlXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyNzQ6ICogc3VyZSB0aGF0IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goKSBpcyBjYWxsZWQgYWZ0ZXJ3YXJkcy5cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3NS0gKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTI3Nj1pbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzA2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzA3OlxcdFxcdFxcdHJldCA9IGJyX2hhbmRsZV9mcmFtZV9maW5pc2gobmV0LCBzaywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTMwOC1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zNzY9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQzMC1cXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLCBza2ItXFx1MDAzZWRldiwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQzMTpcXHRcXHRcXHQgIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDMyLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDA1PXN0YXRpYyB2b2lkIGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Vfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDI2LVxcdG5mX2JyaWRnZS1cXHUwMDNlcGh5c291dGRldiA9IE5VTEw7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDI3OlxcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2goZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDI4LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYz0xMDE9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTMtXFx0YnJfbmZfaG9va190aHJlc2goTkZfQlJfUFJFX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM6MTU0OlxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkZXYsIE5VTEwsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Mjk9aW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTkzMS0vKiBicl9pbnB1dC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTMyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzMtcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU4OT1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU5MDpzdHJ1Y3Qgc2tfYnVmZiAqYnJfaGFuZGxlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNzE2PXN0YXRpYyBpbmxpbmUgYm9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3MjEtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTcyMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyMy1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg9NDM9dm9pZCB2bGFuX3R1bm5lbF9pbmZvX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtNDQtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6NDU6dm9pZCBicl9oYW5kbGVfaW5ncmVzc192bGFuX3R1bm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjQ4OmludCBicl9oYW5kbGVfZWdyZXNzX3ZsYW5fdHVubmVsKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTQ5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgdmxhbl90dW5uZWxfaW5mb19kZWwoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtNzYtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjc3OnN0YXRpYyBpbmxpbmUgaW50IGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTc4LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz00NDY9c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ3OS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0ODA6c3RydWN0IHNrX2J1ZmYgKmJyX2hhbmRsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00ODEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy01MzEtXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJfVkxBTl9UVU5ORUwpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NTMyOlxcdCAgICBicl9oYW5kbGVfZWdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgdikpIHtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy01MzMtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmM9MTU3PXZvaWQgdmxhbl90dW5uZWxfZGVpbml0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE2MS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmM6MTYyOnZvaWQgYnJfaGFuZGxlX2luZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmMtMTYzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmMtMTg1LVxcbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYzoxODY6aW50IGJyX2hhbmRsZV9lZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmMtMTg3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMDoxNC4zNTY4NzU0NzZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYwNTA2OTAwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBCcmlkZ2VkIE5ldHdvcmsgRnJhbWUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYCBhbmQgYGJyX2dldF9yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZyYW1lIHByb2Nlc3NpbmcgcGF0aCwgc28gSSdsbCBzdGFydCB3aXRoIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYC4gRnJvbSBteSBleHBlcmllbmNlLCB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IGVsZW1lbnQsIHNpdHRpbmcgaW4gYGJyX2lucHV0LmNgLiBJdCBsb29rcyBsaWtlIGl0IGRpcmVjdGx5IGNhbGxzIGBicl9wYXNzX2ZyYW1lX3VwYCwgYW5kIHRoYXQncyB3aGVyZSBgYnJfbmV0aWZfcmVjZWl2ZV9za2JgIGdldHMgaW52b2x2ZWQuIFRoYXQncyBhIHZpdGFsIGNvbm5lY3Rpb24gZm9yIG1lLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgY29uZmlybSB0aGUgcmVxdWlyZW1lbnRzLiBXZSd2ZSBnb3QgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIChnb29kISksIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGluZGVlZCB0aGUgb25lcyBJIHBpY2tlZDogYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgIGFuZCBgYnJfZ2V0X3J4X2hhbmRsZXJgLiAgV2UncmUgZGVhbGluZyB3aXRoIGEgYnJpZGdlLCBzbyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGUgYEJSSURHRWAsIGFzIGV4cGVjdGVkLiAgVGhhdCdzIGFsbCBhZGRpbmcgdXAuXG5cbkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkgdGhpbmsgd2UgaGF2ZSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIE5vdywgbGV0J3MgbW92ZSBmb3J3YXJkIGFuZCBtYWtlIHRoZSBuZWNlc3NhcnkgY2FsbHMgdG8gYHNldC1yZXN1bHRzYC4gSSB0aGluayB3ZSdyZSByZWFkeSB0byBwcm9jZWVkIGFuZCBkaWcgaW50byB0aGUgZnV6emluZyBwcm9jZXNzIGl0c2VsZiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NjUsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjMwOjUwLjQwNzU2ODYyOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTIyNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9oYW5kbGVfZnJhbWVfZmluaXNoXCIsXG4gICAgXCJicl9nZXRfcnhfaGFuZGxlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJyX2lucHV0LmMgYnkgc2V0dGluZyB0aGUgc2tiIHJlZGlyZWN0ZWQgZmxhZyB2aWEgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoKSB3aGVuIHBhc3NpbmcgYnJpZGdlIGZyYW1lcyB1cCBmb3IgbG9jYWwgZGVsaXZlcnksIHByZXZlbnRpbmcgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgYW5kIHBvdGVudGlhbGx5IGNvcnJ1cHRpbmcgb3IgcmVhbGxvY2F0aW5nIG1lbW9yeS4gVGhpcyBhZmZlY3RzIGNvcmUgYnJpZGdlIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9oYW5kbGVfZnJhbWVfZmluaXNoXCIsXG4gICAgXCJicl9nZXRfcnhfaGFuZGxlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJyX2lucHV0LmMgYnkgc2V0dGluZyB0aGUgc2tiIHJlZGlyZWN0ZWQgZmxhZyB2aWEgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoKSB3aGVuIHBhc3NpbmcgYnJpZGdlIGZyYW1lcyB1cCBmb3IgbG9jYWwgZGVsaXZlcnksIHByZXZlbnRpbmcgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgYW5kIHBvdGVudGlhbGx5IGNvcnJ1cHRpbmcgb3IgcmVhbGxvY2F0aW5nIG1lbW9yeS4gVGhpcyBhZmZlY3RzIGNvcmUgYnJpZGdlIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzA6NTAuNDc1NDk3MTI3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1ODk4MTMyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMDo1MC40NzU4OTQ2NDdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDk1ODk0MTEyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1hcmtzIHRoZSBza2IgYXMgcmVkaXJlY3RlZCAoc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSkpIGluIGJyX25ldGlmX3JlY2VpdmVfc2tiKCkgcHJpb3IgdG8gY2FsbGluZyBuZXRpZl9yZWNlaXZlX3NrYigpLiBUaGlzIHByZXZlbnRzIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGR1cmluZyBsb2NhbCBkZWxpdmVyeSByZS1pbmplY3Rpb24sIHdoaWNoIG90aGVyd2lzZSByaXNrZWQgcmVhbGxvY2F0aW5nIHRoZSBza2IgaGVhZCBidWZmZXIgKHBza2JfZXhwYW5kX2hlYWQpIGFuZCBjYXVzaW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzIGJ1Z3MuXFxuXFxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjY5NGVkZDE2OWU4YjQwYTI0ZjNkYmQ1ODEyOWUxM2U5NWQ3Y2ZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjBkMDhjM2MyMDM2ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTI3LDYgKzI3LDEyIEBAIHN0YXRpYyBpbnRcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4rXG4rXHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxuK1x0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuK1x0ICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS5cbitcdCAqL1xuK1x0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMDo1MC40NzU4OTU0ODdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ5MTU4ODM2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQnJpZGdlIElucHV0IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjaGFuZ2VkIGFuZCB3aHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfaW5wdXQuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBmdW5jdGlvbi5cblxuSSBzZWUgdGhhdCBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7YCBpcyBiZWluZyBhZGRlZCBqdXN0IGJlZm9yZSB0aGUgY2FsbCB0byBgbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKWAuIFNvLCB0aGUgaW50ZW50IGlzIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgXCJyZWRpcmVjdGVkXCIgc3RhdGUgb2YgdGhlIFNLQiwgYW5kLCBjcnVjaWFsbHksIGl0IHByZXZlbnRzIGNsZWFyaW5nIHRoYXQgZmxhZyBsYXRlciBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgYWRkaXRpb24gaXMgcmVsZXZhbnQuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgIGFyb3VuZCBsaW5lIDI3LiBJIGFsc28gbmVlZCBhIHJlZnJlc2hlciBvbiBleGFjdGx5IHdoYXQgYHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyYCBpcyBkb2luZyB1bmRlciB0aGUgaG9vZC4gU3BlY2lmaWNhbGx5LCB3aGF0IGRvZXMgdGhpcyBmdW5jdGlvbiAqZG8qIHdoZW4gc2V0IHRvIGZhbHNlPyBBbmQgd2hhdCBpbXBhY3QgZG9lcyAqcHJldmVudGluZyB0aGUgY2xlYXJpbmcqIG9mIHRoZSBmbGFnIGhhdmUgb24gdGhlIHN1YnNlcXVlbnQgYG5ldGlmX3JlY2VpdmVfc2tiYCBjYWxsPyBUaGlzIGlzIGxpa2VseSBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTgsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMToyNS4zOTE3ODE2NjhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKlxcdEhhbmRsZSBpbmNvbWluZyBmcmFtZXNcXG4gICA0OlxcdCAqXFx0TGludXggZXRoZXJuZXQgYnJpZGdlXFxuICAgNTpcXHQgKlxcbiAgIDY6XFx0ICpcXHRBdXRob3JzOlxcbiAgIDc6XFx0ICpcXHRMZW5uZXJ0IEJ1eXRlbmhla1xcdFxcdFxcdTAwM2NidXl0ZW5oQGdudS5vcmdcXHUwMDNlXFxuICAgODpcXHQgKi9cXG4gICA5OlxcdFxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFxcdTAwM2VcXG4gIDE1OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmhcXHUwMDNlXFxuICAxNzpcXHQjZW5kaWZcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZWlnaGJvdXIuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvYXJwLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJicl9wcml2YXRlLmhcXFwiXFxuICAyNDpcXHQjaW5jbHVkZSBcXFwiYnJfcHJpdmF0ZV90dW5uZWwuaFxcXCJcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RhdGljIGludFxcbiAgMjc6XFx0YnJfbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdC8qIFJlLWluamVjdGVkIGZvciBsb2NhbCBkZWxpdmVyeTogZG8gbm90IGxldCBnZW5lcmljIFhEUCBydW4gb24gdGhlXFxuICAzMjpcXHRcXHQgKiBicmlkZ2UgZGV2aWNlIGEgc2Vjb25kIHRpbWUsIGl0IGNvdWxkIHJlYWxsb2NhdGUgdGhlIGhlYWQgdmlhXFxuICAzMzpcXHRcXHQgKiBwc2tiX2V4cGFuZF9oZWFkKCkgYW5kIGZyZWUgYSBidWZmZXIgc3RpbGwgaW4gdXNlLlxcbiAgMzQ6XFx0XFx0ICovXFxuICAzNTpcXHRcXHRza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtcXG4gIDM2OlxcdFxcdHJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbiAgMzc6XFx0fVxcbiAgMzg6XFx0XFxuICAzOTpcXHRzdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqYnJkZXYgPSBCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYnJkZXY7XFxuICA0MjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihicmRldik7XFxuICA0MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChicmRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcXG4gIDQ4OlxcdFxcbiAgNDk6XFx0XFx0LyogUmVzZXQgdGhlIG9mZmxvYWRfZndkX21hcmsgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHN0YWNrZWRcXG4gIDUwOlxcdFxcdCAqIGJyaWRnZSBhYm92ZSwgYW5kIGl0IHNob3VsZCBub3QgdGhpbmsgdGhpcyBicmlkZ2UgaXQgZG9pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzE6MjUuMzkxODQ4Mzk4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkzNTE5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9zZXRfcmVkaXJlY3RlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYz00MTE9bWx4NWVfdGNfaW50X3BvcnRfZGV2X2Z3ZChzdHJ1Y3QgbWx4NWVfdGNfaW50X3BvcnRfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ0OC1cXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjL2ludF9wb3J0LmM6NDQ5OlxcdFxcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1MC1cXHRcXHQqZm9yd2FyZF90eCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjL2ludF9wb3J0LmMtNDUzLVxcdFxcdHNrYl9wdXNoX3Jjc3VtKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYzo0NTQ6XFx0XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1NS1cXHRcXHQqZm9yd2FyZF90eCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU0MjQ9c3RhdGljIGlubGluZSBib29sIHNrYl9pc19yZWRpcmVjdGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0MjgtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDI5OnN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3JlZGlyZWN0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmcm9tX2luZ3Jlc3MpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQzOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDQ0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0NS1cXHRcXHRcXHRcXHRcXHQgICAgICBib29sIGZyb21faW5ncmVzcylcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9ODAzPWludCBjcHVfbWFwX2dlbmVyaWNfcmVkaXJlY3Qoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy04MDgtXFx0X19za2JfcHVsbChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxua2VybmVsL2JwZi9jcHVtYXAuYzo4MDk6XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgZmFsc2UpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtODEwLVxcdF9fcHRyX3NldF9iaXQoMCwgXFx1MDAyNnNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9Mjc9YnJfbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQtXFx0ICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM1OlxcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNi1cXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDU9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU1LVxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjIxNTY6XFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBza2JfYXRfdGNfaW5ncmVzcyhza2IpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYz0yND1zdGF0aWMgdm9pZCBuZnRfZndkX25ldGRldl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0zMy1cXHRza2ItXFx1MDAzZXNrYl9paWYgPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM6MzQ6XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgbmZ0X2hvb2socGt0KSA9PSBORl9ORVRERVZfSU5HUkVTUyk7XFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTM1LVxcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYz0yNTQ9c3RhdGljIGludCB0Y2ZfbWlycmVkX3RvX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX21pcnJlZCAqbSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI1LVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6MzI2OlxcdFxcdHNrYl9zZXRfcmVkaXJlY3RlZChza2JfdG9fc2VuZCwgc2tiX3RvX3NlbmQtXFx1MDAzZXRjX2F0X2luZ3Jlc3MpO1xcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMToyNi44ODUzNzcyMDNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg4NTQwNzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIgTXlzdGVyeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyYC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZm9yd2FyZGluZyBvciByZWRpcmVjdGlvbiBsb2dpYyB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2ssIGxpa2VseSB3aXRoIHNvbWUgb3B0aW1pemF0aW9uIGNvbmNlcm5pbmcgY2xlYXJpbmcgZGF0YS4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU0MjQuIFRoYXQgc2hvdWxkIGJlIHRoZSBkZWZpbml0aW9uLCBvciBhdCBsZWFzdCB0aGUgdmljaW5pdHkgb2YgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24uIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvbW1lbnRzIGFyZSBpbnNpZ2h0ZnVsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBmbGFncyBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYXMgcmVkaXJlY3RlZCBhbmQsIGNydWNpYWxseSwgKndoeSogdGhlICdub2NsZWFyJyBhc3BlY3QgaXMgaW1wb3J0YW50IOKAkyB3aGF0IGRhdGEgaXMgKm5vdCogYmVpbmcgY2xlYXJlZCBhbmQgaW4gd2hhdCBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBwcm9iYWJseSBnaXZlIG1lIHRoZSBrZXkgaW5zaWdodCBJIG5lZWQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMTozMy43NzA3ODgwMzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTQyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQyMDpcXHRcXHQgKi9cXG41NDIxOlxcdFxcdHJldHVybiBjc3VtX3BhcnRpYWwobDRfaGRyLCBjc3VtX3N0YXJ0IC0gbDRfaGRyLCBwYXJ0aWFsKTtcXG41NDIyOlxcdH1cXG41NDIzOlxcdFxcbjU0MjQ6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl9pc19yZWRpcmVjdGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuNTQyNTpcXHR7XFxuNTQyNjpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VyZWRpcmVjdGVkO1xcbjU0Mjc6XFx0fVxcbjU0Mjg6XFx0XFxuNTQyOTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnJvbV9pbmdyZXNzKVxcbjU0MzA6XFx0e1xcbjU0MzE6XFx0XFx0c2tiLVxcdTAwM2VyZWRpcmVjdGVkID0gMTtcXG41NDMyOlxcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuNTQzMzpcXHRcXHRza2ItXFx1MDAzZWZyb21faW5ncmVzcyA9IGZyb21faW5ncmVzcztcXG41NDM0OlxcdFxcdGlmIChza2ItXFx1MDAzZWZyb21faW5ncmVzcylcXG41NDM1OlxcdFxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG41NDM2OlxcdCNlbmRpZlxcbjU0Mzc6XFx0fVxcbjU0Mzg6XFx0XFxuNTQzOTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXFxuNTQ0MDpcXHR7XFxuNTQ0MTpcXHRcXHRza2ItXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbjU0NDI6XFx0fVxcbjU0NDM6XFx0XFxuNTQ0NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG41NDQ1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZnJvbV9pbmdyZXNzKVxcbjU0NDY6XFx0e1xcbjU0NDc6XFx0XFx0c2tiLVxcdTAwM2VyZWRpcmVjdGVkID0gMTtcXG41NDQ4OlxcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuNTQ0OTpcXHRcXHRza2ItXFx1MDAzZWZyb21faW5ncmVzcyA9IGZyb21faW5ncmVzcztcXG41NDUwOlxcdCNlbmRpZlxcbjU0NTE6XFx0fVxcbjU0NTI6XFx0XFxuNTQ1MzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2NzdW1faXNfc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjU0NTQ6XFx0e1xcbjU0NTU6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1NDVFApXFxuNTQ1NjpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2Vjc3VtX25vdF9pbmV0O1xcbjU0NTc6XFx0I2Vsc2VcXG41NDU4OlxcdFxcdHJldHVybiAwO1xcbjU0NTk6XFx0I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjMxOjMzLjc3MTA3OTI4MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjYxODM1NTkwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBSZWRpcmVjdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2tiX2lzX3JlZGlyZWN0ZWRgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIGBza2ItXHUwMDNlcmVkaXJlY3RlZGAgZmxhZyB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGFuZCAqaG93KiB0aGVzZSBlbGVtZW50cyBhcmUgZW1wbG95ZWQuIEl04oCZcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCBhIHBhY2tldCdzIHJlZGlyZWN0aW9uIHN0YXR1cyBpcyBhc3Nlc3NlZCBhbmQgbWFuaXB1bGF0ZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBwcmFjdGljYWwgdXNhZ2UgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cy4gVGhpcyBtZWFucyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc2VhcmNoaW5nIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoZXNlIHN5bWJvbHMuIElkZW50aWZ5aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgdGhlIGRpZmZlcmVudCBtb2R1bGVzIGludm9sdmVkIGluIGhhbmRsaW5nIHJlZGlyZWN0ZWQgcGFja2V0cy4gSeKAmW0gdGhpbmtpbmcgdGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGV4YW1pbmluZyByb3V0aW5nLCBOQVQsIG9yIHBvc3NpYmx5IGV2ZW4gdHVubmVsIGhhbmRsaW5nIGNvZGUuIE15IGdvYWwgaXMgYSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYWNrZXQgbGlmZWN5Y2xlIHJlbGF0ZWQgdG8gdGhpcyByZWRpcmVjdGlvbiBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzM6MzkuOTU0NjQxMDkzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxMDY2OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9pc19yZWRpcmVjdGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQwOD1zdGF0aWMgaW5saW5lIF9fd3N1bSBsY29fY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDIzLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQyNDpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2lzX3JlZGlyZWN0ZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0MjUte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTYzOD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTY0Ny1cXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1NjQ4OlxcdGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKVxcbm5ldC9jb3JlL2Rldi5jLTU2NDktXFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMzo0MS40NDU3MTUxNjlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg2MTk1NzE1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgbGluZTogYGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKSByZXR1cm4gWERQX1BBU1M7YC4gVGhlIHBhdGNoIGNvbW1lbnQgbWVudGlvbnMgdGhpcyBpcyB0byBwcmV2ZW50IGdlbmVyaWMgWERQIGZyb20gcnVubmluZyB0d2ljZSBvbiB0aGUgYnJpZGdlIGRldmljZSwgcGFydGljdWxhcmx5IGFmdGVyIGEgcmUtaW5qZWN0aW9uIHNjZW5hcmlvLiBBcHBhcmVudGx5LCB0aGlzIGRvdWJsZSBydW4gd2FzIGNhdXNpbmcgYHBza2JfZXhwYW5kX2hlYWQoKWAgdG8gcG90ZW50aWFsbHkgcmVhbGxvY2F0ZSB0aGUgU0tCIGhlYWQgYW5kIGZyZWVpbmcgdGhlIG9sZCBidWZmZXIgd2hpbGUgYSByZWZlcmVuY2Ugc3RpbGwgZXhpc3RlZCwgbGVhZGluZyB0byBhIG5hc3R5IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgYnVmZmVyIGNvcnJ1cHRpb24gc2NlbmFyaW8uXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBuZWVkcyB0byBjYXRjaC4gU28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipJbmZvLWxlYWsgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoZSBwYXRjaCBzaW1wbHkgZmxhZ3MgYSBwYWNrZXQgYW5kIGRvZXNuJ3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuXG4yLiAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBwYXRjaCBzaW1wbHkgc2V0cyBzb21lIFNLQiBmbGFncy4gVGhlIHZhbHVlcyBhcmUgY29uc3RhbnQuXG4zLiAgKipOZXcgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8sIGl04oCZcyBqdXN0IHNldHRpbmcgYW4gZXhpc3RpbmcgZmxhZy5cbjQuICAqKkFsdGVyaW5nIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzLCBwb3RlbnRpYWxseSBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBjb3JlIGlzc3VlIHRoZSBwYXRjaCBpcyBzb2x2aW5nIHNlZW1zIHRvIGJlIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpbyAtLSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSAtLSBjYXVzZWQgYnkgaW5jb3JyZWN0IGJ1ZmZlciBoYW5kbGluZyBkdXJpbmcgU0tCIHJlLWluamVjdGlvbiB3aGVuIGdlbmVyaWMgWERQIHJ1bnMgdHdpY2UuIFRoaXMgKnR5cGUqIG9mIGJ1ZyBpcyB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBLQVNBTi5cblxuU28sIGRpZ2dpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggaW4gYGJyX25ldGlmX3JlY2VpdmVfc2tiKClgIGNhbGxzIGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKWAgd2hpY2ggY2FsbHMgYG5ldGlmX3JlY2VpdmVfc2tiKClgLCB3aGljaCBjb3JyZWN0bHkgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBydW5uaW5nIGEgc2Vjb25kIHRpbWUgb24gdGhlIGJyaWRnZSBhbmQgcHJldmVudGluZyBgcHNrYl9leHBhbmRfaGVhZCgpYCwgdGhlIGNvcmUgaXNzdWUuXG5cblRoaXMgcGF0Y2ggYXZvaWRzIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBLTVNBTiBiZWNhdXNlIGl0J3Mgbm90IGFjdHVhbGx5ICpkZWFsaW5nKiB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBqdXN0IGZpeGVzIGEgbWVtb3J5IGxpZmVjeWNsZSBwcm9ibGVtIGJ5IHByZXZlbnRpbmcgYSBidWcgZnJvbSBoYXBwZW5pbmcgdGhhdCBjb3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIEl0J3Mgc2FmZSB0byBzYXkgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4gVGltZSB0byBtYWtlIHRoYXQgY2FsbC4gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3MCwiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzQ6MjAuMDY1Mjg4NjU5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYXJrcyB0aGUgc2tiIGFzIHJlZGlyZWN0ZWQgKHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpKSBpbiBicl9uZXRpZl9yZWNlaXZlX3NrYigpIHByaW9yIHRvIGNhbGxpbmcgbmV0aWZfcmVjZWl2ZV9za2IoKS4gVGhpcyBwcmV2ZW50cyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBkdXJpbmcgbG9jYWwgZGVsaXZlcnkgcmUtaW5qZWN0aW9uLCB3aGljaCBvdGhlcndpc2Ugcmlza2VkIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgYnVmZmVyIChwc2tiX2V4cGFuZF9oZWFkKSBhbmQgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2VzcyBidWdzLlxcblxcblN1Y2ggYnVmZmVyIHJlYWxsb2NhdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBjb25kaXRpb25hbCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHktdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cXG5cXG5TdWNoIGJ1ZmZlciByZWFsbG9jYXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5LXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 13:22:15 +0000 UTC FinishedAt: 2026-08-31 13:34:22 +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": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE" ], "series_id": "56f61641-1f39-47fd-89ca-af5e03b98a32" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_handle_frame_finish", "br_get_rx_handler" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9oYW5kbGVfZnJhbWVfZmluaXNoJiMzNDssCiAgICAmIzM0O2JyX2dldF9yeF9oYW5kbGVyJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cblxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWI2OTRlZGQxNjllOGI0MGEyNGYzZGJkNTgxMjllMTNlOTVkN2NmZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDEzOjIzOjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuaW5kZXggZDg3YTVmOWZhOTJiNy4uMGQwOGMzYzIwMzZmNyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMjcsNiAmIzQzOzI3LDEyIEBAIHN0YXRpYyBpbnRcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4mIzQzO1xuJiM0MztcdC8qIFJlLWluamVjdGVkIGZvciBsb2NhbCBkZWxpdmVyeTogZG8gbm90IGxldCBnZW5lcmljIFhEUCBydW4gb24gdGhlXG4mIzQzO1x0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuJiM0MztcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDticl9nZXRfcnhfaGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicl9pbnB1dC5jIGJ5IHNldHRpbmcgdGhlIHNrYiByZWRpcmVjdGVkIGZsYWcgdmlhIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKCkgd2hlbiBwYXNzaW5nIGJyaWRnZSBmcmFtZXMgdXAgZm9yIGxvY2FsIGRlbGl2ZXJ5LCBwcmV2ZW50aW5nIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIG9yIHJlYWxsb2NhdGluZyBtZW1vcnkuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjY5NGVkZDE2OWU4YjQwYTI0ZjNkYmQ1ODEyOWUxM2U5NWQ3Y2ZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uMGQwOGMzYzIwMzZmNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMjcsNiAmIzQzOzI3LDEyIEBAIHN0YXRpYyBpbnQKIGJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWJyX2Ryb3BfZmFrZV9ydGFibGUoc2tiKTsKJiM0MzsKJiM0MzsJLyogUmUtaW5qZWN0ZWQgZm9yIGxvY2FsIGRlbGl2ZXJ5OiBkbyBub3QgbGV0IGdlbmVyaWMgWERQIHJ1biBvbiB0aGUKJiM0MzsJICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYQomIzQzOwkgKiBwc2tiX2V4cGFuZF9oZWFkKCkgYW5kIGZyZWUgYSBidWZmZXIgc3RpbGwgaW4gdXNlLgomIzQzOwkgKi8KJiM0MzsJc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7CiAJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBSZXZpZXcgYW5kIEZ1enppbmcgVHJpYWdlOiBMaW51eCBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBmb3IgdGhlIExpbnV4IGtlcm5lbCBhbmQgdGhlIHRhc2sgaXMgdG8gZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBmdXp6aW5nIGFuZCwgaWYgc28sIHRvIGlkZW50aWZ5IHRoZSBrZXkgZWxlbWVudHMgdG8gdGFyZ2V0LiBGaXJzdCwgSSYjMzk7bGwgZG8gYSBxdWljayByaXNrIGFuYWx5c2lzLiBGcm9tIHdoYXQgSSBzZWUgdGhpcyBpcyBhIHByZXR0eSBsb3ctcmlzaywgbGlrZWx5IGJlbmlnbiBwYXRjaC4gSXQgbG9va3MgbGlrZSB0eXBpY2FsIGRldmVsb3BlciBRQS9tYWludGFpbmVyIHJldmlldywgbm90aGluZyBzY3JlYW1pbmcgJiMzNDt2dWxuZXJhYmlsaXR5JiMzNDsgYXQgbWUgcmlnaHQgb2ZmIHRoZSBiYXQuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBkaWZmIGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBtb2RpZnlpbmcgYG5ldC9icmlkZ2UvYnJfaW5wdXQuY2AuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBkaXNhYmxpbmcgZ2VuZXJpYyBYRFAgZnVuY3Rpb25hbGl0eSBpbiBhIHJlLWluamVjdGlvbiBzY2VuYXJpbyB0byBhdm9pZCBwb3RlbnRpYWwgZG91YmxlLWZyZWVzIHdoZW4gYSBidWZmZXIgaGFzIGJlZW4gcmVhbGxvY2F0ZWQuIFNvIGl0JiMzOTtzIGFuIG9wdGltaXphdGlvbiBvciBidWdmaXggcmVsYXRlZCB0byBoYW5kbGluZyByZS1pbmplY3RlZCBwYWNrZXRzIG9uIGEgYnJpZGdlIGRldmljZS4gTm90IGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBidXQgYnJpZGdlIGNvZGUgaGFzIGFsd2F5cyBoYWQgYSB3YXkgb2YgYmVpbmcuLi5pbnRlcmVzdGluZy4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdC4KCkkmIzM5O2xsIHF1aWNrbHkgZ3JhYiBteSB0b29scyBhbmQgZGlnIGludG8gdGhlIGNvZGUgbW9yZSB0aG9yb3VnaGx5LiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCBvZiBjb3Vyc2UsIGFuZCBgbmV0L2JyaWRnZS9LY29uZmlnYCB0byBzZWUgaG93IHRoaXMgYXJlYSBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCBuZWFyYnkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIGZvY3VzIHN5bWJvbHMgYW5kIGVuYWJsZSBjb25maWdzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgY2hhbmdlIG1vZGlmaWVzIGFueSBjcnVjaWFsIGNvbnRyb2wgZmxvdyBvciBpbnRyb2R1Y2VzIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBBbnkgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgYWx3YXlzIHdhcnJhbnQgbW9yZSBhdHRlbnRpb24uIE9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdC8qXG4gICAzOlx0ICpcdEhhbmRsZSBpbmNvbWluZyBmcmFtZXNcbiAgIDQ6XHQgKlx0TGludXggZXRoZXJuZXQgYnJpZGdlXG4gICA1Olx0ICpcbiAgIDY6XHQgKlx0QXV0aG9yczpcbiAgIDc6XHQgKlx0TGVubmVydCBCdXl0ZW5oZWtcdFx0XHUwMDNjYnV5dGVuaEBnbnUub3JnXHUwMDNlXG4gICA4Olx0ICovXG4gICA5Olx0XG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2VcbiAgMTU6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oXHUwMDNlXG4gIDE3Olx0I2VuZGlmXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmVpZ2hib3VyLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYXJwLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiAgMjE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFwmIzM0O2JyX3ByaXZhdGUuaFwmIzM0O1xuICAyNDpcdCNpbmNsdWRlIFwmIzM0O2JyX3ByaXZhdGVfdHVubmVsLmhcJiMzNDtcbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgaW50XG4gIDI3Olx0YnJfbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gIDI4Olx0e1xuICAyOTpcdFx0YnJfZHJvcF9mYWtlX3J0YWJsZShza2IpO1xuICAzMDpcdFxuICAzMTpcdFx0LyogUmUtaW5qZWN0ZWQgZm9yIGxvY2FsIGRlbGl2ZXJ5OiBkbyBub3QgbGV0IGdlbmVyaWMgWERQIHJ1biBvbiB0aGVcbiAgMzI6XHRcdCAqIGJyaWRnZSBkZXZpY2UgYSBzZWNvbmQgdGltZSwgaXQgY291bGQgcmVhbGxvY2F0ZSB0aGUgaGVhZCB2aWFcbiAgMzM6XHRcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXG4gIDM0Olx0XHQgKi9cbiAgMzU6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xuICAzNjpcdFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XG4gIDM3Olx0fVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHByb21pc2MpXG4gIDQwOlx0e1xuICA0MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqYnJkZXYgPSBCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2VicmRldjtcbiAgNDI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGJyZGV2KTtcbiAgNDM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuICA0NDpcdFxuICA0NTpcdFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChicmRldiwgc2tiLVx1MDAzZWxlbik7XG4gIDQ2Olx0XG4gIDQ3Olx0XHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcbiAgNDg6XHRcbiAgNDk6XHRcdC8qIFJlc2V0IHRoZSBvZmZsb2FkX2Z3ZF9tYXJrIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgYSBzdGFja2VkXG4gIDUwOlx0XHQgKiBicmlkZ2UgYWJvdmUsIGFuZCBpdCBzaG91bGQgbm90IHRoaW5rIHRoaXMgYnJpZGdlIGl0IGRvaW5nXG4gIDUxOlx0XHQgKiB0aGF0IGJyaWRnZSYjMzk7cyB3b3JrIGZvcndhcmRpbmcgb3V0IGl0cyBwb3J0cy5cbiAgNTI6XHRcdCAqL1xuICA1MzpcdFx0YnJfc3dpdGNoZGV2X2ZyYW1lX3VubWFyayhza2IpO1xuICA1NDpcdFxuICA1NTpcdFx0LyogQnJpZGdlIGlzIGp1c3QgbGlrZSBhbnkgb3RoZXIgcG9ydC4gIE1ha2Ugc3VyZSB0aGVcbiAgNTY6XHRcdCAqIHBhY2tldCBpcyBhbGxvd2VkIGV4Y2VwdCBpbiBwcm9taXNjIG1vZGUgd2hlbiBzb21lb25lXG4gIDU3Olx0XHQgKiBtYXkgYmUgcnVubmluZyBwYWNrZXQgY2FwdHVyZS5cbiAgNTg6XHRcdCAqL1xuICA1OTpcdFx0aWYgKCEoYnJkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSBcdTAwMjZcdTAwMjZcbiAgNjA6XHRcdCAgICAhYnJfYWxsb3dlZF9lZ3Jlc3ModmcsIHNrYikpIHtcbiAgNjE6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDYyOlx0XHRcdHJldHVybiBORVRfUlhfRFJPUDtcbiAgNjM6XHRcdH1cbiAgNjQ6XHRcbiAgNjU6XHRcdGluZGV2ID0gc2tiLVx1MDAzZWRldjtcbiAgNjY6XHRcdHNrYi1cdTAwM2VkZXYgPSBicmRldjtcbiAgNjc6XHRcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcbiAgNjg6XHRcdGlmICghc2tiKVxuICA2OTpcdFx0XHRyZXR1cm4gTkVUX1JYX0RST1A7XG4gIDcwOlx0XHQvKiB1cGRhdGUgdGhlIG11bHRpY2FzdCBzdGF0cyBpZiB0aGUgcGFja2V0IGlzIElHTVAvTUxEICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBmdW5jdGlvbiBiZXR0ZXIsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGwgZ3JhcGguIFdoZXJlICpleGFjdGx5KiBpcyB0aGlzIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQ/IEkgbmVlZCB0byBpZGVudGlmeSBpdHMgY2FsbGVycyB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgdGhvc2UgY2FsbCBzaXRlcy4gQW5kIG5vdCBqdXN0IHdpdGhpbiBgYnJfaW5wdXQuY2AgZWl0aGVyLiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC4KClRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgaW4gYGJyX2lucHV0LmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGgsIG9yIGlmIG90aGVyIG1vZHVsZXMgb3Igc291cmNlIGZpbGVzIGFyZSBpbnZvbHZlZCBhcyB3ZWxsLCBJJiMzOTtsbCB0cmFjZSB0aGVtLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1hcCBpbiBteSBtaW5kIG9mIHRoaXMgZW50aXJlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIEkmIzM5O20gYWZ0ZXIgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLCB0b3AgdG8gYm90dG9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX25ldGlmX3JlY2VpdmVfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lucHV0LmM9MjY9c3RhdGljIGludFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI3OmJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI4LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9Mzk9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNzctXHRcdCAgICAgICBkZXZfbmV0KGluZGV2KSwgTlVMTCwgc2tiLCBpbmRldiwgTlVMTCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo3ODpcdFx0ICAgICAgIGJyX25ldGlmX3JlY2VpdmVfc2tiKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJyX3Bhc3NfZnJhbWVfdXBgIGZ1bmN0aW9uLiBBcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSBrbm93IGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IHdpdGhpbiB0aGUgYnJpZGdlLCBwYXJ0aWN1bGFybHkgaG93IGZyYW1lcyBhcmUgaGFuZGxlZCBhbmQgcGFzc2VkIHVwIHRoZSBzdGFjay4gU28sIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uLgoKKipUcmFjaW5nIGBicl9wYXNzX2ZyYW1lX3VwYCBpbiBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCoqCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBpZGVudGlmeWluZyB0aGUgY2FsbGVycyBvZiBgYnJfcGFzc19mcmFtZV91cGAgYmVjYXVzZSB0aGF0IHRlbGxzIG1lICp3aGVuKiBhIGZyYW1lIHJlYWNoZXMgdGhpcyBwb2ludCBpbiBwcm9jZXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgbG9naWMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbiDigJMgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGJyX3Bhc3NfZnJhbWVfdXBgLCBhbmQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgY2FsbCwgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgYSBmcmFtZSBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBicmlkZ2luZyBwcm9jZXNzLiBUaGlzIGtpbmQgb2YgY2FsbCBhbmFseXNpcyBvZnRlbiBpbGx1bWluYXRlcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgZnJhbWUgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgYW4gaW1wb3J0YW50IGNhbGwgYW5kIHdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRcdC8qIHVwZGF0ZSB0aGUgbXVsdGljYXN0IHN0YXRzIGlmIHRoZSBwYWNrZXQgaXMgSUdNUC9NTEQgKi9cbiAgNzE6XHRcdGJyX211bHRpY2FzdF9jb3VudChiciwgTlVMTCwgc2tiLCBicl9tdWx0aWNhc3RfaWdtcF90eXBlKHNrYiksXG4gIDcyOlx0XHRcdFx0ICAgQlJfTUNBU1RfRElSX1RYKTtcbiAgNzM6XHRcbiAgNzQ6XHRcdEJSX0lOUFVUX1NLQl9DQihza2IpLVx1MDAzZXByb21pc2MgPSBwcm9taXNjO1xuICA3NTpcdFxuICA3NjpcdFx0cmV0dXJuIE5GX0hPT0soTkZQUk9UT19CUklER0UsIE5GX0JSX0xPQ0FMX0lOLFxuICA3NzpcdFx0XHQgICAgICAgZGV2X25ldChpbmRldiksIE5VTEwsIHNrYiwgaW5kZXYsIE5VTEwsXG4gIDc4Olx0XHRcdCAgICAgICBicl9uZXRpZl9yZWNlaXZlX3NrYik7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuICA4MjpcdGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA4MzpcdHtcbiAgODQ6XHRcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuICA4NTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0X3JjdShza2ItXHUwMDNlZGV2KTtcbiAgODY6XHRcdGVudW0gYnJfcGt0X3R5cGUgcGt0X3R5cGUgPSBCUl9QS1RfVU5JQ0FTVDtcbiAgODc6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0ID0gTlVMTDtcbiAgODg6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4O1xuICA4OTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0O1xuICA5MDpcdFx0Ym9vbCBsb2NhbF9yY3YsIG1jYXN0X2hpdCA9IGZhbHNlO1xuICA5MTpcdFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eDtcbiAgOTI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XG4gIDkzOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XG4gIDk0Olx0XHRib29sIHByb21pc2M7XG4gIDk1Olx0XHR1MTYgdmlkID0gMDtcbiAgOTY6XHRcdHU4IHN0YXRlO1xuICA5NzpcdFxuICA5ODpcdFx0aWYgKCFwKVxuICA5OTpcdFx0XHRnb3RvIGRyb3A7XG4gMTAwOlx0XG4gMTAxOlx0XHRiciA9IHAtXHUwMDNlYnI7XG4gMTAyOlx0XG4gMTAzOlx0XHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpIHtcbiAxMDQ6XHRcdFx0c3RhdGUgPSBCUl9TVEFURV9GT1JXQVJESU5HO1xuIDEwNTpcdFx0fSBlbHNlIHtcbiAxMDY6XHRcdFx0aWYgKHAtXHUwMDNlc3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpIHtcbiAxMDc6XHRcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQlJJREdFX0lOR1JFU1NfU1RQX1NUQVRFO1xuIDEwODpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMDk6XHRcdFx0fVxuIDExMDpcdFxuIDExMTpcdFx0XHRzdGF0ZSA9IHAtXHUwMDNlc3RhdGU7XG4gMTEyOlx0XHR9XG4gMTEzOlx0XG4gMTE0Olx0XHRicm1jdHggPSBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZW11bHRpY2FzdF9jdHg7XG4gMTE1Olx0XHRwbWN0eCA9IFx1MDAyNnAtXHUwMDNlbXVsdGljYXN0X2N0eDtcbiAxMTY6XHRcdGlmICghYnJfYWxsb3dlZF9pbmdyZXNzKHAtXHUwMDNlYnIsIG5icF92bGFuX2dyb3VwX3JjdShwKSwgc2tiLCBcdTAwMjZ2aWQsXG4gMTE3Olx0XHRcdFx0XHRcdTAwMjZzdGF0ZSwgXHUwMDI2dmxhbikpXG4gMTE4Olx0XHRcdGdvdG8gb3V0O1xuIDExOTpcdFxuIDEyMDpcdFx0aWYgKHRlc3RfYml0KEJSX1BPUlRfTE9DS0VEX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpIHtcbiAxMjE6XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGJfc3JjID1cbiAxMjI6XHRcdFx0XHRicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSwgdmlkKTtcbiAxMjM6XHRcbiAxMjQ6XHRcdFx0aWYgKCFmZGJfc3JjKSB7XG4gMTI1Olx0XHRcdFx0LyogRkRCIG1pc3MuIENyZWF0ZSBsb2NrZWQgRkRCIGVudHJ5IGlmIE1BQiBpcyBlbmFibGVkXG4gMTI2Olx0XHRcdFx0ICogYW5kIGRyb3AgdGhlIHBhY2tldC5cbiAxMjc6XHRcdFx0XHQgKi9cbiAxMjg6XHRcdFx0XHRpZiAodGVzdF9iaXQoQlJfUE9SVF9NQUJfQklULCBcdTAwMjZwLVx1MDAzZWZsYWdzKSlcbiAxMjk6XHRcdFx0XHRcdGJyX2ZkYl91cGRhdGUoYnIsIHAsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbiAxMzA6XHRcdFx0XHRcdFx0ICAgICAgdmlkLCBCSVQoQlJfRkRCX0xPQ0tFRCkpO1xuIDEzMTpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMzI6XHRcdFx0fSBlbHNlIGlmIChSRUFEX09OQ0UoZmRiX3NyYy1cdTAwM2Vkc3QpICE9IHAgfHxcbiAxMzM6XHRcdFx0XHQgICB0ZXN0X2JpdChCUl9GREJfTE9DQUwsIFx1MDAyNmZkYl9zcmMtXHUwMDNlZmxhZ3MpKSB7XG4gMTM0Olx0XHRcdFx0LyogRkRCIG1pc21hdGNoLiBEcm9wIHRoZSBwYWNrZXQgd2l0aG91dCByb2FtaW5nLiAqL1xuIDEzNTpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxMzY6XHRcdFx0fSBlbHNlIGlmICh0ZXN0X2JpdChCUl9GREJfTE9DS0VELCBcdTAwMjZmZGJfc3JjLVx1MDAzZWZsYWdzKSkge1xuIDEzNzpcdFx0XHRcdC8qIEZEQiBtYXRjaCwgYnV0IGVudHJ5IGlzIGxvY2tlZC4gUmVmcmVzaCBpdCBhbmQgZHJvcFxuIDEzODpcdFx0XHRcdCAqIHRoZSBwYWNrZXQuXG4gMTM5Olx0XHRcdFx0ICovXG4gMTQwOlx0XHRcdFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLCB2aWQsXG4gMTQxOlx0XHRcdFx0XHQgICAgICBCSVQoQlJfRkRCX0xPQ0tFRCkpO1xuIDE0MjpcdFx0XHRcdGdvdG8gZHJvcDtcbiAxNDM6XHRcdFx0fVxuIDE0NDpcdFx0fVxuIDE0NTpcdFxuIDE0NjpcdFx0bmJwX3N3aXRjaGRldl9mcmFtZV9tYXJrKHAsIHNrYik7XG4gMTQ3Olx0XG4gMTQ4Olx0XHQvKiBpbnNlcnQgaW50byBmb3J3YXJkaW5nIGRhdGFiYXNlIGFmdGVyIGZpbHRlcmluZyB0byBhdm9pZCBzcG9vZmluZyAqL1xuIDE0OTpcdFx0aWYgKHRlc3RfYml0KEJSX0xFQVJOSU5HX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpXG4gMTUwOlx0XHRcdGJyX2ZkYl91cGRhdGUoYnIsIHAsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSwgdmlkLCAwKTtcbiAxNTE6XHRcbiAxNTI6XHRcdHByb21pc2MgPSAhIShici1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKTtcbiAxNTM6XHRcdGxvY2FsX3JjdiA9IHByb21pc2M7XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkpIHtcbiAxNTY6XHRcdFx0LyogYnkgZGVmaW5pdGlvbiB0aGUgYnJvYWRjYXN0IGlzIGFsc28gYSBtdWx0aWNhc3QgYWRkcmVzcyAqL1xuIDE1NzpcdFx0XHRpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfZGVzdCkpIHtcbiAxNTg6XHRcdFx0XHRwa3RfdHlwZSA9IEJSX1BLVF9CUk9BRENBU1Q7XG4gMTU5Olx0XHRcdFx0bG9jYWxfcmN2ID0gdHJ1ZTtcbiAxNjA6XHRcdFx0fSBlbHNlIHtcbiAxNjE6XHRcdFx0XHRwa3RfdHlwZSA9IEJSX1BLVF9NVUxUSUNBU1Q7XG4gMTYyOlx0XHRcdFx0aWYgKGJyX211bHRpY2FzdF9yY3YoXHUwMDI2YnJtY3R4LCBcdTAwMjZwbWN0eCwgdmxhbiwgc2tiLCB2aWQpKVxuIDE2MzpcdFx0XHRcdFx0Z290byBkcm9wO1xuIDE2NDpcdFx0XHR9XG4gMTY1Olx0XHR9XG4gMTY2Olx0XG4gMTY3Olx0XHRpZiAoc3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpIHtcbiAxNjg6XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0JSSURHRV9JTkdSRVNTX1NUUF9TVEFURTtcbiAxNjk6XHRcdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhciBhbmQgR2VuZXJpYyBYRFAvUmVkaXJlY3RlZCBTS0IgRmxhZ3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAgZnVuY3Rpb25zLCBhbmQgbW9yZSBicm9hZGx5LCB0aGUgYmVoYXZpb3Igb2YgdGhvc2UgZ2VuZXJpYyBYRFAgYW5kIHJlZGlyZWN0ZWQgU0tCIGZsYWdzLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhlIG51YW5jZXMuIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIFhEUCBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgcGFja2V0IHJlZGlyZWN0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGltcGxpY2F0aW9ucyBvZiAqbm90KiBjbGVhcmluZyBzb21lIG9mIHRoZSBmbGFncz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgYW5kIG9wdGltaXphdGlvbnMgaW52b2x2ZWQ/IEl0IGlzIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3VidGxldGllcyBvZiB0aGUgZmxhZyBtYW5hZ2VtZW50IGZvciBvcHRpbWFsIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb3JyZWN0IGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gdG8gc29saWRpZnkgbXkga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU0Mzk9c3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0My1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQ0NDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0NS1cdFx0XHRcdFx0ICAgICAgYm9vbCBmcm9tX2luZ3Jlc3MpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3PWJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNC1cdCAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM1Olx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzYtXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxNTUtXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZmlsdGVyLmM6MjE1NjpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBmdW5jdGlvbiBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXJgIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gV2hhdCBleGFjdGx5IGlzIGl0IGRvaW5nPyBJIGtub3cgaG93IGNyaXRpY2FsIFNLQnMgYXJlIGZvciB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgdGhlIHJlZGlyZWN0aW9uIGZsYWdzIGlzIGtleSB0byBncmFzcGluZyBob3cgdHJhZmZpYyBpcyByZXJvdXRlZCwgcG9zc2libHkgYnkgZmVhdHVyZXMgbGlrZSBOQVQgb3IgcG9saWN5IHJvdXRpbmcsIHdpdGhvdXQgbmVjZXNzYXJpbHkgY2xlYXJpbmcgZXhpc3RpbmcgZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0JiMzOTtzIHNldHRpbmcgdGhlIGZsYWcsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGF0IGhhcyBmb3IgbGF0ZXIgcHJvY2Vzc2luZyBzdGFnZXMuIERvZXMgdGhpcyBmdW5jdGlvbiwgYXMgdGhlICYjMzQ7bm9jbGVhciYjMzQ7IHN1Z2dlc3RzLCBsZWF2ZSBwcmV2aW91cyByb3V0aW5nIGRlY2lzaW9ucyBpbnRhY3Q/IFdoYXQgaXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgbm90IGNsZWFyaW5nIHByZXZpb3VzIGZsYWdzPyBBcmUgdGhlcmUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgaXMgZXNzZW50aWFsLCB0byBtYWludGFpbiwgZm9yIGV4YW1wbGUsIGEgZmxvdyYjMzk7cyBzdGF0ZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXNhZ2UsIGVzcGVjaWFsbHkgdW5kZXIgaGlnaCBsb2FkLiBJIG5lZWQgdG8gc2VlIGhvdyBpdHMgYmVoYXZpb3IgYWZmZWN0cyB0aGUgdmFyaW91cyBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy4gTGV0JiMzOTtzIGdldCByZWFkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0MzA6XHR7XG41NDMxOlx0XHRza2ItXHUwMDNlcmVkaXJlY3RlZCA9IDE7XG41NDMyOlx0I2lmZGVmIENPTkZJR19ORVRfUkVESVJFQ1RcbjU0MzM6XHRcdHNrYi1cdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XG41NDM0Olx0XHRpZiAoc2tiLVx1MDAzZWZyb21faW5ncmVzcylcbjU0MzU6XHRcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuNTQzNjpcdCNlbmRpZlxuNTQzNzpcdH1cbjU0Mzg6XHRcbjU0Mzk6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG41NDQwOlx0e1xuNTQ0MTpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xuNTQ0MjpcdH1cbjU0NDM6XHRcbjU0NDQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjU0NDU6XHRcdFx0XHRcdFx0ICAgICAgYm9vbCBmcm9tX2luZ3Jlc3MpXG41NDQ2Olx0e1xuNTQ0NzpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAxO1xuNTQ0ODpcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG41NDQ5Olx0XHRza2ItXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xuNTQ1MDpcdCNlbmRpZlxuNTQ1MTpcdH1cbjU0NTI6XHRcbjU0NTM6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2NzdW1faXNfc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQ1NDpcdHtcbjU0NTU6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBfU0NUUClcbjU0NTY6XHRcdHJldHVybiBza2ItXHUwMDNlY3N1bV9ub3RfaW5ldDtcbjU0NTc6XHQjZWxzZVxuNTQ1ODpcdFx0cmV0dXJuIDA7XG41NDU5Olx0I2VuZGlmXG41NDYwOlx0fVxuNTQ2MTpcdFxuNTQ2MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfY3N1bV9ub3RfaW5ldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQ2MzpcdHtcbjU0NjQ6XHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuNTQ2NTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9TQ1RQKVxuNTQ2NjpcdFx0c2tiLVx1MDAzZWNzdW1fbm90X2luZXQgPSAwO1xuNTQ2NzpcdCNlbmRpZlxuNTQ2ODpcdH1cbjU0Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBTS0IgUmVkaXJlY3Rpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYHNrYi0mZ3Q7cmVkaXJlY3RlZGAgZmxhZyBnZXRzIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgbW9zdCBwZXJmb3JtYW5jZS1jcml0aWNhbCBhcmVhcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0aWZfcmVjZWl2ZV9za2JgIGFuZCB0aGUgdmFyaW91cyBwYXRocyBpbiBnZW5lcmljIFhEUC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaW1wYWN0IG9mIHJlZGlyZWN0aW9uIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmbGFnIGltcGFjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZvcndhcmRpbmcgbG9naWMgaW4gdGhlc2Uga2V5IG5ldHdvcmsgaW50ZXJmYWNlIHJvdXRpbmVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25kaXRpb25hbCBqdW1wcywgZWFybHkgZXhpdHMsIG9yIGVudGlyZWx5IGRpZmZlcmVudCBwcm9jZXNzaW5nIHBhdGhzIGJhc2VkIG9uIHRoaXMgZmxhZz8gV2hhdCYjMzk7cyB0aGUgY29zdCBvZiBjaGVja2luZyB0aGlzIGZsYWcgaW4gYSB0aWdodCBsb29wIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgZ3JlcHBpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGFuZCBmb2xsb3cgdGhlIGNvbnRyb2wgZmxvdyBmcm9tIHRob3NlIHBvaW50cy4gVW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmxhZyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gbWFwIHRoZSB1c2FnZSBvZiB0aGlzIGZpZWxkIGluIHJlbGF0aW9uIHRvIGRpZmZlcmVudCBOSUMgZHJpdmVycyBhbmQgbmV0d29ya2luZyBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWRpcmVjdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lmLmM9MTgwPWludCBuYnBfYmFja3VwX2NoYW5nZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDQtXHRpZiAob2xkX2JhY2t1cClcbm5ldC9icmlkZ2UvYnJfaWYuYzoyMDU6XHRcdG9sZF9iYWNrdXAtXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250LS07XG5uZXQvYnJpZGdlL2JyX2lmLmMtMjA2LVxubmV0L2JyaWRnZS9icl9pZi5jLTIwNy1cdGlmIChiYWNrdXBfcClcbm5ldC9icmlkZ2UvYnJfaWYuYzoyMDg6XHRcdGJhY2t1cF9wLVx1MDAzZWJhY2t1cF9yZWRpcmVjdGVkX2NudCYjNDM7JiM0Mzs7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMjA5LVx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXHUwMDNlYmFja3VwX3BvcnQsIGJhY2t1cF9wKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MjE0PXN0YXRpYyB2b2lkIG5icF9iYWNrdXBfY2xlYXIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjE2LVx0bmJwX2JhY2t1cF9jaGFuZ2UocCwgTlVMTCk7XG5uZXQvYnJpZGdlL2JyX2lmLmM6MjE3Olx0aWYgKHAtXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KSB7XG5uZXQvYnJpZGdlL2JyX2lmLmMtMjE4LVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpjdXJfcDtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjI4LVxubmV0L2JyaWRnZS9icl9pZi5jOjIyOTpcdFdBUk5fT04ocmN1X2FjY2Vzc19wb2ludGVyKHAtXHUwMDNlYmFja3VwX3BvcnQpIHx8IHAtXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KTtcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMzAtfVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNz1icl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQtXHQgKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM2LVx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzE9YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzU5LSAqIGNoYW5nZSB0aGUgZGVzdGluYXRpb24gTUFDIGFkZHJlc3Mgc28gdGhhdCB0aGUgcGFja2V0IHdpbGxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzYwOiAqIGxhdGVyIGJlIHBhc3NlZCB1cCB0byB0aGUgSVAgc3RhY2sgdG8gYmUgcm91dGVkLiBGb3IgYSByZWRpcmVjdGVkXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM2MS0gKiBwYWNrZXQsIGlwX3JvdXRlX2lucHV0KCkgd2lsbCBnaXZlIGJhY2sgdGhlIGxvY2FsaG9zdCBhcyBvdXRwdXQgZGV2aWNlLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM5Mj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NTAtXHR1MTZcdFx0XHRcdGdyb3VwX2Z3ZF9tYXNrO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDUxOlx0dTE2XHRcdFx0XHRiYWNrdXBfcmVkaXJlY3RlZF9jbnQ7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00NTItXG4tLVxubmV0L2NvcmUvZGV2LmM9NTYzOD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2NDctXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjU2NDg6XHRpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSlcbm5ldC9jb3JlL2Rldi5jLTU2NDktXHRcdHJldHVybiBYRFBfUEFTUztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxNTUtXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZmlsdGVyLmM6MjE1NjpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuLS1cbm5ldC9kc2EvdGFnX25ldGMuYy0yMS0jZGVmaW5lIE5FVENfVEFHX1RPX0hPU1RcdFx0MlxubmV0L2RzYS90YWdfbmV0Yy5jOjIyOi8qIFN1YlR5cGUwOiBmcmFtZXMgcmVkaXJlY3RlZCBvciBjb3BpZWQgdG8gQ1BVIHBvcnQgKi9cbm5ldC9kc2EvdGFnX25ldGMuYy0yMy0jZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUwXHRcdDBcbm5ldC9kc2EvdGFnX25ldGMuYzoyNDovKiBTdWJUeXBlMTogZnJhbWVzIHJlZGlyZWN0ZWQgb3IgY29waWVkIHRvIENQVSBwb3J0IHdpdGggdGltZXN0YW1wICovXG5uZXQvZHNhL3RhZ19uZXRjLmMtMjUtI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMVx0XHQxXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xMzc2PXZvaWQgaXB2NF9wa3RpbmZvX3ByZXBhcmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGRyb3BfZHN0KVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTM4OS1cdFx0ICogKGUuZy4sIHByb2Nlc3MgYmluZHMgc29ja2V0IHRvIGV0aDAgZm9yIFR4IHdoaWNoIGlzXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEzOTA6XHRcdCAqIHJlZGlyZWN0ZWQgdG8gbG9vcGJhY2sgaW4gdGhlIHJ0YWJsZS9kc3QpLlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMzkxLVx0XHQgKi9cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTg3NT1zdGF0aWMgdm9pZCBpcHY0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvcm91dGUuYy04OTItICpcdCAgIGR1cmluZyBpcF9ydF9yZWRpcmVjdF9zaWxlbmNlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgaG9zdFxubmV0L2lwdjQvcm91dGUuYzo4OTM6ICpcdCAgIGZvcmdvdCByZWRpcmVjdGVkIHJvdXRlIGFuZCBzdGFydCB0byBzZW5kIHJlZGlyZWN0cyBhZ2Fpbi5cbm5ldC9pcHY0L3JvdXRlLmMtODk0LSAqXG4tLVxubmV0L2lwdjQvcm91dGUuYz05MDI9dm9pZCBpcF9ydF9zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvcm91dGUuYy05MjgtXG5uZXQvaXB2NC9yb3V0ZS5jOjkyOTpcdC8qIE5vIHJlZGlyZWN0ZWQgcGFja2V0cyBkdXJpbmcgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZTtcbm5ldC9pcHY0L3JvdXRlLmMtOTMwLVx0ICogcmVzZXQgdGhlIGFsZ29yaXRobS5cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTkzNy1cdC8qIFRvbyBtYW55IGlnbm9yZWQgcmVkaXJlY3RzOyBkbyBub3Qgc2VuZCBhbnl0aGluZ1xubmV0L2lwdjQvcm91dGUuYzo5Mzg6XHQgKiBzZXQgZHN0LnJhdGVfbGFzdCB0byB0aGUgbGFzdCBzZWVuIHJlZGlyZWN0ZWQgcGFja2V0LlxubmV0L2lwdjQvcm91dGUuYy05MzktXHQgKi9cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTIwODI9c3RhdGljIHZvaWQgcnQ2X2V4Y2VwdGlvbnNfdXBkYXRlX3BtdHUoc3RydWN0IGluZXQ2X2RldiAqaWRldixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIwOTYtXG5uZXQvaXB2Ni9yb3V0ZS5jOjIwOTc6XHRcdFx0LyogRm9yIFJURl9DQUNIRSB3aXRoIHJ0NmlfcG10dSA9PSAwIChpLmUuIGEgcmVkaXJlY3RlZFxubmV0L2lwdjYvcm91dGUuYy0yMDk4LVx0XHRcdCAqIHJvdXRlKSwgdGhlIG1ldHJpY3Mgb2YgaXRzIHJ0LVx1MDAzZWZyb20gaGF2ZSBhbHJlYWR5XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTI0PXN0YXRpYyB2b2lkIG5mdF9md2RfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0zMy1cdHNrYi1cdTAwM2Vza2JfaWlmID0gc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jOjM0Olx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgbmZ0X2hvb2socGt0KSA9PSBORl9ORVRERVZfSU5HUkVTUyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtMzUtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmM9MjE9c3RhdGljIHZvaWQgbmZ0X3Rwcm94eV9ldmFsX3Y0KGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYy02OC1cdFx0Lyogbm8sIHRoZXJlJiMzOTtzIG5vIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24sIGNoZWNrIGlmXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzo2OTpcdFx0ICogdGhlcmUmIzM5O3MgYSBsaXN0ZW5lciBvbiB0aGUgcmVkaXJlY3RlZCBhZGRyL3BvcnRcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTcwLVx0XHQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYz04ND1zdGF0aWMgdm9pZCBuZnRfdHByb3h5X2V2YWxfdjYoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE0MC1cdFx0Lyogbm8gdGhlcmUmIzM5O3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jOjE0MTpcdFx0ICogdGhlcmUmIzM5O3MgYSBsaXN0ZW5lciBvbiB0aGUgcmVkaXJlY3RlZCBhZGRyL3BvcnRcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE0Mi1cdFx0ICovXG4tLVxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYz0zNj10cHJveHlfdGc0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGxhZGRyLCBfX2JlMTYgbHBvcnQsXG4tLVxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy02NS1cdFx0Lyogbm8sIHRoZXJlJiMzOTtzIG5vIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24sIGNoZWNrIGlmXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jOjY2Olx0XHQgKiB0aGVyZSYjMzk7cyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydCAqL1xubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy02Ny1cdFx0c2sgPSBuZl90cHJveHlfZ2V0X3NvY2tfdjQobmV0LCBza2IsIGlwaC1cdTAwM2Vwcm90b2NvbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jPTExMT10cHJveHlfdGc2X3YxKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jLTE1NC1cdFx0Lyogbm8gdGhlcmUmIzM5O3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmM6MTU1Olx0XHQgKiB0aGVyZSYjMzk7cyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydCAqL1xubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy0xNTYtXHRcdHNrID0gbmZfdHByb3h5X2dldF9zb2NrX3Y2KHh0X25ldChwYXIpLCBza2IsIHRob2ZmLFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnPTc0Mj1jb25maWcgTkVUX0FDVF9NSVJSRURcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03NDUtXHRoZWxwXG5uZXQvc2NoZWQvS2NvbmZpZzo3NDY6XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0cyB0byBiZSBtaXJyb3JlZCBvciByZWRpcmVjdGVkIHRvXG5uZXQvc2NoZWQvS2NvbmZpZy03NDctXHQgIG90aGVyIGRldmljZXMuXG4tLVxubmV0L3NjaGVkL2FjdF9pZmUuYz03ODc9c3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtODY4LSAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHlcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODY5OiAqIGlzIGFuIEV0aGVybmV0IGhlYWRlciBiZWNhdXNlIHRoZSBza2IgY291bGQmIzM5O3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxubmV0L3NjaGVkL2FjdF9pZmUuYy04NzAtICogZnJvbSBhIG5vbi1FdGhlcm5ldCBkZXZpY2UuXG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYz0yNTQ9c3RhdGljIGludCB0Y2ZfbWlycmVkX3RvX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX21pcnJlZCAqbSxcbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTI5OS1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6MzAwOlx0LyogQWxsIG1pcnJlZC9yZWRpcmVjdGVkIHNrYnMgc2hvdWxkIGNsZWFyIHByZXZpb3VzIGN0IGluZm8gKi9cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzAxLVx0bmZfcmVzZXRfY3Qoc2tiX3RvX3NlbmQpO1xuLS1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI1LVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYzozMjY6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZChza2JfdG9fc2VuZCwgc2tiX3RvX3NlbmQtXHUwMDNldGNfYXRfaW5ncmVzcyk7XG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTMyNy1cbi0tXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTM0ND1zdGF0aWMgaW50IHRjZl9ibG9ja2Nhc3RfcmVkaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9taXJyZWQgKm0sXG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zNzQtXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjM3NTpcdC8qIElmIHRoZSBwYWNrZXQgd2FzbiYjMzk7dCByZWRpcmVjdGVkLCB3ZSBoYXZlIHRvIHJlZ2lzdGVyIGFzIGEgZHJvcCAqL1xubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zNzYtXHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jPTEwMDE9cnBjcmRtYV9pbmxpbmVfZml4dXAoc3RydWN0IHJwY19ycXN0ICpycXN0LCBjaGFyICpzcmNwLCBpbnQgY29weV9sZW4sIGludCBwYWQpXG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwMDgtXG5uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmM6MTAwOTpcdC8qIFRoZSBoZWFkIGlvdmVjIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIFJQQyByZXBseSBtZXNzYWdlXG5uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMtMTAxMC1cdCAqIGluIHRoZSByZWNlaXZlIGJ1ZmZlciwgdG8gYXZvaWQgYSBtZW1jb3B5LlxuLS1cbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYy0xMDYyLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jOjEwNjM6XHQvKiBUaGUgdGFpbCBpb3ZlYyBpcyByZWRpcmVjdGVkIHRvIHRoZSByZW1haW5pbmcgZGF0YVxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwNjQtXHQgKiBpbiB0aGUgcmVjZWl2ZSBidWZmZXIsIHRvIGF2b2lkIGEgbWVtY29weS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWERQIGFuZCBCcmlkZ2UgSW50ZXJhY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IFhEUCBpbnRlcmFjdHMgd2l0aCBicmlkZ2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLiBJIHNlZSB0aGUgY3J1Y2lhbCBjaGVjazogYGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKSByZXR1cm4gWERQX1BBU1M7YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0aGF0IHRoZSBYRFAgbG9naWMgc3BlY2lmaWNhbGx5IGF2b2lkcyBydW5uaW5nICphZ2Fpbiogb24gYSBwYWNrZXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHJlZGlyZWN0ZWQuIEl0JiMzOTtzIGEga2V5IG9wdGltaXphdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGJyX3Bhc3NfZnJhbWVfdXBgLiBUaGlzIGlzIHdoZXJlIGZyYW1lcyBjb21pbmcgKnVwKiBmcm9tIGEgYnJpZGdlIHBvcnQgdG8gdGhlIGhvc3QmIzM5O3MgbmV0d29yayBzdGFjayBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBgTkZfSE9PSyguLi4sIGJyX25ldGlmX3JlY2VpdmVfc2tiKWAuIEFoYSEgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBpcyB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBzcGVjaWZpY2FsbHkgZHJvcHMgdGhlIGZha2Ugcm91dGUgdGFibGUsIG1hcmtzIHRoZSBTS0IgYXMgcmVkaXJlY3RlZCB1c2luZyBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSlgLCBhbmQgKnRoZW4qIGNhbGxzIGBuZXRpZl9yZWNlaXZlX3NrYihza2IpYC4gVGhpcyBpcyB0aGUgY3J1eC4KClRoZSBvdmVyYWxsIGdvYWwgaXMgY2xlYXI6IHByZXZlbnQgZ2VuZXJpYyBYRFAgZnJvbSBydW5uaW5nIG9uIHRoZSBicmlkZ2UgKmFnYWluKiwgcGFydGljdWxhcmx5IHdoZW4gaXQmIzM5O3MgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCAob3IsIGV2ZW4gbW9yZSBjcnVjaWFsLCBwcmV2ZW50aW5nIGEgcmUtYWxsb2NhdGlvbiBvZiBwYWNrZXQgZGF0YSB2aWEgYHBza2JfZXhwYW5kX2hlYWQoKWAgd2hlbiBidWZmZXJzIGFyZSBpbiB1c2UgZnJvbSBhIHByZXZpb3VzIFhEUCBydW4pLiBUaGlzIGF2b2lkcyByZWR1bmRhbnQgcHJvY2Vzc2luZyBhbmQgcHJldmVudHMgcG90ZW50aWFsIGJ1ZmZlciBjb3JydXB0aW9uLiBUaGlzIGFsbCBtYWtlcyBzZW5zZSwgdG8gcHJldmVudCBkb3VibGUtcHJvY2Vzc2luZyBvbiBhbHJlYWR5IHJlZGlyZWN0ZWQgcGFja2V0cy4KCk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbi4gV2hlcmUgaXMgdGhlIGJyaWRnZSBjb2RlIGNvbXBpbGVkPyBXaGF0JiMzOTtzIHRoZSByZWxldmFudCBjb25maWcgc3ltYm9sPyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgYG5ldC9icmlkZ2VgIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSSURHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWctNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xubmV0L2JyaWRnZS9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnOjM4Olx0ZGVwZW5kcyBvbiBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy0zOS1cdGRlcGVuZHMgb24gSU5FVFxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy00OS1cbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXHRib29sIFwmIzM0O1ZMQU4gZmlsdGVyaW5nXCYjMzQ7XG5uZXQvYnJpZGdlL0tjb25maWc6NTI6XHRkZXBlbmRzIG9uIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnLTUzLVx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXG5uZXQvYnJpZGdlL0tjb25maWctNjUtXHRib29sIFwmIzM0O01SUCBwcm90b2NvbFwmIzM0O1xubmV0L2JyaWRnZS9LY29uZmlnOjY2Olx0ZGVwZW5kcyBvbiBCUklER0Vcbm5ldC9icmlkZ2UvS2NvbmZpZy02Ny1cdGRlZmF1bHQgblxuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cbm5ldC9icmlkZ2UvS2NvbmZpZzo3Njpjb25maWcgQlJJREdFX0NGTVxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtDRk0gcHJvdG9jb2xcJiMzNDtcbm5ldC9icmlkZ2UvS2NvbmZpZzo3ODpcdGRlcGVuZHMgb24gQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNzktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzUzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYnJfaW5wdXQuYyoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYGJyX2lucHV0LmNgLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gcHJlY2lzZWx5IHdoaWNoIG9iamVjdCB0aGlzIGZpbGUgaXMgY29tcGlsZWQgaW50byB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBzdWJzeXN0ZW0uIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyBpdOKAmXMgbGlrZWx5IHBhcnQgb2YgdGhlIGNvcmUgYnJpZGdlIG1vZHVsZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4gb2YgdGhlIGRlcGVuZGVuY3kgYW5kIG92ZXJhbGwgYnVpbGQgY29uZmlndXJhdGlvbi4gSnVtcGluZyBpbnRvIGBuZXQvYnJpZGdlL01ha2VmaWxlYCBzZWVtcyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gZmluZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEEgcXVpY2sgc2NhbiBvZiB0aGF0IE1ha2VmaWxlIHNob3VsZCByZXZlYWwgd2hldGhlciBgYnJfaW5wdXQuY2AgaXMgbGlua2VkIGRpcmVjdGx5IGludG8gYSBzcGVjaWZpYyBtb2R1bGUsIG9yIHBlcmhhcHMgaW5kaXJlY3RseSB2aWEgYSBsaWJyYXJ5IG9yIG9iamVjdCBhZ2dyZWdhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgc3RyZWFtbGluZSBmdXJ0aGVyIGFuYWx5c2lzIGlmIEkgbmVlZCB0byBleGFtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgYnJpZGdlIGNvbXBvbmVudHMsIG9yIGlmIEkgbmVlZCB0byBtb2RpZnkgdGhlIGJ1aWxkIHByb2Nlc3MuIEEgbGl0dGxlIGludmVzdGlnYXRpb24gdXAtZnJvbnQsIHNhdmVzIGEgbG90IG9mIHdhc3RlZCB0aW1lIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQlJJREdFKSAmIzQzOz0gYnJpZGdlLm9cbiAgIDc6XHRcbiAgIDg6XHRicmlkZ2UteVx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXG4gICA5Olx0XHRcdFx0YnJfaW9jdGwubyBicl9zdHAubyBicl9zdHBfYnBkdS5vIFxcXG4gIDEwOlx0XHRcdFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXG4gIDExOlx0XHRcdFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xuICAxMjpcdFxuICAxMzpcdGJyaWRnZS0kKENPTkZJR19TWVNGUykgJiM0Mzs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xuICAxNDpcdFxuICAxNTpcdGJyaWRnZS0kKHN1YnN0IG0seSwkKENPTkZJR19CUklER0VfTkVURklMVEVSKSkgJiM0Mzs9IGJyX25mX2NvcmUub1xuICAxNjpcdFxuICAxNzpcdGJyX25ldGZpbHRlci15IDo9IGJyX25ldGZpbHRlcl9ob29rcy5vXG4gIDE4Olx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xuICAxOTpcdG9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbiAgMjA6XHRcbiAgMjE6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbiAgMjI6XHRcbiAgMjM6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbiAgMjQ6XHRcbiAgMjU6XHRicmlkZ2UtJChDT05GSUdfTkVUX1NXSVRDSERFVikgJiM0Mzs9IGJyX3N3aXRjaGRldi5vXG4gIDI2Olx0XG4gIDI3Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUikgJiM0Mzs9IG5ldGZpbHRlci9cbiAgMjg6XHRcbiAgMjk6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX01SUClcdCYjNDM7PSBicl9tcnBfc3dpdGNoZGV2Lm8gYnJfbXJwLm8gYnJfbXJwX25ldGxpbmsub1xuICAzMDpcdFxuICAzMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVx0JiM0Mzs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cbiAgMzI6XHRcbiAgMzM6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxuICAzNDpcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxuICAzNTpcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaG9va3MubyA6PSB5XG4gIDM2Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxuICAzNzpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEJyaWRnZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX0JSSURHRWAgaXMgZW5hYmxlZCwgd2hpY2ggaW1tZWRpYXRlbHkgcHVsbHMgaW4gYGJyaWRnZS5vYC4gQW5kIHdpdGhpbiB0aGF0LCB3ZSYjMzk7dmUgZ290IGBicl9pbnB1dC5vYC4gR290IGl0LiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxhdGVkIHRvIGBDT05GSUdfQlJJREdFYC4gTmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSB3b3JraW5nLCBvciBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGNvbm5lY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJSSURHRVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTExDXG4gICA5Olx0XHRzZWxlY3QgU1RQXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cbiAgMTI6XHRcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcbiAgMTM6XHRcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxuICAxNDpcdFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcbiAgMTU6XHRcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxuICAxNjpcdFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxuICAxNzpcdFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UmIzM5O2xsIG5lZWQgdGhlIGJyaWRnZVxuICAyMDpcdFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFx1MDAzZVxuICAyMTpcdFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxuICAyMjpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XG4gIDI1Olx0XHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxuICAyNjpcdFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXG4gIDI3Olx0XHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXG4gIDI4Olx0XHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxuICAyOTpcdFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxuICAzMzpcdFxuICAzNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xuICAzNzpcdFx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgMzk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0MDpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDkxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgSGllcmFyY2h5KioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgbmV0L2JyaWRnZS9LY29uZmlnYCBpcyBwdWxsZWQgaW50byB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgbmV0L0tjb25maWdgLiBJdCYjMzk7cyB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBzbyBpdCYjMzk7cyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRvIGhhbmRsZSB0aGUgaW5jbHVzaW9uIG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2NhbiBmb3IgYW55IGBzb3VyY2VgIG9yIHNpbWlsYXIgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHBvaW50IHRvIHdoZXJlIGBuZXQvYnJpZGdlL0tjb25maWdgIGlzIGluY2x1ZGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIgSSBuZWVkIGluIG5vIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MjU5PXNvdXJjZSBcJiMzNDtuZXQvODAyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI2MDpzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNjEtc291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZSBiZXR0ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZSBpcyB1c3VhbGx5IHRoZSBwbGFjZSB0byBzdGFydCB3aGVuIGRpZ2dpbmcgaW50byBuZXR3b3JrLXJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBIbW0sIGxpbmUgMjU5Li4uIHRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIEhvcGVmdWxseSwgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gd2hlcmUgdGhpbmdzIGFyZSBnb2luZyBzaWRld2F5cy4gSSBleHBlY3QgdG8gZmluZCBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRlZmluaXRpb24sIG1heWJlIGEgY29uZGl0aW9uYWwgYmxvY2ssIG9yIHBlcmhhcHMgYW4gaW5jbHVkZXMgc3RhdGVtZW50IHRoYXQgbGVhZHMgbWUgdG8gdGhlIHNwZWNpZmljIHN1Yi1jb25maWd1cmF0aW9uIGFyZWEgSSBuZWVkIHRvIGV4YW1pbmUuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0c291cmNlIFwmIzM0O25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNTE6XHRcbiAyNTI6XHRlbmRpZiAjIGlmIE5FVEZJTFRFUlxuIDI1MzpcdFxuIDI1NDpcdHNvdXJjZSBcJiMzNDtuZXQvc2N0cC9LY29uZmlnXCYjMzQ7XG4gMjU1Olx0c291cmNlIFwmIzM0O25ldC9yZHMvS2NvbmZpZ1wmIzM0O1xuIDI1NjpcdHNvdXJjZSBcJiMzNDtuZXQvdGlwYy9LY29uZmlnXCYjMzQ7XG4gMjU3Olx0c291cmNlIFwmIzM0O25ldC9hdG0vS2NvbmZpZ1wmIzM0O1xuIDI1ODpcdHNvdXJjZSBcJiMzNDtuZXQvbDJ0cC9LY29uZmlnXCYjMzQ7XG4gMjU5Olx0c291cmNlIFwmIzM0O25ldC84MDIvS2NvbmZpZ1wmIzM0O1xuIDI2MDpcdHNvdXJjZSBcJiMzNDtuZXQvYnJpZGdlL0tjb25maWdcJiMzNDtcbiAyNjE6XHRzb3VyY2UgXCYjMzQ7bmV0L2RzYS9LY29uZmlnXCYjMzQ7XG4gMjYyOlx0c291cmNlIFwmIzM0O25ldC84MDIxcS9LY29uZmlnXCYjMzQ7XG4gMjYzOlx0c291cmNlIFwmIzM0O25ldC9sbGMvS2NvbmZpZ1wmIzM0O1xuIDI2NDpcdHNvdXJjZSBcJiMzNDtuZXQveDI1L0tjb25maWdcJiMzNDtcbiAyNjU6XHRzb3VyY2UgXCYjMzQ7bmV0L2xhcGIvS2NvbmZpZ1wmIzM0O1xuIDI2NjpcdHNvdXJjZSBcJiMzNDtuZXQvcGhvbmV0L0tjb25maWdcJiMzNDtcbiAyNjc6XHRzb3VyY2UgXCYjMzQ7bmV0LzZsb3dwYW4vS2NvbmZpZ1wmIzM0O1xuIDI2ODpcdHNvdXJjZSBcJiMzNDtuZXQvaWVlZTgwMjE1NC9LY29uZmlnXCYjMzQ7XG4gMjY5Olx0c291cmNlIFwmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJyX2lucHV0LmNgIGZpbGUuCgoqKkluc3BlY3RpbmcgYnJfaW5wdXQuYyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzIGlucHV0IGhhbmRsaW5nIG1vZHVsZS4gTXkgaW5pdGlhbCBnb2FsIGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgKnB1YmxpY2x5KiBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gYGJyX2lucHV0LmNgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgZmlsZSwgZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiB3aWxsIGJlLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IHRob3NlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFx0fVxuIDE3MTpcdFxuIDE3MjpcdFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXHUwMDNlYnJkZXYgPSBici1cdTAwM2VkZXY7XG4gMTczOlx0XHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2VzcmNfcG9ydF9pc29sYXRlZCA9IHRlc3RfYml0KEJSX0lTT0xBVEVEX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncyk7XG4gMTc0Olx0XG4gMTc1Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXHUwMDI2XHUwMDI2XG4gMTc2Olx0XHQgICAgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApIHx8XG4gMTc3Olx0XHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9SQVJQKSkpIHtcbiAxNzg6XHRcdFx0YnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHNrYiwgYnIsIHZpZCwgcCk7XG4gMTc5Olx0XHR9IGVsc2UgaWYgKGlwdjZfbW9kX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjZcbiAxODA6XHRcdFx0ICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFx1MDAyNlx1MDAyNlxuIDE4MTpcdFx0XHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbiAxODI6XHRcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0MztcbiAxODM6XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5kX21zZykpIFx1MDAyNlx1MDAyNlxuIDE4NDpcdFx0XHQgICBpcHY2X2hkcihza2IpLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcbiAxODU6XHRcdFx0XHRzdHJ1Y3QgbmRfbXNnICptc2c7XG4gMTg2Olx0XG4gMTg3Olx0XHRcdFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XG4gMTg4Olx0XHRcdFx0aWYgKG1zZylcbiAxODk6XHRcdFx0XHRcdGJyX2RvX3N1cHByZXNzX25kKHNrYiwgYnIsIHZpZCwgcCwgbXNnKTtcbiAxOTA6XHRcdH1cbiAxOTE6XHRcbiAxOTI6XHRcdHN3aXRjaCAocGt0X3R5cGUpIHtcbiAxOTM6XHRcdGNhc2UgQlJfUEtUX01VTFRJQ0FTVDpcbiAxOTQ6XHRcdFx0bWRzdCA9IGJyX21kYl9lbnRyeV9za2JfZ2V0KGJybWN0eCwgc2tiLCB2aWQpO1xuIDE5NTpcdFx0XHRpZiAoKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgXHUwMDI2XHUwMDI2XG4gMTk2Olx0XHRcdCAgICBicl9tdWx0aWNhc3RfcXVlcmllcl9leGlzdHMoYnJtY3R4LCBldGhfaGRyKHNrYiksIG1kc3QpKSB7XG4gMTk3Olx0XHRcdFx0aWYgKChtZHN0IFx1MDAyNlx1MDAyNiBtZHN0LVx1MDAzZWhvc3Rfam9pbmVkKSB8fFxuIDE5ODpcdFx0XHRcdCAgICBicl9tdWx0aWNhc3RfaXNfcm91dGVyKGJybWN0eCwgc2tiKSB8fFxuIDE5OTpcdFx0XHRcdCAgICBici1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuIDIwMDpcdFx0XHRcdFx0bG9jYWxfcmN2ID0gdHJ1ZTtcbiAyMDE6XHRcdFx0XHRcdERFVl9TVEFUU19JTkMoYnItXHUwMDNlZGV2LCBtdWx0aWNhc3QpO1xuIDIwMjpcdFx0XHRcdH1cbiAyMDM6XHRcdFx0XHRtY2FzdF9oaXQgPSB0cnVlO1xuIDIwNDpcdFx0XHR9IGVsc2Uge1xuIDIwNTpcdFx0XHRcdGxvY2FsX3JjdiA9IHRydWU7XG4gMjA2Olx0XHRcdFx0REVWX1NUQVRTX0lOQyhici1cdTAwM2VkZXYsIG11bHRpY2FzdCk7XG4gMjA3Olx0XHRcdH1cbiAyMDg6XHRcdFx0YnJlYWs7XG4gMjA5Olx0XHRjYXNlIEJSX1BLVF9VTklDQVNUOlxuIDIxMDpcdFx0XHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QsIHZpZCk7XG4gMjExOlx0XHRcdGlmICh1bmxpa2VseSghZHN0IFx1MDAyNlx1MDAyNiB2aWQgXHUwMDI2XHUwMDI2XG4gMjEyOlx0XHRcdFx0ICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wKSkpIHtcbiAyMTM6XHRcdFx0XHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QsIDApO1xuIDIxNDpcdFx0XHRcdGlmIChkc3QgXHUwMDI2XHUwMDI2XG4gMjE1Olx0XHRcdFx0ICAgICghdGVzdF9iaXQoQlJfRkRCX0xPQ0FMLCBcdTAwMjZkc3QtXHUwMDNlZmxhZ3MpIHx8XG4gMjE2Olx0XHRcdFx0ICAgICB0ZXN0X2JpdChCUl9GREJfQURERURfQllfVVNFUiwgXHUwMDI2ZHN0LVx1MDAzZWZsYWdzKSkpXG4gMjE3Olx0XHRcdFx0XHRkc3QgPSBOVUxMO1xuIDIxODpcdFx0XHR9XG4gMjE5Olx0XHRcdGJyZWFrO1xuIDIyMDpcdFx0ZGVmYXVsdDpcbiAyMjE6XHRcdFx0YnJlYWs7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoZHN0KSB7XG4gMjI1Olx0XHRcdHVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllcztcbiAyMjY6XHRcbiAyMjc6XHRcdFx0aWYgKHRlc3RfYml0KEJSX0ZEQl9MT0NBTCwgXHUwMDI2ZHN0LVx1MDAzZWZsYWdzKSlcbiAyMjg6XHRcdFx0XHRyZXR1cm4gYnJfcGFzc19mcmFtZV91cChza2IsIGZhbHNlKTtcbiAyMjk6XHRcbiAyMzA6XHRcdFx0aWYgKG5vdyAhPSBSRUFEX09OQ0UoZHN0LVx1MDAzZXVzZWQpKVxuIDIzMTpcdFx0XHRcdFdSSVRFX09OQ0UoZHN0LVx1MDAzZXVzZWQsIG5vdyk7XG4gMjMyOlx0XHRcdGJyX2ZvcndhcmQoUkVBRF9PTkNFKGRzdC1cdTAwM2Vkc3QpLCBza2IsIGxvY2FsX3JjdiwgZmFsc2UpO1xuIDIzMzpcdFx0fSBlbHNlIHtcbiAyMzQ6XHRcdFx0aWYgKCFtY2FzdF9oaXQpXG4gMjM1Olx0XHRcdFx0YnJfZmxvb2QoYnIsIHNrYiwgcGt0X3R5cGUsIGxvY2FsX3JjdiwgZmFsc2UsIHZpZCk7XG4gMjM2Olx0XHRcdGVsc2VcbiAyMzc6XHRcdFx0XHRicl9tdWx0aWNhc3RfZmxvb2QobWRzdCwgc2tiLCBicm1jdHgsIGxvY2FsX3JjdiwgZmFsc2UpO1xuIDIzODpcdFx0fVxuIDIzOTpcdFxuIDI0MDpcdFx0aWYgKGxvY2FsX3JjdilcbiAyNDE6XHRcdFx0cmV0dXJuIGJyX3Bhc3NfZnJhbWVfdXAoc2tiLCBwcm9taXNjKTtcbiAyNDI6XHRcbiAyNDM6XHRvdXQ6XG4gMjQ0Olx0XHRyZXR1cm4gMDtcbiAyNDU6XHRkcm9wOlxuIDI0NjpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4gMjQ3Olx0XHRnb3RvIG91dDtcbiAyNDg6XHR9XG4gMjQ5Olx0RVhQT1JUX1NZTUJPTF9HUEwoYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XG4gMjUwOlx0XG4gMjUxOlx0c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXG4gMjUyOlx0e1xuIDI1MzpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0X3JjdShza2ItXHUwMDNlZGV2KTtcbiAyNTQ6XHRcdHUxNiB2aWQgPSAwO1xuIDI1NTpcdFxuIDI1NjpcdFx0LyogY2hlY2sgaWYgdmxhbiBpcyBhbGxvd2VkLCB0byBhdm9pZCBzcG9vZmluZyAqL1xuIDI1NzpcdFx0aWYgKHRlc3RfYml0KEJSX0xFQVJOSU5HX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4gMjU4Olx0XHQgICAgbmJwX3N0YXRlX3Nob3VsZF9sZWFybihwKSBcdTAwMjZcdTAwMjZcbiAyNTk6XHRcdCAgICAhYnJfb3B0X2dldChwLVx1MDAzZWJyLCBCUk9QVF9OT19MTF9MRUFSTikgXHUwMDI2XHUwMDI2XG4gMjYwOlx0XHQgICAgYnJfc2hvdWxkX2xlYXJuKHAsIHNrYiwgXHUwMDI2dmlkKSlcbiAyNjE6XHRcdFx0YnJfZmRiX3VwZGF0ZShwLVx1MDAzZWJyLCBwLCBldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsIHZpZCwgMCk7XG4gMjYyOlx0fVxuIDI2MzpcdFxuIDI2NDpcdC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuIDI2NTpcdHN0YXRpYyBpbnQgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAyNjY6XHR7XG4gMjY3Olx0XHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcbiAyNjg6XHRcbiAyNjk6XHRcdC8qIHJldHVybiAxIHRvIHNpZ25hbCB0aGUgb2tmbigpIHdhcyBjYWxsZWQgc28gaXQmIzM5O3Mgb2sgdG8gdXNlIHRoZSBza2IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gYWJvdXQgdG8gZG86CgoqKkFuYWx5emluZyBgYnJfaW5wdXQuY2AgZm9yIE5vbi1TdGF0aWMgRnVuY3Rpb25zKioKClJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgYnJfaW5wdXQuY2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgcGFzdCB0aGUgc3RhdGljIG9uZXMsIGFzIHRob3NlIGFyZSB1c3VhbGx5IGludGVybmFsIHRvIHRoZSBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGV4cG9zZWQsIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGlmIHlvdSB3aWxsLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gdG8gaW5zcGVjdCB0aGVzZSBmdW5jdGlvbnMgLSB3aGV0aGVyIHRoYXQmIzM5O3MgZm9yIHJlZmFjdG9yaW5nLCB1bmRlcnN0YW5kaW5nIGV4dGVybmFsIGRlcGVuZGVuY2llcywgb3IgZXh0ZW5kaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHdoYXRldmVyIHByb2plY3QgdGhpcyBpcyBwYXJ0IG9mLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHJldHVybiB0eXBlcywgYW5kIGFueSBjb21tZW50cyB0aGF0IGFyZSB0aGVyZSB0byBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSBhbmQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkgd2FudCBhIGNvbmNpc2UgdW5kZXJzdGFuZGluZyBvZiBpdHMgY2FwYWJpbGl0aWVzIG91dHNpZGUgb2YgYW55IGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRyZXR1cm4gMTtcbiAyNzE6XHR9XG4gMjcyOlx0XG4gMjczOlx0c3RhdGljIGludCBuZl9ob29rX2JyaWRnZV9wcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIDI3NDpcdHtcbiAyNzU6XHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gMjc2Olx0XHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gTlVMTDtcbiAyNzc6XHRcdHN0cnVjdCBuZl9ob29rX3N0YXRlIHN0YXRlO1xuIDI3ODpcdFx0dW5zaWduZWQgaW50IHZlcmRpY3QsIGk7XG4gMjc5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gMjgwOlx0XHRpbnQgcmV0O1xuIDI4MTpcdFxuIDI4MjpcdFx0bmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiAyODM6XHQjaWZkZWYgQ09ORklHX0pVTVBfTEFCRUxcbiAyODQ6XHRcdGlmICghc3RhdGljX2tleV9mYWxzZShcdTAwMjZuZl9ob29rc19uZWVkZWRbTkZQUk9UT19CUklER0VdW05GX0JSX1BSRV9ST1VUSU5HXSkpXG4gMjg1Olx0XHRcdGdvdG8gZnJhbWVfZmluaXNoO1xuIDI4NjpcdCNlbmRpZlxuIDI4NzpcdFxuIDI4ODpcdFx0ZSA9IHJjdV9kZXJlZmVyZW5jZShuZXQtXHUwMDNlbmYuaG9va3NfYnJpZGdlW05GX0JSX1BSRV9ST1VUSU5HXSk7XG4gMjg5Olx0XHRpZiAoIWUpXG4gMjkwOlx0XHRcdGdvdG8gZnJhbWVfZmluaXNoO1xuIDI5MTpcdFxuIDI5MjpcdFx0bmZfaG9va19zdGF0ZV9pbml0KFx1MDAyNnN0YXRlLCBORl9CUl9QUkVfUk9VVElORyxcbiAyOTM6XHRcdFx0XHQgICBORlBST1RPX0JSSURHRSwgc2tiLVx1MDAzZWRldiwgTlVMTCwgTlVMTCxcbiAyOTQ6XHRcdFx0XHQgICBuZXQsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xuIDI5NTpcdFxuIDI5NjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuIDI5NzpcdFx0XHR2ZXJkaWN0ID0gbmZfaG9va19lbnRyeV9ob29rZm4oXHUwMDI2ZS1cdTAwM2Vob29rc1tpXSwgc2tiLCBcdTAwMjZzdGF0ZSk7XG4gMjk4Olx0XHRcdHN3aXRjaCAodmVyZGljdCBcdTAwMjYgTkZfVkVSRElDVF9NQVNLKSB7XG4gMjk5Olx0XHRcdGNhc2UgTkZfQUNDRVBUOlxuIDMwMDpcdFx0XHRcdGlmIChCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2Vicl9uZXRmaWx0ZXJfYnJvdXRlKSB7XG4gMzAxOlx0XHRcdFx0XHQqcHNrYiA9IHNrYjtcbiAzMDI6XHRcdFx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4gMzAzOlx0XHRcdFx0fVxuIDMwNDpcdFx0XHRcdGJyZWFrO1xuIDMwNTpcdFx0XHRjYXNlIE5GX0RST1A6XG4gMzA2Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzA3Olx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG4gMzA4Olx0XHRcdGNhc2UgTkZfUVVFVUU6XG4gMzA5Olx0XHRcdFx0cmV0ID0gbmZfcXVldWUoc2tiLCBcdTAwMjZzdGF0ZSwgaSwgdmVyZGljdCk7XG4gMzEwOlx0XHRcdFx0aWYgKHJldCA9PSAxKVxuIDMxMTpcdFx0XHRcdFx0Y29udGludWU7XG4gMzEyOlx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG4gMzEzOlx0XHRcdGRlZmF1bHQ6IC8qIFNUT0xFTiAqL1xuIDMxNDpcdFx0XHRcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuIDMxNTpcdFx0XHR9XG4gMzE2Olx0XHR9XG4gMzE3Olx0ZnJhbWVfZmluaXNoOlxuIDMxODpcdFx0bmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiAzMTk6XHRcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2gobmV0LCBOVUxMLCBza2IpO1xuIDMyMDpcdCNlbHNlXG4gMzIxOlx0XHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYik7XG4gMzIyOlx0I2VuZGlmXG4gMzIzOlx0XHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiAzMjQ6XHR9XG4gMzI1Olx0XG4gMzI2Olx0LyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXG4gMzI3Olx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gMzI4Olx0ICovXG4gMzI5Olx0c3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiAzMzA6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMzMTpcdHtcbiAzMzI6XHRcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4gMzMzOlx0XG4gMzM0Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbiAzMzU6XHRcdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4gMzM2Olx0XHRcdFx0cmV0dXJuIHRtcC1cdTAwM2VmcmFtZV9oYW5kbGVyKHAsIHNrYik7XG4gMzM3Olx0XG4gMzM4Olx0XHRyZXR1cm4gMDtcbiAzMzk6XHR9XG4gMzQwOlx0XG4gMzQxOlx0LypcbiAzNDI6XHQgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxuIDM0MzpcdCAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuIDM0NDpcdCAqL1xuIDM0NTpcdHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gMzQ2Olx0e1xuIDM0NzpcdFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XG4gMzQ4Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwO1xuIDM0OTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiO1xuIDM1MDpcdFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCA9IGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3Q7XG4gMzUxOlx0XG4gMzUyOlx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSykpXG4gMzUzOlx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4gMzU0Olx0XG4gMzU1Olx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlKSkge1xuIDM1NjpcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTUFDX0lOVkFMSURfU09VUkNFO1xuIDM1NzpcdFx0XHRnb3RvIGRyb3A7XG4gMzU4Olx0XHR9XG4gMzU5Olx0XG4gMzYwOlx0XHRza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTtcbiAzNjE6XHRcdGlmICghc2tiKVxuIDM2MjpcdFx0XHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiAzNjM6XHRcbiAzNjQ6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3QgYnJfaW5wdXRfc2tiX2NiKSk7XG4gMzY1Olx0XHRicl90Y19za2JfbWlzc19zZXQoc2tiLCBmYWxzZSk7XG4gMzY2Olx0XG4gMzY3Olx0XHRwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi1cdTAwM2VkZXYpO1xuIDM2ODpcdFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpXG4gMzY5Olx0XHRcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFJlY2VpdmUgUGF0aCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBiZWFyaW5ncyBpbiB0aGlzIGJyaWRnaW5nIGNvZGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGluY29taW5nIGZyYW1lcyBhcmUgYWN0dWFsbHkgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHM6IHdoZXJlIGRvIHRoZSBpbmNvbWluZyBwYWNrZXRzIGFjdHVhbGx5ICpsYW5kKiB3aXRoaW4gdGhlIHN5c3RlbT8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgcnhfaGFuZGxlcmAgYW5kIGFueSBwb3RlbnRpYWwgJiMzNDtmcmFtZSBlbnRyeSYjMzQ7IGZ1bmN0aW9ucyDigJMgeW91IGtub3csIHRoZSBvbmVzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsbHkgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBkYXRhLgoKT25jZSBJIGhhdmUgdGhvc2UgaWRlbnRpZmllZCwgSSYjMzk7bGwgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgYGJyX2lucHV0LmNgIGZpbGUgd2lsbCBoYXZlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgcmVzdCBvZiBpdCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBpbml0aWFsIHJlY2VpdmUgaGFuZGxlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGlzIGtleSB0byBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoZSBnb2FsIGlzIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBwYXRoIGZyb20gcGh5c2ljYWwgaW50ZXJmYWNlIHRvIHRoZSBicmlkZ2UmIzM5O3MgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNzA6XHRcbiAzNzE6XHRcdGlmICh1bmxpa2VseShpc19saW5rX2xvY2FsX2V0aGVyX2FkZHIoZGVzdCkpKSB7XG4gMzcyOlx0XHRcdHUxNiBmd2RfbWFzayA9IHAtXHUwMDNlYnItXHUwMDNlZ3JvdXBfZndkX21hc2tfcmVxdWlyZWQ7XG4gMzczOlx0XG4gMzc0Olx0XHRcdC8qXG4gMzc1Olx0XHRcdCAqIFNlZSBJRUVFIDgwMi4xRCBUYWJsZSA3LTEwIFJlc2VydmVkIGFkZHJlc3Nlc1xuIDM3NjpcdFx0XHQgKlxuIDM3NzpcdFx0XHQgKiBBc3NpZ25tZW50XHRcdCBcdFx0VmFsdWVcbiAzNzg6XHRcdFx0ICogQnJpZGdlIEdyb3VwIEFkZHJlc3NcdFx0MDEtODAtQzItMDAtMDAtMDBcbiAzNzk6XHRcdFx0ICogKE1BQyBDb250cm9sKSA4MDIuM1x0XHQwMS04MC1DMi0wMC0wMC0wMVxuIDM4MDpcdFx0XHQgKiAoTGluayBBZ2dyZWdhdGlvbikgODAyLjNcdDAxLTgwLUMyLTAwLTAwLTAyXG4gMzgxOlx0XHRcdCAqIDgwMi4xWCBQQUUgYWRkcmVzc1x0XHQwMS04MC1DMi0wMC0wMC0wM1xuIDM4MjpcdFx0XHQgKlxuIDM4MzpcdFx0XHQgKiA4MDIuMUFCIExMRFAgXHRcdDAxLTgwLUMyLTAwLTAwLTBFXG4gMzg0Olx0XHRcdCAqXG4gMzg1Olx0XHRcdCAqIE90aGVycyByZXNlcnZlZCBmb3IgZnV0dXJlIHN0YW5kYXJkaXphdGlvblxuIDM4NjpcdFx0XHQgKi9cbiAzODc6XHRcdFx0ZndkX21hc2sgfD0gcC1cdTAwM2Vncm91cF9md2RfbWFzaztcbiAzODg6XHRcdFx0c3dpdGNoIChkZXN0WzVdKSB7XG4gMzg5Olx0XHRcdGNhc2UgMHgwMDpcdC8qIEJyaWRnZSBHcm91cCBBZGRyZXNzICovXG4gMzkwOlx0XHRcdFx0LyogSWYgU1RQIGlzIHR1cm5lZCBvZmYsXG4gMzkxOlx0XHRcdFx0ICAgdGhlbiBtdXN0IGZvcndhcmQgdG8ga2VlcCBsb29wIGRldGVjdGlvbiAqL1xuIDM5MjpcdFx0XHRcdGlmIChwLVx1MDAzZWJyLVx1MDAzZXN0cF9lbmFibGVkID09IEJSX05PX1NUUCB8fFxuIDM5MzpcdFx0XHRcdCAgICBmd2RfbWFzayBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBkZXN0WzVdKSlcbiAzOTQ6XHRcdFx0XHRcdGdvdG8gZm9yd2FyZDtcbiAzOTU6XHRcdFx0XHQqcHNrYiA9IHNrYjtcbiAzOTY6XHRcdFx0XHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcbiAzOTc6XHRcdFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuIDM5ODpcdFxuIDM5OTpcdFx0XHRjYXNlIDB4MDE6XHQvKiBJRUVFIE1BQyAoUGF1c2UpICovXG4gNDAwOlx0XHRcdFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX01BQ19JRUVFX01BQ19DT05UUk9MO1xuIDQwMTpcdFx0XHRcdGdvdG8gZHJvcDtcbiA0MDI6XHRcbiA0MDM6XHRcdFx0Y2FzZSAweDBFOlx0LyogODAyLjFBQiBMTERQICovXG4gNDA0Olx0XHRcdFx0ZndkX21hc2sgfD0gcC1cdTAwM2Vici1cdTAwM2Vncm91cF9md2RfbWFzaztcbiA0MDU6XHRcdFx0XHRpZiAoZndkX21hc2sgXHUwMDI2ICgxdSBcdTAwM2NcdTAwM2MgZGVzdFs1XSkpXG4gNDA2Olx0XHRcdFx0XHRnb3RvIGZvcndhcmQ7XG4gNDA3Olx0XHRcdFx0KnBza2IgPSBza2I7XG4gNDA4Olx0XHRcdFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XG4gNDA5Olx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbiA0MTA6XHRcbiA0MTE6XHRcdFx0ZGVmYXVsdDpcbiA0MTI6XHRcdFx0XHQvKiBBbGxvdyBzZWxlY3RpdmUgZm9yd2FyZGluZyBmb3IgbW9zdCBvdGhlciBwcm90b2NvbHMgKi9cbiA0MTM6XHRcdFx0XHRmd2RfbWFzayB8PSBwLVx1MDAzZWJyLVx1MDAzZWdyb3VwX2Z3ZF9tYXNrO1xuIDQxNDpcdFx0XHRcdGlmIChmd2RfbWFzayBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBkZXN0WzVdKSlcbiA0MTU6XHRcdFx0XHRcdGdvdG8gZm9yd2FyZDtcbiA0MTY6XHRcdFx0fVxuIDQxNzpcdFxuIDQxODpcdFx0XHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cdTAwM2Vwcm9taXNjID0gZmFsc2U7XG4gNDE5Olx0XG4gNDIwOlx0XHRcdC8qIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgYmUgaGl0IHdoZW4gbmZfaG9vaygpOlxuIDQyMTpcdFx0XHQgKiAgIC0gcmV0dXJucyBcdTAwM2MgMCAoZHJvcC9lcnJvcilcbiA0MjI6XHRcdFx0ICogICAtIHJldHVybnMgPSAwIChzdG9sZW4vbmZfcXVldWUpXG4gNDIzOlx0XHRcdCAqIFRodXMgcmV0dXJuIDEgZnJvbSB0aGUgb2tmbigpIHRvIHNpZ25hbCB0aGUgc2tiIGlzIG9rIHRvIHBhc3NcbiA0MjQ6XHRcdFx0ICovXG4gNDI1Olx0XHRcdGlmIChORl9IT09LKE5GUFJPVE9fQlJJREdFLCBORl9CUl9MT0NBTF9JTixcbiA0MjY6XHRcdFx0XHQgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxuIDQyNzpcdFx0XHRcdCAgICBicl9oYW5kbGVfbG9jYWxfZmluaXNoKSA9PSAxKSB7XG4gNDI4Olx0XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbiA0Mjk6XHRcdFx0fSBlbHNlIHtcbiA0MzA6XHRcdFx0XHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiA0MzE6XHRcdFx0fVxuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbiA0MzU6XHRcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbiA0MzY6XHRcbiA0Mzc6XHRmb3J3YXJkOlxuIDQzODpcdFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxuIDQzOTpcdFx0XHRnb3RvIGRlZmVyX3N0cF9maWx0ZXJpbmc7XG4gNDQwOlx0XG4gNDQxOlx0XHRzd2l0Y2ggKHAtXHUwMDNlc3RhdGUpIHtcbiA0NDI6XHRcdGNhc2UgQlJfU1RBVEVfRk9SV0FSRElORzpcbiA0NDM6XHRcdGNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6XG4gNDQ0Olx0ZGVmZXJfc3RwX2ZpbHRlcmluZzpcbiA0NDU6XHRcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwocC1cdTAwM2Vici1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIGRlc3QpKVxuIDQ0NjpcdFx0XHRcdHNrYi1cdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0XHRyZXR1cm4gbmZfaG9va19icmlkZ2VfcHJlKHNrYiwgcHNrYik7XG4gNDQ5Olx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMzNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnJfaGFuZGxlX2ZyYW1lYCBGdW5jdGlvbioqCgpSaWdodCwgc28gYGJyX2hhbmRsZV9mcmFtZWAgaXMgYWN0aW5nIGFzIGEgcmVjZWl2ZSBoYW5kbGVyLCB3aGljaCBtZWFucyBpdCYjMzk7cyBzaXR0aW5nIHRoZXJlIHdhaXRpbmcgdG8gcHJvY2VzcyBpbmNvbWluZyBmcmFtZXMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgdXNlIHdpdGhpbiB0aGUgYnJpZGdpbmcgc3Vic3lzdGVtLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYW4gYHJ4X2hhbmRsZXJgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgb3IgcmVmZXJlbmNlZC4gQSBjcm9zcy1yZWZlcmVuY2Ugc2VhcmNoLCBsaWtlbHkgdGhyb3VnaCBgZ3JlcGAgb3IgbXkgSURFJiMzOTtzIGZ1bmN0aW9uYWxpdHksIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNvbm5lY3Rpb25zIHRvIG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIGZyYW1lIHByb2Nlc3NpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGZyYW1lcyBhcmUgY2F0ZWdvcml6ZWQgb3Igd2hhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfaGFuZGxlX2ZyYW1lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2lucHV0LmM9Mzk9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODEtLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6ODI6aW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODMte1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNDgtfVxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNTAtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5My1cdFx0XHQgICBORlBST1RPX0JSSURHRSwgc2tiLVx1MDAzZWRldiwgTlVMTCwgTlVMTCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyOTQ6XHRcdFx0ICAgbmV0LCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yOTUtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMxOC1cdG5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzE5Olx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzIxOlx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyMi0jZW5kaWZcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0NC0gKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNDYte1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjMtICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDY0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZV9kdW1teShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDY1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDY5PXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzEtXHRpZiAobmV0ZGV2X3VzZXNfZHNhKGRldikpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDcyOlx0XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lX2R1bW15O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3My1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzQ6XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3NS19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNTU9dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzMtICogZG9uJiMzOTt0LCB3ZSB1c2UgdGhlIG5laWdoYm91ciBmcmFtZXdvcmsgdG8gZmluZCBvdXQuIEluIGJvdGggY2FzZXMsIHdlIG1ha2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc0OiAqIHN1cmUgdGhhdCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKCkgaXMgY2FsbGVkIGFmdGVyd2FyZHMuXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3NS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mjc2PWludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzA2LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMDc6XHRcdFx0cmV0ID0gYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIHNrLCBza2IpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMDgtXHRcdH0gZWxzZSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zNzY9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzAtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzE6XHRcdFx0ICBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDMyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDA1PXN0YXRpYyB2b2lkIGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Vfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyNi1cdG5mX2JyaWRnZS1cdTAwM2VwaHlzb3V0ZGV2ID0gTlVMTDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAyNzpcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyOC19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTEwMT1zdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTMtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE1NDpcdFx0XHQgIHNrYi1cdTAwM2VkZXYsIE5VTEwsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE1NS1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Mjk9aW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzEtLyogYnJfaW5wdXQuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTMyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTkzMy1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjE5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgUGFja2V0IFByb2Nlc3NpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGludG8gdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGxhbmRlZCBpbiB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiB0aGV5JiMzOTtyZSBwYXNzZWQgdXAgdG8gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoYXQgYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgLCB3aGljaCBpcyBhIGdsb2JhbGx5IGV4cG9ydGVkIGZ1bmN0aW9uLCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGhlcmUuIEl0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IGRpcmVjdGx5IGxlYWRzIHRvIGBicl9wYXNzX2ZyYW1lX3VwYCwgd2hpY2ggdGhlbiBjYWxscyBgTkZfSE9PS2Agb24gYGJyX25ldGlmX3JlY2VpdmVfc2tiYC4gVGhpcyBpcyB3aGVyZSB0aGUgcGF0Y2ggdG91Y2hlcyB0aGluZ3MsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSlgIGNoYW5nZS4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYnJvYWRlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBuZXQvYnJpZGdlL2Agb3IgZXZlbiBgbmV0L2NvcmUvYD8gV2hhdCBoYXBwZW5zIHdoZW4geW91IGhhdmUgZ2VuZXJpYyBYRFAgYXR0YWNoZWQgdG8gYSBicmlkZ2UgaW50ZXJmYWNlLCBvciBhbnkgbmV0ZGV2PyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBwYWNrZXRzIGZsb3cgZnJvbSBhIGJyaWRnZSBzbGF2ZSBpbnRlcmZhY2UsIHRocm91Z2ggdGhlIGJyaWRnZSAoYGJyX2hhbmRsZV9mcmFtZWApLCBhbmQgdGhlbiB1cCB0byBsb2NhbCBkZWxpdmVyeSAoYGJyX3Bhc3NfZnJhbWVfdXBgIHRvIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgYW5kIGV2ZW50dWFsbHkgYG5ldGlmX3JlY2VpdmVfc2tiYCkuCgpBaCwgeWVzLCBhbmQgSSByZWNhbGwgdGhhdCBpbnNpZGUgYG5ldGlmX3JlY2VpdmVfc2tiYCwgYGRvX3hkcF9nZW5lcmljYCBhbmQgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLCBnZW5lcmljIFhEUCBoYXMgdGhpcyBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl9pc19yZWRpcmVjdGVkKHNrYikpIHJldHVybiBYRFBfUEFTUztgLiBUaGlzIHBhdGNoIHNldHMgYHNrYi0mZ3Q7cmVkaXJlY3RlZGAsIHdoaWNoIG1lYW5zIGdlbmVyaWMgWERQICpzaG91bGRuJiMzOTt0KiBydW4gYSBzZWNvbmQgdGltZSBvbiB0aGUgbG9jYWwgYnJpZGdlIGRldmljZSBhbmQgcmVhbGxvY2F0ZSB0aGUgaGVhZCBvciBmcmVlIHRoZSBidWZmZXJzIHdoaWxlIHN0aWxsIGluIHVzZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpbywgc28gaXQgbWFrZXMgdG90YWwgc2Vuc2UuCgpOb3csIHRoaXMgZmVlbHMgbGlrZSBpdCBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgSSBoYXZlIHRvIGJlIHN1cmUgdGhpcyBpcyBhcHBsaWNhYmxlIHRvIG15IHdvcmsuIFRoaXMgaXMgc29tZXRoaW5nIEkmIzM5O2Qgd2FudCB0byB0ZXN0IGluIGEgbGFiLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgUUVNVSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gT2YgY291cnNlIGl0IGlzISBFdGhlcm5ldCBicmlkZ2luZywgZ2VuZXJpYyBYRFAsIHZldGgsIHRhcCwgbWFjdnRhcCwgdmlydGlvLW5ldCwgYWxsIG9mIHRoZXNlIGFyZSB2ZXJ5IGNvbW1vbiwgYWxsIHdpZGVseSB1c2VkIGluIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcsIGFuZCBmdWxseSBzdXBwb3J0ZWQgaW4gUUVNVS4gVGhhdCYjMzk7cyBnb29kIG5ld3MuCgpTbyB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgbW9kaWZpZXMgY29yZSBicmlkZ2UgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIGVzcGVjaWFsbHkgZHVyaW5nIHRoYXQgaGFuZG92ZXIgdG8gdGhlIG5ldHdvcmsgc3RhY2sgdmlhIGBuZXRpZl9yZWNlaXZlX3NrYmAuIFRoaXMgbWVhbnMgaXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcHJldmVudCBnZW5lcmljIFhEUCByZS1leGVjdXRpb24gYnVnczogc3BlY2lmaWNhbGx5LCBtZW1vcnkgY29ycnVwdGlvbiBhbmQgZG91YmxlLWV4ZWN1dGlvbiwgYm90aCB2ZXJ5IGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIHN0cmFpZ2h0LiBXZSBuZWVkIGBCUklER0VgIHRvIGVuYWJsZSB0aGUgYG5ldC9icmlkZ2VgIG1vZHVsZS4gTG9va2luZyBhdCB0aGUgS2NvbmZpZywgQlJJREdFIGRlcGVuZHMgb24gYE5FVGAgaW1wbGljaXRseSAodmlhIG5ldC9LY29uZmlnKSwgaXQgYWxzbyB1c2VzIGBMTENgIGFuZCBgU1RQYC4gVGhlbiwgb2YgY291cnNlLCBmb3IgdGhlIGdlbmVyaWMgWERQIHN0dWZmLCB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfUkVESVJFQ1RgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYENPTkZJR19ORVRfUkVESVJFQ1RgIGlzIGRlZmluZWQgaW4gS2NvbmZpZyBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfUkVESVJFQ1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xNDk9Y29uZmlnIElGQlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMTUxLVx0ZGVwZW5kcyBvbiBORVRfQUNUX01JUlJFRCB8fCBORlRfRldEX05FVERFVlxuZHJpdmVycy9uZXQvS2NvbmZpZzoxNTI6XHRzZWxlY3QgTkVUX1JFRElSRUNUXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1My1cdGhlbHBcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nj1zdHJ1Y3Qgc2tfYnVmZiB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDE5LVx0X191OFx0XHRcdHJlZGlyZWN0ZWQ6MTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTAyMDojaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDIxLVx0X191OFx0XHRcdGZyb21faW5ncmVzczoxO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnJvbV9pbmdyZXNzKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQzMS1cdHNrYi1cdTAwM2VyZWRpcmVjdGVkID0gMTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQzMjojaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMzLVx0c2tiLVx1MDAzZWZyb21faW5ncmVzcyA9IGZyb21faW5ncmVzcztcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU0NDQ9c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ3LVx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAxO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDQ4OiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDktXHRza2ItXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xuLS1cbm5ldC9LY29uZmlnPTU1PWNvbmZpZyBORVRfWEdSRVNTXG4tLVxubmV0L0tjb25maWctNTktXG5uZXQvS2NvbmZpZzo2MDpjb25maWcgTkVUX1JFRElSRUNUXG5uZXQvS2NvbmZpZy02MS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMDgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYnJpZGdlIHN1YnN5c3RlbSwgYW5kIGBDT05GSUdfQlJJREdFYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCDigJMgdGhhdCBlbmFibGVzIHRoZSB3aG9sZSBzaGViYW5nLCBpbmNsdWRpbmcgYGJyX2lucHV0LmNgLiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCYjMzk7cyBub3QgYWx3YXlzIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzZWUgaWYgYENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRWAgb3IgYENPTkZJR19CUklER0VfTkVURklMVEVSYCBoYXZlIGFueSBiZWFyaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyBvbi4gVGhlc2UgZmlsdGVyIG9wdGlvbnMgY291bGQgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IHRoZSBicmlkZ2UgaW50ZXJhY3RzIHdpdGggdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcCwgaWYgYW55LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBkaXZpbmcgaW50byBgbmV0L2JyaWRnZS9LY29uZmlnYCBhbmQgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdgIGlzIGVzc2VudGlhbCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJwbGF5IGFuZCB3aGVyZSBJIG1pZ2h0IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cywgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvIEkmIzM5O20gZGVhbGluZyB3aXRoLiBObyBwb2ludCBndWVzc2luZyB3aGVuIHRoZSBhbnN3ZXIgaXMgaW4gdGhlIEtjb25maWcgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNDc9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE0ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTE0OS1DT05GSUdfTkZfQ09OTlRSQUNLPW1cbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE2Mz1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6MTY0OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTY1LUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9MTc5PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZzoxODA6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xODEtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvYm1pcHNfc3RiX2RlZmNvbmZpZz03NT1DT05GSUdfQlJJREdFPXlcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc6NzY6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9taXBzL2NvbmZpZ3MvYm1pcHNfc3RiX2RlZmNvbmZpZy03Ny1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTYxPUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24zX2RlZmNvbmZpZzo2MjpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnLTYzLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZz00Nz1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZzo0ODojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZy00OS1DT05GSUdfTkZfQ09OTlRSQUNLPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnPTQ0PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzo0NTojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWctNDYtQ09ORklHX05GX0NPTk5UUkFDSz1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9NDY9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZzo0NzojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnLTQ4LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxuLS1cbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc9NjY9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnOjY3OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNjgtQ09ORklHX05GX0NPTk5UUkFDSz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTE4MD1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxODE6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTE4Mi1DT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSz1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTE3MT1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzoxNzI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTE3My1DT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSz1tXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDozOiNkZWZpbmUgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg9OD1zdHJ1Y3QgbmZfYnJpZGdlX2ZyYWdfZGF0YSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMTQtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTE2LVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5fcHJlcm91dGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg1LX1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjg2OiNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqL1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtODctXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODU9c3RydWN0IHRzX2NvbmZpZztcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjg2LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoyODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4OC1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA0Mz1lbnVtIHNrYl9leHRfaWQge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDQ0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDQ1LVx0U0tCX0VYVF9CUklER0VfTkYsXG4tLVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg9NDg0PXN0YXRpYyBpbmxpbmUgaW50IG5laWdoX2V2ZW50X3NlbmQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDg4LVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmg6NDg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDkwLXN0YXRpYyBpbmxpbmUgaW50IG5laWdoX2hoX2JyaWRnZShzdHJ1Y3QgaGhfY2FjaGUgKmhoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaD05PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2VfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMC17XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTItXHRzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKmIgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9NDM9c3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICpicmlkZ2VfcGFyZW50X3J0YWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTQ0LXtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDo0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC00Ni1cdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQ7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg9MTM9c3RydWN0IG5mX3F1ZXVlX2VudHJ5IHtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0xOS1cdHVuc2lnbmVkIGludFx0XHRob29rX2luZGV4O1x0LyogaW5kZXggaW4gaG9va19lbnRyaWVzLVx1MDAzZWhvb2tbXSAqL1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0yMS1cdHN0cnVjdCBuZXRfZGV2aWNlXHQqYnJpZGdlX2Rldjtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzojZGVmaW5lIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtNC1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTM0PWVudW0gbmZfYnJfaG9va19wcmlvcml0aWVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQ0LVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDo0NTojZW5kaWYgLyogX1VBUElfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSCAqL1xuLS1cbm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG4tLVxubmV0L0tjb25maWctMjMwLVxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXG5uZXQvS2NvbmZpZy0yMzItXHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTM9YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSAmIzQzOz0gYnJfc3lzZnNfaWYubyBicl9zeXNmc19ici5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE0LVxubmV0L2JyaWRnZS9NYWtlZmlsZToxNTpicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICYjNDM7PSBicl9uZl9jb3JlLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMTYtXG4tLVxubmV0L2JyaWRnZS9NYWtlZmlsZT0xOD1icl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBicl9uZXRmaWx0ZXJfaXB2Ni5vXG5uZXQvYnJpZGdlL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXG4tLVxubmV0L2JyaWRnZS9ici5jPTQyNT1zdGF0aWMgaW50IF9faW5pdCBicl9pbml0KHZvaWQpXG4tLVxubmV0L2JyaWRnZS9ici5jLTQ2Ni1cbm5ldC9icmlkZ2UvYnIuYzo0Njc6I2lmIElTX01PRFVMRShDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnIuYy00NjgtXHRwcl9pbmZvKFwmIzM0O2JyaWRnZTogZmlsdGVyaW5nIHZpYSBhcnAvaXAvaXA2dGFibGVzIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0yMDQ9c3RhdGljIGludCBicl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjExLVx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVRVX1NFVF9CWV9VU0VSLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MjEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0yMTMtXHQvKiByZW1lbWJlciB0aGUgTVRVIGluIHRoZSBydGFibGUgZm9yIFBNVFUgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1NC0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTU2LVx0aWYgKGRhdGFbSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTXSkge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2MTk9c3RhdGljIHNpemVfdCBicl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTY2Ny0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE2Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjY5LVx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpICYjNDM7ICAgICAvKiBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjc4PXN0YXRpYyBpbnQgYnJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzkxLSNlbmRpZlxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc5MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTMtXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFUyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNC1cdHN0cnVjdCBsaXN0X2hlYWRcdFx0cG9ydF9saXN0O1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTE2LVx0dW5pb24ge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTIwMjM9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZl9icl9vcHMgX19yY3UgKm5mX2JyX29wcztcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI1LS8qIGJyX25ldGZpbHRlci5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoyMDI2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAyNy1pbnQgYnJfbmZfY29yZV9pbml0KHZvaWQpO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYz03NzE9c3RhdGljIERFVklDRV9BVFRSX1JXKG11bHRpY2FzdF9tbGRfdmVyc2lvbik7XG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3My0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo3NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtNzc1LXN0YXRpYyBzc2l6ZV90IG5mX2NhbGxfaXB0YWJsZXNfc2hvdyhcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9OTM1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpicmlkZ2VfYXR0cnNbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc2LSNlbmRpZlxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjk3NzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy05NzgtXHRcdTAwMjZkZXZfYXR0cl9uZl9jYWxsX2lwdGFibGVzLmF0dHIsXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xubmV0L2NvcmUvc2tidWZmLmM6NTE1MTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9jb3JlL3NrYnVmZi5jLTUxNTItXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oXHUwMDNlXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jOjIwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0yMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYz0yNzM9dm9pZCBuZl9zZW5kX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxMy1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jOjMxNDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxNS1cdC8qIElmIHdlIHVzZSBpcF9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYz0zMTM9dm9pZCBuZl9zZW5kX3Jlc2V0NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODItXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYzozODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODQtXHQvKiBJZiB3ZSB1c2UgaXA2X2xvY2FsX291dCBmb3IgYnJpZGdlZCB0cmFmZmljLCB0aGUgTUFDIHNvdXJjZSBvblxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDg1PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODYtXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O3BoeXNkZXZcJiMzNDsgbWF0Y2ggc3VwcG9ydCYjMzk7XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4NzpcdGRlcGVuZHMgb24gQlJJREdFIFx1MDAyNlx1MDAyNiBCUklER0VfTkVURklMVEVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ4OC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTEyOD1oYXNoX25ldGlmYWNlNF9kYXRhX25leHQoc3RydWN0IGhhc2hfbmV0aWZhY2U0X2VsZW0gKm5leHQsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxMzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTQwLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfcGh5c2luZGV2X25hbWUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xNTY9aGFzaF9uZXRpZmFjZTRfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3Ny1cdGlmIChvcHQtXHUwMDNlY21kZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjE3ODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNzktXHRcdGNvbnN0IGNoYXIgKmVpZmFjZSA9IFNSQ0RJUiA/IGdldF9waHlzaW5kZXZfbmFtZShza2IsIHh0X25ldChwYXIpKSA6XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM3Nz1oYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMzk1LVx0aWYgKG9wdC1cdTAwM2VjbWRmbGFncyBcdTAwMjYgSVBTRVRfRkxBR19QSFlTREVWKSB7XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5Ny1cdFx0Y29uc3QgY2hhciAqZWlmYWNlID0gU1JDRElSID8gZ2V0X3BoeXNpbmRldl9uYW1lKHNrYiwgeHRfbmV0KHBhcikpIDpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2xvZ19zeXNsb2cuYz0xMTM9bmZfbG9nX2R1bXBfcGFja2V0X2NvbW1vbihzdHJ1Y3QgbmZfbG9nX2J1ZiAqbSwgdTggcGYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmMtMTI2LVx0XHRcdG91dCA/IG91dC1cdTAwM2VuYW1lIDogXCYjMzQ7XCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jOjEyNzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyOC1cdHBoeXNpbmRldiA9IG5mX2JyaWRnZV9nZXRfcGh5c2luZGV2KHNrYiwgbmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9NTk9c3RhdGljIHZvaWQgbmZfcXVldWVfZW50cnlfcmVsZWFzZV9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTY5LVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTcxLVx0ZGV2X3B1dChlbnRyeS1cdTAwM2VicmlkZ2VfZGV2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9ODQ9c3RhdGljIHZvaWQgX19uZl9xdWV1ZV9lbnRyeV9pbml0X3BoeXNkZXZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODUte1xubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTg3LVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGVudHJ5LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9MTEyPWJvb2wgbmZfcXVldWVfZW50cnlfZ2V0X3JlZnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTIyLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjEyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy0xMjQtXHRkZXZfaG9sZChlbnRyeS1cdTAwM2VicmlkZ2VfZGV2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy00MS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDMtI2luY2x1ZGUgXCYjMzQ7Li4vYnJpZGdlL2JyX3ByaXZhdGUuaFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTQyMj1zdGF0aWMgaW50IG5mdWxubF9wdXRfYnJpZGdlKHN0cnVjdCBuZnVsbmxfaW5zdGFuY2UgKmluc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDUzLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NDU0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDU1LXN0YXRpYyBpbnQgbmZsb2dfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NDc0PV9fYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5mbmxfbG9nX25ldCAqbG9nLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTUwOS1cdGlmIChpbmRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTEwOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTUxMS1cdFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVx1MDAzZXNrYiwgTkZVTEFfSUZJTkRFWF9JTkRFVixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01NDUtXHRpZiAob3V0ZGV2KSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo1NDY6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ3LVx0XHRpZiAobmxhX3B1dF9iZTMyKGluc3QtXHUwMDNlc2tiLCBORlVMQV9JRklOREVYX09VVERFVixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz03MTg9bmZ1bG5sX2xvZ19wYWNrZXQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTc1Ni1cdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXHQvKiBpZmluZGV4ICovXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo3NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTgtXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVx0LyogaWZpbmRleCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy01MS0jaW5jbHVkZSBcJiMzNDsuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz00Njc9c3RhdGljIGJvb2wgbmZfYnJpZGdlX3BvcnRzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTQ2OC17XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjQ2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDcwLVx0aWYgKCFuZl9icmlkZ2VfcG9ydF92YWxpZChlbnRyeS1cdTAwM2VwaHlzaW4pIHx8XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz02NzU9c3RhdGljIGludCBuZl9xdWV1ZV9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICplbnRza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODItXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjY4MzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNjg0LXN0YXRpYyBpbnQgbmZxbmxfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MTI9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM3LVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcdC8qIGlmaW5kZXggKi9cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03MzktXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVx0LyogaWZpbmRleCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODMyLVx0aWYgKGluZGV2KSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgzMzojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgzNC1cdFx0aWYgKG5sYV9wdXRfYmUzMihza2IsIE5GUUFfSUZJTkRFWF9JTkRFViwgaHRvbmwoaW5kZXYtXHUwMDNlaWZpbmRleCkpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODYzLVx0aWYgKG91dGRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4NjQ6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04NjUtXHRcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfT1VUREVWLCBodG9ubChvdXRkZXYtXHUwMDNlaWZpbmRleCkpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA0OD1uZl9xdWV1ZV9lbnRyeV9kdXAoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA2MS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTA2My0vKiBXaGVuIGNhbGxlZCBmcm9tIGJyaWRnZSBuZXRmaWx0ZXIsIHNrYi1cdTAwM2VkYXRhIG11c3QgcG9pbnQgdG8gTUFDIGhlYWRlclxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQ5OT1kZXZfY21wKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGxvbmcgaWZpbmRleClcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTUwMC17XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE1MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE1MDItXHRpbnQgcGh5c2luaWYsIHBoeXNvdXRpZjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZz03PUNPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnOjg6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctOS1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJyaWRnZSBGcmFtZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJyaWRnZSBmcmFtZXMgYXJlIGhhbmRsZWQuIEZpcnN0LCBgQ09ORklHX0JSSURHRWAgaXMgdGhlIGtleSDigJMgdGhhdCYjMzk7cyB3aGF0IGNvbXBpbGVzIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gYGJyX2lucHV0LmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBhIGNvdXBsZSBvZiBzeW1ib2xzLiBgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaGAganVtcHMgb3V0IGJlY2F1c2UgaXQmIzM5O3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBjcnVjaWFsbHksIGNhbGxzIGBicl9wYXNzX2ZyYW1lX3VwYCwgd2hpY2ggaW4gdHVybiBsZWFkcyB0byBgTkZfSE9PS2AgZm9yIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAuIFRoYXQmIzM5O3MgYSBkaXJlY3QgY2hhaW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGBicl9nZXRfcnhfaGFuZGxlcmAgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLCBhbmQgaW4gYGJyX2lucHV0LmNgLgoKTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgYW5kIGFsc28gaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGluZyB0byByZWNlaXZpbmcgb3IgaGFuZGxpbmcgZnJhbWVzIG9uIHRoZSBicmlkZ2UuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBvZiBhbnl0aGluZyBJIG1heSBoYXZlIG1pc3NlZCBpbiBgYnJfaW5wdXQuY2AuIEkgc2hvdWxkIGFsc28gY2hlY2sgYGJyX3ByaXZhdGUuaGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQsIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticl9oYW5kbGVfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2ZvcndhcmQuYz03Mz1zdGF0aWMgdm9pZCBfX2JyX2ZvcndhcmQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODAtXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4MTpcdC8qIE1hcmsgdGhlIHNrYiBmb3IgZm9yd2FyZGluZyBvZmZsb2FkIGVhcmx5IHNvIHRoYXQgYnJfaGFuZGxlX3ZsYW4oKVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODItXHQgKiBjYW4ga25vdyB3aGV0aGVyIHRvIHBvcCB0aGUgVkxBTiBoZWFkZXIgb24gZWdyZXNzIG9yIGtlZXAgaXQuXG4tLVxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtODYtXHR2ZyA9IG5icF92bGFuX2dyb3VwX3JjdSh0byk7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4NzpcdHNrYiA9IGJyX2hhbmRsZV92bGFuKHRvLVx1MDAzZWJyLCB0bywgdmcsIHNrYik7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04OC1cdGlmICghc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zOT1zdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy02Ni1cdHNrYi1cdTAwM2VkZXYgPSBicmRldjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo2NzpcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy02OC1cdGlmICghc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy04MS0vKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo4MjppbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy04My17XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI0OC19XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI1MC1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyNTE6c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjY0LS8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI2NTpzdGF0aWMgaW50IGJyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjY2LXtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyNjc6XHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNjgtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5My1cdFx0XHQgICBORlBST1RPX0JSSURHRSwgc2tiLVx1MDAzZWRldiwgTlVMTCwgTlVMTCxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyOTQ6XHRcdFx0ICAgbmV0LCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yOTUtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMxOC1cdG5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzE5Olx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzIxOlx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMyMi0jZW5kaWZcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0NC0gKi9cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNDYte1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNjgtXHRpZiAodGVzdF9iaXQoQlJfVkxBTl9UVU5ORUxfQklULCBcdTAwMjZwLVx1MDAzZWZsYWdzKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNjk6XHRcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNzAtXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM5NS1cdFx0XHQqcHNrYiA9IHNrYjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozOTY6XHRcdFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzk3LVx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQwNy1cdFx0XHQqcHNrYiA9IHNrYjtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0MDg6XHRcdFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDA5LVx0XHRcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQyNi1cdFx0XHQgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQyNzpcdFx0XHQgICAgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaCkgPT0gMSkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQyOC1cdFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjMtICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDY0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZV9kdW1teShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDY1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDY5PXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzEtXHRpZiAobmV0ZGV2X3VzZXNfZHNhKGRldikpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDcyOlx0XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lX2R1bW15O1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3My1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzQ6XHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3NS19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNTU9dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzMtICogZG9uJiMzOTt0LCB3ZSB1c2UgdGhlIG5laWdoYm91ciBmcmFtZXdvcmsgdG8gZmluZCBvdXQuIEluIGJvdGggY2FzZXMsIHdlIG1ha2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc0OiAqIHN1cmUgdGhhdCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKCkgaXMgY2FsbGVkIGFmdGVyd2FyZHMuXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3NS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mjc2PWludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzA2LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMDc6XHRcdFx0cmV0ID0gYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIHNrLCBza2IpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMDgtXHRcdH0gZWxzZSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zNzY9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzAtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzE6XHRcdFx0ICBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDMyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDA1PXN0YXRpYyB2b2lkIGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Vfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyNi1cdG5mX2JyaWRnZS1cdTAwM2VwaHlzb3V0ZGV2ID0gTlVMTDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAyNzpcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyOC19XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jPTEwMT1zdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTMtXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE1NDpcdFx0XHQgIHNrYi1cdTAwM2VkZXYsIE5VTEwsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jLTE1NS1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Mjk9aW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzEtLyogYnJfaW5wdXQuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTMyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTkzMy1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU4OT1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTkwOnN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTkxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3MTY9c3RhdGljIGlubGluZSBib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3MjEtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzIyOnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmJyX2hhbmRsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3MjMtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg9NDM9dm9pZCB2bGFuX3R1bm5lbF9pbmZvX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00NC1cdFx0XHQgIHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjQ1OnZvaWQgYnJfaGFuZGxlX2luZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00Ni1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtNDctXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6NDg6aW50IGJyX2hhbmRsZV9lZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00OS1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg9NzI9c3RhdGljIGlubGluZSB2b2lkIHZsYW5fdHVubmVsX2luZm9fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC03Ni1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaDo3NzpzdGF0aWMgaW5saW5lIGludCBicl9oYW5kbGVfaW5ncmVzc192bGFuX3R1bm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTc4LVx0XHRcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9NDQ2PXN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNDc5LVxubmV0L2JyaWRnZS9icl92bGFuLmM6NDgwOnN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00ODEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtNTMxLVx0aWYgKHAgXHUwMDI2XHUwMDI2IChwLVx1MDAzZWZsYWdzIFx1MDAyNiBCUl9WTEFOX1RVTk5FTCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo1MzI6XHQgICAgYnJfaGFuZGxlX2VncmVzc192bGFuX3R1bm5lbChza2IsIHYpKSB7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy01MzMtXHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYz0xNTc9dm9pZCB2bGFuX3R1bm5lbF9kZWluaXQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE2MS1cbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYzoxNjI6dm9pZCBicl9oYW5kbGVfaW5ncmVzc192bGFuX3R1bm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE2My1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE4NS1cbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYzoxODY6aW50IGJyX2hhbmRsZV9lZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYy0xODctXHRcdFx0XHQgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NjUKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogQnJpZGdlZCBOZXR3b3JrIEZyYW1lIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYCBhbmQgYGJyX2dldF9yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZyYW1lIHByb2Nlc3NpbmcgcGF0aCwgc28gSSYjMzk7bGwgc3RhcnQgd2l0aCBgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaGAuIEZyb20gbXkgZXhwZXJpZW5jZSwgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBlbGVtZW50LCBzaXR0aW5nIGluIGBicl9pbnB1dC5jYC4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBjYWxscyBgYnJfcGFzc19mcmFtZV91cGAsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgZ2V0cyBpbnZvbHZlZC4gVGhhdCYjMzk7cyBhIHZpdGFsIGNvbm5lY3Rpb24gZm9yIG1lLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBjb25maXJtIHRoZSByZXF1aXJlbWVudHMuIFdlJiMzOTt2ZSBnb3QgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIChnb29kISksIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGluZGVlZCB0aGUgb25lcyBJIHBpY2tlZDogYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgIGFuZCBgYnJfZ2V0X3J4X2hhbmRsZXJgLiAgV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGJyaWRnZSwgc28gdGhlIGBFbmFibGVDb25maWdzYCBpbmNsdWRlIGBCUklER0VgLCBhcyBleHBlY3RlZC4gIFRoYXQmIzM5O3MgYWxsIGFkZGluZyB1cC4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkgdGhpbmsgd2UgaGF2ZSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIG1vdmUgZm9yd2FyZCBhbmQgbWFrZSB0aGUgbmVjZXNzYXJ5IGNhbGxzIHRvIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgd2UmIzM5O3JlIHJlYWR5IHRvIHByb2NlZWQgYW5kIGRpZyBpbnRvIHRoZSBmdXp6aW5nIHByb2Nlc3MgaXRzZWxmIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCYjMzQ7LAogICAgJiMzNDticl9nZXRfcnhfaGFuZGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBicl9pbnB1dC5jIGJ5IHNldHRpbmcgdGhlIHNrYiByZWRpcmVjdGVkIGZsYWcgdmlhIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKCkgd2hlbiBwYXNzaW5nIGJyaWRnZSBmcmFtZXMgdXAgZm9yIGxvY2FsIGRlbGl2ZXJ5LCBwcmV2ZW50aW5nIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGFuZCBwb3RlbnRpYWxseSBjb3JydXB0aW5nIG9yIHJlYWxsb2NhdGluZyBtZW1vcnkuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2hhbmRsZV9mcmFtZV9maW5pc2gmIzM0OywKICAgICYjMzQ7YnJfZ2V0X3J4X2hhbmRsZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cblxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWI2OTRlZGQxNjllOGI0MGEyNGYzZGJkNTgxMjllMTNlOTVkN2NmZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDEzOjIzOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjBkMDhjM2MyMDM2ZjcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTI3LDYgJiM0MzsyNywxMiBAQCBzdGF0aWMgaW50CiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7CiYjNDM7CiYjNDM7CS8qIFJlLWluamVjdGVkIGZvciBsb2NhbCBkZWxpdmVyeTogZG8gbm90IGxldCBnZW5lcmljIFhEUCBydW4gb24gdGhlCiYjNDM7CSAqIGJyaWRnZSBkZXZpY2UgYSBzZWNvbmQgdGltZSwgaXQgY291bGQgcmVhbGxvY2F0ZSB0aGUgaGVhZCB2aWEKJiM0MzsJICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS4KJiM0MzsJICovCiYjNDM7CXNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpOwogCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE4CgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJyaWRnZSBJbnB1dCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgZnVuY3Rpb24uCgpJIHNlZSB0aGF0IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtgIGlzIGJlaW5nIGFkZGVkIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRvIGBuZXRpZl9yZWNlaXZlX3NrYihza2IpYC4gU28sIHRoZSBpbnRlbnQgaXMgY2xlYXJseSByZWxhdGVkIHRvIHRoZSAmIzM0O3JlZGlyZWN0ZWQmIzM0OyBzdGF0ZSBvZiB0aGUgU0tCLCBhbmQsIGNydWNpYWxseSwgaXQgcHJldmVudHMgY2xlYXJpbmcgdGhhdCBmbGFnIGxhdGVyIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBzcGVjaWZpYyBhZGRpdGlvbiBpcyByZWxldmFudC4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2JyaWRnZS9icl9pbnB1dC5jYCBhcm91bmQgbGluZSAyNy4gSSBhbHNvIG5lZWQgYSByZWZyZXNoZXIgb24gZXhhY3RseSB3aGF0IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAgaXMgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIFNwZWNpZmljYWxseSwgd2hhdCBkb2VzIHRoaXMgZnVuY3Rpb24gKmRvKiB3aGVuIHNldCB0byBmYWxzZT8gQW5kIHdoYXQgaW1wYWN0IGRvZXMgKnByZXZlbnRpbmcgdGhlIGNsZWFyaW5nKiBvZiB0aGUgZmxhZyBoYXZlIG9uIHRoZSBzdWJzZXF1ZW50IGBuZXRpZl9yZWNlaXZlX3NrYmAgY2FsbD8gVGhpcyBpcyBsaWtlbHkgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UsIGFuZCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKlx0SGFuZGxlIGluY29taW5nIGZyYW1lc1xuICAgNDpcdCAqXHRMaW51eCBldGhlcm5ldCBicmlkZ2VcbiAgIDU6XHQgKlxuICAgNjpcdCAqXHRBdXRob3JzOlxuICAgNzpcdCAqXHRMZW5uZXJ0IEJ1eXRlbmhla1x0XHRcdTAwM2NidXl0ZW5oQGdudS5vcmdcdTAwM2VcbiAgIDg6XHQgKi9cbiAgIDk6XHRcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFx1MDAzZVxuICAxNTpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmhcdTAwM2VcbiAgMTc6XHQjZW5kaWZcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZWlnaGJvdXIuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY25ldC9hcnAuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gIDIyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4gIDIzOlx0I2luY2x1ZGUgXCYjMzQ7YnJfcHJpdmF0ZS5oXCYjMzQ7XG4gIDI0Olx0I2luY2x1ZGUgXCYjMzQ7YnJfcHJpdmF0ZV90dW5uZWwuaFwmIzM0O1xuICAyNTpcdFxuICAyNjpcdHN0YXRpYyBpbnRcbiAgMjc6XHRicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgMjg6XHR7XG4gIDI5Olx0XHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4gIDMwOlx0XG4gIDMxOlx0XHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxuICAzMjpcdFx0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuICAzMzpcdFx0ICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS5cbiAgMzQ6XHRcdCAqL1xuICAzNTpcdFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gIDM2Olx0XHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiAgMzc6XHR9XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbiAgNDA6XHR7XG4gIDQxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsICpicmRldiA9IEJSX0lOUFVUX1NLQl9DQihza2IpLVx1MDAzZWJyZGV2O1xuICA0MjpcdFx0c3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoYnJkZXYpO1xuICA0MzpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gIDQ0Olx0XG4gIDQ1Olx0XHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGJyZGV2LCBza2ItXHUwMDNlbGVuKTtcbiAgNDY6XHRcbiAgNDc6XHRcdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xuICA0ODpcdFxuICA0OTpcdFx0LyogUmVzZXQgdGhlIG9mZmxvYWRfZndkX21hcmsgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHN0YWNrZWRcbiAgNTA6XHRcdCAqIGJyaWRnZSBhYm92ZSwgYW5kIGl0IHNob3VsZCBub3QgdGhpbmsgdGhpcyBicmlkZ2UgaXQgZG9pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3NldF9yZWRpcmVjdGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jPTQxMT1tbHg1ZV90Y19pbnRfcG9ydF9kZXZfZndkKHN0cnVjdCBtbHg1ZV90Y19pbnRfcG9ydF9wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ0OC1cdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYzo0NDk6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjL2ludF9wb3J0LmMtNDUwLVx0XHQqZm9yd2FyZF90eCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1My1cdFx0c2tiX3B1c2hfcmNzdW0oc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYzo0NTQ6XHRcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1NS1cdFx0KmZvcndhcmRfdHggPSB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQyND1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2lzX3JlZGlyZWN0ZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0MjgtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjU0Mjk6c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZyb21faW5ncmVzcylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQzMC17XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01NDM5PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDMtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjU0NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDUtXHRcdFx0XHRcdCAgICAgIGJvb2wgZnJvbV9pbmdyZXNzKVxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9ODAzPWludCBjcHVfbWFwX2dlbmVyaWNfcmVkaXJlY3Qoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmMtODA4LVx0X19za2JfcHVsbChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbmtlcm5lbC9icGYvY3B1bWFwLmM6ODA5Olx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgZmFsc2UpO1xua2VybmVsL2JwZi9jcHVtYXAuYy04MTAtXHRfX3B0cl9zZXRfYml0KDAsIFx1MDAyNnNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3PWJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNC1cdCAqL1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM1Olx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzYtXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxNTUtXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xubmV0L2NvcmUvZmlsdGVyLmM6MjE1NjpcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYz0yND1zdGF0aWMgdm9pZCBuZnRfZndkX25ldGRldl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtMzMtXHRza2ItXHUwMDNlc2tiX2lpZiA9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleDtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzozNDpcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIG5mdF9ob29rKHBrdCkgPT0gTkZfTkVUREVWX0lOR1JFU1MpO1xubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTM1LVxuLS1cbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM9MjU0PXN0YXRpYyBpbnQgdGNmX21pcnJlZF90b19kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9taXJyZWQgKm0sXG4tLVxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMjUtXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjMyNjpcdFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYl90b19zZW5kLCBza2JfdG9fc2VuZC1cdTAwM2V0Y19hdF9pbmdyZXNzKTtcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIgTXlzdGVyeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAuIE15IGludHVpdGlvbiB0ZWxscyBtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBmb3J3YXJkaW5nIG9yIHJlZGlyZWN0aW9uIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2ssIGxpa2VseSB3aXRoIHNvbWUgb3B0aW1pemF0aW9uIGNvbmNlcm5pbmcgY2xlYXJpbmcgZGF0YS4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NDI0LiBUaGF0IHNob3VsZCBiZSB0aGUgZGVmaW5pdGlvbiwgb3IgYXQgbGVhc3QgdGhlIHZpY2luaXR5IG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWNsYXJhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgc3Vycm91bmRpbmcgY29tbWVudHMgYXJlIGluc2lnaHRmdWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBmbGFncyBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYXMgcmVkaXJlY3RlZCBhbmQsIGNydWNpYWxseSwgKndoeSogdGhlICYjMzk7bm9jbGVhciYjMzk7IGFzcGVjdCBpcyBpbXBvcnRhbnQg4oCTIHdoYXQgZGF0YSBpcyAqbm90KiBiZWluZyBjbGVhcmVkIGFuZCBpbiB3aGF0IGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIHByb2JhYmx5IGdpdmUgbWUgdGhlIGtleSBpbnNpZ2h0IEkgbmVlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQyMDpcdFx0ICovXG41NDIxOlx0XHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGw0X2hkciwgY3N1bV9zdGFydCAtIGw0X2hkciwgcGFydGlhbCk7XG41NDIyOlx0fVxuNTQyMzpcdFxuNTQyNDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfaXNfcmVkaXJlY3RlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQyNTpcdHtcbjU0MjY6XHRcdHJldHVybiBza2ItXHUwMDNlcmVkaXJlY3RlZDtcbjU0Mjc6XHR9XG41NDI4Olx0XG41NDI5Olx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZyb21faW5ncmVzcylcbjU0MzA6XHR7XG41NDMxOlx0XHRza2ItXHUwMDNlcmVkaXJlY3RlZCA9IDE7XG41NDMyOlx0I2lmZGVmIENPTkZJR19ORVRfUkVESVJFQ1RcbjU0MzM6XHRcdHNrYi1cdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XG41NDM0Olx0XHRpZiAoc2tiLVx1MDAzZWZyb21faW5ncmVzcylcbjU0MzU6XHRcdFx0c2tiX2NsZWFyX3RzdGFtcChza2IpO1xuNTQzNjpcdCNlbmRpZlxuNTQzNzpcdH1cbjU0Mzg6XHRcbjU0Mzk6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG41NDQwOlx0e1xuNTQ0MTpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xuNTQ0MjpcdH1cbjU0NDM6XHRcbjU0NDQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjU0NDU6XHRcdFx0XHRcdFx0ICAgICAgYm9vbCBmcm9tX2luZ3Jlc3MpXG41NDQ2Olx0e1xuNTQ0NzpcdFx0c2tiLVx1MDAzZXJlZGlyZWN0ZWQgPSAxO1xuNTQ0ODpcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG41NDQ5Olx0XHRza2ItXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xuNTQ1MDpcdCNlbmRpZlxuNTQ1MTpcdH1cbjU0NTI6XHRcbjU0NTM6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2NzdW1faXNfc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuNTQ1NDpcdHtcbjU0NTU6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBfU0NUUClcbjU0NTY6XHRcdHJldHVybiBza2ItXHUwMDNlY3N1bV9ub3RfaW5ldDtcbjU0NTc6XHQjZWxzZVxuNTQ1ODpcdFx0cmV0dXJuIDA7XG41NDU5Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBQYWNrZXQgUmVkaXJlY3Rpb24gaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBza2JfaXNfcmVkaXJlY3RlZGAgb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgYHNrYi0mZ3Q7cmVkaXJlY3RlZGAgZmxhZyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBhbmQgKmhvdyogdGhlc2UgZWxlbWVudHMgYXJlIGVtcGxveWVkLiBJdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYSBwYWNrZXQmIzM5O3MgcmVkaXJlY3Rpb24gc3RhdHVzIGlzIGFzc2Vzc2VkIGFuZCBtYW5pcHVsYXRlZC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBwcmFjdGljYWwgdXNhZ2UgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cy4gVGhpcyBtZWFucyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgc291cmNlIGNvZGUsIHNlYXJjaGluZyBmb3IgYWxsIGluc3RhbmNlcyBvZiB0aGVzZSBzeW1ib2xzLiBJZGVudGlmeWluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIHRoZSBkaWZmZXJlbnQgbW9kdWxlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyByZWRpcmVjdGVkIHBhY2tldHMuIEnigJltIHRoaW5raW5nIHRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBleGFtaW5pbmcgcm91dGluZywgTkFULCBvciBwb3NzaWJseSBldmVuIHR1bm5lbCBoYW5kbGluZyBjb2RlLiBNeSBnb2FsIGlzIGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGFja2V0IGxpZmVjeWNsZSByZWxhdGVkIHRvIHRoaXMgcmVkaXJlY3Rpb24gc3RhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9pc19yZWRpcmVjdGVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9NTQwOD1zdGF0aWMgaW5saW5lIF9fd3N1bSBsY29fY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQyMy1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQyNDpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2lzX3JlZGlyZWN0ZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQyNS17XG4tLVxubmV0L2NvcmUvZGV2LmM9NTYzOD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU2NDctXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjU2NDg6XHRpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSlcbm5ldC9jb3JlL2Rldi5jLTU2NDktXHRcdHJldHVybiBYRFBfUEFTUztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3MAoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA1ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgbGluZTogYGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKSByZXR1cm4gWERQX1BBU1M7YC4gVGhlIHBhdGNoIGNvbW1lbnQgbWVudGlvbnMgdGhpcyBpcyB0byBwcmV2ZW50IGdlbmVyaWMgWERQIGZyb20gcnVubmluZyB0d2ljZSBvbiB0aGUgYnJpZGdlIGRldmljZSwgcGFydGljdWxhcmx5IGFmdGVyIGEgcmUtaW5qZWN0aW9uIHNjZW5hcmlvLiBBcHBhcmVudGx5LCB0aGlzIGRvdWJsZSBydW4gd2FzIGNhdXNpbmcgYHBza2JfZXhwYW5kX2hlYWQoKWAgdG8gcG90ZW50aWFsbHkgcmVhbGxvY2F0ZSB0aGUgU0tCIGhlYWQgYW5kIGZyZWVpbmcgdGhlIG9sZCBidWZmZXIgd2hpbGUgYSByZWZlcmVuY2Ugc3RpbGwgZXhpc3RlZCwgbGVhZGluZyB0byBhIG5hc3R5IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgYnVmZmVyIGNvcnJ1cHRpb24gc2NlbmFyaW8uCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbmVlZHMgdG8gY2F0Y2guIFNvIEkmIzM5O20gcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoxLiAgKipJbmZvLWxlYWsgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoZSBwYXRjaCBzaW1wbHkgZmxhZ3MgYSBwYWNrZXQgYW5kIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLgoyLiAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBwYXRjaCBzaW1wbHkgc2V0cyBzb21lIFNLQiBmbGFncy4gVGhlIHZhbHVlcyBhcmUgY29uc3RhbnQuCjMuICAqKk5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBObywgaXTigJlzIGp1c3Qgc2V0dGluZyBhbiBleGlzdGluZyBmbGFnLgo0LiAgKipBbHRlcmluZyBib3VuZHMgY2hlY2tzIG9yIGRhdGEgbGVuZ3RocywgcG90ZW50aWFsbHkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuCgpHaXZlbiBhbGwgb2YgdGhpcywgdGhlIGNvcmUgaXNzdWUgdGhlIHBhdGNoIGlzIHNvbHZpbmcgc2VlbXMgdG8gYmUgYSBjbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHNjZW5hcmlvIC0tIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIC0tIGNhdXNlZCBieSBpbmNvcnJlY3QgYnVmZmVyIGhhbmRsaW5nIGR1cmluZyBTS0IgcmUtaW5qZWN0aW9uIHdoZW4gZ2VuZXJpYyBYRFAgcnVucyB0d2ljZS4gVGhpcyAqdHlwZSogb2YgYnVnIGlzIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIEtBU0FOLgoKU28sIGRpZ2dpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggaW4gYGJyX25ldGlmX3JlY2VpdmVfc2tiKClgIGNhbGxzIGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKWAgd2hpY2ggY2FsbHMgYG5ldGlmX3JlY2VpdmVfc2tiKClgLCB3aGljaCBjb3JyZWN0bHkgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBydW5uaW5nIGEgc2Vjb25kIHRpbWUgb24gdGhlIGJyaWRnZSBhbmQgcHJldmVudGluZyBgcHNrYl9leHBhbmRfaGVhZCgpYCwgdGhlIGNvcmUgaXNzdWUuCgpUaGlzIHBhdGNoIGF2b2lkcyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gS01TQU4gYmVjYXVzZSBpdCYjMzk7cyBub3QgYWN0dWFsbHkgKmRlYWxpbmcqIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGp1c3QgZml4ZXMgYSBtZW1vcnkgbGlmZWN5Y2xlIHByb2JsZW0gYnkgcHJldmVudGluZyBhIGJ1ZyBmcm9tIGhhcHBlbmluZyB0aGF0IGNvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4gSXQmIzM5O3Mgc2FmZSB0byBzYXkgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4gVGltZSB0byBtYWtlIHRoYXQgY2FsbC4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cblxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1hcmtzIHRoZSBza2IgYXMgcmVkaXJlY3RlZCAoc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSkpIGluIGJyX25ldGlmX3JlY2VpdmVfc2tiKCkgcHJpb3IgdG8gY2FsbGluZyBuZXRpZl9yZWNlaXZlX3NrYigpLiBUaGlzIHByZXZlbnRzIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGR1cmluZyBsb2NhbCBkZWxpdmVyeSByZS1pbmplY3Rpb24sIHdoaWNoIG90aGVyd2lzZSByaXNrZWQgcmVhbGxvY2F0aW5nIHRoZSBza2IgaGVhZCBidWZmZXIgKHBza2JfZXhwYW5kX2hlYWQpIGFuZCBjYXVzaW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzIGJ1Z3MuXG5cblN1Y2ggYnVmZmVyIHJlYWxsb2NhdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBjb25kaXRpb25hbCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHktdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIzOjM5LjQyMDY2MjY5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNjQ0NjU2NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2hhbmRsZV9mcmFtZV9maW5pc2hcIixcbiAgICBcImJyX2dldF9yeF9oYW5kbGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYXJrcyB0aGUgc2tiIGFzIHJlZGlyZWN0ZWQgKHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpKSBpbiBicl9uZXRpZl9yZWNlaXZlX3NrYigpIHByaW9yIHRvIGNhbGxpbmcgbmV0aWZfcmVjZWl2ZV9za2IoKS4gVGhpcyBwcmV2ZW50cyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBkdXJpbmcgbG9jYWwgZGVsaXZlcnkgcmUtaW5qZWN0aW9uLCB3aGljaCBvdGhlcndpc2Ugcmlza2VkIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgYnVmZmVyIChwc2tiX2V4cGFuZF9oZWFkKSBhbmQgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2VzcyBidWdzLlxcblxcblN1Y2ggYnVmZmVyIHJlYWxsb2NhdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBjb25kaXRpb25hbCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHktdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyMzozOS40MjA2NjY2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTQwODM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViNjk0ZWRkMTY5ZThiNDBhMjRmM2RiZDU4MTI5ZTEzZTk1ZDdjZmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXFxuaW5kZXggZDg3YTVmOWZhOTJiNy4uMGQwOGMzYzIwMzZmNyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG5AQCAtMjcsNiArMjcsMTIgQEAgc3RhdGljIGludFxcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XFxuK1xcbitcXHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxcbitcXHQgKiBicmlkZ2UgZGV2aWNlIGEgc2Vjb25kIHRpbWUsIGl0IGNvdWxkIHJlYWxsb2NhdGUgdGhlIGhlYWQgdmlhXFxuK1xcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXFxuK1xcdCAqL1xcbitcXHRza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjIzOjQwLjg1NjY4ODc2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDI5NjE4ODA1MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2hhbmRsZV9mcmFtZV9maW5pc2hcIixcbiAgICBcImJyX2dldF9yeF9oYW5kbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYnJfaW5wdXQuYyBieSBzZXR0aW5nIHRoZSBza2IgcmVkaXJlY3RlZCBmbGFnIHZpYSBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcigpIHdoZW4gcGFzc2luZyBicmlkZ2UgZnJhbWVzIHVwIGZvciBsb2NhbCBkZWxpdmVyeSwgcHJldmVudGluZyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBhbmQgcG90ZW50aWFsbHkgY29ycnVwdGluZyBvciByZWFsbG9jYXRpbmcgbWVtb3J5LiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjY5NGVkZDE2OWU4YjQwYTI0ZjNkYmQ1ODEyOWUxM2U5NWQ3Y2ZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjBkMDhjM2MyMDM2ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTI3LDYgKzI3LDEyIEBAIHN0YXRpYyBpbnRcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4rXG4rXHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxuK1x0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuK1x0ICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS5cbitcdCAqL1xuK1x0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyMzo0MC44NTY2ODk5MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTg0NzU3NzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBSZXZpZXcgYW5kIEZ1enppbmcgVHJpYWdlOiBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgZm9yIHRoZSBMaW51eCBrZXJuZWwgYW5kIHRoZSB0YXNrIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgd2FycmFudHMgZnV6emluZyBhbmQsIGlmIHNvLCB0byBpZGVudGlmeSB0aGUga2V5IGVsZW1lbnRzIHRvIHRhcmdldC4gRmlyc3QsIEknbGwgZG8gYSBxdWljayByaXNrIGFuYWx5c2lzLiBGcm9tIHdoYXQgSSBzZWUgdGhpcyBpcyBhIHByZXR0eSBsb3ctcmlzaywgbGlrZWx5IGJlbmlnbiBwYXRjaC4gSXQgbG9va3MgbGlrZSB0eXBpY2FsIGRldmVsb3BlciBRQS9tYWludGFpbmVyIHJldmlldywgbm90aGluZyBzY3JlYW1pbmcgXCJ2dWxuZXJhYmlsaXR5XCIgYXQgbWUgcmlnaHQgb2ZmIHRoZSBiYXQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgZGlmZiBpdHNlbGYgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBtb2RpZnlpbmcgYG5ldC9icmlkZ2UvYnJfaW5wdXQuY2AuIFRoZSBjaGFuZ2UgbG9va3MgbGlrZSB0aGV5J3JlIGRpc2FibGluZyBnZW5lcmljIFhEUCBmdW5jdGlvbmFsaXR5IGluIGEgcmUtaW5qZWN0aW9uIHNjZW5hcmlvIHRvIGF2b2lkIHBvdGVudGlhbCBkb3VibGUtZnJlZXMgd2hlbiBhIGJ1ZmZlciBoYXMgYmVlbiByZWFsbG9jYXRlZC4gU28gaXQncyBhbiBvcHRpbWl6YXRpb24gb3IgYnVnZml4IHJlbGF0ZWQgdG8gaGFuZGxpbmcgcmUtaW5qZWN0ZWQgcGFja2V0cyBvbiBhIGJyaWRnZSBkZXZpY2UuIE5vdCBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiwgYnV0IGJyaWRnZSBjb2RlIGhhcyBhbHdheXMgaGFkIGEgd2F5IG9mIGJlaW5nLi4uaW50ZXJlc3RpbmcuIEknbGwgbWFrZSBhIG5vdGUgb2YgdGhhdC5cblxuSSdsbCBxdWlja2x5IGdyYWIgbXkgdG9vbHMgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUgdGhvcm91Z2hseS4gSSdsbCBiZSBsb29raW5nIGF0IGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLCBvZiBjb3Vyc2UsIGFuZCBgbmV0L2JyaWRnZS9LY29uZmlnYCB0byBzZWUgaG93IHRoaXMgYXJlYSBpcyBjb25maWd1cmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBJJ2xsIGFsc28gd2FudCB0byBsb29rIGF0IG5lYXJieSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSBmb2N1cyBzeW1ib2xzIGFuZCBlbmFibGUgY29uZmlncy4gTGV0J3Mgc2VlIGlmIHRoaXMgY2hhbmdlIG1vZGlmaWVzIGFueSBjcnVjaWFsIGNvbnRyb2wgZmxvdyBvciBpbnRyb2R1Y2VzIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBBbnkgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgYWx3YXlzIHdhcnJhbnQgbW9yZSBhdHRlbnRpb24uIE9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNDoyMi43MDQyNjg4MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqXFx0SGFuZGxlIGluY29taW5nIGZyYW1lc1xcbiAgIDQ6XFx0ICpcXHRMaW51eCBldGhlcm5ldCBicmlkZ2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKlxcdEF1dGhvcnM6XFxuICAgNzpcXHQgKlxcdExlbm5lcnQgQnV5dGVuaGVrXFx0XFx0XFx1MDAzY2J1eXRlbmhAZ251Lm9yZ1xcdTAwM2VcXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaFxcdTAwM2VcXG4gIDE3OlxcdCNlbmRpZlxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25laWdoYm91ci5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hcnAuaFxcdTAwM2VcXG4gIDIwOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAyMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1bGlzdC5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFxcImJyX3ByaXZhdGUuaFxcXCJcXG4gIDI0OlxcdCNpbmNsdWRlIFxcXCJicl9wcml2YXRlX3R1bm5lbC5oXFxcIlxcbiAgMjU6XFx0XFxuICAyNjpcXHRzdGF0aWMgaW50XFxuICAyNzpcXHRicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDI4OlxcdHtcXG4gIDI5OlxcdFxcdGJyX2Ryb3BfZmFrZV9ydGFibGUoc2tiKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0LyogUmUtaW5qZWN0ZWQgZm9yIGxvY2FsIGRlbGl2ZXJ5OiBkbyBub3QgbGV0IGdlbmVyaWMgWERQIHJ1biBvbiB0aGVcXG4gIDMyOlxcdFxcdCAqIGJyaWRnZSBkZXZpY2UgYSBzZWNvbmQgdGltZSwgaXQgY291bGQgcmVhbGxvY2F0ZSB0aGUgaGVhZCB2aWFcXG4gIDMzOlxcdFxcdCAqIHBza2JfZXhwYW5kX2hlYWQoKSBhbmQgZnJlZSBhIGJ1ZmZlciBzdGlsbCBpbiB1c2UuXFxuICAzNDpcXHRcXHQgKi9cXG4gIDM1OlxcdFxcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xcbiAgMzY6XFx0XFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuICAzNzpcXHR9XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHByb21pc2MpXFxuICA0MDpcXHR7XFxuICA0MTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsICpicmRldiA9IEJSX0lOUFVUX1NLQl9DQihza2IpLVxcdTAwM2VicmRldjtcXG4gIDQyOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGJyZGV2KTtcXG4gIDQzOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGJyZGV2LCBza2ItXFx1MDAzZWxlbik7XFxuICA0NjpcXHRcXG4gIDQ3OlxcdFxcdHZnID0gYnJfdmxhbl9ncm91cF9yY3UoYnIpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHQvKiBSZXNldCB0aGUgb2ZmbG9hZF9md2RfbWFyayBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgc3RhY2tlZFxcbiAgNTA6XFx0XFx0ICogYnJpZGdlIGFib3ZlLCBhbmQgaXQgc2hvdWxkIG5vdCB0aGluayB0aGlzIGJyaWRnZSBpdCBkb2luZ1xcbiAgNTE6XFx0XFx0ICogdGhhdCBicmlkZ2UncyB3b3JrIGZvcndhcmRpbmcgb3V0IGl0cyBwb3J0cy5cXG4gIDUyOlxcdFxcdCAqL1xcbiAgNTM6XFx0XFx0YnJfc3dpdGNoZGV2X2ZyYW1lX3VubWFyayhza2IpO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHQvKiBCcmlkZ2UgaXMganVzdCBsaWtlIGFueSBvdGhlciBwb3J0LiAgTWFrZSBzdXJlIHRoZVxcbiAgNTY6XFx0XFx0ICogcGFja2V0IGlzIGFsbG93ZWQgZXhjZXB0IGluIHByb21pc2MgbW9kZSB3aGVuIHNvbWVvbmVcXG4gIDU3OlxcdFxcdCAqIG1heSBiZSBydW5uaW5nIHBhY2tldCBjYXB0dXJlLlxcbiAgNTg6XFx0XFx0ICovXFxuICA1OTpcXHRcXHRpZiAoIShicmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykgXFx1MDAyNlxcdTAwMjZcXG4gIDYwOlxcdFxcdCAgICAhYnJfYWxsb3dlZF9lZ3Jlc3ModmcsIHNrYikpIHtcXG4gIDYxOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNjI6XFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbiAgNjM6XFx0XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRpbmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAgNjY6XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBicmRldjtcXG4gIDY3OlxcdFxcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcXG4gIDY4OlxcdFxcdGlmICghc2tiKVxcbiAgNjk6XFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbiAgNzA6XFx0XFx0LyogdXBkYXRlIHRoZSBtdWx0aWNhc3Qgc3RhdHMgaWYgdGhlIHBhY2tldCBpcyBJR01QL01MRCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNDoyMi43MDQzNTAxMzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcyNDk1OTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYGJyX25ldGlmX3JlY2VpdmVfc2tiYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAgZnVuY3Rpb24gYmV0dGVyLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBJIG5lZWQgdG8gaWRlbnRpZnkgaXRzIGNhbGxlcnMgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gcGlucG9pbnQgdGhvc2UgY2FsbCBzaXRlcy4gQW5kIG5vdCBqdXN0IHdpdGhpbiBgYnJfaW5wdXQuY2AgZWl0aGVyLiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC5cblxuVGhlbiwgSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGluIGBicl9pbnB1dC5jYCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGl0IGludGVyYWN0cyB3aXRoLCBvciBpZiBvdGhlciBtb2R1bGVzIG9yIHNvdXJjZSBmaWxlcyBhcmUgaW52b2x2ZWQgYXMgd2VsbCwgSSdsbCB0cmFjZSB0aGVtLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1hcCBpbiBteSBtaW5kIG9mIHRoaXMgZW50aXJlIHBhY2tldCBwcm9jZXNzaW5nIHBhdGguIEknbSBhZnRlciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcsIHRvcCB0byBib3R0b20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI0OjQ1LjQyOTMxMTQzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9uZXRpZl9yZWNlaXZlX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNj1zdGF0aWMgaW50XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI3OmJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yOC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9Mzk9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy03Ny1cXHRcXHQgICAgICAgZGV2X25ldChpbmRldiksIE5VTEwsIHNrYiwgaW5kZXYsIE5VTEwsXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjc4OlxcdFxcdCAgICAgICBicl9uZXRpZl9yZWNlaXZlX3NrYik7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTc5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjQ6NDUuNDc1OTg0MzY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwNTEyMzUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBicl9wYXNzX2ZyYW1lX3VwYCBmdW5jdGlvbi4gQXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIEkga25vdyBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IHdpdGhpbiB0aGUgYnJpZGdlLCBwYXJ0aWN1bGFybHkgaG93IGZyYW1lcyBhcmUgaGFuZGxlZCBhbmQgcGFzc2VkIHVwIHRoZSBzdGFjay4gU28sIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uLlxuXG4qKlRyYWNpbmcgYGJyX3Bhc3NfZnJhbWVfdXBgIGluIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgKipcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaWRlbnRpZnlpbmcgdGhlIGNhbGxlcnMgb2YgYGJyX3Bhc3NfZnJhbWVfdXBgIGJlY2F1c2UgdGhhdCB0ZWxscyBtZSAqd2hlbiogYSBmcmFtZSByZWFjaGVzIHRoaXMgcG9pbnQgaW4gcHJvY2Vzc2luZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBvdmVyYWxsIGxvZ2ljLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBjaGFpbiDigJMgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGJyX3Bhc3NfZnJhbWVfdXBgLCBhbmQgd2hhdCB0aG9zZSBmdW5jdGlvbnMgY2FsbCwgc28gSSBjYW4gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBob3cgYSBmcmFtZSBpcyBiZWluZyBoYW5kbGVkIGluIHRoZSBicmlkZ2luZyBwcm9jZXNzLiBUaGlzIGtpbmQgb2YgY2FsbCBhbmFseXNpcyBvZnRlbiBpbGx1bWluYXRlcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGJ1Z3MgcmVsYXRlZCB0byB0aGUgZnJhbWUgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaXMgYW4gaW1wb3J0YW50IGNhbGwgYW5kIHdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjU6MTIuNTI3MjIxMjMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MDpcXHRcXHQvKiB1cGRhdGUgdGhlIG11bHRpY2FzdCBzdGF0cyBpZiB0aGUgcGFja2V0IGlzIElHTVAvTUxEICovXFxuICA3MTpcXHRcXHRicl9tdWx0aWNhc3RfY291bnQoYnIsIE5VTEwsIHNrYiwgYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpLFxcbiAgNzI6XFx0XFx0XFx0XFx0ICAgQlJfTUNBU1RfRElSX1RYKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZXByb21pc2MgPSBwcm9taXNjO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRyZXR1cm4gTkZfSE9PSyhORlBST1RPX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sXFxuICA3NzpcXHRcXHRcXHQgICAgICAgZGV2X25ldChpbmRldiksIE5VTEwsIHNrYiwgaW5kZXYsIE5VTEwsXFxuICA3ODpcXHRcXHRcXHQgICAgICAgYnJfbmV0aWZfcmVjZWl2ZV9za2IpO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHQvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG4gIDgyOlxcdGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuICA4NTpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gYnJfcG9ydF9nZXRfcmN1KHNrYi1cXHUwMDNlZGV2KTtcXG4gIDg2OlxcdFxcdGVudW0gYnJfcGt0X3R5cGUgcGt0X3R5cGUgPSBCUl9QS1RfVU5JQ0FTVDtcXG4gIDg3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0ID0gTlVMTDtcXG4gIDg4OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4O1xcbiAgODk6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0O1xcbiAgOTA6XFx0XFx0Ym9vbCBsb2NhbF9yY3YsIG1jYXN0X2hpdCA9IGZhbHNlO1xcbiAgOTE6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eDtcXG4gIDkyOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW47XFxuICA5MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuICA5NDpcXHRcXHRib29sIHByb21pc2M7XFxuICA5NTpcXHRcXHR1MTYgdmlkID0gMDtcXG4gIDk2OlxcdFxcdHU4IHN0YXRlO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRpZiAoIXApXFxuICA5OTpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGJyID0gcC1cXHUwMDNlYnI7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmIChicl9tc3RfaXNfZW5hYmxlZChwKSkge1xcbiAxMDQ6XFx0XFx0XFx0c3RhdGUgPSBCUl9TVEFURV9GT1JXQVJESU5HO1xcbiAxMDU6XFx0XFx0fSBlbHNlIHtcXG4gMTA2OlxcdFxcdFxcdGlmIChwLVxcdTAwM2VzdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkge1xcbiAxMDc6XFx0XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX0JSSURHRV9JTkdSRVNTX1NUUF9TVEFURTtcXG4gMTA4OlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTA5OlxcdFxcdFxcdH1cXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0XFx0c3RhdGUgPSBwLVxcdTAwM2VzdGF0ZTtcXG4gMTEyOlxcdFxcdH1cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0YnJtY3R4ID0gXFx1MDAyNnAtXFx1MDAzZWJyLVxcdTAwM2VtdWx0aWNhc3RfY3R4O1xcbiAxMTU6XFx0XFx0cG1jdHggPSBcXHUwMDI2cC1cXHUwMDNlbXVsdGljYXN0X2N0eDtcXG4gMTE2OlxcdFxcdGlmICghYnJfYWxsb3dlZF9pbmdyZXNzKHAtXFx1MDAzZWJyLCBuYnBfdmxhbl9ncm91cF9yY3UocCksIHNrYiwgXFx1MDAyNnZpZCxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGF0ZSwgXFx1MDAyNnZsYW4pKVxcbiAxMTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdGlmICh0ZXN0X2JpdChCUl9QT1JUX0xPQ0tFRF9CSVQsIFxcdTAwMjZwLVxcdTAwM2VmbGFncykpIHtcXG4gMTIxOlxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiX3NyYyA9XFxuIDEyMjpcXHRcXHRcXHRcXHRicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsIHZpZCk7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdFxcdGlmICghZmRiX3NyYykge1xcbiAxMjU6XFx0XFx0XFx0XFx0LyogRkRCIG1pc3MuIENyZWF0ZSBsb2NrZWQgRkRCIGVudHJ5IGlmIE1BQiBpcyBlbmFibGVkXFxuIDEyNjpcXHRcXHRcXHRcXHQgKiBhbmQgZHJvcCB0aGUgcGFja2V0LlxcbiAxMjc6XFx0XFx0XFx0XFx0ICovXFxuIDEyODpcXHRcXHRcXHRcXHRpZiAodGVzdF9iaXQoQlJfUE9SVF9NQUJfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpKVxcbiAxMjk6XFx0XFx0XFx0XFx0XFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4gMTMwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZpZCwgQklUKEJSX0ZEQl9MT0NLRUQpKTtcXG4gMTMxOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTMyOlxcdFxcdFxcdH0gZWxzZSBpZiAoUkVBRF9PTkNFKGZkYl9zcmMtXFx1MDAzZWRzdCkgIT0gcCB8fFxcbiAxMzM6XFx0XFx0XFx0XFx0ICAgdGVzdF9iaXQoQlJfRkRCX0xPQ0FMLCBcXHUwMDI2ZmRiX3NyYy1cXHUwMDNlZmxhZ3MpKSB7XFxuIDEzNDpcXHRcXHRcXHRcXHQvKiBGREIgbWlzbWF0Y2guIERyb3AgdGhlIHBhY2tldCB3aXRob3V0IHJvYW1pbmcuICovXFxuIDEzNTpcXHRcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDEzNjpcXHRcXHRcXHR9IGVsc2UgaWYgKHRlc3RfYml0KEJSX0ZEQl9MT0NLRUQsIFxcdTAwMjZmZGJfc3JjLVxcdTAwM2VmbGFncykpIHtcXG4gMTM3OlxcdFxcdFxcdFxcdC8qIEZEQiBtYXRjaCwgYnV0IGVudHJ5IGlzIGxvY2tlZC4gUmVmcmVzaCBpdCBhbmQgZHJvcFxcbiAxMzg6XFx0XFx0XFx0XFx0ICogdGhlIHBhY2tldC5cXG4gMTM5OlxcdFxcdFxcdFxcdCAqL1xcbiAxNDA6XFx0XFx0XFx0XFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSwgdmlkLFxcbiAxNDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgQklUKEJSX0ZEQl9MT0NLRUQpKTtcXG4gMTQyOlxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTQzOlxcdFxcdFxcdH1cXG4gMTQ0OlxcdFxcdH1cXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0bmJwX3N3aXRjaGRldl9mcmFtZV9tYXJrKHAsIHNrYik7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdC8qIGluc2VydCBpbnRvIGZvcndhcmRpbmcgZGF0YWJhc2UgYWZ0ZXIgZmlsdGVyaW5nIHRvIGF2b2lkIHNwb29maW5nICovXFxuIDE0OTpcXHRcXHRpZiAodGVzdF9iaXQoQlJfTEVBUk5JTkdfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpKVxcbiAxNTA6XFx0XFx0XFx0YnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSwgdmlkLCAwKTtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0cHJvbWlzYyA9ICEhKGJyLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1BST01JU0MpO1xcbiAxNTM6XFx0XFx0bG9jYWxfcmN2ID0gcHJvbWlzYztcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0KSkge1xcbiAxNTY6XFx0XFx0XFx0LyogYnkgZGVmaW5pdGlvbiB0aGUgYnJvYWRjYXN0IGlzIGFsc28gYSBtdWx0aWNhc3QgYWRkcmVzcyAqL1xcbiAxNTc6XFx0XFx0XFx0aWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0KSkge1xcbiAxNTg6XFx0XFx0XFx0XFx0cGt0X3R5cGUgPSBCUl9QS1RfQlJPQURDQVNUO1xcbiAxNTk6XFx0XFx0XFx0XFx0bG9jYWxfcmN2ID0gdHJ1ZTtcXG4gMTYwOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDE2MTpcXHRcXHRcXHRcXHRwa3RfdHlwZSA9IEJSX1BLVF9NVUxUSUNBU1Q7XFxuIDE2MjpcXHRcXHRcXHRcXHRpZiAoYnJfbXVsdGljYXN0X3JjdihcXHUwMDI2YnJtY3R4LCBcXHUwMDI2cG1jdHgsIHZsYW4sIHNrYiwgdmlkKSlcXG4gMTYzOlxcdFxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gMTY0OlxcdFxcdFxcdH1cXG4gMTY1OlxcdFxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0aWYgKHN0YXRlID09IEJSX1NUQVRFX0xFQVJOSU5HKSB7XFxuIDE2ODpcXHRcXHRcXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fQlJJREdFX0lOR1JFU1NfU1RQX1NUQVRFO1xcbiAxNjk6XFx0XFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNToxMi41MjczMDYzMTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjY5NzUwNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyIGFuZCBHZW5lcmljIFhEUC9SZWRpcmVjdGVkIFNLQiBGbGFncyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcmAgZnVuY3Rpb25zLCBhbmQgbW9yZSBicm9hZGx5LCB0aGUgYmVoYXZpb3Igb2YgdGhvc2UgZ2VuZXJpYyBYRFAgYW5kIHJlZGlyZWN0ZWQgU0tCIGZsYWdzLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gdGhlIG51YW5jZXMuIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIFhEUCBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgcGFja2V0IHJlZGlyZWN0aW9uLiBXaGF0IGFyZSB0aGUga2V5IGltcGxpY2F0aW9ucyBvZiAqbm90KiBjbGVhcmluZyBzb21lIG9mIHRoZSBmbGFncz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgYW5kIG9wdGltaXphdGlvbnMgaW52b2x2ZWQ/IEl0IGlzIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgc3VidGxldGllcyBvZiB0aGUgZmxhZyBtYW5hZ2VtZW50IGZvciBvcHRpbWFsIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBjb3JyZWN0IGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gdG8gc29saWRpZnkgbXkga25vd2xlZGdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzY2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNToyMS4xOTcwNTk4NzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njc3NTUyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01NDM5PXN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0My1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjU0NDQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ1LVxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZnJvbV9pbmdyZXNzKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3PWJyX25ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNTpcXHRza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzYtXFx0cmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMTQ1PXN0YXRpYyBpbmxpbmUgaW50IF9fYnBmX3R4X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjE1NS1cXHRza2ItXFx1MDAzZWRldiA9IGRldjtcXG5uZXQvY29yZS9maWx0ZXIuYzoyMTU2OlxcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjE1Ny1cXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjIyLjc2NDgzNTI2OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDg5MDQ1OTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBjdXJpb3VzIGFib3V0IHRoZSBmdW5jdGlvbiBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXJgIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gV2hhdCBleGFjdGx5IGlzIGl0IGRvaW5nPyBJIGtub3cgaG93IGNyaXRpY2FsIFNLQnMgYXJlIGZvciB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBtYW5pcHVsYXRlcyB0aGUgcmVkaXJlY3Rpb24gZmxhZ3MgaXMga2V5IHRvIGdyYXNwaW5nIGhvdyB0cmFmZmljIGlzIHJlcm91dGVkLCBwb3NzaWJseSBieSBmZWF0dXJlcyBsaWtlIE5BVCBvciBwb2xpY3kgcm91dGluZywgd2l0aG91dCBuZWNlc3NhcmlseSBjbGVhcmluZyBleGlzdGluZyBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBzZXR0aW5nIHRoZSBmbGFnLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhhdCBoYXMgZm9yIGxhdGVyIHByb2Nlc3Npbmcgc3RhZ2VzLiBEb2VzIHRoaXMgZnVuY3Rpb24sIGFzIHRoZSBcIm5vY2xlYXJcIiBzdWdnZXN0cywgbGVhdmUgcHJldmlvdXMgcm91dGluZyBkZWNpc2lvbnMgaW50YWN0PyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIG5vdCBjbGVhcmluZyBwcmV2aW91cyBmbGFncz8gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGlzIGVzc2VudGlhbCwgdG8gbWFpbnRhaW4sIGZvciBleGFtcGxlLCBhIGZsb3cncyBzdGF0ZT8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaGFzIGltcG9ydGFudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1c2FnZSwgZXNwZWNpYWxseSB1bmRlciBoaWdoIGxvYWQuIEkgbmVlZCB0byBzZWUgaG93IGl0cyBiZWhhdmlvciBhZmZlY3RzIHRoZSB2YXJpb3VzIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiBMZXQncyBnZXQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6Njk5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjM3LjY1NTI5NzEyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDMwOlxcdHtcXG41NDMxOlxcdFxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuNTQzMjpcXHQjaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxcbjU0MzM6XFx0XFx0c2tiLVxcdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XFxuNTQzNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vmcm9tX2luZ3Jlc3MpXFxuNTQzNTpcXHRcXHRcXHRza2JfY2xlYXJfdHN0YW1wKHNrYik7XFxuNTQzNjpcXHQjZW5kaWZcXG41NDM3OlxcdH1cXG41NDM4OlxcdFxcbjU0Mzk6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjU0NDA6XFx0e1xcbjU0NDE6XFx0XFx0c2tiLVxcdTAwM2VyZWRpcmVjdGVkID0gMDtcXG41NDQyOlxcdH1cXG41NDQzOlxcdFxcbjU0NDQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHN0cnVjdCBza19idWZmICpza2IsXFxuNTQ0NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBib29sIGZyb21faW5ncmVzcylcXG41NDQ2OlxcdHtcXG41NDQ3OlxcdFxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuNTQ0ODpcXHQjaWZkZWYgQ09ORklHX05FVF9SRURJUkVDVFxcbjU0NDk6XFx0XFx0c2tiLVxcdTAwM2Vmcm9tX2luZ3Jlc3MgPSBmcm9tX2luZ3Jlc3M7XFxuNTQ1MDpcXHQjZW5kaWZcXG41NDUxOlxcdH1cXG41NDUyOlxcdFxcbjU0NTM6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl9jc3VtX2lzX3NjdHAoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG41NDU0OlxcdHtcXG41NDU1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9TQ1RQKVxcbjU0NTY6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlY3N1bV9ub3RfaW5ldDtcXG41NDU3OlxcdCNlbHNlXFxuNTQ1ODpcXHRcXHRyZXR1cm4gMDtcXG41NDU5OlxcdCNlbmRpZlxcbjU0NjA6XFx0fVxcbjU0NjE6XFx0XFxuNTQ2MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X2NzdW1fbm90X2luZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG41NDYzOlxcdHtcXG41NDY0OlxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcXG41NDY1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9TQ1RQKVxcbjU0NjY6XFx0XFx0c2tiLVxcdTAwM2Vjc3VtX25vdF9pbmV0ID0gMDtcXG41NDY3OlxcdCNlbmRpZlxcbjU0Njg6XFx0fVxcbjU0Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjM3LjY1NTY0NTk1OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzYwMjk5MzEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIFNLQiBSZWRpcmVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYHNrYi1cdTAwM2VyZWRpcmVjdGVkYCBmbGFnIGdldHMgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBtb3N0IHBlcmZvcm1hbmNlLWNyaXRpY2FsIGFyZWFzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXRpZl9yZWNlaXZlX3NrYmAgYW5kIHRoZSB2YXJpb3VzIHBhdGhzIGluIGdlbmVyaWMgWERQLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaW1wYWN0IG9mIHJlZGlyZWN0aW9uIGRlY2lzaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmbGFnIGltcGFjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZvcndhcmRpbmcgbG9naWMgaW4gdGhlc2Uga2V5IG5ldHdvcmsgaW50ZXJmYWNlIHJvdXRpbmVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb25kaXRpb25hbCBqdW1wcywgZWFybHkgZXhpdHMsIG9yIGVudGlyZWx5IGRpZmZlcmVudCBwcm9jZXNzaW5nIHBhdGhzIGJhc2VkIG9uIHRoaXMgZmxhZz8gV2hhdCdzIHRoZSBjb3N0IG9mIGNoZWNraW5nIHRoaXMgZmxhZyBpbiBhIHRpZ2h0IGxvb3AgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGdyZXBwaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhbmQgZm9sbG93IHRoZSBjb250cm9sIGZsb3cgZnJvbSB0aG9zZSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZsYWcgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIG1hcCB0aGUgdXNhZ2Ugb2YgdGhpcyBmaWVsZCBpbiByZWxhdGlvbiB0byBkaWZmZXJlbnQgTklDIGRyaXZlcnMgYW5kIG5ldHdvcmtpbmcgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgyOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjU6NTEuMjU4NjQyMjA3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk1NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWRpcmVjdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9pZi5jPTE4MD1pbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDQtXFx0aWYgKG9sZF9iYWNrdXApXFxubmV0L2JyaWRnZS9icl9pZi5jOjIwNTpcXHRcXHRvbGRfYmFja3VwLVxcdTAwM2ViYWNrdXBfcmVkaXJlY3RlZF9jbnQtLTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjA2LVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDctXFx0aWYgKGJhY2t1cF9wKVxcbm5ldC9icmlkZ2UvYnJfaWYuYzoyMDg6XFx0XFx0YmFja3VwX3AtXFx1MDAzZWJhY2t1cF9yZWRpcmVjdGVkX2NudCsrO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMDktXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXFx1MDAzZWJhY2t1cF9wb3J0LCBiYWNrdXBfcCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9MjE0PXN0YXRpYyB2b2lkIG5icF9iYWNrdXBfY2xlYXIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMTYtXFx0bmJwX2JhY2t1cF9jaGFuZ2UocCwgTlVMTCk7XFxubmV0L2JyaWRnZS9icl9pZi5jOjIxNzpcXHRpZiAocC1cXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KSB7XFxubmV0L2JyaWRnZS9icl9pZi5jLTIxOC1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpjdXJfcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy0yMjgtXFxubmV0L2JyaWRnZS9icl9pZi5jOjIyOTpcXHRXQVJOX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihwLVxcdTAwM2ViYWNrdXBfcG9ydCkgfHwgcC1cXHUwMDNlYmFja3VwX3JlZGlyZWN0ZWRfY250KTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMjMwLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNz1icl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNC1cXHQgKi9cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzU6XFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM2LVxcdHJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzE9YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNTktICogY2hhbmdlIHRoZSBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyBzbyB0aGF0IHRoZSBwYWNrZXQgd2lsbFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzYwOiAqIGxhdGVyIGJlIHBhc3NlZCB1cCB0byB0aGUgSVAgc3RhY2sgdG8gYmUgcm91dGVkLiBGb3IgYSByZWRpcmVjdGVkXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNjEtICogcGFja2V0LCBpcF9yb3V0ZV9pbnB1dCgpIHdpbGwgZ2l2ZSBiYWNrIHRoZSBsb2NhbGhvc3QgYXMgb3V0cHV0IGRldmljZSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM5Mj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQ1MC1cXHR1MTZcXHRcXHRcXHRcXHRncm91cF9md2RfbWFzaztcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo0NTE6XFx0dTE2XFx0XFx0XFx0XFx0YmFja3VwX3JlZGlyZWN0ZWRfY250O1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQ1Mi1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU2Mzg9c3RhdGljIHUzMiBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU2NDctXFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NTY0ODpcXHRpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSlcXG5uZXQvY29yZS9kZXYuYy01NjQ5LVxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDU9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU1LVxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjIxNTY6XFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBza2JfYXRfdGNfaW5ncmVzcyhza2IpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4tLVxcbm5ldC9kc2EvdGFnX25ldGMuYy0yMS0jZGVmaW5lIE5FVENfVEFHX1RPX0hPU1RcXHRcXHQyXFxubmV0L2RzYS90YWdfbmV0Yy5jOjIyOi8qIFN1YlR5cGUwOiBmcmFtZXMgcmVkaXJlY3RlZCBvciBjb3BpZWQgdG8gQ1BVIHBvcnQgKi9cXG5uZXQvZHNhL3RhZ19uZXRjLmMtMjMtI2RlZmluZSBORVRDX1RBR19USF9TVUJUWVBFMFxcdFxcdDBcXG5uZXQvZHNhL3RhZ19uZXRjLmM6MjQ6LyogU3ViVHlwZTE6IGZyYW1lcyByZWRpcmVjdGVkIG9yIGNvcGllZCB0byBDUFUgcG9ydCB3aXRoIHRpbWVzdGFtcCAqL1xcbm5ldC9kc2EvdGFnX25ldGMuYy0yNS0jZGVmaW5lIE5FVENfVEFHX1RIX1NVQlRZUEUxXFx0XFx0MVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xMzc2PXZvaWQgaXB2NF9wa3RpbmZvX3ByZXBhcmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGRyb3BfZHN0KVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMzg5LVxcdFxcdCAqIChlLmcuLCBwcm9jZXNzIGJpbmRzIHNvY2tldCB0byBldGgwIGZvciBUeCB3aGljaCBpc1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTM5MDpcXHRcXHQgKiByZWRpcmVjdGVkIHRvIGxvb3BiYWNrIGluIHRoZSBydGFibGUvZHN0KS5cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEzOTEtXFx0XFx0ICovXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTg3NT1zdGF0aWMgdm9pZCBpcHY0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTg5Mi0gKlxcdCAgIGR1cmluZyBpcF9ydF9yZWRpcmVjdF9zaWxlbmNlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgaG9zdFxcbm5ldC9pcHY0L3JvdXRlLmM6ODkzOiAqXFx0ICAgZm9yZ290IHJlZGlyZWN0ZWQgcm91dGUgYW5kIHN0YXJ0IHRvIHNlbmQgcmVkaXJlY3RzIGFnYWluLlxcbm5ldC9pcHY0L3JvdXRlLmMtODk0LSAqXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTkwMj12b2lkIGlwX3J0X3NlbmRfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtOTI4LVxcbm5ldC9pcHY0L3JvdXRlLmM6OTI5OlxcdC8qIE5vIHJlZGlyZWN0ZWQgcGFja2V0cyBkdXJpbmcgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTkzMC1cXHQgKiByZXNldCB0aGUgYWxnb3JpdGhtLlxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy05MzctXFx0LyogVG9vIG1hbnkgaWdub3JlZCByZWRpcmVjdHM7IGRvIG5vdCBzZW5kIGFueXRoaW5nXFxubmV0L2lwdjQvcm91dGUuYzo5Mzg6XFx0ICogc2V0IGRzdC5yYXRlX2xhc3QgdG8gdGhlIGxhc3Qgc2VlbiByZWRpcmVjdGVkIHBhY2tldC5cXG5uZXQvaXB2NC9yb3V0ZS5jLTkzOS1cXHQgKi9cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjA4Mj1zdGF0aWMgdm9pZCBydDZfZXhjZXB0aW9uc191cGRhdGVfcG10dShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMDk2LVxcbm5ldC9pcHY2L3JvdXRlLmM6MjA5NzpcXHRcXHRcXHQvKiBGb3IgUlRGX0NBQ0hFIHdpdGggcnQ2aV9wbXR1ID09IDAgKGkuZS4gYSByZWRpcmVjdGVkXFxubmV0L2lwdjYvcm91dGUuYy0yMDk4LVxcdFxcdFxcdCAqIHJvdXRlKSwgdGhlIG1ldHJpY3Mgb2YgaXRzIHJ0LVxcdTAwM2Vmcm9tIGhhdmUgYWxyZWFkeVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTI0PXN0YXRpYyB2b2lkIG5mdF9md2RfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTMzLVxcdHNrYi1cXHUwMDNlc2tiX2lpZiA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VpZmluZGV4O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzozNDpcXHRza2Jfc2V0X3JlZGlyZWN0ZWQoc2tiLCBuZnRfaG9vayhwa3QpID09IE5GX05FVERFVl9JTkdSRVNTKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtMzUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYz0yMT1zdGF0aWMgdm9pZCBuZnRfdHByb3h5X2V2YWxfdjQoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmMtNjgtXFx0XFx0Lyogbm8sIHRoZXJlJ3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzo2OTpcXHRcXHQgKiB0aGVyZSdzIGEgbGlzdGVuZXIgb24gdGhlIHJlZGlyZWN0ZWQgYWRkci9wb3J0XFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmMtNzAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYz04ND1zdGF0aWMgdm9pZCBuZnRfdHByb3h5X2V2YWxfdjYoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmMtMTQwLVxcdFxcdC8qIG5vIHRoZXJlJ3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzoxNDE6XFx0XFx0ICogdGhlcmUncyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE0Mi1cXHRcXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmM9MzY9dHByb3h5X3RnNChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBsYWRkciwgX19iZTE2IGxwb3J0LFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy02NS1cXHRcXHQvKiBubywgdGhlcmUncyBubyBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLCBjaGVjayBpZlxcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmM6NjY6XFx0XFx0ICogdGhlcmUncyBhIGxpc3RlbmVyIG9uIHRoZSByZWRpcmVjdGVkIGFkZHIvcG9ydCAqL1xcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMtNjctXFx0XFx0c2sgPSBuZl90cHJveHlfZ2V0X3NvY2tfdjQobmV0LCBza2IsIGlwaC1cXHUwMDNlcHJvdG9jb2wsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jPTExMT10cHJveHlfdGc2X3YxKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMtMTU0LVxcdFxcdC8qIG5vIHRoZXJlJ3Mgbm8gZXN0YWJsaXNoZWQgY29ubmVjdGlvbiwgY2hlY2sgaWZcXG5uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jOjE1NTpcXHRcXHQgKiB0aGVyZSdzIGEgbGlzdGVuZXIgb24gdGhlIHJlZGlyZWN0ZWQgYWRkci9wb3J0ICovXFxubmV0L25ldGZpbHRlci94dF9UUFJPWFkuYy0xNTYtXFx0XFx0c2sgPSBuZl90cHJveHlfZ2V0X3NvY2tfdjYoeHRfbmV0KHBhciksIHNrYiwgdGhvZmYsXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz03NDI9Y29uZmlnIE5FVF9BQ1RfTUlSUkVEXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03NDUtXFx0aGVscFxcbm5ldC9zY2hlZC9LY29uZmlnOjc0NjpcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgcGFja2V0cyB0byBiZSBtaXJyb3JlZCBvciByZWRpcmVjdGVkIHRvXFxubmV0L3NjaGVkL0tjb25maWctNzQ3LVxcdCAgb3RoZXIgZGV2aWNlcy5cXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmM9Nzg3PXN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODY4LSAqIEF0IGluZ3Jlc3MsIGFsc28gdmVyaWZ5IHRoYXQgdGhlIEwyIGhlYWRlciBhYm91dCB0byBiZSBwdXNoZWQgYmFjayByZWFsbHlcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg2OTogKiBpcyBhbiBFdGhlcm5ldCBoZWFkZXIgYmVjYXVzZSB0aGUgc2tiIGNvdWxkJ3ZlIGJlZW4gcmVkaXJlY3RlZCB3aXRoIG1pcnJlZFxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODcwLSAqIGZyb20gYSBub24tRXRoZXJuZXQgZGV2aWNlLlxcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYz0yNTQ9c3RhdGljIGludCB0Y2ZfbWlycmVkX3RvX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX21pcnJlZCAqbSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMjk5LVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6MzAwOlxcdC8qIEFsbCBtaXJyZWQvcmVkaXJlY3RlZCBza2JzIHNob3VsZCBjbGVhciBwcmV2aW91cyBjdCBpbmZvICovXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMDEtXFx0bmZfcmVzZXRfY3Qoc2tiX3RvX3NlbmQpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMjUtXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYzozMjY6XFx0XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYl90b19zZW5kLCBza2JfdG9fc2VuZC1cXHUwMDNldGNfYXRfaW5ncmVzcyk7XFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYy0zMjctXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jPTM0ND1zdGF0aWMgaW50IHRjZl9ibG9ja2Nhc3RfcmVkaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9taXJyZWQgKm0sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jLTM3NC1cXG5uZXQvc2NoZWQvYWN0X21pcnJlZC5jOjM3NTpcXHQvKiBJZiB0aGUgcGFja2V0IHdhc24ndCByZWRpcmVjdGVkLCB3ZSBoYXZlIHRvIHJlZ2lzdGVyIGFzIGEgZHJvcCAqL1xcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzc2LVxcdHJldHVybiBUQ19BQ1RfU0hPVDtcXG4tLVxcbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYz0xMDAxPXJwY3JkbWFfaW5saW5lX2ZpeHVwKHN0cnVjdCBycGNfcnFzdCAqcnFzdCwgY2hhciAqc3JjcCwgaW50IGNvcHlfbGVuLCBpbnQgcGFkKVxcbi0tXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwMDgtXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jOjEwMDk6XFx0LyogVGhlIGhlYWQgaW92ZWMgaXMgcmVkaXJlY3RlZCB0byB0aGUgUlBDIHJlcGx5IG1lc3NhZ2VcXG5uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMtMTAxMC1cXHQgKiBpbiB0aGUgcmVjZWl2ZSBidWZmZXIsIHRvIGF2b2lkIGEgbWVtY29weS5cXG4tLVxcbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYy0xMDYyLVxcbm5ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYzoxMDYzOlxcdC8qIFRoZSB0YWlsIGlvdmVjIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHJlbWFpbmluZyBkYXRhXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jLTEwNjQtXFx0ICogaW4gdGhlIHJlY2VpdmUgYnVmZmVyLCB0byBhdm9pZCBhIG1lbWNvcHkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI1OjUxLjMyNTYwMzEyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTM3MDQ2NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFhEUCBhbmQgQnJpZGdlIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBob3cgWERQIGludGVyYWN0cyB3aXRoIGJyaWRnaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBzdGFydGluZyB3aXRoIGBuZXRpZl9yZWNlaXZlX2dlbmVyaWNfeGRwYC4gSSBzZWUgdGhlIGNydWNpYWwgY2hlY2s6IGBpZiAoc2tiX2lzX3JlZGlyZWN0ZWQoc2tiKSkgcmV0dXJuIFhEUF9QQVNTO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCB0aGUgWERQIGxvZ2ljIHNwZWNpZmljYWxseSBhdm9pZHMgcnVubmluZyAqYWdhaW4qIG9uIGEgcGFja2V0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZWRpcmVjdGVkLiBJdCdzIGEga2V5IG9wdGltaXphdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGBicl9wYXNzX2ZyYW1lX3VwYC4gVGhpcyBpcyB3aGVyZSBmcmFtZXMgY29taW5nICp1cCogZnJvbSBhIGJyaWRnZSBwb3J0IHRvIHRoZSBob3N0J3MgbmV0d29yayBzdGFjayBhcmUgaGFuZGxlZC4gVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBgTkZfSE9PSyguLi4sIGJyX25ldGlmX3JlY2VpdmVfc2tiKWAuIEFoYSEgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBpcyB0aGUgaW1wb3J0YW50IGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBzcGVjaWZpY2FsbHkgZHJvcHMgdGhlIGZha2Ugcm91dGUgdGFibGUsIG1hcmtzIHRoZSBTS0IgYXMgcmVkaXJlY3RlZCB1c2luZyBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSlgLCBhbmQgKnRoZW4qIGNhbGxzIGBuZXRpZl9yZWNlaXZlX3NrYihza2IpYC4gVGhpcyBpcyB0aGUgY3J1eC5cblxuVGhlIG92ZXJhbGwgZ29hbCBpcyBjbGVhcjogcHJldmVudCBnZW5lcmljIFhEUCBmcm9tIHJ1bm5pbmcgb24gdGhlIGJyaWRnZSAqYWdhaW4qLCBwYXJ0aWN1bGFybHkgd2hlbiBpdCdzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgKG9yLCBldmVuIG1vcmUgY3J1Y2lhbCwgcHJldmVudGluZyBhIHJlLWFsbG9jYXRpb24gb2YgcGFja2V0IGRhdGEgdmlhIGBwc2tiX2V4cGFuZF9oZWFkKClgIHdoZW4gYnVmZmVycyBhcmUgaW4gdXNlIGZyb20gYSBwcmV2aW91cyBYRFAgcnVuKS4gVGhpcyBhdm9pZHMgcmVkdW5kYW50IHByb2Nlc3NpbmcgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBidWZmZXIgY29ycnVwdGlvbi4gVGhpcyBhbGwgbWFrZXMgc2Vuc2UsIHRvIHByZXZlbnQgZG91YmxlLXByb2Nlc3Npbmcgb24gYWxyZWFkeSByZWRpcmVjdGVkIHBhY2tldHMuXG5cbk5vdywganVzdCB0byBiZSBzdXJlLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbi4gV2hlcmUgaXMgdGhlIGJyaWRnZSBjb2RlIGNvbXBpbGVkPyBXaGF0J3MgdGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2w/IEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIGBuZXQvYnJpZGdlYCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNTo1Ni40NjI2NTI3MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzIwNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJSSURHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnLTUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjM2OmNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG5uZXQvYnJpZGdlL0tjb25maWc6Mzg6XFx0ZGVwZW5kcyBvbiBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctMzktXFx0ZGVwZW5kcyBvbiBJTkVUXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxubmV0L2JyaWRnZS9LY29uZmlnOjUyOlxcdGRlcGVuZHMgb24gQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTUzLVxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxubmV0L2JyaWRnZS9LY29uZmlnOjY2OlxcdGRlcGVuZHMgb24gQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTY3LVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo3Njpjb25maWcgQlJJREdFX0NGTVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cXHRib29sIFxcXCJDRk0gcHJvdG9jb2xcXFwiXFxubmV0L2JyaWRnZS9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTc5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjU6NTYuNTA3OTc3MjIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MTU2ODc2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGJyX2lucHV0LmMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYGJyX2lucHV0LmNgLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gcHJlY2lzZWx5IHdoaWNoIG9iamVjdCB0aGlzIGZpbGUgaXMgY29tcGlsZWQgaW50byB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBzdWJzeXN0ZW0uIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyBpdOKAmXMgbGlrZWx5IHBhcnQgb2YgdGhlIGNvcmUgYnJpZGdlIG1vZHVsZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4gb2YgdGhlIGRlcGVuZGVuY3kgYW5kIG92ZXJhbGwgYnVpbGQgY29uZmlndXJhdGlvbi4gSnVtcGluZyBpbnRvIGBuZXQvYnJpZGdlL01ha2VmaWxlYCBzZWVtcyB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gZmluZCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEEgcXVpY2sgc2NhbiBvZiB0aGF0IE1ha2VmaWxlIHNob3VsZCByZXZlYWwgd2hldGhlciBgYnJfaW5wdXQuY2AgaXMgbGlua2VkIGRpcmVjdGx5IGludG8gYSBzcGVjaWZpYyBtb2R1bGUsIG9yIHBlcmhhcHMgaW5kaXJlY3RseSB2aWEgYSBsaWJyYXJ5IG9yIG9iamVjdCBhZ2dyZWdhdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgc3RyZWFtbGluZSBmdXJ0aGVyIGFuYWx5c2lzIGlmIEkgbmVlZCB0byBleGFtaW5lIGl0cyByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgYnJpZGdlIGNvbXBvbmVudHMsIG9yIGlmIEkgbmVlZCB0byBtb2RpZnkgdGhlIGJ1aWxkIHByb2Nlc3MuIEEgbGl0dGxlIGludmVzdGlnYXRpb24gdXAtZnJvbnQsIHNhdmVzIGEgbG90IG9mIHdhc3RlZCB0aW1lIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjY6MDAuMDIzNjY2NzA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CUklER0UpICs9IGJyaWRnZS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJyaWRnZS15XFx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICs9IGJyX25mX2NvcmUub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xcbiAgMTg6XFx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBicl9uZXRmaWx0ZXJfaXB2Ni5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgKz0gYnJfbmV0ZmlsdGVyLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICs9IGJyX3N3aXRjaGRldi5vXFxuICAyNjpcXHRcXG4gIDI3OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXFx0Kz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXFx0Kz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxcbiAgMzQ6XFx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XFxuICAzNTpcXHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxcbiAgMzY6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxcbiAgMzc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MjY6MDAuMDIzNzI4NDU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzYzNjAxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYENPTkZJR19CUklER0VgIGlzIGVuYWJsZWQsIHdoaWNoIGltbWVkaWF0ZWx5IHB1bGxzIGluIGBicmlkZ2Uub2AuIEFuZCB3aXRoaW4gdGhhdCwgd2UndmUgZ290IGBicl9pbnB1dC5vYC4gR290IGl0LiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYENPTkZJR19CUklER0VgLiBOZWVkIHRvIGJlIHRob3JvdWdoIGFuZCBjaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW52b2x2ZWQgaW4gZ2V0dGluZyB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgd29ya2luZywgb3IgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgd2hhdCBlbHNlIGlzIGNvbm5lY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjA0LjM4NzMzMjcwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBCUklER0VcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCI4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTExDXFxuICAgOTpcXHRcXHRzZWxlY3QgU1RQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cXG4gIDEyOlxcdFxcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcXG4gIDEzOlxcdFxcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxcbiAgMTQ6XFx0XFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcXG4gIDE1OlxcdFxcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxcbiAgMTY6XFx0XFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxcbiAgMTc6XFx0XFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSdsbCBuZWVkIHRoZSBicmlkZ2VcXG4gIDIwOlxcdFxcdCAgY29uZmlndXJhdGlvbiB0b29sczsgc2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFx1MDAzZVxcbiAgMjE6XFx0XFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxcbiAgMjI6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcXG4gIDI1OlxcdFxcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXFxuICAyNjpcXHRcXHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cXG4gIDI3OlxcdFxcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cXG4gIDI4OlxcdFxcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXFxuICAyOTpcXHRcXHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzMjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJyaWRnZS5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG4gIDM3OlxcdFxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgNDA6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjA0LjM4NzM5MzUyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDc5OTY0MDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgSGllcmFyY2h5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZXQvYnJpZGdlL0tjb25maWdgIGlzIHB1bGxlZCBpbnRvIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBuZXQvS2NvbmZpZ2AuIEl0J3MgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgc28gaXQncyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRvIGhhbmRsZSB0aGUgaW5jbHVzaW9uIG9mIGl0cyBzdWJkaXJlY3Rvcmllcy4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzY2FuIGZvciBhbnkgYHNvdXJjZWAgb3Igc2ltaWxhciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgcG9pbnQgdG8gd2hlcmUgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgaXMgaW5jbHVkZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQgaW4gbm8gdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwOTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjE1LjE4NzAzNjQzOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE2MjkzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJuZXQvYnJpZGdlL0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yNTk9c291cmNlIFxcXCJuZXQvODAyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjYwOnNvdXJjZSBcXFwibmV0L2JyaWRnZS9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI2MS1zb3VyY2UgXFxcIm5ldC9kc2EvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjc6MTUuMjU4NjY4MTM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMDE3MTA2NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlIGJldHRlci4gTGV0J3Mgc2VlLi4uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUgaXMgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBkaWdnaW5nIGludG8gbmV0d29yay1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSG1tLCBsaW5lIDI1OS4uLiB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBIb3BlZnVsbHksIHRoYXQnbGwgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gd2hlcmUgdGhpbmdzIGFyZSBnb2luZyBzaWRld2F5cy4gSSBleHBlY3QgdG8gZmluZCBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRlZmluaXRpb24sIG1heWJlIGEgY29uZGl0aW9uYWwgYmxvY2ssIG9yIHBlcmhhcHMgYW4gaW5jbHVkZXMgc3RhdGVtZW50IHRoYXQgbGVhZHMgbWUgdG8gdGhlIHNwZWNpZmljIHN1Yi1jb25maWd1cmF0aW9uIGFyZWEgSSBuZWVkIHRvIGV4YW1pbmUuIExldCdzIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI3OjQ3LjI3NTc3NzAxNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0c291cmNlIFxcXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNTE6XFx0XFxuIDI1MjpcXHRlbmRpZiAjIGlmIE5FVEZJTFRFUlxcbiAyNTM6XFx0XFxuIDI1NDpcXHRzb3VyY2UgXFxcIm5ldC9zY3RwL0tjb25maWdcXFwiXFxuIDI1NTpcXHRzb3VyY2UgXFxcIm5ldC9yZHMvS2NvbmZpZ1xcXCJcXG4gMjU2OlxcdHNvdXJjZSBcXFwibmV0L3RpcGMvS2NvbmZpZ1xcXCJcXG4gMjU3OlxcdHNvdXJjZSBcXFwibmV0L2F0bS9LY29uZmlnXFxcIlxcbiAyNTg6XFx0c291cmNlIFxcXCJuZXQvbDJ0cC9LY29uZmlnXFxcIlxcbiAyNTk6XFx0c291cmNlIFxcXCJuZXQvODAyL0tjb25maWdcXFwiXFxuIDI2MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvS2NvbmZpZ1xcXCJcXG4gMjYxOlxcdHNvdXJjZSBcXFwibmV0L2RzYS9LY29uZmlnXFxcIlxcbiAyNjI6XFx0c291cmNlIFxcXCJuZXQvODAyMXEvS2NvbmZpZ1xcXCJcXG4gMjYzOlxcdHNvdXJjZSBcXFwibmV0L2xsYy9LY29uZmlnXFxcIlxcbiAyNjQ6XFx0c291cmNlIFxcXCJuZXQveDI1L0tjb25maWdcXFwiXFxuIDI2NTpcXHRzb3VyY2UgXFxcIm5ldC9sYXBiL0tjb25maWdcXFwiXFxuIDI2NjpcXHRzb3VyY2UgXFxcIm5ldC9waG9uZXQvS2NvbmZpZ1xcXCJcXG4gMjY3OlxcdHNvdXJjZSBcXFwibmV0LzZsb3dwYW4vS2NvbmZpZ1xcXCJcXG4gMjY4OlxcdHNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1xcXCJcXG4gMjY5OlxcdHNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyNzo0Ny4yNzU4NTA1ODVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc5Njk4MzIzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBicl9pbnB1dC5jYCBmaWxlLlxuXG4qKkluc3BlY3RpbmcgYnJfaW5wdXQuYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoaXMgaW5wdXQgaGFuZGxpbmcgbW9kdWxlLiBNeSBpbml0aWFsIGdvYWwgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSAqcHVibGljbHkqIGFjY2Vzc2libGUgZnVuY3Rpb25zIHdpdGhpbiBgYnJfaW5wdXQuY2AuIEknbSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIGZpbGUsIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGFjdGlvbiB3aWxsIGJlLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgdGhvc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODg5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODowNS4yNDU2ODU2OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0fVxcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYnJkZXYgPSBici1cXHUwMDNlZGV2O1xcbiAxNzM6XFx0XFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZXNyY19wb3J0X2lzb2xhdGVkID0gdGVzdF9iaXQoQlJfSVNPTEFURURfQklULCBcXHUwMDI2cC1cXHUwMDNlZmxhZ3MpO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgXFx1MDAyNlxcdTAwMjZcXG4gMTc2OlxcdFxcdCAgICAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApIHx8XFxuIDE3NzpcXHRcXHQgICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUkFSUCkpKSB7XFxuIDE3ODpcXHRcXHRcXHRicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc2tiLCBiciwgdmlkLCBwKTtcXG4gMTc5OlxcdFxcdH0gZWxzZSBpZiAoaXB2Nl9tb2RfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2XFxuIDE4MDpcXHRcXHRcXHQgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuIDE4MTpcXHRcXHRcXHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbiAxODI6XFx0XFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbiAxODM6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgbmRfbXNnKSkgXFx1MDAyNlxcdTAwMjZcXG4gMTg0OlxcdFxcdFxcdCAgIGlwdjZfaGRyKHNrYiktXFx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JQ01QVjYpIHtcXG4gMTg1OlxcdFxcdFxcdFxcdHN0cnVjdCBuZF9tc2cgKm1zZztcXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0XFx0XFx0bXNnID0gYnJfaXNfbmRfbmVpZ2hfbXNnKHNrYik7XFxuIDE4ODpcXHRcXHRcXHRcXHRpZiAobXNnKVxcbiAxODk6XFx0XFx0XFx0XFx0XFx0YnJfZG9fc3VwcHJlc3NfbmQoc2tiLCBiciwgdmlkLCBwLCBtc2cpO1xcbiAxOTA6XFx0XFx0fVxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRzd2l0Y2ggKHBrdF90eXBlKSB7XFxuIDE5MzpcXHRcXHRjYXNlIEJSX1BLVF9NVUxUSUNBU1Q6XFxuIDE5NDpcXHRcXHRcXHRtZHN0ID0gYnJfbWRiX2VudHJ5X3NrYl9nZXQoYnJtY3R4LCBza2IsIHZpZCk7XFxuIDE5NTpcXHRcXHRcXHRpZiAoKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgXFx1MDAyNlxcdTAwMjZcXG4gMTk2OlxcdFxcdFxcdCAgICBicl9tdWx0aWNhc3RfcXVlcmllcl9leGlzdHMoYnJtY3R4LCBldGhfaGRyKHNrYiksIG1kc3QpKSB7XFxuIDE5NzpcXHRcXHRcXHRcXHRpZiAoKG1kc3QgXFx1MDAyNlxcdTAwMjYgbWRzdC1cXHUwMDNlaG9zdF9qb2luZWQpIHx8XFxuIDE5ODpcXHRcXHRcXHRcXHQgICAgYnJfbXVsdGljYXN0X2lzX3JvdXRlcihicm1jdHgsIHNrYikgfHxcXG4gMTk5OlxcdFxcdFxcdFxcdCAgICBici1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9BTExNVUxUSSkge1xcbiAyMDA6XFx0XFx0XFx0XFx0XFx0bG9jYWxfcmN2ID0gdHJ1ZTtcXG4gMjAxOlxcdFxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMoYnItXFx1MDAzZWRldiwgbXVsdGljYXN0KTtcXG4gMjAyOlxcdFxcdFxcdFxcdH1cXG4gMjAzOlxcdFxcdFxcdFxcdG1jYXN0X2hpdCA9IHRydWU7XFxuIDIwNDpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMDU6XFx0XFx0XFx0XFx0bG9jYWxfcmN2ID0gdHJ1ZTtcXG4gMjA2OlxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMoYnItXFx1MDAzZWRldiwgbXVsdGljYXN0KTtcXG4gMjA3OlxcdFxcdFxcdH1cXG4gMjA4OlxcdFxcdFxcdGJyZWFrO1xcbiAyMDk6XFx0XFx0Y2FzZSBCUl9QS1RfVU5JQ0FTVDpcXG4gMjEwOlxcdFxcdFxcdGRzdCA9IGJyX2ZkYl9maW5kX3JjdShiciwgZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QsIHZpZCk7XFxuIDIxMTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWRzdCBcXHUwMDI2XFx1MDAyNiB2aWQgXFx1MDAyNlxcdTAwMjZcXG4gMjEyOlxcdFxcdFxcdFxcdCAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkpKSB7XFxuIDIxMzpcXHRcXHRcXHRcXHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0LCAwKTtcXG4gMjE0OlxcdFxcdFxcdFxcdGlmIChkc3QgXFx1MDAyNlxcdTAwMjZcXG4gMjE1OlxcdFxcdFxcdFxcdCAgICAoIXRlc3RfYml0KEJSX0ZEQl9MT0NBTCwgXFx1MDAyNmRzdC1cXHUwMDNlZmxhZ3MpIHx8XFxuIDIxNjpcXHRcXHRcXHRcXHQgICAgIHRlc3RfYml0KEJSX0ZEQl9BRERFRF9CWV9VU0VSLCBcXHUwMDI2ZHN0LVxcdTAwM2VmbGFncykpKVxcbiAyMTc6XFx0XFx0XFx0XFx0XFx0ZHN0ID0gTlVMTDtcXG4gMjE4OlxcdFxcdFxcdH1cXG4gMjE5OlxcdFxcdFxcdGJyZWFrO1xcbiAyMjA6XFx0XFx0ZGVmYXVsdDpcXG4gMjIxOlxcdFxcdFxcdGJyZWFrO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoZHN0KSB7XFxuIDIyNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdFxcdGlmICh0ZXN0X2JpdChCUl9GREJfTE9DQUwsIFxcdTAwMjZkc3QtXFx1MDAzZWZsYWdzKSlcXG4gMjI4OlxcdFxcdFxcdFxcdHJldHVybiBicl9wYXNzX2ZyYW1lX3VwKHNrYiwgZmFsc2UpO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRcXHRpZiAobm93ICE9IFJFQURfT05DRShkc3QtXFx1MDAzZXVzZWQpKVxcbiAyMzE6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShkc3QtXFx1MDAzZXVzZWQsIG5vdyk7XFxuIDIzMjpcXHRcXHRcXHRicl9mb3J3YXJkKFJFQURfT05DRShkc3QtXFx1MDAzZWRzdCksIHNrYiwgbG9jYWxfcmN2LCBmYWxzZSk7XFxuIDIzMzpcXHRcXHR9IGVsc2Uge1xcbiAyMzQ6XFx0XFx0XFx0aWYgKCFtY2FzdF9oaXQpXFxuIDIzNTpcXHRcXHRcXHRcXHRicl9mbG9vZChiciwgc2tiLCBwa3RfdHlwZSwgbG9jYWxfcmN2LCBmYWxzZSwgdmlkKTtcXG4gMjM2OlxcdFxcdFxcdGVsc2VcXG4gMjM3OlxcdFxcdFxcdFxcdGJyX211bHRpY2FzdF9mbG9vZChtZHN0LCBza2IsIGJybWN0eCwgbG9jYWxfcmN2LCBmYWxzZSk7XFxuIDIzODpcXHRcXHR9XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdGlmIChsb2NhbF9yY3YpXFxuIDI0MTpcXHRcXHRcXHRyZXR1cm4gYnJfcGFzc19mcmFtZV91cChza2IsIHByb21pc2MpO1xcbiAyNDI6XFx0XFxuIDI0MzpcXHRvdXQ6XFxuIDI0NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjQ1OlxcdGRyb3A6XFxuIDI0NjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG4gMjQ3OlxcdFxcdGdvdG8gb3V0O1xcbiAyNDg6XFx0fVxcbiAyNDk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0YXRpYyB2b2lkIF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAyNTI6XFx0e1xcbiAyNTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0X3JjdShza2ItXFx1MDAzZWRldik7XFxuIDI1NDpcXHRcXHR1MTYgdmlkID0gMDtcXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0LyogY2hlY2sgaWYgdmxhbiBpcyBhbGxvd2VkLCB0byBhdm9pZCBzcG9vZmluZyAqL1xcbiAyNTc6XFx0XFx0aWYgKHRlc3RfYml0KEJSX0xFQVJOSU5HX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbiAyNTg6XFx0XFx0ICAgIG5icF9zdGF0ZV9zaG91bGRfbGVhcm4ocCkgXFx1MDAyNlxcdTAwMjZcXG4gMjU5OlxcdFxcdCAgICAhYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTk9fTExfTEVBUk4pIFxcdTAwMjZcXHUwMDI2XFxuIDI2MDpcXHRcXHQgICAgYnJfc2hvdWxkX2xlYXJuKHAsIHNrYiwgXFx1MDAyNnZpZCkpXFxuIDI2MTpcXHRcXHRcXHRicl9mZGJfdXBkYXRlKHAtXFx1MDAzZWJyLCBwLCBldGhfaGRyKHNrYiktXFx1MDAzZWhfc291cmNlLCB2aWQsIDApO1xcbiAyNjI6XFx0fVxcbiAyNjM6XFx0XFxuIDI2NDpcXHQvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG4gMjY1OlxcdHN0YXRpYyBpbnQgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMjY2OlxcdHtcXG4gMjY3OlxcdFxcdF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChza2IpO1xcbiAyNjg6XFx0XFxuIDI2OTpcXHRcXHQvKiByZXR1cm4gMSB0byBzaWduYWwgdGhlIG9rZm4oKSB3YXMgY2FsbGVkIHNvIGl0J3Mgb2sgdG8gdXNlIHRoZSBza2IgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjg6MDUuMjQ1NzczNTYyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzA4MzcwMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEknbSBhYm91dCB0byBkbzpcblxuKipBbmFseXppbmcgYGJyX2lucHV0LmNgIGZvciBOb24tU3RhdGljIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgYnJfaW5wdXQuY2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBwYXN0IHRoZSBzdGF0aWMgb25lcywgYXMgdGhvc2UgYXJlIHVzdWFsbHkgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBleHBvc2VkLCB0aGUgcHVibGljIGludGVyZmFjZSBpZiB5b3Ugd2lsbC4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgYSBnb29kIHJlYXNvbiB0byBpbnNwZWN0IHRoZXNlIGZ1bmN0aW9ucyAtIHdoZXRoZXIgdGhhdCdzIGZvciByZWZhY3RvcmluZywgdW5kZXJzdGFuZGluZyBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIG9yIGV4dGVuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB3aGF0ZXZlciBwcm9qZWN0IHRoaXMgaXMgcGFydCBvZi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHJldHVybiB0eXBlcywgYW5kIGFueSBjb21tZW50cyB0aGF0IGFyZSB0aGVyZSB0byBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgcHVycG9zZSBhbmQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkgd2FudCBhIGNvbmNpc2UgdW5kZXJzdGFuZGluZyBvZiBpdHMgY2FwYWJpbGl0aWVzIG91dHNpZGUgb2YgYW55IGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODY3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODoxOS41NTQxNDU4NDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0cmV0dXJuIDE7XFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4gMjc0OlxcdHtcXG4gMjc1OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjc2OlxcdFxcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSBOVUxMO1xcbiAyNzc6XFx0XFx0c3RydWN0IG5mX2hvb2tfc3RhdGUgc3RhdGU7XFxuIDI3ODpcXHRcXHR1bnNpZ25lZCBpbnQgdmVyZGljdCwgaTtcXG4gMjc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gMjgwOlxcdFxcdGludCByZXQ7XFxuIDI4MTpcXHRcXG4gMjgyOlxcdFxcdG5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiAyODM6XFx0I2lmZGVmIENPTkZJR19KVU1QX0xBQkVMXFxuIDI4NDpcXHRcXHRpZiAoIXN0YXRpY19rZXlfZmFsc2UoXFx1MDAyNm5mX2hvb2tzX25lZWRlZFtORlBST1RPX0JSSURHRV1bTkZfQlJfUFJFX1JPVVRJTkddKSlcXG4gMjg1OlxcdFxcdFxcdGdvdG8gZnJhbWVfZmluaXNoO1xcbiAyODY6XFx0I2VuZGlmXFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdGUgPSByY3VfZGVyZWZlcmVuY2UobmV0LVxcdTAwM2VuZi5ob29rc19icmlkZ2VbTkZfQlJfUFJFX1JPVVRJTkddKTtcXG4gMjg5OlxcdFxcdGlmICghZSlcXG4gMjkwOlxcdFxcdFxcdGdvdG8gZnJhbWVfZmluaXNoO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRuZl9ob29rX3N0YXRlX2luaXQoXFx1MDAyNnN0YXRlLCBORl9CUl9QUkVfUk9VVElORyxcXG4gMjkzOlxcdFxcdFxcdFxcdCAgIE5GUFJPVE9fQlJJREdFLCBza2ItXFx1MDAzZWRldiwgTlVMTCwgTlVMTCxcXG4gMjk0OlxcdFxcdFxcdFxcdCAgIG5ldCwgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4gMjk3OlxcdFxcdFxcdHZlcmRpY3QgPSBuZl9ob29rX2VudHJ5X2hvb2tmbihcXHUwMDI2ZS1cXHUwMDNlaG9va3NbaV0sIHNrYiwgXFx1MDAyNnN0YXRlKTtcXG4gMjk4OlxcdFxcdFxcdHN3aXRjaCAodmVyZGljdCBcXHUwMDI2IE5GX1ZFUkRJQ1RfTUFTSykge1xcbiAyOTk6XFx0XFx0XFx0Y2FzZSBORl9BQ0NFUFQ6XFxuIDMwMDpcXHRcXHRcXHRcXHRpZiAoQlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZWJyX25ldGZpbHRlcl9icm91dGUpIHtcXG4gMzAxOlxcdFxcdFxcdFxcdFxcdCpwc2tiID0gc2tiO1xcbiAzMDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4gMzAzOlxcdFxcdFxcdFxcdH1cXG4gMzA0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMDU6XFx0XFx0XFx0Y2FzZSBORl9EUk9QOlxcbiAzMDY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDMwNzpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gMzA4OlxcdFxcdFxcdGNhc2UgTkZfUVVFVUU6XFxuIDMwOTpcXHRcXHRcXHRcXHRyZXQgPSBuZl9xdWV1ZShza2IsIFxcdTAwMjZzdGF0ZSwgaSwgdmVyZGljdCk7XFxuIDMxMDpcXHRcXHRcXHRcXHRpZiAocmV0ID09IDEpXFxuIDMxMTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzEyOlxcdFxcdFxcdFxcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xcbiAzMTM6XFx0XFx0XFx0ZGVmYXVsdDogLyogU1RPTEVOICovXFxuIDMxNDpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gMzE1OlxcdFxcdFxcdH1cXG4gMzE2OlxcdFxcdH1cXG4gMzE3OlxcdGZyYW1lX2ZpbmlzaDpcXG4gMzE4OlxcdFxcdG5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiAzMTk6XFx0XFx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7XFxuIDMyMDpcXHQjZWxzZVxcbiAzMjE6XFx0XFx0YnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG4gMzIyOlxcdCNlbmRpZlxcbiAzMjM6XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuIDMyNDpcXHR9XFxuIDMyNTpcXHRcXG4gMzI2OlxcdC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMVxcbiAzMjc6XFx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXFxuIDMyODpcXHQgKi9cXG4gMzI5OlxcdHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFxcdTAwMjZwLVxcdTAwM2Vici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxcbiAzMzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHRtcC1cXHUwMDNldHlwZSA9PSBza2ItXFx1MDAzZXByb3RvY29sKSlcXG4gMzM2OlxcdFxcdFxcdFxcdHJldHVybiB0bXAtXFx1MDAzZWZyYW1lX2hhbmRsZXIocCwgc2tiKTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0cmV0dXJuIDA7XFxuIDMzOTpcXHR9XFxuIDM0MDpcXHRcXG4gMzQxOlxcdC8qXFxuIDM0MjpcXHQgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxcbiAzNDM6XFx0ICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXFxuIDM0NDpcXHQgKi9cXG4gMzQ1OlxcdHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIDM0NjpcXHR7XFxuIDM0NzpcXHRcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG4gMzQ4OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7XFxuIDM0OTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XFxuIDM1MDpcXHRcXHRjb25zdCB1bnNpZ25lZCBjaGFyICpkZXN0ID0gZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3Q7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSykpXFxuIDM1MzpcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSkpIHtcXG4gMzU2OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9NQUNfSU5WQUxJRF9TT1VSQ0U7XFxuIDM1NzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIDM1ODpcXHRcXHR9XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpO1xcbiAzNjE6XFx0XFx0aWYgKCFza2IpXFxuIDM2MjpcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gMzYzOlxcdFxcbiAzNjQ6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3QgYnJfaW5wdXRfc2tiX2NiKSk7XFxuIDM2NTpcXHRcXHRicl90Y19za2JfbWlzc19zZXQoc2tiLCBmYWxzZSk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdHAgPSBicl9wb3J0X2dldF9yY3Uoc2tiLVxcdTAwM2VkZXYpO1xcbiAzNjg6XFx0XFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSlcXG4gMzY5OlxcdFxcdFxcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjg6MTkuNTU0MjM1NjI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNzE4MTcyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgUmVjZWl2ZSBQYXRoKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgYmVhcmluZ3MgaW4gdGhpcyBicmlkZ2luZyBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpbmNvbWluZyBmcmFtZXMgYXJlIGFjdHVhbGx5IGhhbmRsZWQuIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHM6IHdoZXJlIGRvIHRoZSBpbmNvbWluZyBwYWNrZXRzIGFjdHVhbGx5ICpsYW5kKiB3aXRoaW4gdGhlIHN5c3RlbT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGByeF9oYW5kbGVyYCBhbmQgYW55IHBvdGVudGlhbCBcImZyYW1lIGVudHJ5XCIgZnVuY3Rpb25zIOKAkyB5b3Uga25vdywgdGhlIG9uZXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxseSByZWNlaXZpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGRhdGEuXG5cbk9uY2UgSSBoYXZlIHRob3NlIGlkZW50aWZpZWQsIEknbGwgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vay4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgYGJyX2lucHV0LmNgIGZpbGUgd2lsbCBoYXZlIHJlbGV2YW50IGluZm9ybWF0aW9uLiBTbywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgcmVzdCBvZiBpdCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBpbml0aWFsIHJlY2VpdmUgaGFuZGxlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGlzIGtleSB0byBwaW5wb2ludGluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoZSBnb2FsIGlzIGEgY2xlYXIgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBwYXRoIGZyb20gcGh5c2ljYWwgaW50ZXJmYWNlIHRvIHRoZSBicmlkZ2UncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI4OjIzLjYyNjA1NTI4MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcbiAzNzE6XFx0XFx0aWYgKHVubGlrZWx5KGlzX2xpbmtfbG9jYWxfZXRoZXJfYWRkcihkZXN0KSkpIHtcXG4gMzcyOlxcdFxcdFxcdHUxNiBmd2RfbWFzayA9IHAtXFx1MDAzZWJyLVxcdTAwM2Vncm91cF9md2RfbWFza19yZXF1aXJlZDtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0XFx0LypcXG4gMzc1OlxcdFxcdFxcdCAqIFNlZSBJRUVFIDgwMi4xRCBUYWJsZSA3LTEwIFJlc2VydmVkIGFkZHJlc3Nlc1xcbiAzNzY6XFx0XFx0XFx0ICpcXG4gMzc3OlxcdFxcdFxcdCAqIEFzc2lnbm1lbnRcXHRcXHQgXFx0XFx0VmFsdWVcXG4gMzc4OlxcdFxcdFxcdCAqIEJyaWRnZSBHcm91cCBBZGRyZXNzXFx0XFx0MDEtODAtQzItMDAtMDAtMDBcXG4gMzc5OlxcdFxcdFxcdCAqIChNQUMgQ29udHJvbCkgODAyLjNcXHRcXHQwMS04MC1DMi0wMC0wMC0wMVxcbiAzODA6XFx0XFx0XFx0ICogKExpbmsgQWdncmVnYXRpb24pIDgwMi4zXFx0MDEtODAtQzItMDAtMDAtMDJcXG4gMzgxOlxcdFxcdFxcdCAqIDgwMi4xWCBQQUUgYWRkcmVzc1xcdFxcdDAxLTgwLUMyLTAwLTAwLTAzXFxuIDM4MjpcXHRcXHRcXHQgKlxcbiAzODM6XFx0XFx0XFx0ICogODAyLjFBQiBMTERQIFxcdFxcdDAxLTgwLUMyLTAwLTAwLTBFXFxuIDM4NDpcXHRcXHRcXHQgKlxcbiAzODU6XFx0XFx0XFx0ICogT3RoZXJzIHJlc2VydmVkIGZvciBmdXR1cmUgc3RhbmRhcmRpemF0aW9uXFxuIDM4NjpcXHRcXHRcXHQgKi9cXG4gMzg3OlxcdFxcdFxcdGZ3ZF9tYXNrIHw9IHAtXFx1MDAzZWdyb3VwX2Z3ZF9tYXNrO1xcbiAzODg6XFx0XFx0XFx0c3dpdGNoIChkZXN0WzVdKSB7XFxuIDM4OTpcXHRcXHRcXHRjYXNlIDB4MDA6XFx0LyogQnJpZGdlIEdyb3VwIEFkZHJlc3MgKi9cXG4gMzkwOlxcdFxcdFxcdFxcdC8qIElmIFNUUCBpcyB0dXJuZWQgb2ZmLFxcbiAzOTE6XFx0XFx0XFx0XFx0ICAgdGhlbiBtdXN0IGZvcndhcmQgdG8ga2VlcCBsb29wIGRldGVjdGlvbiAqL1xcbiAzOTI6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWJyLVxcdTAwM2VzdHBfZW5hYmxlZCA9PSBCUl9OT19TVFAgfHxcXG4gMzkzOlxcdFxcdFxcdFxcdCAgICBmd2RfbWFzayBcXHUwMDI2ICgxdSBcXHUwMDNjXFx1MDAzYyBkZXN0WzVdKSlcXG4gMzk0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZm9yd2FyZDtcXG4gMzk1OlxcdFxcdFxcdFxcdCpwc2tiID0gc2tiO1xcbiAzOTY6XFx0XFx0XFx0XFx0X19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7XFxuIDM5NzpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbiAzOTg6XFx0XFxuIDM5OTpcXHRcXHRcXHRjYXNlIDB4MDE6XFx0LyogSUVFRSBNQUMgKFBhdXNlKSAqL1xcbiA0MDA6XFx0XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX01BQ19JRUVFX01BQ19DT05UUk9MO1xcbiA0MDE6XFx0XFx0XFx0XFx0Z290byBkcm9wO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHRjYXNlIDB4MEU6XFx0LyogODAyLjFBQiBMTERQICovXFxuIDQwNDpcXHRcXHRcXHRcXHRmd2RfbWFzayB8PSBwLVxcdTAwM2Vici1cXHUwMDNlZ3JvdXBfZndkX21hc2s7XFxuIDQwNTpcXHRcXHRcXHRcXHRpZiAoZndkX21hc2sgXFx1MDAyNiAoMXUgXFx1MDAzY1xcdTAwM2MgZGVzdFs1XSkpXFxuIDQwNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGZvcndhcmQ7XFxuIDQwNzpcXHRcXHRcXHRcXHQqcHNrYiA9IHNrYjtcXG4gNDA4OlxcdFxcdFxcdFxcdF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChza2IpO1xcbiA0MDk6XFx0XFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4gNDEwOlxcdFxcbiA0MTE6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gNDEyOlxcdFxcdFxcdFxcdC8qIEFsbG93IHNlbGVjdGl2ZSBmb3J3YXJkaW5nIGZvciBtb3N0IG90aGVyIHByb3RvY29scyAqL1xcbiA0MTM6XFx0XFx0XFx0XFx0ZndkX21hc2sgfD0gcC1cXHUwMDNlYnItXFx1MDAzZWdyb3VwX2Z3ZF9tYXNrO1xcbiA0MTQ6XFx0XFx0XFx0XFx0aWYgKGZ3ZF9tYXNrIFxcdTAwMjYgKDF1IFxcdTAwM2NcXHUwMDNjIGRlc3RbNV0pKVxcbiA0MTU6XFx0XFx0XFx0XFx0XFx0Z290byBmb3J3YXJkO1xcbiA0MTY6XFx0XFx0XFx0fVxcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRcXHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlcHJvbWlzYyA9IGZhbHNlO1xcbiA0MTk6XFx0XFxuIDQyMDpcXHRcXHRcXHQvKiBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIGJlIGhpdCB3aGVuIG5mX2hvb2soKTpcXG4gNDIxOlxcdFxcdFxcdCAqICAgLSByZXR1cm5zIFxcdTAwM2MgMCAoZHJvcC9lcnJvcilcXG4gNDIyOlxcdFxcdFxcdCAqICAgLSByZXR1cm5zID0gMCAoc3RvbGVuL25mX3F1ZXVlKVxcbiA0MjM6XFx0XFx0XFx0ICogVGh1cyByZXR1cm4gMSBmcm9tIHRoZSBva2ZuKCkgdG8gc2lnbmFsIHRoZSBza2IgaXMgb2sgdG8gcGFzc1xcbiA0MjQ6XFx0XFx0XFx0ICovXFxuIDQyNTpcXHRcXHRcXHRpZiAoTkZfSE9PSyhORlBST1RPX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sXFxuIDQyNjpcXHRcXHRcXHRcXHQgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxuIDQyNzpcXHRcXHRcXHRcXHQgICAgYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaCkgPT0gMSkge1xcbiA0Mjg6XFx0XFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4gNDI5OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDQzMDpcXHRcXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG4gNDMxOlxcdFxcdFxcdH1cXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcXG4gNDM1OlxcdFxcdFxcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdGZvcndhcmQ6XFxuIDQzODpcXHRcXHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpXFxuIDQzOTpcXHRcXHRcXHRnb3RvIGRlZmVyX3N0cF9maWx0ZXJpbmc7XFxuIDQ0MDpcXHRcXG4gNDQxOlxcdFxcdHN3aXRjaCAocC1cXHUwMDNlc3RhdGUpIHtcXG4gNDQyOlxcdFxcdGNhc2UgQlJfU1RBVEVfRk9SV0FSRElORzpcXG4gNDQzOlxcdFxcdGNhc2UgQlJfU1RBVEVfTEVBUk5JTkc6XFxuIDQ0NDpcXHRkZWZlcl9zdHBfZmlsdGVyaW5nOlxcbiA0NDU6XFx0XFx0XFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwocC1cXHUwMDNlYnItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIGRlc3QpKVxcbiA0NDY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwa3RfdHlwZSA9IFBBQ0tFVF9IT1NUO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRcXHRyZXR1cm4gbmZfaG9va19icmlkZ2VfcHJlKHNrYiwgcHNrYik7XFxuIDQ0OTpcXHRcXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODoyMy42MjYxNTUxNzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMjkwMjg1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnJfaGFuZGxlX2ZyYW1lYCBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBgYnJfaGFuZGxlX2ZyYW1lYCBpcyBhY3RpbmcgYXMgYSByZWNlaXZlIGhhbmRsZXIsIHdoaWNoIG1lYW5zIGl0J3Mgc2l0dGluZyB0aGVyZSB3YWl0aW5nIHRvIHByb2Nlc3MgaW5jb21pbmcgZnJhbWVzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIHVzZSB3aXRoaW4gdGhlIGJyaWRnaW5nIHN1YnN5c3RlbS4gVGhlIGZhY3QgdGhhdCBpdCdzIHJlZ2lzdGVyZWQgYXMgYW4gYHJ4X2hhbmRsZXJgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgb3IgcmVmZXJlbmNlZC4gQSBjcm9zcy1yZWZlcmVuY2Ugc2VhcmNoLCBsaWtlbHkgdGhyb3VnaCBgZ3JlcGAgb3IgbXkgSURFJ3MgZnVuY3Rpb25hbGl0eSwgaXMgaW4gb3JkZXIuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgdG8gb3RoZXIgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gZnJhbWUgcHJvY2Vzc2luZy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyBmcmFtZXMgYXJlIGNhdGVnb3JpemVkIG9yIHdoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyODo0Ni45NTUxODU2MTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzg3MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX2hhbmRsZV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zOT1zdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTgxLS8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo4MjppbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI0OC19XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjkzLVxcdFxcdFxcdCAgIE5GUFJPVE9fQlJJREdFLCBza2ItXFx1MDAzZWRldiwgTlVMTCwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mjk0OlxcdFxcdFxcdCAgIG5ldCwgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5NS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMTgtXFx0bmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMxOTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyMTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjItI2VuZGlmXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ0LSAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjMtICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ2NDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWVfZHVtbXkoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTQ2OT1yeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzEtXFx0aWYgKG5ldGRldl91c2VzX2RzYShkZXYpKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzI6XFx0XFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZV9kdW1teTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDczLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo0NzQ6XFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDc1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MjU1PXZvaWQgbmZfYnJpZGdlX3VwZGF0ZV9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzMtICogZG9uJ3QsIHdlIHVzZSB0aGUgbmVpZ2hib3VyIGZyYW1ld29yayB0byBmaW5kIG91dC4gSW4gYm90aCBjYXNlcywgd2UgbWFrZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc0OiAqIHN1cmUgdGhhdCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKCkgaXMgY2FsbGVkIGFmdGVyd2FyZHMuXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzUtICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNzY9aW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTMwNi1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjMwNzpcXHRcXHRcXHRyZXQgPSBicl9oYW5kbGVfZnJhbWVfZmluaXNoKG5ldCwgc2ssIHNrYik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMDgtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mzc2PXN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzAtXFx0YnJfbmZfaG9va190aHJlc2goTkZfQlJfUFJFX1JPVVRJTkcsIG5ldCwgc2ssIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzE6XFx0XFx0XFx0ICBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQzMi1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTAwNT1zdGF0aWMgdm9pZCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlX3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyNi1cXHRuZl9icmlkZ2UtXFx1MDAzZXBoeXNvdXRkZXYgPSBOVUxMO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAyNzpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyOC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM9MTAxPXN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTUzLVxcdGJyX25mX2hvb2tfdGhyZXNoKE5GX0JSX1BSRV9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaXB2Ni5jOjE1NDpcXHRcXHRcXHQgIHNrYi1cXHUwMDNlZGV2LCBOVUxMLCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMTU1LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9OTI5PWludCBuYnBfYmFja3VwX2NoYW5nZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqYmFja3VwX2Rldik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzEtLyogYnJfaW5wdXQuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjkzMjppbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtOTMzLXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjg6NDcuMDA3OTgzNTcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODg5NDgxODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgUGFja2V0IFByb2Nlc3NpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBpbnRvIHRoaXMgcGF0Y2ggdGhhdCdzIGxhbmRlZCBpbiB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiB0aGV5J3JlIHBhc3NlZCB1cCB0byB0aGUgbmV0d29yayBzdGFjay4gSSBzZWUgdGhhdCBgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaGAsIHdoaWNoIGlzIGEgZ2xvYmFsbHkgZXhwb3J0ZWQgZnVuY3Rpb24sIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4gSXQncyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBkaXJlY3RseSBsZWFkcyB0byBgYnJfcGFzc19mcmFtZV91cGAsIHdoaWNoIHRoZW4gY2FsbHMgYE5GX0hPT0tgIG9uIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAuIFRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIHRvdWNoZXMgdGhpbmdzLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpYCBjaGFuZ2UuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBsb29rIGF0IHRoZSBicm9hZGVyIHBpY3R1cmUuIEFyZSB0aGVyZSBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG5ldC9icmlkZ2UvYCBvciBldmVuIGBuZXQvY29yZS9gPyBXaGF0IGhhcHBlbnMgd2hlbiB5b3UgaGF2ZSBnZW5lcmljIFhEUCBhdHRhY2hlZCB0byBhIGJyaWRnZSBpbnRlcmZhY2UsIG9yIGFueSBuZXRkZXY/IEknbSB0aGlua2luZyBhYm91dCBob3cgcGFja2V0cyBmbG93IGZyb20gYSBicmlkZ2Ugc2xhdmUgaW50ZXJmYWNlLCB0aHJvdWdoIHRoZSBicmlkZ2UgKGBicl9oYW5kbGVfZnJhbWVgKSwgYW5kIHRoZW4gdXAgdG8gbG9jYWwgZGVsaXZlcnkgKGBicl9wYXNzX2ZyYW1lX3VwYCB0byBgYnJfbmV0aWZfcmVjZWl2ZV9za2JgIGFuZCBldmVudHVhbGx5IGBuZXRpZl9yZWNlaXZlX3NrYmApLlxuXG5BaCwgeWVzLCBhbmQgSSByZWNhbGwgdGhhdCBpbnNpZGUgYG5ldGlmX3JlY2VpdmVfc2tiYCwgYGRvX3hkcF9nZW5lcmljYCBhbmQgYG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHBgLCBnZW5lcmljIFhEUCBoYXMgdGhpcyBjcnVjaWFsIGNoZWNrOiBgaWYgKHNrYl9pc19yZWRpcmVjdGVkKHNrYikpIHJldHVybiBYRFBfUEFTUztgLiBUaGlzIHBhdGNoIHNldHMgYHNrYi1cdTAwM2VyZWRpcmVjdGVkYCwgd2hpY2ggbWVhbnMgZ2VuZXJpYyBYRFAgKnNob3VsZG4ndCogcnVuIGEgc2Vjb25kIHRpbWUgb24gdGhlIGxvY2FsIGJyaWRnZSBkZXZpY2UgYW5kIHJlYWxsb2NhdGUgdGhlIGhlYWQgb3IgZnJlZSB0aGUgYnVmZmVycyB3aGlsZSBzdGlsbCBpbiB1c2UuIFRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gYW5kIHBvdGVudGlhbCBkb3VibGUtZnJlZSBzY2VuYXJpbywgc28gaXQgbWFrZXMgdG90YWwgc2Vuc2UuXG5cbk5vdywgdGhpcyBmZWVscyBsaWtlIGl0IGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBJIGhhdmUgdG8gYmUgc3VyZSB0aGlzIGlzIGFwcGxpY2FibGUgdG8gbXkgd29yay4gVGhpcyBpcyBzb21ldGhpbmcgSSdkIHdhbnQgdG8gdGVzdCBpbiBhIGxhYi4gU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBpbiBhIFFFTVUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE9mIGNvdXJzZSBpdCBpcyEgRXRoZXJuZXQgYnJpZGdpbmcsIGdlbmVyaWMgWERQLCB2ZXRoLCB0YXAsIG1hY3Z0YXAsIHZpcnRpby1uZXQsIGFsbCBvZiB0aGVzZSBhcmUgdmVyeSBjb21tb24sIGFsbCB3aWRlbHkgdXNlZCBpbiBzdGFuZGFyZCBMaW51eCBuZXR3b3JraW5nLCBhbmQgZnVsbHkgc3VwcG9ydGVkIGluIFFFTVUuIFRoYXQncyBnb29kIG5ld3MuXG5cblNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCBtb2RpZmllcyBjb3JlIGJyaWRnZSBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgZXNwZWNpYWxseSBkdXJpbmcgdGhhdCBoYW5kb3ZlciB0byB0aGUgbmV0d29yayBzdGFjayB2aWEgYG5ldGlmX3JlY2VpdmVfc2tiYC4gVGhpcyBtZWFucyBpdCBoYXMgdGhlIHBvdGVudGlhbCB0byBwcmV2ZW50IGdlbmVyaWMgWERQIHJlLWV4ZWN1dGlvbiBidWdzOiBzcGVjaWZpY2FsbHksIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBkb3VibGUtZXhlY3V0aW9uLCBib3RoIHZlcnkgaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBnZXQgdGhlIGNvbmZpZ3VyYXRpb25zIHN0cmFpZ2h0LiBXZSBuZWVkIGBCUklER0VgIHRvIGVuYWJsZSB0aGUgYG5ldC9icmlkZ2VgIG1vZHVsZS4gTG9va2luZyBhdCB0aGUgS2NvbmZpZywgQlJJREdFIGRlcGVuZHMgb24gYE5FVGAgaW1wbGljaXRseSAodmlhIG5ldC9LY29uZmlnKSwgaXQgYWxzbyB1c2VzIGBMTENgIGFuZCBgU1RQYC4gVGhlbiwgb2YgY291cnNlLCBmb3IgdGhlIGdlbmVyaWMgWERQIHN0dWZmLCB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfUkVESVJFQ1RgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgYENPTkZJR19ORVRfUkVESVJFQ1RgIGlzIGRlZmluZWQgaW4gS2NvbmZpZyBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIxOSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyOToyNS44OTc0NjgwNTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ4OTk1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX1JFRElSRUNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTQ5PWNvbmZpZyBJRkJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMTUxLVxcdGRlcGVuZHMgb24gTkVUX0FDVF9NSVJSRUQgfHwgTkZUX0ZXRF9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE1MjpcXHRzZWxlY3QgTkVUX1JFRElSRUNUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNTMtXFx0aGVscFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDE5LVxcdF9fdThcXHRcXHRcXHRyZWRpcmVjdGVkOjE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMDIwOiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMDIxLVxcdF9fdThcXHRcXHRcXHRmcm9tX2luZ3Jlc3M6MTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQyOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnJvbV9pbmdyZXNzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMxLVxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDMyOiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMzLVxcdHNrYi1cXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01NDQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ3LVxcdHNrYi1cXHUwMDNlcmVkaXJlY3RlZCA9IDE7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDQ4OiNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDQ5LVxcdHNrYi1cXHUwMDNlZnJvbV9pbmdyZXNzID0gZnJvbV9pbmdyZXNzO1xcbi0tXFxubmV0L0tjb25maWc9NTU9Y29uZmlnIE5FVF9YR1JFU1NcXG4tLVxcbm5ldC9LY29uZmlnLTU5LVxcbm5ldC9LY29uZmlnOjYwOmNvbmZpZyBORVRfUkVESVJFQ1RcXG5uZXQvS2NvbmZpZy02MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjI5OjI3LjU1MjM3NTk0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MTAxNDQ0NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYnJpZGdlIHN1YnN5c3RlbSwgYW5kIGBDT05GSUdfQlJJREdFYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCDigJMgdGhhdCBlbmFibGVzIHRoZSB3aG9sZSBzaGViYW5nLCBpbmNsdWRpbmcgYGJyX2lucHV0LmNgLiBCdXQgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCdzIG5vdCBhbHdheXMgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzZWUgaWYgYENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRWAgb3IgYENPTkZJR19CUklER0VfTkVURklMVEVSYCBoYXZlIGFueSBiZWFyaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIEknbSB3b3JraW5nIG9uLiBUaGVzZSBmaWx0ZXIgb3B0aW9ucyBjb3VsZCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgdGhlIGJyaWRnZSBpbnRlcmFjdHMgd2l0aCB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpb25zaGlwLCBpZiBhbnkuXG5cblRoZXJlZm9yZSwgSSdsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBkaXZpbmcgaW50byBgbmV0L2JyaWRnZS9LY29uZmlnYCBhbmQgYG5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWdgIGlzIGVzc2VudGlhbCB0byBzZWUgaG93IHRoZXNlIG9wdGlvbnMgaW50ZXJwbGF5IGFuZCB3aGVyZSBJIG1pZ2h0IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cywgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvIEknbSBkZWFsaW5nIHdpdGguIE5vIHBvaW50IGd1ZXNzaW5nIHdoZW4gdGhlIGFuc3dlciBpcyBpbiB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMDgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzoyOTo0NS42NTM4MjI0ODRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTcyMjg5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJJREdFX05FVEZJTFRFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTE0Nz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE0ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xNDktQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE2Mz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2NDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjUtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3OT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE4MDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xODEtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnPTc1PUNPTkZJR19CUklER0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc6NzY6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNzctQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTYxPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6NjI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWctNjMtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc9NDc9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnOjQ4OiMgQ09ORklHX0JSSURHRV9ORVRGSUxURVIgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZy00OS1DT05GSUdfTkZfQ09OTlRSQUNLPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc9NDQ9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzo0NTojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTQ2LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9NDY9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6NDc6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctNDgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTY2PUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc6Njc6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNjgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTgwPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxODE6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xODItQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTE3MT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTcyOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMTczLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LPW1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoyOiNpZm5kZWYgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDozOiNkZWZpbmUgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg9OD1zdHJ1Y3QgbmZfYnJpZGdlX2ZyYWdfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5fcHJlcm91dGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtODUtfVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjg2OiNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODU9c3RydWN0IHRzX2NvbmZpZztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4Ni1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4OC1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDQzPWVudW0gc2tiX2V4dF9pZCB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDQ0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0NS1cXHRTS0JfRVhUX0JSSURHRV9ORixcXG4tLVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ4ND1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDg4LVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oOjQ4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC00OTAtc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfYnJpZGdlKHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEwLXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEyLVxcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTQzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqYnJpZGdlX3BhcmVudF9ydGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDQte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDo0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDYtXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydDtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oPTEzPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0xOS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRob29rX2luZGV4O1xcdC8qIGluZGV4IGluIGhvb2tfZW50cmllcy1cXHUwMDNlaG9va1tdICovXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMjEtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqYnJpZGdlX2RldjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM6I2RlZmluZSBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zND1lbnVtIG5mX2JyX2hvb2tfcHJpb3JpdGllcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQ0LVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6NDU6I2VuZGlmIC8qIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0ggKi9cXG4tLVxcbm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZy0yMzAtXFxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXFxubmV0L0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTM9YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE0LVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTU6YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE2LVxcbi0tXFxubmV0L2JyaWRnZS9NYWtlZmlsZT0xOD1icl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGJyX25ldGZpbHRlcl9pcHY2Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSArPSBicl9uZXRmaWx0ZXIub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDI1PXN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00NjYtXFxubmV0L2JyaWRnZS9ici5jOjQ2NzojaWYgSVNfTU9EVUxFKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnIuYy00NjgtXFx0cHJfaW5mbyhcXFwiYnJpZGdlOiBmaWx0ZXJpbmcgdmlhIGFycC9pcC9pcDZ0YWJsZXMgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTIwND1zdGF0aWMgaW50IGJyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMS1cXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MjEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEzLVxcdC8qIHJlbWVtYmVyIHRoZSBNVFUgaW4gdGhlIHJ0YWJsZSBmb3IgUE1UVSAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1NC0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTYtXFx0aWYgKGRhdGFbSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTXSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTYxOT1zdGF0aWMgc2l6ZV90IGJyX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2NjctI2VuZGlmXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTY2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjY5LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAgICAvKiBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2Nzg9c3RhdGljIGludCBicl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5MS0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzkyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTMtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTE0LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwb3J0X2xpc3Q7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNi1cXHR1bmlvbiB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMDIzPWV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfYnJfb3BzIF9fcmN1ICpuZl9icl9vcHM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI1LS8qIGJyX25ldGZpbHRlci5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI3LWludCBicl9uZl9jb3JlX2luaXQodm9pZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NzcxPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhtdWx0aWNhc3RfbWxkX3ZlcnNpb24pO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3My0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6Nzc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy03NzUtc3RhdGljIHNzaXplX3QgbmZfY2FsbF9pcHRhYmxlc19zaG93KFxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTkzNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc2LSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo5Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk3OC1cXHRcXHUwMDI2ZGV2X2F0dHJfbmZfY2FsbF9pcHRhYmxlcy5hdHRyLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2NvcmUvc2tidWZmLmMtNTE1Mi1cXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmM6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjczPXZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzE1LVxcdC8qIElmIHdlIHVzZSBpcF9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jPTMxMz12b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzgyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjM4MzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODQtXFx0LyogSWYgd2UgdXNlIGlwNl9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDg1PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDg2LVxcdHRyaXN0YXRlICdcXFwicGh5c2RldlxcXCIgbWF0Y2ggc3VwcG9ydCdcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4NzpcXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBCUklER0VfTkVURklMVEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODgtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjg9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNDAtc3RhdGljIGNvbnN0IGNoYXIgKmdldF9waHlzaW5kZXZfbmFtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3Ny1cXHRpZiAob3B0LVxcdTAwM2VjbWRmbGFncyBcXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3OS1cXHRcXHRjb25zdCBjaGFyICplaWZhY2UgPSBTUkNESVIgPyBnZXRfcGh5c2luZGV2X25hbWUoc2tiLCB4dF9uZXQocGFyKSkgOlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM3Nz1oYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTUtXFx0aWYgKG9wdC1cXHUwMDNlY21kZmxhZ3MgXFx1MDAyNiBJUFNFVF9GTEFHX1BIWVNERVYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTctXFx0XFx0Y29uc3QgY2hhciAqZWlmYWNlID0gU1JDRElSID8gZ2V0X3BoeXNpbmRldl9uYW1lKHNrYiwgeHRfbmV0KHBhcikpIDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jPTExMz1uZl9sb2dfZHVtcF9wYWNrZXRfY29tbW9uKHN0cnVjdCBuZl9sb2dfYnVmICptLCB1OCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyNi1cXHRcXHRcXHRvdXQgPyBvdXQtXFx1MDAzZW5hbWUgOiBcXFwiXFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyOC1cXHRwaHlzaW5kZXYgPSBuZl9icmlkZ2VfZ2V0X3BoeXNpbmRldihza2IsIG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9NTk9c3RhdGljIHZvaWQgbmZfcXVldWVfZW50cnlfcmVsZWFzZV9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtNjktXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy03MS1cXHRkZXZfcHV0KGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYz04ND1zdGF0aWMgdm9pZCBfX25mX3F1ZXVlX2VudHJ5X2luaXRfcGh5c2RldnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODUte1xcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODctXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGVudHJ5LVxcdTAwM2Vza2I7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9MTEyPWJvb2wgbmZfcXVldWVfZW50cnlfZ2V0X3JlZnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy0xMjItXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjEyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTI0LVxcdGRldl9ob2xkKGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQzLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NDIyPXN0YXRpYyBpbnQgbmZ1bG5sX3B1dF9icmlkZ2Uoc3RydWN0IG5mdWxubF9pbnN0YW5jZSAqaW5zdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo0NTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDU1LXN0YXRpYyBpbnQgbmZsb2dfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz00NzQ9X19idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmZubF9sb2dfbmV0ICpsb2csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MDktXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTEwOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MTEtXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVxcdTAwM2Vza2IsIE5GVUxBX0lGSU5ERVhfSU5ERVYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01NDUtXFx0aWYgKG91dGRldikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjU0NjojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ3LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoaW5zdC1cXHUwMDNlc2tiLCBORlVMQV9JRklOREVYX09VVERFVixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTcxOD1uZnVsbmxfbG9nX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTYtXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcXHQvKiBpZmluZGV4ICovXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTc1OC1cXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVxcdC8qIGlmaW5kZXggKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTUxLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz00Njc9c3RhdGljIGJvb2wgbmZfYnJpZGdlX3BvcnRzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy00Njgte1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NDY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDcwLVxcdGlmICghbmZfYnJpZGdlX3BvcnRfdmFsaWQoZW50cnktXFx1MDAzZXBoeXNpbikgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9Njc1PXN0YXRpYyBpbnQgbmZfcXVldWVfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2ODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODQtc3RhdGljIGludCBuZnFubF9wdXRfbWFzdGVyX2lmaW5kZXgoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLCBpbnQgYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM3LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM5LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MzItXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MzM6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODM0LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfSU5ERVYsIGh0b25sKGluZGV2LVxcdTAwM2VpZmluZGV4KSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTg2My1cXHRpZiAob3V0ZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4NjQ6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODY1LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfT1VUREVWLCBodG9ubChvdXRkZXYtXFx1MDAzZWlmaW5kZXgpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA0OD1uZl9xdWV1ZV9lbnRyeV9kdXAoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjMtLyogV2hlbiBjYWxsZWQgZnJvbSBicmlkZ2UgbmV0ZmlsdGVyLCBza2ItXFx1MDAzZWRhdGEgbXVzdCBwb2ludCB0byBNQUMgaGVhZGVyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0OTk9ZGV2X2NtcChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBsb25nIGlmaW5kZXgpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAwLXtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE1MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAyLVxcdGludCBwaHlzaW5pZiwgcGh5c291dGlmO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc9Nz1DT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctOS1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6Mjk6NDcuMTUxMDU1ODFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNjAxMTI2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJyaWRnZSBGcmFtZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBicmlkZ2UgZnJhbWVzIGFyZSBoYW5kbGVkLiBGaXJzdCwgYENPTkZJR19CUklER0VgIGlzIHRoZSBrZXkg4oCTIHRoYXQncyB3aGF0IGNvbXBpbGVzIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIGBicl9pbnB1dC5jYCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gYSBjb3VwbGUgb2Ygc3ltYm9scy4gYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgIGp1bXBzIG91dCBiZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIGFuZCBjcnVjaWFsbHksIGNhbGxzIGBicl9wYXNzX2ZyYW1lX3VwYCwgd2hpY2ggaW4gdHVybiBsZWFkcyB0byBgTkZfSE9PS2AgZm9yIGBicl9uZXRpZl9yZWNlaXZlX3NrYmAuIFRoYXQncyBhIGRpcmVjdCBjaGFpbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBgYnJfZ2V0X3J4X2hhbmRsZXJgIHdoaWNoIGlzIGFsc28gbm9uLXN0YXRpYywgYW5kIGluIGBicl9pbnB1dC5jYC5cblxuTm93LCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeSwgYW5kIGFsc28gaW4gdGhlIGBuZXQvY29yZS9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSBhbnl0aGluZyByZWxhdGluZyB0byByZWNlaXZpbmcgb3IgaGFuZGxpbmcgZnJhbWVzIG9uIHRoZSBicmlkZ2UuIEknbGwgbmVlZCB0byBrbm93IG9mIGFueXRoaW5nIEkgbWF5IGhhdmUgbWlzc2VkIGluIGBicl9pbnB1dC5jYC4gSSBzaG91bGQgYWxzbyBjaGVjayBgYnJfcHJpdmF0ZS5oYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCwgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGBuZXQvYnJpZGdlL2AgZGlyZWN0b3J5IHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTAxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjMwOjE0LjMxMTE3MDYwN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MDE5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfaGFuZGxlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTczPXN0YXRpYyB2b2lkIF9fYnJfZm9yd2FyZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICp0byxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTgwLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjgxOlxcdC8qIE1hcmsgdGhlIHNrYiBmb3IgZm9yd2FyZGluZyBvZmZsb2FkIGVhcmx5IHNvIHRoYXQgYnJfaGFuZGxlX3ZsYW4oKVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTgyLVxcdCAqIGNhbiBrbm93IHdoZXRoZXIgdG8gcG9wIHRoZSBWTEFOIGhlYWRlciBvbiBlZ3Jlc3Mgb3Iga2VlcCBpdC5cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTg2LVxcdHZnID0gbmJwX3ZsYW5fZ3JvdXBfcmN1KHRvKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzo4NzpcXHRza2IgPSBicl9oYW5kbGVfdmxhbih0by1cXHUwMDNlYnIsIHRvLCB2Zywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy04OC1cXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0zOT1zdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTY2LVxcdHNrYi1cXHUwMDNlZGV2ID0gYnJkZXY7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjY3OlxcdHNrYiA9IGJyX2hhbmRsZV92bGFuKGJyLCBOVUxMLCB2Zywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNjgtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtODEtLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjgyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy04My17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjQ4LX1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNTAtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI1MTpzdGF0aWMgdm9pZCBfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNjQtLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI2NTpzdGF0aWMgaW50IGJyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI2Ni17XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI2NzpcXHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjY4LVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTI3Mz1zdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjkzLVxcdFxcdFxcdCAgIE5GUFJPVE9fQlJJREdFLCBza2ItXFx1MDAzZWRldiwgTlVMTCwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mjk0OlxcdFxcdFxcdCAgIG5ldCwgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaCk7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI5NS1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMTgtXFx0bmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMxOTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzIwLSNlbHNlXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMyMTpcXHRicl9oYW5kbGVfZnJhbWVfZmluaXNoKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMjItI2VuZGlmXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzI5PXN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ0LSAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzozNDU6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQ2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNjgtXFx0aWYgKHRlc3RfYml0KEJSX1ZMQU5fVFVOTkVMX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzY5OlxcdFxcdGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgcCwgbmJwX3ZsYW5fZ3JvdXBfcmN1KHApKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzcwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM5NS1cXHRcXHRcXHQqcHNrYiA9IHNrYjtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6Mzk2OlxcdFxcdFxcdF9fYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaChza2IpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zOTctXFx0XFx0XFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00MDctXFx0XFx0XFx0KnBza2IgPSBza2I7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQwODpcXHRcXHRcXHRfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDA5LVxcdFxcdFxcdHJldHVybiBSWF9IQU5ETEVSX1BBU1M7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNDI2LVxcdFxcdFxcdCAgICBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXFx1MDAzZWRldiwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDI3OlxcdFxcdFxcdCAgICBicl9oYW5kbGVfbG9jYWxfZmluaXNoKSA9PSAxKSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQyOC1cXHRcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ2My0gKi9cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NDY0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZV9kdW1teShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ2NS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9NDY5PXJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTQ3MS1cXHRpZiAobmV0ZGV2X3VzZXNfZHNhKGRldikpXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ3MjpcXHRcXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lX2R1bW15O1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzMtXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjQ3NDpcXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy00NzUtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0yNTU9dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3My0gKiBkb24ndCwgd2UgdXNlIHRoZSBuZWlnaGJvdXIgZnJhbWV3b3JrIHRvIGZpbmQgb3V0LiBJbiBib3RoIGNhc2VzLCB3ZSBtYWtlXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyNzQ6ICogc3VyZSB0aGF0IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goKSBpcyBjYWxsZWQgYWZ0ZXJ3YXJkcy5cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3NS0gKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTI3Nj1pbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzA2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzA3OlxcdFxcdFxcdHJldCA9IGJyX2hhbmRsZV9mcmFtZV9maW5pc2gobmV0LCBzaywgc2tiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTMwOC1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zNzY9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQzMC1cXHRicl9uZl9ob29rX3RocmVzaChORl9CUl9QUkVfUk9VVElORywgbmV0LCBzaywgc2tiLCBza2ItXFx1MDAzZWRldiwgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQzMTpcXHRcXHRcXHQgIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDMyLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDA1PXN0YXRpYyB2b2lkIGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Vfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDI2LVxcdG5mX2JyaWRnZS1cXHUwMDNlcGh5c291dGRldiA9IE5VTEw7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDI3OlxcdGJyX2hhbmRsZV9mcmFtZV9maW5pc2goZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDI4LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYz0xMDE9c3RhdGljIGludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTMtXFx0YnJfbmZfaG9va190aHJlc2goTkZfQlJfUFJFX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmM6MTU0OlxcdFxcdFxcdCAgc2tiLVxcdTAwM2VkZXYsIE5VTEwsIGJyX2hhbmRsZV9mcmFtZV9maW5pc2gpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0xNTUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD05Mjk9aW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTkzMS0vKiBicl9pbnB1dC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6OTMyOmludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC05MzMtcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU4OT1ib29sIGJyX3Nob3VsZF9sZWFybihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKnZpZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU5MDpzdHJ1Y3Qgc2tfYnVmZiAqYnJfaGFuZGxlX3ZsYW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNzE2PXN0YXRpYyBpbmxpbmUgYm9vbCBicl9zaG91bGRfbGVhcm4oc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3MjEtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTcyMjpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpicl9oYW5kbGVfdmxhbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyMy1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg9NDM9dm9pZCB2bGFuX3R1bm5lbF9pbmZvX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtNDQtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmg6NDU6dm9pZCBicl9oYW5kbGVfaW5ncmVzc192bGFuX3R1bm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC00Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zyk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjQ4OmludCBicl9oYW5kbGVfZWdyZXNzX3ZsYW5fdHVubmVsKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTQ5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgdmxhbl90dW5uZWxfaW5mb19kZWwoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtNzYtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjc3OnN0YXRpYyBpbmxpbmUgaW50IGJyX2hhbmRsZV9pbmdyZXNzX3ZsYW5fdHVubmVsKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTc4LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz00NDY9c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTQ3OS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo0ODA6c3RydWN0IHNrX2J1ZmYgKmJyX2hhbmRsZV92bGFuKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy00ODEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy01MzEtXFx0aWYgKHAgXFx1MDAyNlxcdTAwMjYgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJfVkxBTl9UVU5ORUwpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl92bGFuLmM6NTMyOlxcdCAgICBicl9oYW5kbGVfZWdyZXNzX3ZsYW5fdHVubmVsKHNrYiwgdikpIHtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy01MzMtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmM9MTU3PXZvaWQgdmxhbl90dW5uZWxfZGVpbml0KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX3R1bm5lbC5jLTE2MS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmM6MTYyOnZvaWQgYnJfaGFuZGxlX2luZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmMtMTYzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmMtMTg1LVxcbm5ldC9icmlkZ2UvYnJfdmxhbl90dW5uZWwuYzoxODY6aW50IGJyX2hhbmRsZV9lZ3Jlc3Nfdmxhbl90dW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fdHVubmVsLmMtMTg3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMDoxNC4zNTY4NzU0NzZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYwNTA2OTAwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBCcmlkZ2VkIE5ldHdvcmsgRnJhbWUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYCBhbmQgYGJyX2dldF9yeF9oYW5kbGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZyYW1lIHByb2Nlc3NpbmcgcGF0aCwgc28gSSdsbCBzdGFydCB3aXRoIGBicl9oYW5kbGVfZnJhbWVfZmluaXNoYC4gRnJvbSBteSBleHBlcmllbmNlLCB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IGVsZW1lbnQsIHNpdHRpbmcgaW4gYGJyX2lucHV0LmNgLiBJdCBsb29rcyBsaWtlIGl0IGRpcmVjdGx5IGNhbGxzIGBicl9wYXNzX2ZyYW1lX3VwYCwgYW5kIHRoYXQncyB3aGVyZSBgYnJfbmV0aWZfcmVjZWl2ZV9za2JgIGdldHMgaW52b2x2ZWQuIFRoYXQncyBhIHZpdGFsIGNvbm5lY3Rpb24gZm9yIG1lLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgY29uZmlybSB0aGUgcmVxdWlyZW1lbnRzLiBXZSd2ZSBnb3QgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIChnb29kISksIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGluZGVlZCB0aGUgb25lcyBJIHBpY2tlZDogYGJyX2hhbmRsZV9mcmFtZV9maW5pc2hgIGFuZCBgYnJfZ2V0X3J4X2hhbmRsZXJgLiAgV2UncmUgZGVhbGluZyB3aXRoIGEgYnJpZGdlLCBzbyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGUgYEJSSURHRWAsIGFzIGV4cGVjdGVkLiAgVGhhdCdzIGFsbCBhZGRpbmcgdXAuXG5cbkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkgdGhpbmsgd2UgaGF2ZSBhIHN0cm9uZyBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIE5vdywgbGV0J3MgbW92ZSBmb3J3YXJkIGFuZCBtYWtlIHRoZSBuZWNlc3NhcnkgY2FsbHMgdG8gYHNldC1yZXN1bHRzYC4gSSB0aGluayB3ZSdyZSByZWFkeSB0byBwcm9jZWVkIGFuZCBkaWcgaW50byB0aGUgZnV6emluZyBwcm9jZXNzIGl0c2VsZiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NjUsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjMwOjUwLjQwNzU2ODYyOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTIyNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9oYW5kbGVfZnJhbWVfZmluaXNoXCIsXG4gICAgXCJicl9nZXRfcnhfaGFuZGxlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJyX2lucHV0LmMgYnkgc2V0dGluZyB0aGUgc2tiIHJlZGlyZWN0ZWQgZmxhZyB2aWEgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoKSB3aGVuIHBhc3NpbmcgYnJpZGdlIGZyYW1lcyB1cCBmb3IgbG9jYWwgZGVsaXZlcnksIHByZXZlbnRpbmcgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgYW5kIHBvdGVudGlhbGx5IGNvcnJ1cHRpbmcgb3IgcmVhbGxvY2F0aW5nIG1lbW9yeS4gVGhpcyBhZmZlY3RzIGNvcmUgYnJpZGdlIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9oYW5kbGVfZnJhbWVfZmluaXNoXCIsXG4gICAgXCJicl9nZXRfcnhfaGFuZGxlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGJyX2lucHV0LmMgYnkgc2V0dGluZyB0aGUgc2tiIHJlZGlyZWN0ZWQgZmxhZyB2aWEgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoKSB3aGVuIHBhc3NpbmcgYnJpZGdlIGZyYW1lcyB1cCBmb3IgbG9jYWwgZGVsaXZlcnksIHByZXZlbnRpbmcgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgYW5kIHBvdGVudGlhbGx5IGNvcnJ1cHRpbmcgb3IgcmVhbGxvY2F0aW5nIG1lbW9yeS4gVGhpcyBhZmZlY3RzIGNvcmUgYnJpZGdlIG5ldHdvcmtpbmcgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzA6NTAuNDc1NDk3MTI3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk1ODk4MTMyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMDo1MC40NzU4OTQ2NDdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDk1ODk0MTEyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1hcmtzIHRoZSBza2IgYXMgcmVkaXJlY3RlZCAoc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSkpIGluIGJyX25ldGlmX3JlY2VpdmVfc2tiKCkgcHJpb3IgdG8gY2FsbGluZyBuZXRpZl9yZWNlaXZlX3NrYigpLiBUaGlzIHByZXZlbnRzIGdlbmVyaWMgWERQIGZyb20gZXhlY3V0aW5nIGFnYWluIG9uIHRoZSBicmlkZ2UgZGV2aWNlIGR1cmluZyBsb2NhbCBkZWxpdmVyeSByZS1pbmplY3Rpb24sIHdoaWNoIG90aGVyd2lzZSByaXNrZWQgcmVhbGxvY2F0aW5nIHRoZSBza2IgaGVhZCBidWZmZXIgKHBza2JfZXhwYW5kX2hlYWQpIGFuZCBjYXVzaW5nIHVzZS1hZnRlci1mcmVlIC8gaW52YWxpZCBtZW1vcnkgYWNjZXNzIGJ1Z3MuXFxuXFxuU3VjaCBidWZmZXIgcmVhbGxvY2F0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgY29weS10by11c2VyIGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjY5NGVkZDE2OWU4YjQwYTI0ZjNkYmQ1ODEyOWUxM2U5NWQ3Y2ZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTM6MjM6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbmluZGV4IGQ4N2E1ZjlmYTkyYjcuLjBkMDhjM2MyMDM2ZjcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuQEAgLTI3LDYgKzI3LDEyIEBAIHN0YXRpYyBpbnRcbiBicl9uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XG4rXG4rXHQvKiBSZS1pbmplY3RlZCBmb3IgbG9jYWwgZGVsaXZlcnk6IGRvIG5vdCBsZXQgZ2VuZXJpYyBYRFAgcnVuIG9uIHRoZVxuK1x0ICogYnJpZGdlIGRldmljZSBhIHNlY29uZCB0aW1lLCBpdCBjb3VsZCByZWFsbG9jYXRlIHRoZSBoZWFkIHZpYVxuK1x0ICogcHNrYl9leHBhbmRfaGVhZCgpIGFuZCBmcmVlIGEgYnVmZmVyIHN0aWxsIGluIHVzZS5cbitcdCAqL1xuK1x0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7XG4gXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMDo1MC40NzU4OTU0ODdaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ5MTU4ODM2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQnJpZGdlIElucHV0IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjaGFuZ2VkIGFuZCB3aHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfaW5wdXQuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpcyBpbiB0aGUgYGJyX25ldGlmX3JlY2VpdmVfc2tiYCBmdW5jdGlvbi5cblxuSSBzZWUgdGhhdCBgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBmYWxzZSk7YCBpcyBiZWluZyBhZGRlZCBqdXN0IGJlZm9yZSB0aGUgY2FsbCB0byBgbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKWAuIFNvLCB0aGUgaW50ZW50IGlzIGNsZWFybHkgcmVsYXRlZCB0byB0aGUgXCJyZWRpcmVjdGVkXCIgc3RhdGUgb2YgdGhlIFNLQiwgYW5kLCBjcnVjaWFsbHksIGl0IHByZXZlbnRzIGNsZWFyaW5nIHRoYXQgZmxhZyBsYXRlciBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgc3BlY2lmaWMgYWRkaXRpb24gaXMgcmVsZXZhbnQuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvYnJpZGdlL2JyX2lucHV0LmNgIGFyb3VuZCBsaW5lIDI3LiBJIGFsc28gbmVlZCBhIHJlZnJlc2hlciBvbiBleGFjdGx5IHdoYXQgYHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyYCBpcyBkb2luZyB1bmRlciB0aGUgaG9vZC4gU3BlY2lmaWNhbGx5LCB3aGF0IGRvZXMgdGhpcyBmdW5jdGlvbiAqZG8qIHdoZW4gc2V0IHRvIGZhbHNlPyBBbmQgd2hhdCBpbXBhY3QgZG9lcyAqcHJldmVudGluZyB0aGUgY2xlYXJpbmcqIG9mIHRoZSBmbGFnIGhhdmUgb24gdGhlIHN1YnNlcXVlbnQgYG5ldGlmX3JlY2VpdmVfc2tiYCBjYWxsPyBUaGlzIGlzIGxpa2VseSBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTgsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMToyNS4zOTE3ODE2NjhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKlxcdEhhbmRsZSBpbmNvbWluZyBmcmFtZXNcXG4gICA0OlxcdCAqXFx0TGludXggZXRoZXJuZXQgYnJpZGdlXFxuICAgNTpcXHQgKlxcbiAgIDY6XFx0ICpcXHRBdXRob3JzOlxcbiAgIDc6XFx0ICpcXHRMZW5uZXJ0IEJ1eXRlbmhla1xcdFxcdFxcdTAwM2NidXl0ZW5oQGdudS5vcmdcXHUwMDNlXFxuICAgODpcXHQgKi9cXG4gICA5OlxcdFxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaFxcdTAwM2VcXG4gIDE1OlxcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmhcXHUwMDNlXFxuICAxNzpcXHQjZW5kaWZcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZWlnaGJvdXIuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvYXJwLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJicl9wcml2YXRlLmhcXFwiXFxuICAyNDpcXHQjaW5jbHVkZSBcXFwiYnJfcHJpdmF0ZV90dW5uZWwuaFxcXCJcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RhdGljIGludFxcbiAgMjc6XFx0YnJfbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRicl9kcm9wX2Zha2VfcnRhYmxlKHNrYik7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdC8qIFJlLWluamVjdGVkIGZvciBsb2NhbCBkZWxpdmVyeTogZG8gbm90IGxldCBnZW5lcmljIFhEUCBydW4gb24gdGhlXFxuICAzMjpcXHRcXHQgKiBicmlkZ2UgZGV2aWNlIGEgc2Vjb25kIHRpbWUsIGl0IGNvdWxkIHJlYWxsb2NhdGUgdGhlIGhlYWQgdmlhXFxuICAzMzpcXHRcXHQgKiBwc2tiX2V4cGFuZF9oZWFkKCkgYW5kIGZyZWUgYSBidWZmZXIgc3RpbGwgaW4gdXNlLlxcbiAgMzQ6XFx0XFx0ICovXFxuICAzNTpcXHRcXHRza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKTtcXG4gIDM2OlxcdFxcdHJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpO1xcbiAgMzc6XFx0fVxcbiAgMzg6XFx0XFxuICAzOTpcXHRzdGF0aWMgaW50IGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBwcm9taXNjKVxcbiAgNDA6XFx0e1xcbiAgNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqYnJkZXYgPSBCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYnJkZXY7XFxuICA0MjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihicmRldik7XFxuICA0MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChicmRldiwgc2tiLVxcdTAwM2VsZW4pO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHR2ZyA9IGJyX3ZsYW5fZ3JvdXBfcmN1KGJyKTtcXG4gIDQ4OlxcdFxcbiAgNDk6XFx0XFx0LyogUmVzZXQgdGhlIG9mZmxvYWRfZndkX21hcmsgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHN0YWNrZWRcXG4gIDUwOlxcdFxcdCAqIGJyaWRnZSBhYm92ZSwgYW5kIGl0IHNob3VsZCBub3QgdGhpbmsgdGhpcyBicmlkZ2UgaXQgZG9pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzE6MjUuMzkxODQ4Mzk4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkzNTE5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9zZXRfcmVkaXJlY3RlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYz00MTE9bWx4NWVfdGNfaW50X3BvcnRfZGV2X2Z3ZChzdHJ1Y3QgbWx4NWVfdGNfaW50X3BvcnRfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ0OC1cXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjL2ludF9wb3J0LmM6NDQ5OlxcdFxcdHNrYl9zZXRfcmVkaXJlY3RlZChza2IsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1MC1cXHRcXHQqZm9yd2FyZF90eCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjL2ludF9wb3J0LmMtNDUzLVxcdFxcdHNrYl9wdXNoX3Jjc3VtKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGMvaW50X3BvcnQuYzo0NTQ6XFx0XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Yy9pbnRfcG9ydC5jLTQ1NS1cXHRcXHQqZm9yd2FyZF90eCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTU0MjQ9c3RhdGljIGlubGluZSBib29sIHNrYl9pc19yZWRpcmVjdGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0MjgtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDI5OnN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3JlZGlyZWN0ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmcm9tX2luZ3Jlc3MpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDMwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQzOT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0NDMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1NDQ0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTQ0NS1cXHRcXHRcXHRcXHRcXHQgICAgICBib29sIGZyb21faW5ncmVzcylcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM9ODAzPWludCBjcHVfbWFwX2dlbmVyaWNfcmVkaXJlY3Qoc3RydWN0IGJwZl9jcHVfbWFwX2VudHJ5ICpyY3B1LFxcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYy04MDgtXFx0X19za2JfcHVsbChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxua2VybmVsL2JwZi9jcHVtYXAuYzo4MDk6XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgZmFsc2UpO1xcbmtlcm5lbC9icGYvY3B1bWFwLmMtODEwLVxcdF9fcHRyX3NldF9iaXQoMCwgXFx1MDAyNnNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9Mjc9YnJfbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQtXFx0ICovXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM1OlxcdHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNi1cXHRyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDU9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU1LVxcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjIxNTY6XFx0c2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc2tiLCBza2JfYXRfdGNfaW5ncmVzcyhza2IpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTU3LVxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYz0yND1zdGF0aWMgdm9pZCBuZnRfZndkX25ldGRldl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0zMy1cXHRza2ItXFx1MDAzZXNrYl9paWYgPSBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM6MzQ6XFx0c2tiX3NldF9yZWRpcmVjdGVkKHNrYiwgbmZ0X2hvb2socGt0KSA9PSBORl9ORVRERVZfSU5HUkVTUyk7XFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTM1LVxcbi0tXFxubmV0L3NjaGVkL2FjdF9taXJyZWQuYz0yNTQ9c3RhdGljIGludCB0Y2ZfbWlycmVkX3RvX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX21pcnJlZCAqbSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI1LVxcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmM6MzI2OlxcdFxcdHNrYl9zZXRfcmVkaXJlY3RlZChza2JfdG9fc2VuZCwgc2tiX3RvX3NlbmQtXFx1MDAzZXRjX2F0X2luZ3Jlc3MpO1xcbm5ldC9zY2hlZC9hY3RfbWlycmVkLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMToyNi44ODUzNzcyMDNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg4NTQwNzU4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIgTXlzdGVyeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyYC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIGl0J3MgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgZm9yd2FyZGluZyBvciByZWRpcmVjdGlvbiBsb2dpYyB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2ssIGxpa2VseSB3aXRoIHNvbWUgb3B0aW1pemF0aW9uIGNvbmNlcm5pbmcgY2xlYXJpbmcgZGF0YS4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBJJ20gaGVhZGluZyBzdHJhaWdodCBmb3IgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBhbmQgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU0MjQuIFRoYXQgc2hvdWxkIGJlIHRoZSBkZWZpbml0aW9uLCBvciBhdCBsZWFzdCB0aGUgdmljaW5pdHkgb2YgdGhlIGZ1bmN0aW9uJ3MgZGVjbGFyYXRpb24uIEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvbW1lbnRzIGFyZSBpbnNpZ2h0ZnVsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBmbGFncyBhbiBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYXMgcmVkaXJlY3RlZCBhbmQsIGNydWNpYWxseSwgKndoeSogdGhlICdub2NsZWFyJyBhc3BlY3QgaXMgaW1wb3J0YW50IOKAkyB3aGF0IGRhdGEgaXMgKm5vdCogYmVpbmcgY2xlYXJlZCBhbmQgaW4gd2hhdCBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBwcm9iYWJseSBnaXZlIG1lIHRoZSBrZXkgaW5zaWdodCBJIG5lZWQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMTozMy43NzA3ODgwMzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTQyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQyMDpcXHRcXHQgKi9cXG41NDIxOlxcdFxcdHJldHVybiBjc3VtX3BhcnRpYWwobDRfaGRyLCBjc3VtX3N0YXJ0IC0gbDRfaGRyLCBwYXJ0aWFsKTtcXG41NDIyOlxcdH1cXG41NDIzOlxcdFxcbjU0MjQ6XFx0c3RhdGljIGlubGluZSBib29sIHNrYl9pc19yZWRpcmVjdGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuNTQyNTpcXHR7XFxuNTQyNjpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VyZWRpcmVjdGVkO1xcbjU0Mjc6XFx0fVxcbjU0Mjg6XFx0XFxuNTQyOTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnJvbV9pbmdyZXNzKVxcbjU0MzA6XFx0e1xcbjU0MzE6XFx0XFx0c2tiLVxcdTAwM2VyZWRpcmVjdGVkID0gMTtcXG41NDMyOlxcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuNTQzMzpcXHRcXHRza2ItXFx1MDAzZWZyb21faW5ncmVzcyA9IGZyb21faW5ncmVzcztcXG41NDM0OlxcdFxcdGlmIChza2ItXFx1MDAzZWZyb21faW5ncmVzcylcXG41NDM1OlxcdFxcdFxcdHNrYl9jbGVhcl90c3RhbXAoc2tiKTtcXG41NDM2OlxcdCNlbmRpZlxcbjU0Mzc6XFx0fVxcbjU0Mzg6XFx0XFxuNTQzOTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXFxuNTQ0MDpcXHR7XFxuNTQ0MTpcXHRcXHRza2ItXFx1MDAzZXJlZGlyZWN0ZWQgPSAwO1xcbjU0NDI6XFx0fVxcbjU0NDM6XFx0XFxuNTQ0NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9yZWRpcmVjdGVkX25vY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG41NDQ1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZnJvbV9pbmdyZXNzKVxcbjU0NDY6XFx0e1xcbjU0NDc6XFx0XFx0c2tiLVxcdTAwM2VyZWRpcmVjdGVkID0gMTtcXG41NDQ4OlxcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXFxuNTQ0OTpcXHRcXHRza2ItXFx1MDAzZWZyb21faW5ncmVzcyA9IGZyb21faW5ncmVzcztcXG41NDUwOlxcdCNlbmRpZlxcbjU0NTE6XFx0fVxcbjU0NTI6XFx0XFxuNTQ1MzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2NzdW1faXNfc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjU0NTQ6XFx0e1xcbjU0NTU6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1NDVFApXFxuNTQ1NjpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2Vjc3VtX25vdF9pbmV0O1xcbjU0NTc6XFx0I2Vsc2VcXG41NDU4OlxcdFxcdHJldHVybiAwO1xcbjU0NTk6XFx0I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEzOjMxOjMzLjc3MTA3OTI4MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjYxODM1NTkwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFBhY2tldCBSZWRpcmVjdGlvbiBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgc2tiX2lzX3JlZGlyZWN0ZWRgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIGBza2ItXHUwMDNlcmVkaXJlY3RlZGAgZmxhZyB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGFuZCAqaG93KiB0aGVzZSBlbGVtZW50cyBhcmUgZW1wbG95ZWQuIEl04oCZcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyBpbiB3aGljaCBhIHBhY2tldCdzIHJlZGlyZWN0aW9uIHN0YXR1cyBpcyBhc3Nlc3NlZCBhbmQgbWFuaXB1bGF0ZWQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBwcmFjdGljYWwgdXNhZ2UgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cy4gVGhpcyBtZWFucyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc2VhcmNoaW5nIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoZXNlIHN5bWJvbHMuIElkZW50aWZ5aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgdGhlIGRpZmZlcmVudCBtb2R1bGVzIGludm9sdmVkIGluIGhhbmRsaW5nIHJlZGlyZWN0ZWQgcGFja2V0cy4gSeKAmW0gdGhpbmtpbmcgdGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGV4YW1pbmluZyByb3V0aW5nLCBOQVQsIG9yIHBvc3NpYmx5IGV2ZW4gdHVubmVsIGhhbmRsaW5nIGNvZGUuIE15IGdvYWwgaXMgYSBncmFudWxhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYWNrZXQgbGlmZWN5Y2xlIHJlbGF0ZWQgdG8gdGhpcyByZWRpcmVjdGlvbiBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzM6MzkuOTU0NjQxMDkzWiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxMDY2OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9pc19yZWRpcmVjdGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NTQwOD1zdGF0aWMgaW5saW5lIF9fd3N1bSBsY29fY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01NDIzLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTQyNDpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2lzX3JlZGlyZWN0ZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTU0MjUte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTYzOD1zdGF0aWMgdTMyIG5ldGlmX3JlY2VpdmVfZ2VuZXJpY194ZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTY0Ny1cXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1NjQ4OlxcdGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKVxcbm5ldC9jb3JlL2Rldi5jLTU2NDktXFx0XFx0cmV0dXJuIFhEUF9QQVNTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMzozMzo0MS40NDU3MTUxNjlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg2MTk1NzE1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudCBvZiBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoaXMgbGluZTogYGlmIChza2JfaXNfcmVkaXJlY3RlZChza2IpKSByZXR1cm4gWERQX1BBU1M7YC4gVGhlIHBhdGNoIGNvbW1lbnQgbWVudGlvbnMgdGhpcyBpcyB0byBwcmV2ZW50IGdlbmVyaWMgWERQIGZyb20gcnVubmluZyB0d2ljZSBvbiB0aGUgYnJpZGdlIGRldmljZSwgcGFydGljdWxhcmx5IGFmdGVyIGEgcmUtaW5qZWN0aW9uIHNjZW5hcmlvLiBBcHBhcmVudGx5LCB0aGlzIGRvdWJsZSBydW4gd2FzIGNhdXNpbmcgYHBza2JfZXhwYW5kX2hlYWQoKWAgdG8gcG90ZW50aWFsbHkgcmVhbGxvY2F0ZSB0aGUgU0tCIGhlYWQgYW5kIGZyZWVpbmcgdGhlIG9sZCBidWZmZXIgd2hpbGUgYSByZWZlcmVuY2Ugc3RpbGwgZXhpc3RlZCwgbGVhZGluZyB0byBhIG5hc3R5IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgYnVmZmVyIGNvcnJ1cHRpb24gc2NlbmFyaW8uXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBuZWVkcyB0byBjYXRjaC4gU28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4xLiAgKipJbmZvLWxlYWsgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoZSBwYXRjaCBzaW1wbHkgZmxhZ3MgYSBwYWNrZXQgYW5kIGRvZXNuJ3QgZXhwb3NlIGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuXG4yLiAgKipCcmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIHRoZSBwYXRjaCBzaW1wbHkgc2V0cyBzb21lIFNLQiBmbGFncy4gVGhlIHZhbHVlcyBhcmUgY29uc3RhbnQuXG4zLiAgKipOZXcgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8sIGl04oCZcyBqdXN0IHNldHRpbmcgYW4gZXhpc3RpbmcgZmxhZy5cbjQuICAqKkFsdGVyaW5nIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzLCBwb3RlbnRpYWxseSBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIHRoZSBjb3JlIGlzc3VlIHRoZSBwYXRjaCBpcyBzb2x2aW5nIHNlZW1zIHRvIGJlIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpbyAtLSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSAtLSBjYXVzZWQgYnkgaW5jb3JyZWN0IGJ1ZmZlciBoYW5kbGluZyBkdXJpbmcgU0tCIHJlLWluamVjdGlvbiB3aGVuIGdlbmVyaWMgWERQIHJ1bnMgdHdpY2UuIFRoaXMgKnR5cGUqIG9mIGJ1ZyBpcyB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBLQVNBTi5cblxuU28sIGRpZ2dpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggaW4gYGJyX25ldGlmX3JlY2VpdmVfc2tiKClgIGNhbGxzIGBza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKWAgd2hpY2ggY2FsbHMgYG5ldGlmX3JlY2VpdmVfc2tiKClgLCB3aGljaCBjb3JyZWN0bHkgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBydW5uaW5nIGEgc2Vjb25kIHRpbWUgb24gdGhlIGJyaWRnZSBhbmQgcHJldmVudGluZyBgcHNrYl9leHBhbmRfaGVhZCgpYCwgdGhlIGNvcmUgaXNzdWUuXG5cblRoaXMgcGF0Y2ggYXZvaWRzIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBLTVNBTiBiZWNhdXNlIGl0J3Mgbm90IGFjdHVhbGx5ICpkZWFsaW5nKiB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBqdXN0IGZpeGVzIGEgbWVtb3J5IGxpZmVjeWNsZSBwcm9ibGVtIGJ5IHByZXZlbnRpbmcgYSBidWcgZnJvbSBoYXBwZW5pbmcgdGhhdCBjb3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uIEl0J3Mgc2FmZSB0byBzYXkgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4gVGltZSB0byBtYWtlIHRoYXQgY2FsbC4gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3MCwiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTM6MzQ6MjAuMDY1Mjg4NjU5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYXJrcyB0aGUgc2tiIGFzIHJlZGlyZWN0ZWQgKHNrYl9zZXRfcmVkaXJlY3RlZF9ub2NsZWFyKHNrYiwgZmFsc2UpKSBpbiBicl9uZXRpZl9yZWNlaXZlX3NrYigpIHByaW9yIHRvIGNhbGxpbmcgbmV0aWZfcmVjZWl2ZV9za2IoKS4gVGhpcyBwcmV2ZW50cyBnZW5lcmljIFhEUCBmcm9tIGV4ZWN1dGluZyBhZ2FpbiBvbiB0aGUgYnJpZGdlIGRldmljZSBkdXJpbmcgbG9jYWwgZGVsaXZlcnkgcmUtaW5qZWN0aW9uLCB3aGljaCBvdGhlcndpc2Ugcmlza2VkIHJlYWxsb2NhdGluZyB0aGUgc2tiIGhlYWQgYnVmZmVyIChwc2tiX2V4cGFuZF9oZWFkKSBhbmQgY2F1c2luZyB1c2UtYWZ0ZXItZnJlZSAvIGludmFsaWQgbWVtb3J5IGFjY2VzcyBidWdzLlxcblxcblN1Y2ggYnVmZmVyIHJlYWxsb2NhdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBjb25kaXRpb25hbCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvcHktdG8tdXNlciBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFya3MgdGhlIHNrYiBhcyByZWRpcmVjdGVkIChza2Jfc2V0X3JlZGlyZWN0ZWRfbm9jbGVhcihza2IsIGZhbHNlKSkgaW4gYnJfbmV0aWZfcmVjZWl2ZV9za2IoKSBwcmlvciB0byBjYWxsaW5nIG5ldGlmX3JlY2VpdmVfc2tiKCkuIFRoaXMgcHJldmVudHMgZ2VuZXJpYyBYRFAgZnJvbSBleGVjdXRpbmcgYWdhaW4gb24gdGhlIGJyaWRnZSBkZXZpY2UgZHVyaW5nIGxvY2FsIGRlbGl2ZXJ5IHJlLWluamVjdGlvbiwgd2hpY2ggb3RoZXJ3aXNlIHJpc2tlZCByZWFsbG9jYXRpbmcgdGhlIHNrYiBoZWFkIGJ1ZmZlciAocHNrYl9leHBhbmRfaGVhZCkgYW5kIGNhdXNpbmcgdXNlLWFmdGVyLWZyZWUgLyBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYnVncy5cXG5cXG5TdWNoIGJ1ZmZlciByZWFsbG9jYXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb3B5LXRvLXVzZXIgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[1] Phase: Succeeded StartedAt: 2026-08-31 13:34:31 +0000 UTC FinishedAt: 2026-08-31 13:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 13:34:31 +0000 UTC FinishedAt: 2026-08-31 13:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2] Phase: Succeeded StartedAt: 2026-08-31 13:34:31 +0000 UTC FinishedAt: 2026-08-31 17:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:34:31 +0000 UTC FinishedAt: 2026-08-31 17:16:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:34:31 +0000 UTC FinishedAt: 2026-08-31 13:34:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:34:31 +0000 UTC FinishedAt: 2026-08-31 13:34:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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-workflow5p2m9/series-workflow5p2m9-convert-artifact-3662081609/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:34:41 +0000 UTC FinishedAt: 2026-08-31 13:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:34:41 +0000 UTC FinishedAt: 2026-08-31 13:51:36 +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:*d812a64d-bbdb-46a1-83e8-abcb2f71c989,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-workflow5p2m9/series-workflow5p2m9-convert-artifact-3662081609/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": "3e923c9a-c6c9-46dc-8380-b515032e503e", "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-workflow5p2m9/series-workflow5p2m9-build-action-961047847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:34:41 +0000 UTC FinishedAt: 2026-08-31 13:51:26 +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:*d812a64d-bbdb-46a1-83e8-abcb2f71c989,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-workflow5p2m9/series-workflow5p2m9-convert-artifact-3662081609/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": "3e923c9a-c6c9-46dc-8380-b515032e503e", "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-workflow5p2m9/series-workflow5p2m9-build-action-961047847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:51:36 +0000 UTC FinishedAt: 2026-08-31 13:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:51:36 +0000 UTC FinishedAt: 2026-08-31 13:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:51:36 +0000 UTC FinishedAt: 2026-08-31 13:51:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:51:36 +0000 UTC FinishedAt: 2026-08-31 13:51:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-workflow5p2m9/series-workflow5p2m9-convert-artifact-2805585500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:51:46 +0000 UTC FinishedAt: 2026-08-31 13:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:51:46 +0000 UTC FinishedAt: 2026-08-31 13:53:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e923c9a-c6c9-46dc-8380-b515032e503e,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-workflow5p2m9/series-workflow5p2m9-build-action-961047847/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-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:53:35 +0000 UTC FinishedAt: 2026-08-31 13:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:53:35 +0000 UTC FinishedAt: 2026-08-31 13:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:53:35 +0000 UTC FinishedAt: 2026-08-31 14:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:53:35 +0000 UTC FinishedAt: 2026-08-31 14:09:52 +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:*d812a64d-bbdb-46a1-83e8-abcb2f71c989,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-workflow5p2m9/series-workflow5p2m9-convert-artifact-2805585500/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": "1c497726-ca5e-4165-a594-97b923c69ab0", "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-workflow5p2m9/series-workflow5p2m9-build-action-3118504632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 13:53:35 +0000 UTC FinishedAt: 2026-08-31 14:09:42 +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:*d812a64d-bbdb-46a1-83e8-abcb2f71c989,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-workflow5p2m9/series-workflow5p2m9-convert-artifact-2805585500/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": "1c497726-ca5e-4165-a594-97b923c69ab0", "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-workflow5p2m9/series-workflow5p2m9-build-action-3118504632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:09:52 +0000 UTC FinishedAt: 2026-08-31 14:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:09:52 +0000 UTC FinishedAt: 2026-08-31 14:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:09:52 +0000 UTC FinishedAt: 2026-08-31 14:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:09:52 +0000 UTC FinishedAt: 2026-08-31 14:11:39 +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:*1c497726-ca5e-4165-a594-97b923c69ab0,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-workflow5p2m9/series-workflow5p2m9-build-action-3118504632/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-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:40 +0000 UTC FinishedAt: 2026-08-31 17:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:40 +0000 UTC FinishedAt: 2026-08-31 17:16:51 +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":["br_handle_frame_finish","br_get_rx_handler"],"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:*3e923c9a-c6c9-46dc-8380-b515032e503e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1c497726-ca5e-4165-a594-97b923c69ab0,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-workflow5p2m9/series-workflow5p2m9-build-action-961047847/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-workflow5p2m9/series-workflow5p2m9-build-action-3118504632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:40 +0000 UTC FinishedAt: 2026-08-31 14:11:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:40 +0000 UTC FinishedAt: 2026-08-31 14:11:45 +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":["br_handle_frame_finish","br_get_rx_handler"],"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-workflow5p2m9/series-workflow5p2m9-convert-artifact-4269298981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:40 +0000 UTC FinishedAt: 2026-08-31 14:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:40 +0000 UTC FinishedAt: 2026-08-31 14:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:40 +0000 UTC FinishedAt: 2026-08-31 14:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:50 +0000 UTC FinishedAt: 2026-08-31 17:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5p2m9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"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":["br_handle_frame_finish","br_get_rx_handler"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE"],"series_id":"56f61641-1f39-47fd-89ca-af5e03b98a32","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-31 14:11:50 +0000 UTC FinishedAt: 2026-08-31 17:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3e923c9a-c6c9-46dc-8380-b515032e503e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1c497726-ca5e-4165-a594-97b923c69ab0,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-workflow5p2m9/series-workflow5p2m9-build-action-961047847/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-workflow5p2m9/series-workflow5p2m9-build-action-3118504632/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-workflow5p2m9/series-workflow5p2m9-convert-artifact-4269298981/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,}