Name: series-workflowgrml8 Phase: Succeeded StartedAt: 2026-08-31 03:08:07 +0000 UTC FinishedAt: 2026-08-31 07:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[0] Phase: Succeeded StartedAt: 2026-08-31 03:08:07 +0000 UTC FinishedAt: 2026-08-31 03:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 03:08:07 +0000 UTC FinishedAt: 2026-08-31 03:51:35 +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": [ "TLS", "TLS_DEVICE" ], "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": [ "TLS", "TLS_DEVICE" ], "series_id": "b430516a-1cf9-48cd-ab10-7269384a5a44" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_setsockopt", "tls_set_sw_offload", "tls_set_device_offload", "tls_tx_records", "tls_sw_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGxzX3NldF9zd19vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc19zZXRfZGV2aWNlX29mZmxvYWQmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3N3X3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVx1MDAzZXByaXZfY3R4X3R4YCB3YXMgdW5jb25kaXRpb25hbGx5IGNhc3QgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCBhbmQgY2hlY2tlZCBmb3IgYG9wZW5fcmVjYCwgZXZlbiB3aGVuIHRoZSBjb25uZWN0aW9uIHdhcyBjb25maWd1cmVkIGZvciBIVyBvZmZsb2FkIChgVExTX0hXYCwgd2hlcmUgYHByaXZfY3R4X3R4YCBob2xkcyBgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHhgKS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oKWAgdG8gcHJvcGVybHkgaW5zcGVjdCB0aGUgYXBwcm9wcmlhdGUgb3BlbiByZWNvcmQgcG9pbnRlciBiYXNlZCBvbiBgY3R4LVx1MDAzZXR4X2NvbmZgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkga2VybmVsLXRvLXVzZXIgY29weSBidWZmZXJzIG9yIGluZm8tbGVhayBwYXRocywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggdHJhY2tpbmcgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0cnVjdCBjYXN0aW5nL2FjY2Vzc2VzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL1VCU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVx1MDAzZXByaXZfY3R4X3R4IHRvIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCB3aXRob3V0IGNoZWNraW5nIGN0eC1cdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0NTZmNTk2OGQ2NjNhYjJmNDJhMjczZWJmZTUyN2ZiNjE3NzYyZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMzo0OToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmNcbmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTgzMywxNSAmIzQzOzgzMywyOSBAQCBzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuJiM0MzsvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xuJiM0MzsgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoY3R4LVx1MDAzZXR4X2NvbmYpIHtcbiYjNDM7XHRjYXNlIFRMU19TVzpcbiYjNDM7XHRcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlYztcbiYjNDM7XHRjYXNlIFRMU19IVzpcbiYjNDM7XHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbi1cdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqc3dfY3R4ID0gdGxzX3N3X2N0eF90eChjdHgpO1xuIFx0dTE2IHZhbHVlO1xuIFx0Ym9vbCB0bHNfMTMgPSBjdHgtXHUwMDNlcHJvdF9pbmZvLnZlcnNpb24gPT0gVExTXzFfM19WRVJTSU9OO1xuIFxuLVx0aWYgKHN3X2N0eCBcdTAwMjZcdTAwMjYgc3dfY3R4LVx1MDAzZW9wZW5fcmVjKVxuJiM0MztcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3Rsc19zZXRfc3dfb2ZmbG9hZCYjMzQ7LAogICAgJiMzNDt0bHNfc2V0X2RldmljZV9vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc190eF9yZWNvcmRzJiMzNDssCiAgICAmIzM0O3Rsc19zd19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVx1MDAzZXByaXZfY3R4X3R4IHRvIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCB3aXRob3V0IGNoZWNraW5nIGN0eC1cdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NTZmNTk2OGQ2NjNhYjJmNDJhMjczZWJmZTUyN2ZiNjE3NzYyZjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMzo0OToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uYwppbmRleCBmYmIyNzQyODdhYTVmLi5lNGYyODhjMWZhMzQ2IDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfbWFpbi5jCkBAIC04MzMsMTUgJiM0Mzs4MzMsMjkgQEAgc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogCXJldHVybiByYzsKIH0KIAomIzQzOy8qIHByaXZfY3R4X3R4IGhvbGRzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBvbiBlYWNoIFRYIHBhdGgsIHNvIHR4X2NvbmYgaGFzIHRvCiYjNDM7ICogc2F5IHdoaWNoIG9wZW4gcmVjb3JkIHRvIGxvb2sgYXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJc3dpdGNoIChjdHgtJmd0O3R4X2NvbmYpIHsKJiM0MzsJY2FzZSBUTFNfU1c6CiYjNDM7CQlyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCktJmd0O29wZW5fcmVjOwomIzQzOwljYXNlIFRMU19IVzoKJiM0MzsJCXJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLSZndDtvcGVuX3JlY29yZDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKLQlzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnN3X2N0eCA9IHRsc19zd19jdHhfdHgoY3R4KTsKIAl1MTYgdmFsdWU7CiAJYm9vbCB0bHNfMTMgPSBjdHgtJmd0O3Byb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjsKIAotCWlmIChzd19jdHggJmFtcDsmYW1wOyBzd19jdHgtJmd0O29wZW5fcmVjKQomIzQzOwlpZiAodGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eCkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc29ja3B0cl9pc19udWxsKG9wdHZhbCkgfHwgb3B0bGVuICE9IHNpemVvZih2YWx1ZSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgQ29kZSoqCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggdG91Y2hlcyBgbmV0L3Rscy90bHNfbWFpbi5jYC4gVGhhdCYjMzk7cyBhIGtleSBhcmVhLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgY2hhbmdpbmcuIE15IGZpcnN0IG1vdmUgaXMgdG8gY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIGRpZmYgaXRzZWxmIOKAkyBJIG5lZWQgdG8gc2VlIHRoZSBsaW5lLWJ5LWxpbmUgYWx0ZXJhdGlvbnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIGFuZCBpbXBhY3QuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgYXJvdW5kIHRob3NlIG1vZGlmaWVkIGxpbmVzIGluIGB0bHNfbWFpbi5jYCB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcHVycG9zZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIG1lIHdoZW4gcmV2aWV3aW5nIGtlcm5lbCBjaGFuZ2VzLCBlc3BlY2lhbGx5IGluIHNlY3VyaXR5LXNlbnNpdGl2ZSBtb2R1bGVzLgoKVG8gZXhwZWRpdGUgdGhpcywgSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYC4gVGhlc2UgdG9vbHMgYXJlIGludmFsdWFibGUgZm9yIHF1aWNrbHkgbmF2aWdhdGluZyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29kZSwgbWFraW5nIHRoZSBhbmFseXNpcyBmYXIgbW9yZSBlZmZpY2llbnQuIFRoZXkmIzM5O2xsIGFsbG93IG1lIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGFueSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgZGVmaW5pdGlvbnMsIG9yIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbXBhY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODIwOlx0XHRyYyA9IGNoZWNrX3plcm9lZF9zb2NrcHRyKG9wdHZhbCwgc2l6ZW9mKHZhbCksIG9wdGxlbiAtIHNpemVvZih2YWwpKTtcbiA4MjE6XHRcdGlmIChyYyBcdTAwM2MgMSlcbiA4MjI6XHRcdFx0cmV0dXJuIHJjID09IDAgPyAtRUlOVkFMIDogcmM7XG4gODIzOlx0XG4gODI0Olx0XHRsb2NrX3NvY2soc2spO1xuIDgyNTpcdFx0cmMgPSAtRUlOVkFMO1xuIDgyNjpcdFx0aWYgKGN0eC1cdTAwM2VyeF9jb25mID09IFRMU19TVyB8fCBjdHgtXHUwMDNlcnhfY29uZiA9PSBUTFNfSFcpIHtcbiA4Mjc6XHRcdFx0Y3R4LVx1MDAzZXJ4X25vX3BhZCA9IHZhbDtcbiA4Mjg6XHRcdFx0dGxzX3VwZGF0ZV9yeF96Y19jYXBhYmxlKGN0eCk7XG4gODI5Olx0XHRcdHJjID0gMDtcbiA4MzA6XHRcdH1cbiA4MzE6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gODMyOlx0XG4gODMzOlx0XHRyZXR1cm4gcmM7XG4gODM0Olx0fVxuIDgzNTpcdFxuIDgzNjpcdC8qIHByaXZfY3R4X3R4IGhvbGRzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBvbiBlYWNoIFRYIHBhdGgsIHNvIHR4X2NvbmYgaGFzIHRvXG4gODM3Olx0ICogc2F5IHdoaWNoIG9wZW4gcmVjb3JkIHRvIGxvb2sgYXQuXG4gODM4Olx0ICovXG4gODM5Olx0c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuIDg0MDpcdHtcbiA4NDE6XHRcdHN3aXRjaCAoY3R4LVx1MDAzZXR4X2NvbmYpIHtcbiA4NDI6XHRcdGNhc2UgVExTX1NXOlxuIDg0MzpcdFx0XHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCktXHUwMDNlb3Blbl9yZWM7XG4gODQ0Olx0XHRjYXNlIFRMU19IVzpcbiA4NDU6XHRcdFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXHUwMDNlb3Blbl9yZWNvcmQ7XG4gODQ2Olx0XHRkZWZhdWx0OlxuIDg0NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODQ4Olx0XHR9XG4gODQ5Olx0fVxuIDg1MDpcdFxuIDg1MTpcdHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIDg1MjpcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbiA4NTM6XHR7XG4gODU0Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiA4NTU6XHRcdHUxNiB2YWx1ZTtcbiA4NTY6XHRcdGJvb2wgdGxzXzEzID0gY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcbiA4NTc6XHRcbiA4NTg6XHRcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcbiA4NTk6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA4NjA6XHRcbiA4NjE6XHRcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiA4NjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODYzOlx0XG4gODY0Olx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2dmFsdWUsIG9wdHZhbCwgc2l6ZW9mKHZhbHVlKSkpXG4gODY1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDg2NjpcdFxuIDg2NzpcdFx0aWYgKHZhbHVlIFx1MDAzYyBUTFNfTUlOX1JFQ09SRF9TSVpFX0xJTSAtICh0bHNfMTMgPyAxIDogMCkgfHxcbiA4Njg6XHRcdCAgICB2YWx1ZSBcdTAwM2UgVExTX01BWF9QQVlMT0FEX1NJWkUpXG4gODY5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgVExTIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBUTFMgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgdHJhbnNtaXNzaW9uIHBheWxvYWQgbGVuZ3RoIGlzIGhhbmRsZWQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBjYWxsIHRvIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAgYW5kIEkmIzM5O2xsIHRyYWNlIGl0cyB1c2FnZSBiYWNrIHRvIHRoZSBgdGxzX21haW4uY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHdoZXJlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuCgpPZiBjb3Vyc2UsIGZpZ3VyaW5nIG91dCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGlzIGJlaGF2aW91ciB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0byBhZGp1c3QgaXQuIFRoaXMgc2VlbXMgbGlrZSBhIGBuZXQvdGxzL2Agc2l0dWF0aW9uLCBzbyBJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciB0aGF0IGRpcmVjdG9yeS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFmZmVjdCB0aGUgY2FsbCB0byBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZy00LSNcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcbm5ldC90bHMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGxzL0tjb25maWctMTgtXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0Vcbm5ldC90bHMvS2NvbmZpZy0yMC1cdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzcwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgcmVhZGluZyBgbmV0L3Rscy9LY29uZmlnYCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlcjoKCioqRGl2aW5nIGludG8gdGhlIFRMUyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgbmV0L3Rscy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbml0dHktZ3JpdHR5IG9mIGNvbmZpZ3VyaW5nIFRMUyBzdXBwb3J0IGF0IHRoZSBrZXJuZWwgbGV2ZWwuIEkgbmVlZCB0byBzZWUgd2hhdCBrbm9icyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBvZiBjb3Vyc2Ug4oCTIHdoaWNoIGZlYXR1cmVzIHJlbHkgb24gd2hpY2ggb3RoZXJzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzcGVjaWZpYyBUTFMtcmVsYXRlZCBvcHRpb25zPyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGJyb2tlbiBkb3duIGJ5IGNpcGhlciBzdWl0ZXMsIGtleSBleGNoYW5nZSBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBzb21lIGZpbmUtZ3JhaW5lZCBjb250cm9scyBvdmVyIGZlYXR1cmVzIGxpa2Ugc2Vzc2lvbiByZXN1bXB0aW9uIG9yIGhhcmR3YXJlIG9mZmxvYWRpbmcsIGlmIHRoZXkmIzM5O3JlIHN1cHBvcnRlZC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlJiMzOTtzIGFueSBuZXcgbG9naWMgSSYjMzk7dmUgbm90IGxvb2tlZCBpbnRvIGJlZm9yZSwgb3IgYW55dGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzLiBBcmUgdGhlcmUgYW55IG5ldyBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQ/IEhhcyB0aGVyZSBiZWVuIGFueSBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgZmxleGliaWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhlIGV4aXN0aW5nIFRMUyBzdGFjaz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgdWx0aW1hdGUgdHJ1dGggb24gd2hhdCB0aGUga2VybmVsIGNhbiBkbyBhbmQgd2hhdCBJIGNhbiBlbmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUTFMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgVExTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAgMTI6XHRcdGRlZmF1bHQgblxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBUTFMgcHJvdG9jb2wuIFRoaXMgYWxsb3dzIHN5bW1ldHJpY1xuICAxNTpcdFx0ZW5jcnlwdGlvbiBoYW5kbGluZyBvZiB0aGUgVExTIHByb3RvY29sIHRvIGJlIGRvbmUgaW4ta2VybmVsLlxuICAxNjpcdFxuICAxNzpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVExTX0RFVklDRVxuICAyMDpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBUTFNcbiAgMjI6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gIDIzOlx0XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4gIDI0Olx0XHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgSFcgb2ZmbG9hZCBvZiB0aGUgVExTIHByb3RvY29sLlxuICAyODpcdFxuICAyOTpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRpZ2dpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRoZSBzYW1lOiBsZXQmIzM5O3MgdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZXMuIEkgd2FudCB0byBzZWUgKmV2ZXJ5d2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBhcyB0aGlzIHNob3VsZCByZXZlYWwgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGl0IHBsYXlzIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzaW5nIGNhbGxzLCBhbnkgb2RkIGNvbnRyb2wgZmxvd3MsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gdGhhdCBtaWdodCBqdW1wIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODUwLVxubmV0L3Rscy90bHNfbWFpbi5jOjg1MTpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbm5ldC90bHMvdGxzX21haW4uYy04NTItXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz04NzY9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTgtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvdGxzL3Rsc19tYWluLmM6ODk5Olx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvdGxzL3Rsc19tYWluLmMtOTAwLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggbG93LWxldmVsIHNvY2tldCBvcGVyYXRpb25zIGFuZCBUTFM6CgoqKkRpZ2dpbmcgaW50byBUTFMgU29ja2V0IE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHVzaW5nIGBkb190bHNfc2V0c29ja29wdGAgb3IgYHRsc19zZXRzb2Nrb3B0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIHByZXR0eSBjbGVhciBpbmRpY2F0b3JzIG9mIG1hbmlwdWxhdGlvbiBvZiBzb2NrZXQgb3B0aW9ucyByZWxhdGVkIHRvIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBuZXh0IHN0ZXAgc2hvdWxkIGJlIGEgY29kZSBhdWRpdCBvZiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIGNhbGxzIGFuZCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGludGVudGlvbiBhbmQgcmVhc29uaW5nIGJlaGluZCB0aG9zZSBzb2NrZXQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3Rsc19zZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jPTU5OD1zdGF0aWMgaW50IHZhbGlkYXRlX2NyeXB0b19pbmZvKGNvbnN0IHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy02MjItXG5uZXQvdGxzL3Rsc19tYWluLmM6NjIzOnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtNjI0LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuLCBpbnQgdHgpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTc4My1cbm5ldC90bHMvdGxzX21haW4uYzo3ODQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtNzg1LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODAzLVxubmV0L3Rscy90bHNfbWFpbi5jOjgwNDpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtODA1LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg1MC1cbm5ldC90bHMvdGxzX21haW4uYzo4NTE6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtODUyLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODc1LVxubmV0L3Rscy90bHNfbWFpbi5jOjg3NjpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtODc3LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODg0LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L3Rscy90bHNfbWFpbi5jOjg4NTpcdFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbixcbm5ldC90bHMvdGxzX21haW4uYy04ODYtXHRcdFx0XHRcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg5MC1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90bHMvdGxzX21haW4uYzo4OTE6XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy04OTItXHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg5NC1cdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XG5uZXQvdGxzL3Rsc19tYWluLmM6ODk1Olx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3Rscy90bHNfbWFpbi5jLTg5Ni1cdFx0YnJlYWs7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg5OC1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90bHMvdGxzX21haW4uYzo4OTk6XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy05MDAtXHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTkwOT1zdGF0aWMgaW50IHRsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtOTE3LVxubmV0L3Rscy90bHNfbWFpbi5jOjkxODpcdHJldHVybiBkb190bHNfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3Rscy90bHNfbWFpbi5jLTkxOS19XG4tLVxubmV0L3Rscy90bHNfc3cuYz0yNTI1PWludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yNjMzLVx0XHRcdCAgICAgIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvLFxubmV0L3Rscy90bHNfc3cuYzoyNjM0Olx0XHRcdCAgICAgIC8qIHNpemUgd2FzIGNoZWNrZWQgaW4gZG9fdGxzX3NldHNvY2tvcHRfY29uZiAqLyk7XG5uZXQvdGxzL3Rsc19zdy5jLTI2MzUtXHRcdG1lbXplcm9fZXhwbGljaXQobmV3X2NyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cdTAwM2VjcnlwdG9faW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgVExTIFNvY2tldCBPcHRpb25zIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYHRsc2AgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCBzcGVjaWZpY2FsbHkgYHRsc19zZXRzb2Nrb3B0YCBhbmQgYHRsc19pbml0YC4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGV5JiMzOTtyZSBjZW50cmFsIHRvIGNvbmZpZ3VyaW5nIGFuZCBlc3RhYmxpc2hpbmcgdGhlIFRMUyBjb25uZWN0aW9ucywgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gV2hlcmUgYXJlIHRoZXkgYmVpbmcgY2FsbGVkPyBXaGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZD8gQW5kIHdoYXQsIGlmIGFueXRoaW5nLCBpcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCB0aGVzZSBmdW5jdGlvbnM/IE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgbmV0L3Rscy90bHNfbWFpbi5jYCBhcm91bmQgdGhlIGB0bHNfc2V0c29ja29wdGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9yY2hlc3RyYXRlZCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBUTFMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MDA6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA5MDE6XHRcdFx0YnJlYWs7XG4gOTAyOlx0XHRkZWZhdWx0OlxuIDkwMzpcdFx0XHRyYyA9IC1FTk9QUk9UT09QVDtcbiA5MDQ6XHRcdFx0YnJlYWs7XG4gOTA1Olx0XHR9XG4gOTA2Olx0XHRyZXR1cm4gcmM7XG4gOTA3Olx0fVxuIDkwODpcdFxuIDkwOTpcdHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIDkxMDpcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiA5MTE6XHR7XG4gOTEyOlx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiA5MTM6XHRcbiA5MTQ6XHRcdGlmIChsZXZlbCAhPSBTT0xfVExTKVxuIDkxNTpcdFx0XHRyZXR1cm4gY3R4LVx1MDAzZXNrX3Byb3RvLVx1MDAzZXNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsXG4gOTE2Olx0XHRcdFx0XHRcdFx0IG9wdGxlbik7XG4gOTE3Olx0XG4gOTE4Olx0XHRyZXR1cm4gZG9fdGxzX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiA5MTk6XHR9XG4gOTIwOlx0XG4gOTIxOlx0c3RhdGljIGludCB0bHNfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbiA5MjI6XHR7XG4gOTIzOlx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTI0Olx0fVxuIDkyNTpcdFxuIDkyNjpcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrKVxuIDkyNzpcdHtcbiA5Mjg6XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiA5Mjk6XHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xuIDkzMDpcdFxuIDkzMTpcdFx0Y3R4ID0ga3phbGxvY19vYmooKmN0eCwgR0ZQX0FUT01JQyk7XG4gOTMyOlx0XHRpZiAoIWN0eClcbiA5MzM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gOTM0Olx0XG4gOTM1Olx0XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2V0eF9sb2NrKTtcbiA5MzY6XHRcdGN0eC1cdTAwM2Vza19wcm90byA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbiA5Mzc6XHRcdGN0eC1cdTAwM2VzayA9IHNrO1xuIDkzODpcdFx0LyogUmVsZWFzZSBzZW1hbnRpYyBvZiByY3VfYXNzaWduX3BvaW50ZXIoKSBlbnN1cmVzIHRoYXRcbiA5Mzk6XHRcdCAqIGN0eC1cdTAwM2Vza19wcm90byBpcyB2aXNpYmxlIGJlZm9yZSBjaGFuZ2luZyBzay1cdTAwM2Vza19wcm90IGluXG4gOTQwOlx0XHQgKiB1cGRhdGVfc2tfcHJvdCgpLCBhbmQgcHJldmVudHMgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhbHVlIGluXG4gOTQxOlx0XHQgKiB0bHNfe2dldHNvY2tvcHQsIHNldHNvY2tvcHR9LiBOb3RlIHRoYXQgd2UgZG8gbm90IG5lZWQgYVxuIDk0MjpcdFx0ICogcmVhZCBiYXJyaWVyIGluIHRsc197Z2V0c29ja29wdCxzZXRzb2Nrb3B0fSBhcyB0aGVyZSBpcyBhblxuIDk0MzpcdFx0ICogYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gc2stXHUwMDNlc2tfcHJvdG8tXHUwMDNle2dldHNvY2tvcHQsc2V0c29ja29wdH1cbiA5NDQ6XHRcdCAqIGFuZCBjdHgtXHUwMDNlc2tfcHJvdG8uXG4gOTQ1Olx0XHQgKi9cbiA5NDY6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihpY3NrLVx1MDAzZWljc2tfdWxwX2RhdGEsIGN0eCk7XG4gOTQ3Olx0XHRyZXR1cm4gY3R4O1xuIDk0ODpcdH1cbiA5NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgdGxzX3NldHNvY2tvcHRgIEFzc2lnbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgYHRsc19zZXRzb2Nrb3B0YCBpcyBiZWluZyBhc3NvY2lhdGVkIHdpdGggZWl0aGVyIHByb3RvY29sLWxldmVsIG9yIHNwZWNpZmljIHNvY2tldC1sZXZlbCBvcGVyYXRpb25zLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhIHNpbXBsZSwgb25lLXNpemUtZml0cy1hbGwgYXBwcm9hY2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHdoZXJlIGl0IGdldHMgY2FsbGVkIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIHRpZWQgdG8gYSAqc3BlY2lmaWMqIHNvY2tldCB2ZXJzdXMgYmVpbmcgaGFuZGxlZCBhdCBhIGJyb2FkZXIsIG1vcmUgZ2VuZXJpYyBwcm90b2NvbCBsZXZlbC4gSXMgdGhlIGFzc2lnbm1lbnQgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IChlLmcuLCBUQ1AsIFVEUCkgb3IgVExTIGltcGxlbWVudGF0aW9uPyBJIHN1c3BlY3QgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZ29pbmcgdG8gdmFyeSBhY3Jvc3MgdGhlIGxpYnJhcnkuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBzb2NrZXQgb3B0aW9ucyBhbmQgaG93IGB0bHNfc2V0c29ja29wdGAgbWlnaHQgYWZmZWN0IHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgc2VjdXJpdHkgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBhcmUgd2UgdGFsa2luZyBhYm91dCBwZXItc29ja2V0IHNlY3VyaXR5IHBhcmFtZXRlcnMgb3IgZ2xvYmFsIHNldHRpbmdzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYz01OTg9c3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNjIyLVxubmV0L3Rscy90bHNfbWFpbi5jOjYyMzpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTYyNC1cdFx0XHRcdCAgdW5zaWduZWQgaW50IG9wdGxlbiwgaW50IHR4KVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy03ODMtXG5uZXQvdGxzL3Rsc19tYWluLmM6Nzg0OnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTc4NS1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTgwMy1cbm5ldC90bHMvdGxzX21haW4uYzo4MDQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTgwNS1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz04Mzk9c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy04NTAtXG5uZXQvdGxzL3Rsc19tYWluLmM6ODUxOnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTg1Mi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg3NS1cbm5ldC90bHMvdGxzX21haW4uYzo4NzY6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTg3Ny1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg4NC1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90bHMvdGxzX21haW4uYzo4ODU6XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sXG5uZXQvdGxzL3Rsc19tYWluLmMtODg2LVx0XHRcdFx0XHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTAtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvdGxzL3Rsc19tYWluLmM6ODkxOlx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvdGxzL3Rsc19tYWluLmMtODkyLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTQtXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxubmV0L3Rscy90bHNfbWFpbi5jOjg5NTpcdFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy04OTYtXHRcdGJyZWFrO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTgtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvdGxzL3Rsc19tYWluLmM6ODk5Olx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvdGxzL3Rsc19tYWluLmMtOTAwLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy05MDgtXG5uZXQvdGxzL3Rsc19tYWluLmM6OTA5OnN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3Rscy90bHNfbWFpbi5jLTkxMC1cdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTkxNy1cbm5ldC90bHMvdGxzX21haW4uYzo5MTg6XHRyZXR1cm4gZG9fdGxzX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy05MTktfVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0xMDEyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDE1LVx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdID0gKmJhc2U7XG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5zZXRzb2Nrb3B0XHQ9IHRsc19zZXRzb2Nrb3B0O1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZ2V0c29ja29wdFx0PSB0bHNfZ2V0c29ja29wdDtcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTI1MjU9aW50IHRsc19zZXRfc3dfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2ssIGludCB0eCxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTI2MzMtXHRcdFx0ICAgICAgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8sXG5uZXQvdGxzL3Rsc19zdy5jOjI2MzQ6XHRcdFx0ICAgICAgLyogc2l6ZSB3YXMgY2hlY2tlZCBpbiBkb190bHNfc2V0c29ja29wdF9jb25mICovKTtcbm5ldC90bHMvdGxzX3N3LmMtMjYzNS1cdFx0bWVtemVyb19leHBsaWNpdChuZXdfY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4cGxvcmluZyBUTFMgYW5kIFVMUCBSZWdpc3RyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgd2l0aGluIFRMUyBhbmQgYHRsc19tYWluLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9yIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nIHdpdGhpbiB0aGUgVExTIHN0cnVjdHVyZSBpdHNlbGYuIEkgd2FudCB0byBleHBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW52aXJvbm1lbnQuCgpJIHNob3VsZCBleGFtaW5lIGB0bHNfbWFpbi5jYCBzcGVjaWZpY2FsbHksIGFuZCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYXJlYSBhcm91bmQgYGJ1aWxkX3Byb3Rvc2AgYW5kIFVMUCByZWdpc3RyYXRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3BvdCB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XHQgICAgdW5saWtlbHkocHJvdCAhPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNhdmVkX3RjcHY0X3Byb3QpKSkge1xuMTAwMTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRjcHY0X3Byb3RfbXV0ZXgpO1xuMTAwMjpcdFx0XHRpZiAobGlrZWx5KHByb3QgIT0gc2F2ZWRfdGNwdjRfcHJvdCkpIHtcbjEwMDM6XHRcdFx0XHRidWlsZF9wcm90b3ModGxzX3Byb3RzW1RMU1Y0XSwgcHJvdCk7XG4xMDA0Olx0XHRcdFx0YnVpbGRfcHJvdG9fb3BzKHRsc19wcm90b19vcHNbVExTVjRdLFxuMTAwNTpcdFx0XHRcdFx0XHRzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzKTtcbjEwMDY6XHRcdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYXZlZF90Y3B2NF9wcm90LCBwcm90KTtcbjEwMDc6XHRcdFx0fVxuMTAwODpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2dGNwdjRfcHJvdF9tdXRleCk7XG4xMDA5Olx0XHR9XG4xMDEwOlx0fVxuMTAxMTpcdFxuMTAxMjpcdHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuMTAxMzpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJvdG8gKmJhc2UpXG4xMDE0Olx0e1xuMTAxNTpcdFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdID0gKmJhc2U7XG4xMDE2Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdFx0PSB0bHNfc2V0c29ja29wdDtcbjEwMTc6XHRcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5nZXRzb2Nrb3B0XHQ9IHRsc19nZXRzb2Nrb3B0O1xuMTAxODpcdFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLmRpc2Nvbm5lY3RcdD0gdGxzX2Rpc2Nvbm5lY3Q7XG4xMDE5Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uY2xvc2VcdFx0PSB0bHNfc2tfcHJvdG9fY2xvc2U7XG4xMDIwOlx0XG4xMDIxOlx0XHRwcm90W1RMU19TV11bVExTX0JBU0VdID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xuMTAyMjpcdFx0cHJvdFtUTFNfU1ddW1RMU19CQVNFXS5zZW5kbXNnXHRcdD0gdGxzX3N3X3NlbmRtc2c7XG4xMDIzOlx0XHRwcm90W1RMU19TV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcdD0gdGxzX3N3X3NwbGljZV9lb2Y7XG4xMDI0Olx0XG4xMDI1Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xuMTAyNjpcdFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5yZWN2bXNnXHRcdCAgPSB0bHNfc3dfcmVjdm1zZztcbjEwMjc6XHRcdHByb3RbVExTX0JBU0VdW1RMU19TV10uc29ja19pc19yZWFkYWJsZSAgID0gdGxzX3N3X3NvY2tfaXNfcmVhZGFibGU7XG4xMDI4Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLmNsb3NlXHRcdCAgPSB0bHNfc2tfcHJvdG9fY2xvc2U7XG4xMDI5Olx0XG4xMDMwOlx0XHRwcm90W1RMU19TV11bVExTX1NXXSA9IHByb3RbVExTX1NXXVtUTFNfQkFTRV07XG4xMDMxOlx0XHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXHRcdD0gdGxzX3N3X3JlY3Ztc2c7XG4xMDMyOlx0XHRwcm90W1RMU19TV11bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcbjEwMzM6XHRcdHByb3RbVExTX1NXXVtUTFNfU1ddLmNsb3NlXHRcdD0gdGxzX3NrX3Byb3RvX2Nsb3NlO1xuMTAzNDpcdFxuMTAzNTpcdCNpZmRlZiBDT05GSUdfVExTX0RFVklDRVxuMTAzNjpcdFx0cHJvdFtUTFNfSFddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcbjEwMzc6XHRcdHByb3RbVExTX0hXXVtUTFNfQkFTRV0uc2VuZG1zZ1x0XHQ9IHRsc19kZXZpY2Vfc2VuZG1zZztcbjEwMzg6XHRcdHByb3RbVExTX0hXXVtUTFNfQkFTRV0uc3BsaWNlX2VvZlx0PSB0bHNfZGV2aWNlX3NwbGljZV9lb2Y7XG4xMDM5Olx0XG4xMDQwOlx0XHRwcm90W1RMU19IV11bVExTX1NXXSA9IHByb3RbVExTX0JBU0VdW1RMU19TV107XG4xMDQxOlx0XHRwcm90W1RMU19IV11bVExTX1NXXS5zZW5kbXNnXHRcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xuMTA0MjpcdFx0cHJvdFtUTFNfSFddW1RMU19TV10uc3BsaWNlX2VvZlx0XHQ9IHRsc19kZXZpY2Vfc3BsaWNlX2VvZjtcbjEwNDM6XHRcbjEwNDQ6XHRcdHByb3RbVExTX0JBU0VdW1RMU19IV10gPSBwcm90W1RMU19CQVNFXVtUTFNfU1ddO1xuMTA0NTpcdFxuMTA0NjpcdFx0cHJvdFtUTFNfU1ddW1RMU19IV10gPSBwcm90W1RMU19TV11bVExTX1NXXTtcbjEwNDc6XHRcbjEwNDg6XHRcdHByb3RbVExTX0hXXVtUTFNfSFddID0gcHJvdFtUTFNfSFddW1RMU19TV107XG4xMDQ5Olx0I2VuZGlmXG4xMDUwOlx0fVxuMTA1MTpcdFxuMTA1MjpcdHN0YXRpYyBpbnQgdGxzX2luaXQoc3RydWN0IHNvY2sgKnNrKVxuMTA1MzpcdHtcbjEwNTQ6XHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xuMTA1NTpcdFx0aW50IHJjID0gMDtcbjEwNTY6XHRcbjEwNTc6XHRcdHRsc19idWlsZF9wcm90byhzayk7XG4xMDU4Olx0XG4xMDU5Olx0XHQvKiBUaGUgVExTIHVscCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgZm9yIFRDUCBzb2NrZXRzXG4xMDYwOlx0XHQgKiBpbiBFU1RBQkxJU0hFRCBzdGF0ZS5cbjEwNjE6XHRcdCAqIFN1cHBvcnRpbmcgc29ja2V0cyBpbiBMSVNURU4gc3RhdGUgd2lsbCByZXF1aXJlIHVzXG4xMDYyOlx0XHQgKiB0byBtb2RpZnkgdGhlIGFjY2VwdCBpbXBsZW1lbnRhdGlvbiB0byBjbG9uZSByYXRoZXIgdGhlblxuMTA2MzpcdFx0ICogc2hhcmUgdGhlIHVscCBjb250ZXh0LlxuMTA2NDpcdFx0ICovXG4xMDY1Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuMTA2NjpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTA2NzpcdFxuMTA2ODpcdFx0LyogYWxsb2NhdGUgdGxzIGNvbnRleHQgKi9cbjEwNjk6XHRcdHdyaXRlX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG4xMDcwOlx0XHRjdHggPSB0bHNfY3R4X2NyZWF0ZShzayk7XG4xMDcxOlx0XHRpZiAoIWN0eCkge1xuMTA3MjpcdFx0XHRyYyA9IC1FTk9NRU07XG4xMDczOlx0XHRcdGdvdG8gb3V0O1xuMTA3NDpcdFx0fVxuMTA3NTpcdFxuMTA3NjpcdFx0Y3R4LVx1MDAzZXR4X2NvbmYgPSBUTFNfQkFTRTtcbjEwNzc6XHRcdGN0eC1cdTAwM2VyeF9jb25mID0gVExTX0JBU0U7XG4xMDc4Olx0XHRjdHgtXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuID0gVExTX01BWF9QQVlMT0FEX1NJWkU7XG4xMDc5Olx0XHR1cGRhdGVfc2tfcHJvdChzaywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBUTFMgUGF5bG9hZCBTaXplIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgbWF4aW11bSBwYXlsb2FkIHNpemUgZm9yIFRMUyB0cmFuc21pc3Npb25zLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBUTFNfVFhfTUFYX1BBWUxPQURfU0laRWAsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYFRMU19NQVhfUEFZTE9BRF9TSVpFYCBvcHRpb24gd2hlbiB3ZSYjMzk7cmUgdXNpbmcgYHNldHNvY2tvcHRgLiBKdXN0IHdhbnQgdG8gY29uZmlybSB0aGF0IG1hcHBpbmcuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBgb3B0bmFtZWAgdmFsdWVzIGluIGBkb190bHNfc2V0c29ja29wdGAg4oCTIGdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgb3B0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4gSSB3YW50IHRvIGNvbmZpcm0gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGNvcnJlY3Qgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHRcbiA4NzE6XHRcdGN0eC1cdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSB2YWx1ZTtcbiA4NzI6XHRcbiA4NzM6XHRcdHJldHVybiAwO1xuIDg3NDpcdH1cbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gODc3Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIDg3ODpcdHtcbiA4Nzk6XHRcdGludCByYyA9IDA7XG4gODgwOlx0XG4gODgxOlx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA4ODI6XHRcdGNhc2UgVExTX1RYOlxuIDg4MzpcdFx0Y2FzZSBUTFNfUlg6XG4gODg0Olx0XHRcdGxvY2tfc29jayhzayk7XG4gODg1Olx0XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sXG4gODg2Olx0XHRcdFx0XHRcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XG4gODg3Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gODg4Olx0XHRcdGJyZWFrO1xuIDg4OTpcdFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XG4gODkwOlx0XHRcdGxvY2tfc29jayhzayk7XG4gODkxOlx0XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbiA4OTI6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA4OTM6XHRcdFx0YnJlYWs7XG4gODk0Olx0XHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxuIDg5NTpcdFx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xuIDg5NjpcdFx0XHRicmVhaztcbiA4OTc6XHRcdGNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjpcbiA4OTg6XHRcdFx0bG9ja19zb2NrKHNrKTtcbiA4OTk6XHRcdFx0cmMgPSBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0dmFsLCBvcHRsZW4pO1xuIDkwMDpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDkwMTpcdFx0XHRicmVhaztcbiA5MDI6XHRcdGRlZmF1bHQ6XG4gOTAzOlx0XHRcdHJjID0gLUVOT1BST1RPT1BUO1xuIDkwNDpcdFx0XHRicmVhaztcbiA5MDU6XHRcdH1cbiA5MDY6XHRcdHJldHVybiByYztcbiA5MDc6XHR9XG4gOTA4Olx0XG4gOTA5Olx0c3RhdGljIGludCB0bHNfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRMUyBCdWcgRml4IGFuZCBJdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugc29tZW9uZSBhZGRlZCBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIHRvIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSYjMzk7dmUgcmVwbGFjZWQgYSBkaXJlY3QsIHVuY2hlY2tlZCBjYXN0IG9mIGBjdHgtJmd0O3ByaXZfY3R4X3R4YCB0byBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgIHdpdGggYSBmdW5jdGlvbiB0aGF0ICppbnRlbGxpZ2VudGx5KiBkZXRlcm1pbmVzIGlmIHRoZSByZWNvcmQgaXMgb3Blbi4gQmVmb3JlLCB0aGUgY29kZSB3YXMgaW1wbGljaXRseSBhc3N1bWluZyBpdCB3YXMgZGVhbGluZyB3aXRoIHNvZnR3YXJlIFRMUyAoYFRMU19TV2ApLiBOb3csIGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBoYXJkd2FyZSBvZmZsb2FkIGNhc2UgKGBUTFNfSFdgKSBieSBjaGVja2luZyBgY3R4LSZndDt0eF9jb25mYC4KClRoZSBvbGQgY29kZSB3YXMgZG9pbmcgYSBibGluZCBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgZXZlbiBpZiBoYXJkd2FyZSBvZmZsb2FkIHdhcyBlbmFibGVkLiBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIGFkZHJlc3NlcyB0aGlzIGJ5IHVzaW5nIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRoYXQgY2hlY2tzIGBjdHgtJmd0O3R4X2NvbmZgLiBEZXBlbmRpbmcgb24gd2hldGhlciBpdCYjMzk7cyBzb2Z0d2FyZSBvciBoYXJkd2FyZSBUTFMsIGl0IGNhbGxzIHRoZSByaWdodCBmdW5jdGlvbiAoYHRsc19zd19jdHhfdHgoY3R4KWAgb3IgYHRsc19vZmZsb2FkX2N0eF90eChjdHgpYCkgdG8gZ2V0IHRoZSByZWxldmFudCBgb3Blbl9yZWNgIG9yIGBvcGVuX3JlY29yZGAgZmllbGQsIHJlc3BlY3RpdmVseS4gQ3J1Y2lhbGx5LCBpdCBoYW5kbGVzIHRoZSBgZGVmYXVsdGAgY2FzZSwgcmV0dXJuaW5nIGBmYWxzZWAgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdW5leHBlY3RlZC4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgZml4LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIGBUTFNfVFhfTUFYX1BBWUxPQURfTEVOYCBpcyB1c2VkLCBlc3BlY2lhbGx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBpbnZvbHZlZC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgbXkgd29yazogaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZnV6ej8gQWJzb2x1dGVseS4gS2VybmVsIFRMUyAoa3RscykgaXMgYSBwcmltZSB0YXJnZXQuIEl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0cyBhbmQgYHNldHNvY2tvcHRgIHdpdGggYFRDUF9VTFBgIC0mZ3Q7ICYjMzQ7dGxzJiMzNDsgYW5kIGBzZXRzb2Nrb3B0KFNPTF9UTFMsIC4uLilgLiBUaGF0JiMzOTtzIGVhc3kgdG8gc2V0IHVwLCBlYXN5IHRvIHJlcHJvZHVjZSBpbiBRRU1VIG9yIEdDRSwgYW5kIHNvZnR3YXJlIFRMUyBpcyBzdGFuZGFyZC4gSWYgdGhlcmUgYXJlIGFueSBkdW1teSBvciBlbXVsYXRlZCBoYXJkd2FyZSBvZmZsb2FkIGRldmljZXMsIHRob3NlIHdvdWxkIGJlIGdyZWF0IHRvbywgYnV0IHNvZnR3YXJlIFRMUyBpcyBsaWtlbHkgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIGZpeCBhbHNvIGludm9sdmVzIGBUTFNfVFhfTUFYX1BBWUxPQURfTEVOYCwgc28gdGhhdCYjMzk7cyBhbm90aGVyIHZlY3RvciBJIHNob3VsZCBjb25zaWRlci4KCk5leHQgc3RlcDogSSBzaG91bGQgY2hlY2sgd2hlcmUgZWxzZSBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCwgYG9wZW5fcmVjb3JkYCwgb3IgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gIGFyZSB1c2VkIGluIHRoZSBjb2RlIGJhc2UuIFRoYXQgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBjb250cm9sIGZsb3dzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcGVuX3JlY29yZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9Mjc1PXN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzLmgtMjc5LVxubmV0L3Rscy90bHMuaDoyODA6c3RhdGljIGlubGluZSBib29sIHRsc19pc19wZW5kaW5nX29wZW5fcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzLmgtMjgxLXtcbm5ldC90bHMvdGxzLmg6MjgyOlx0cmV0dXJuIHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncztcbm5ldC90bHMvdGxzLmgtMjgzLX1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xOTc9dm9pZCB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDQtXHRpZiAodGxzX2N0eC1cdTAwM2V0eF9jb25mID09IFRMU19IVykge1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MjA1Olx0XHRpZiAoY3R4LVx1MDAzZW9wZW5fcmVjb3JkKVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjA2Olx0XHRcdGRlc3Ryb3lfcmVjb3JkKGN0eC1cdTAwM2VvcGVuX3JlY29yZCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDctXHRcdGRlbGV0ZV9hbGxfcmVjb3JkcyhjdHgpO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTI3OT1zdGF0aWMgaW50IHRsc19wdXNoX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjkxLVx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cmVjb3JkLVx1MDAzZWxpc3QsIFx1MDAyNm9mZmxvYWRfY3R4LVx1MDAzZXJlY29yZHNfbGlzdCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyOTI6XHRvZmZsb2FkX2N0eC1cdTAwM2VvcGVuX3JlY29yZCA9IE5VTEw7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yOTMtXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzQyPXN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjEtXHRyZWNvcmQtXHUwMDNlbGVuID0gcHJlcGVuZF9zaXplO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MzYyOlx0b2ZmbG9hZF9jdHgtXHUwMDNlb3Blbl9yZWNvcmQgPSByZWNvcmQ7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjMtXHRyZXR1cm4gMDtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0zNjY9c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzcyLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzczOlx0aWYgKCFvZmZsb2FkX2N0eC1cdTAwM2VvcGVuX3JlY29yZCkge1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzc0LVx0XHRpZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVmaWxsKHByZXBlbmRfc2l6ZSwgcGZyYWcsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDMyLVx0c2l6ZV90IG9yaWdfc2l6ZSA9IHNpemU7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0MzM6XHR1MzIgbWF4X29wZW5fcmVjb3JkX2xlbjtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQzNC1cdGJvb2wgbW9yZSA9IGZhbHNlO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTQ2NC1cdCAqL1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDY1Olx0bWF4X29wZW5fcmVjb3JkX2xlbiA9IHRsc19jdHgtXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuICYjNDM7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjYtXHRcdFx0ICAgICAgcHJvdC1cdTAwM2VwcmVwZW5kX3NpemU7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDczLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NDc0Olx0XHRcdHJlY29yZCA9IGN0eC1cdTAwM2VvcGVuX3JlY29yZDtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ3NS1cdFx0XHRpZiAoIXJlY29yZClcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00ODQtXHRcdFx0XHRkZXN0cm95X3JlY29yZChyZWNvcmQpO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDg1Olx0XHRcdFx0Y3R4LVx1MDAzZW9wZW5fcmVjb3JkID0gTlVMTDtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ4Ni1cdFx0XHR9IGVsc2UgaWYgKHJlY29yZC1cdTAwM2VsZW4gXHUwMDNlIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplKSB7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDkyLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NDkzOlx0XHRyZWNvcmQgPSBjdHgtXHUwMDNlb3Blbl9yZWNvcmQ7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00OTQtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0OTU6XHRcdGNvcHkgPSBtaW5fdChzaXplX3QsIHNpemUsIG1heF9vcGVuX3JlY29yZF9sZW4gLSByZWNvcmQtXHUwMDNlbGVuKTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ5Ni1cdFx0aWYgKGNvcHkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykpIHtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NDItXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NDM6XHRcdGlmIChkb25lIHx8IHJlY29yZC1cdTAwM2VsZW4gXHUwMDNlPSBtYXhfb3Blbl9yZWNvcmRfbGVuIHx8XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NDQtXHRcdCAgICAocmVjb3JkLVx1MDAzZW51bV9mcmFncyBcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSkge1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU1Ny1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU1ODpcdHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IG1vcmU7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NTktXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk5LVx0aWYgKCF0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIFx1MDAyNlx1MDAyNlxubmV0L3Rscy90bHNfZGV2aWNlLmM6NjAwOlx0ICAgICF0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSlcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwMS1cdFx0cmV0dXJuO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTYwNi1cdGlmICh0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIHx8XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo2MDc6XHQgICAgdGxzX2lzX3BlbmRpbmdfb3Blbl9yZWNvcmQodGxzX2N0eCkpIHtcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwOC1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTE2OD1pbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yMjUtXG5uZXQvdGxzL3Rsc19tYWluLmM6MjI2OnN0YXRpYyBpbnQgdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC90bHMvdGxzX21haW4uYy0yMjcte1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yMjktXG5uZXQvdGxzL3Rsc19tYWluLmM6MjMwOlx0aWYgKHRsc19pc19wZW5kaW5nX29wZW5fcmVjb3JkKGN0eCkpXG5uZXQvdGxzL3Rsc19tYWluLmMtMjMxLVx0XHRyZXR1cm4gY3R4LVx1MDAzZXB1c2hfcGVuZGluZ19yZWNvcmQoc2ssIGZsYWdzKTtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MjM2PWludCB0bHNfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yNTctXG5uZXQvdGxzL3Rsc19tYWluLmM6MjU4Olx0XHRcdHJjID0gdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzaywgbXNnLVx1MDAzZW1zZ19mbGFncyk7XG5uZXQvdGxzL3Rsc19tYWluLmMtMjU5LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz0zMzg9c3RhdGljIHZvaWQgdGxzX3NrX3Byb3RvX2NsZWFudXAoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0zNDItXHQgICAgIXdhaXRfb25fcGVuZGluZ193cml0ZXIoc2ssIFx1MDAyNnRpbWVvKSlcbm5ldC90bHMvdGxzX21haW4uYzozNDM6XHRcdHRsc19oYW5kbGVfb3Blbl9yZWNvcmQoc2ssIDApO1xubmV0L3Rscy90bHNfbWFpbi5jLTM0NC1cbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODQ0LVx0Y2FzZSBUTFNfSFc6XG5uZXQvdGxzL3Rsc19tYWluLmM6ODQ1Olx0XHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlY29yZDtcbm5ldC90bHMvdGxzX21haW4uYy04NDYtXHRkZWZhdWx0OlxuLS1cbm5ldC90bHMvdGxzX3N3LmM9NjE3PXN0YXRpYyBpbnQgdGxzX3B1c2hfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNjg2LVxubmV0L3Rscy90bHNfc3cuYzo2ODc6XHR0bHNfY3R4LVx1MDAzZXBlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3MgPSBmYWxzZTtcbm5ldC90bHMvdGxzX3N3LmMtNjg4LVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtODYxLVx0XHRcdFx0Z290byBzZW5kX2VuZDtcbm5ldC90bHMvdGxzX3N3LmM6ODYyOlx0XHRcdHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IHRydWU7XG5uZXQvdGxzL3Rsc19zdy5jLTg2My1cbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTk0Mi1cdFx0ICovXG5uZXQvdGxzL3Rsc19zdy5jOjk0MzpcdFx0dGxzX2N0eC1cdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gdHJ1ZTtcbm5ldC90bHMvdGxzX3N3LmMtOTQ0LVx0XHRjb3BpZWQgJiM0Mzs9IHRyeV90b19jb3B5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRMUyBTb2NrZXQgT3B0aW9uIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBUTFMgc29ja2V0IG9wdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhlIHRyYWNlIHNob3dzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgYmVpbmcgY2FsbGVkIGZyb20gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgcmVsYXRlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAgdG8gYHRsc19zZXRzb2Nrb3B0YC4gUmlnaHQsIGhlcmUgd2UgZ28uLi4KCkxvb2tzIGxpa2UgYHRsc19zZXRzb2Nrb3B0YCBpcyB0aGUgY29yZSwgYW5kIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCYjMzk7cyBjb25maW5lZCB0byBgdGxzX21haW4uY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGJpdCBzaW1wbGVyIGZvciBub3cuIE9rYXksIGB0bHNfc2V0c29ja29wdGAgaXMgYXNzaWduZWQgdG8gYHByb3QtJmd0O3NldHNvY2tvcHRgLCB3aGljaCBnaXZlcyB1cyBhIHdheSBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKTm93LCBJIG5lZWQgdG8gem9vbSBvdXQgYW5kIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMgYW5kIGtleSBzeW1ib2xzIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBUTFMgZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZmlsZSBvdmVydmlldywgY2hlY2tpbmcgYWxsIGZ1bmN0aW9ucy9maWxlcyBpbiBgbmV0L3Rscy9gLiBUaGF0IHdpbGwgaGVscCBtZSBncmFzcCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIHNvY2tldCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBvbmNlIEkgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYXZhaWxhYmxlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgdGxzX3xedm9pZCB0bHNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHMuaD0xMzk9c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4X2NyZWF0ZShzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoxNDA6dm9pZCB0bHNfY3R4X2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XG5uZXQvdGxzL3Rscy5oLTE0MS12b2lkIHVwZGF0ZV9za19wcm90KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xuLS1cbm5ldC90bHMvdGxzLmg9MTQzPWludCB3YWl0X29uX3BlbmRpbmdfd3JpdGVyKHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW8pO1xubmV0L3Rscy90bHMuaDoxNDQ6dm9pZCB0bHNfZXJyX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycik7XG5uZXQvdGxzL3Rscy5oOjE0NTp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpO1xubmV0L3Rscy90bHMuaC0xNDYtXG5uZXQvdGxzL3Rscy5oPTE0Nz1pbnQgaW5pdF9wcm90X2luZm8oc3RydWN0IHRsc19wcm90X2luZm8gKnByb3QsXG4tLVxubmV0L3Rscy90bHMuaC0xNDktXHRcdCAgIGNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjKTtcbm5ldC90bHMvdGxzLmg6MTUwOmludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXG5uZXQvdGxzL3Rscy5oLTE1MS1cdFx0ICAgICAgIHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKm5ld19jcnlwdG9faW5mbyk7XG5uZXQvdGxzL3Rscy5oOjE1Mjp2b2lkIHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xubmV0L3Rscy90bHMuaDoxNTM6dm9pZCB0bHNfc3dfc3RycGFyc2VyX2FybShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KTtcbm5ldC90bHMvdGxzLmg6MTU0OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9kb25lKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE1NTppbnQgdGxzX3N3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcbm5ldC90bHMvdGxzLmg6MTU2OnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvdGxzL3Rscy5oOjE1Nzp2b2lkIHRsc19zd19jYW5jZWxfd29ya190eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xubmV0L3Rscy90bHMuaDoxNTg6dm9pZCB0bHNfc3dfcmVsZWFzZV9yZXNvdXJjZXNfdHgoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTU5OnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE2MDp2b2lkIHRsc19zd19mcmVlX3Jlc291cmNlc19yeChzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoxNjE6dm9pZCB0bHNfc3dfcmVsZWFzZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTYyOnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE2MzppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdGxzL3Rscy5oLTE2NC1cdFx0ICAgaW50IGZsYWdzKTtcbi0tXG5uZXQvdGxzL3Rscy5oPTE2Nj1zc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L3Rscy90bHMuaC0xNjgtXHRcdFx0ICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTtcbm5ldC90bHMvdGxzLmg6MTY5OmludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rscy5oLTE3MC1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XG5uZXQvdGxzL3Rscy5oLTE3MS1cbm5ldC90bHMvdGxzLmg6MTcyOmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcbm5ldC90bHMvdGxzLmg6MTczOnZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xubmV0L3Rscy90bHMuaDoxNzQ6aW50IHRsc190eF9yZWNvcmRzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTtcbm5ldC90bHMvdGxzLmgtMTc1LVxubmV0L3Rscy90bHMuaDoxNzY6dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XG5uZXQvdGxzL3Rscy5oOjE3Nzp2b2lkIHRsc19kZXZpY2Vfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XG5uZXQvdGxzL3Rscy5oLTE3OC1cbm5ldC90bHMvdGxzLmg6MTc5OmludCB0bHNfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L3Rscy90bHMuaC0xODAtXHRcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpO1xubmV0L3Rscy90bHMuaD0xODE9aW50IGRlY3J5cHRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ291dCk7XG5uZXQvdGxzL3Rscy5oLTE4Mi1cbm5ldC90bHMvdGxzLmg6MTgzOmludCB0bHNfc3dfZmFsbGJhY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rscy5oLTE4NC1cdFx0XHQgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxuLS1cbm5ldC90bHMvdGxzLmgtMTg2LVxubmV0L3Rscy90bHMuaDoxODc6aW50IHRsc19zdHJwX2Rldl9pbml0KHZvaWQpO1xubmV0L3Rscy90bHMuaDoxODg6dm9pZCB0bHNfc3RycF9kZXZfZXhpdCh2b2lkKTtcbm5ldC90bHMvdGxzLmgtMTg5LVxubmV0L3Rscy90bHMuaDoxOTA6dm9pZCB0bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcbm5ldC90bHMvdGxzLmgtMTkxLXZvaWQgX190bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcbm5ldC90bHMvdGxzLmg6MTkyOnZvaWQgdGxzX3N0cnBfc3RvcChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oOjE5MzppbnQgdGxzX3N0cnBfaW5pdChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTk0OnZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTE5NS1cbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcbm5ldC90bHMvdGxzLmg6MTk3OnZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xubmV0L3Rscy90bHMuaC0xOTgtXG5uZXQvdGxzL3Rscy5oOjE5OTppbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC90bHMvdGxzLmg6MjAwOnZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTIwMS1cbm5ldC90bHMvdGxzLmg9MjAyPWJvb2wgdGxzX3N0cnBfbXNnX2xvYWQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgZm9yY2VfcmVmcmVzaCk7XG5uZXQvdGxzL3Rscy5oOjIwMzppbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCk7XG5uZXQvdGxzL3Rscy5oLTIwNC1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCk7XG5uZXQvdGxzL3Rscy5oOjIwNTppbnQgdGxzX3N0cnBfbXNnX2hvbGQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmX2hlYWQgKmRzdCk7XG5uZXQvdGxzL3Rscy5oLTIwNi1cbi0tXG5uZXQvdGxzL3Rscy5oPTIyNT1zdGF0aWMgaW5saW5lIGJvb2wgdGxzX3N0cnBfbXNnX21peGVkX2RlY3J5cHRlZChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbi0tXG5uZXQvdGxzL3Rscy5oLTIzMC0jaWZkZWYgQ09ORklHX1RMU19ERVZJQ0Vcbm5ldC90bHMvdGxzLmg6MjMxOmludCB0bHNfZGV2aWNlX2luaXQodm9pZCk7XG5uZXQvdGxzL3Rscy5oOjIzMjp2b2lkIHRsc19kZXZpY2VfY2xlYW51cCh2b2lkKTtcbm5ldC90bHMvdGxzLmg6MjMzOmludCB0bHNfc2V0X2RldmljZV9vZmZsb2FkKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvdGxzL3Rscy5oOjIzNDp2b2lkIHRsc19kZXZpY2VfZnJlZV9yZXNvdXJjZXNfdHgoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MjM1OmludCB0bHNfc2V0X2RldmljZV9vZmZsb2FkX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xubmV0L3Rscy90bHMuaDoyMzY6dm9pZCB0bHNfZGV2aWNlX29mZmxvYWRfY2xlYW51cF9yeChzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoyMzc6dm9pZCB0bHNfZGV2aWNlX3J4X3Jlc3luY19uZXdfcmVjKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjZF9sZW4sIHUzMiBzZXEpO1xubmV0L3Rscy90bHMuaDoyMzg6aW50IHRsc19kZXZpY2VfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KTtcbm5ldC90bHMvdGxzLmgtMjM5LSNlbHNlXG4tLVxubmV0L3Rscy90bHMuaD0yNjI9dGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxubmV0L3Rscy90bHMuaC0yNjctXG5uZXQvdGxzL3Rscy5oOjI2ODppbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbm5ldC90bHMvdGxzLmgtMjY5LVx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1MTYgZmlyc3Rfb2Zmc2V0LFxubmV0L3Rscy90bHMuaC0yNzAtXHRcdGludCBmbGFncyk7XG5uZXQvdGxzL3Rscy5oOjI3MTppbnQgdGxzX3B1c2hfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbm5ldC90bHMvdGxzLmgtMjcyLVx0XHRcdCAgICBpbnQgZmxhZ3MpO1xubmV0L3Rscy90bHMuaDoyNzM6dm9pZCB0bHNfZnJlZV9wYXJ0aWFsX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KTtcbm5ldC90bHMvdGxzLmgtMjc0LVxuLS1cbm5ldC90bHMvdGxzLmg9MzY0PXN0YXRpYyBpbmxpbmVcbm5ldC90bHMvdGxzLmg6MzY1OnZvaWQgdGxzX21ha2VfYWFkKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNoYXIgKnJlY29yZF9zZXF1ZW5jZSxcbm5ldC90bHMvdGxzLmgtMzY2LVx0XHQgIHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUsIHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTE2Mj1zdGF0aWMgdm9pZCB0bHNfdGNwX2NsZWFuX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFja2VkX3NlcSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xOTYtICovXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxOTc6dm9pZCB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OC17XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9MjE0PUVYUE9SVF9TWU1CT0xfR1BMKHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3QpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMjE1LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjE2OnZvaWQgdGxzX2RldmljZV9mcmVlX3Jlc291cmNlc190eChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMTcte1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTIyMi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjIyMzp2b2lkIHRsc19vZmZsb2FkX3R4X3Jlc3luY19yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgdTMyIGdvdF9zZXEsIHUzMiBleHBfc2VxKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjI0LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NjUtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NjY6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01Njcte1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU5Mi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU5Mzp2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk0LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgzLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6Njg0OnZvaWQgdGxzX2RldmljZV93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjg1LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz03MTY9dGxzX2RldmljZV9yeF9yZXN5bmNfYXN5bmMoc3RydWN0IHRsc19vZmZsb2FkX3Jlc3luY19hc3luYyAqcmVzeW5jX2FzeW5jLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTc3Mi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjc3Mzp2b2lkIHRsc19kZXZpY2VfcnhfcmVzeW5jX25ld19yZWMoc3RydWN0IHNvY2sgKnNrLCB1MzIgcmNkX2xlbiwgdTMyIHNlcSlcbm5ldC90bHMvdGxzX2RldmljZS5jLTc3NC17XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9ODg2PXRsc19kZXZpY2VfcmVlbmNyeXB0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTk3Ni1cbm5ldC90bHMvdGxzX2RldmljZS5jOjk3NzppbnQgdGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy05Nzgte1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTEwNDE9c3RhdGljIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICphbGxvY19vZmZsb2FkX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMDY0LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTA2NTppbnQgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMDY2LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTk0LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTE5NTppbnQgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTE5Ni17XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTI3MC1cbm5ldC90bHMvdGxzX2RldmljZS5jOjEyNzE6dm9pZCB0bHNfZGV2aWNlX29mZmxvYWRfY2xlYW51cF9yeChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMjcyLXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz00MzQ9RVhQT1JUX1NZTUJPTF9HUEwodGxzX2VuY3J5cHRfc2tiKTtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTQzNS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjQzNjppbnQgdGxzX3N3X2ZhbGxiYWNrX2luaXQoc3RydWN0IHNvY2sgKnNrLFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtNDM3LVx0XHRcdCBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTEzOT1pbnQgd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xNjctXG5uZXQvdGxzL3Rsc19tYWluLmM6MTY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19tYWluLmMtMTY5LVx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MjI2PXN0YXRpYyBpbnQgdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtMjM1LVxubmV0L3Rscy90bHNfbWFpbi5jOjIzNjppbnQgdGxzX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC90bHMvdGxzX21haW4uYy0yMzctXHRcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTI2Ny1cbm5ldC90bHMvdGxzX21haW4uYzoyNjg6aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXG5uZXQvdGxzL3Rsc19tYWluLmMtMjY5LVx0XHRcdCAgICBpbnQgZmxhZ3MpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTI4MC1cbm5ldC90bHMvdGxzX21haW4uYzoyODE6dm9pZCB0bHNfZnJlZV9wYXJ0aWFsX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxubmV0L3Rscy90bHNfbWFpbi5jLTI4Mi17XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTI5Mj1zdGF0aWMgdm9pZCB0bHNfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0zMjItICovXG5uZXQvdGxzL3Rsc19tYWluLmM6MzIzOnZvaWQgdGxzX2N0eF9mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG5uZXQvdGxzL3Rsc19tYWluLmMtMzI0LXtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTQ9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0bHNfc3RycF93cTtcbm5ldC90bHMvdGxzX3N0cnAuYy0xNS1cbm5ldC90bHMvdGxzX3N0cnAuYzoxNjp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTcte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz04NT1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTE5LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjEyMDppbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbm5ldC90bHMvdGxzX3N0cnAuYy0xMjEte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0xNDQtICovXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTQ1OmludCB0bHNfc3RycF9tc2dfaG9sZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHN0KVxubmV0L3Rscy90bHNfc3RycC5jLTE0Ni17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01NjgtLyogTG93ZXIgc29jayBsb2NrIGhlbGQgKi9cbm5ldC90bHMvdGxzX3N0cnAuYzo1Njk6dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTU3MC17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjAwLSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjYwMTp2b2lkIHRsc19zdHJwX21zZ19jb25zdW1lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTYwMi17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTYxNC1cbm5ldC90bHMvdGxzX3N0cnAuYzo2MTU6dm9pZCB0bHNfc3RycF9zdG9wKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTYxNi17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTYxOS1cbm5ldC90bHMvdGxzX3N0cnAuYzo2MjA6aW50IHRsc19zdHJwX2luaXQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N0cnAuYy02MjEte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy02MzctICovXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjM4OnZvaWQgdGxzX3N0cnBfZG9uZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbm5ldC90bHMvdGxzX3N0cnAuYy02Mzkte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz02NTI9aW50IF9faW5pdCB0bHNfc3RycF9kZXZfaW5pdCh2b2lkKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy02NjAtXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjYxOnZvaWQgdGxzX3N0cnBfZGV2X2V4aXQodm9pZClcbm5ldC90bHMvdGxzX3N0cnAuYy02NjIte1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9Mzk2PXN0YXRpYyB2b2lkIHRsc19mcmVlX29wZW5fcmVjKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTQwNy1cbm5ldC90bHMvdGxzX3N3LmM6NDA4OmludCB0bHNfdHhfcmVjb3JkcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC90bHMvdGxzX3N3LmMtNDA5LXtcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTc2Nj1zdGF0aWMgaW50IHRsc19zd19zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTEwMDctXG5uZXQvdGxzL3Rsc19zdy5jOjEwMDg6aW50IHRsc19zd19zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC90bHMvdGxzX3N3LmMtMTAwOS17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0xMDMwLSAqL1xubmV0L3Rscy90bHNfc3cuYzoxMDMxOnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC90bHMvdGxzX3N3LmMtMTAzMi17XG4tLVxubmV0L3Rscy90bHNfc3cuYz0xODAwPXN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xODA1LVxubmV0L3Rscy90bHNfc3cuYzoxODA2OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19zdy5jLTE4MDctXHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTE5OTk9c3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTIwNzItXG5uZXQvdGxzL3Rsc19zdy5jOjIwNzM6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC90bHMvdGxzX3N3LmMtMjA3NC1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcilcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTIxNzU9Ym9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTgzLVxubmV0L3Rscy90bHNfc3cuYzoyMTg0OmludCB0bHNfcnhfbXNnX3NpemUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvdGxzL3Rsc19zdy5jLTIxODUte1xuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjI0Ni0gKi9cbm5ldC90bHMvdGxzX3N3LmM6MjI0Nzp2b2lkIHRsc19yeF9tc2dfbWF5YmVfYW5ub3VuY2Uoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdy5jLTIyNDgte1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjI1OT1zdGF0aWMgdm9pZCB0bHNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMjcyLVxubmV0L3Rscy90bHNfc3cuYzoyMjczOnZvaWQgdGxzX3N3X2NhbmNlbF93b3JrX3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjI3NC17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMjgxLVxubmV0L3Rscy90bHNfc3cuYzoyMjgyOnZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N3LmMtMjI4My17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzE1LVxubmV0L3Rscy90bHNfc3cuYzoyMzE2OnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjMxNy17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzIyLVxubmV0L3Rscy90bHNfc3cuYzoyMzIzOnZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3J4KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N3LmMtMjMyNC17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzQzLVxubmV0L3Rscy90bHNfc3cuYzoyMzQ0OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9kb25lKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjM0NS17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzUwLVxubmV0L3Rscy90bHNfc3cuYzoyMzUxOnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjM1Mi17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzU3LVxubmV0L3Rscy90bHNfc3cuYzoyMzU4OnZvaWQgdGxzX3N3X2ZyZWVfcmVzb3VyY2VzX3J4KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N3LmMtMjM1OS17XG4tLVxubmV0L3Rscy90bHNfc3cuYz0yNDA0PXN0YXRpYyBib29sIHRsc19pc190eF9yZWFkeShzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTI0MTQtXG5uZXQvdGxzL3Rsc19zdy5jOjI0MTU6dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yNDI0LVxubmV0L3Rscy90bHNfc3cuYzoyNDI1OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9hcm0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19zdy5jLTI0MjYte1xuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjQzNC1cbm5ldC90bHMvdGxzX3N3LmM6MjQzNTp2b2lkIHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19zdy5jLTI0MzYte1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjUxNj1zdGF0aWMgdm9pZCB0bHNfZmluaXNoX2tleV91cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yNTI0LVxubmV0L3Rscy90bHNfc3cuYzoyNTI1OmludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXG5uZXQvdGxzL3Rsc19zdy5jLTI1MjYtXHRcdCAgICAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpuZXdfY3J5cHRvX2luZm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFNldHNvY2tvcHQgRnVuY3Rpb24gYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgYHRsc190eF9yZWNvcmRfaXNfb3BlbmAgaXMgdHJpZ2dlcmVkIGJ5IGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBkb190bHNfc2V0c29ja29wdGAgYW5kIHVsdGltYXRlbHksIGB0bHNfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIGB0bHNfc2V0c29ja29wdGAgaXMgcmVnaXN0ZXJlZCBpbiBgc3RydWN0IHByb3RvYCBhcyBgLnNldHNvY2tvcHRgLCB3aGljaCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZyBmdW5jdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGB0bHNfc2V0X3N3X29mZmxvYWRgIG9yIGB0bHNfZGV2aWNlX3NlbmRtc2dgLgoKRm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbiBvbiBGb2N1c1N5bWJvbHMsIEkgbmVlZCB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnlwb2ludHMsIG5vdCBpbnRlcm5hbCBzdGF0aWMgaGVscGVycyB0aGF0IG1pZ2h0IGJlIGlubGluZWQuIEkmIzM5O2xsIGNoZWNrIGlmIGB0bHNfc2V0c29ja29wdGAgaXMgc3RhdGljIG9yIGlubGluZWQuIExvb2tpbmcgYXQgYG5ldC90bHMvdGxzX21haW4uY2AgbGluZSA5MDksIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoLi4uKWAuIEhvd2V2ZXIsIGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIChgcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLnNldHNvY2tvcHQgPSB0bHNfc2V0c29ja29wdDtgKSwgaXQgbGlrZWx5ICp3b24mIzM5O3QqIGJlIGNvbXBsZXRlbHkgaW5saW5lZCBhd2F5IGJ5IHRoZSBjb21waWxlciBhbmQgaXQgd2lsbCBoYXZlIGEgc3ltYm9sIGluIHRoZSBvYmplY3QgZmlsZSwgdW5sZXNzIGFnZ3Jlc3NpdmUgTFRPIG9yIHN0YXRpYyBzeW1ib2wgc3RyaXBwaW5nIGlzIGFwcGxpZWQuIEdvb2QgdG8ga25vdy4gQW5kLCBhcyBzdXNwZWN0ZWQsIGB0bHNfc2V0X3N3X29mZmxvYWRgIGFuZCBgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZGAgYXJlIHRoZXJlIHRvIGNvbmZpZ3VyZSBUTFMgVFgvUlggb2ZmbG9hZC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYENPTkZJR19UTFNgIGFuZCBgQ09ORklHX1RMU19ERVZJQ0VgIGFyZSBjbGVhcmx5IHRoZSBrZXkgaGVyZS4gTGV0JiMzOTtzIGNoZWNrIGBuZXQvdGxzL0tjb25maWdgLiBgVExTYCBkZXBlbmRzIG9uIGBJTkVUYCwgYENSWVBUT2AsIGFuZCBzb21lIG90aGVyIGNyeXB0byBjb21wb25lbnRzLiBgVExTX0RFVklDRWAgZnVydGhlciBkZXBlbmRzIG9uIGBUTFNgLCBhbmQgc2VsZWN0cyBhZGRpdGlvbmFsIGZlYXR1cmVzIGxpa2UgYFNLQl9ERUNSWVBURURgIGFuZCBgU09DS19WQUxJREFURV9YTUlUYC4gYElORVRgIGlzIHN0cmFpZ2h0Zm9yd2FyZCBuZXR3b3JraW5nLiBTbywgY2xlYXJseSBgVExTYCBhbmQgYFRMU19ERVZJQ0VgIGFyZSBlc3NlbnRpYWwsIGFzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW5gIGhhbmRsZXMgYm90aCBgVExTX1NXYCBhbmQgYFRMU19IV2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgYHRsc19vZmZsb2FkX2N0eF90eGAgZGVwZW5kcyBvbiBgQ09ORklHX1RMU19ERVZJQ0VgIHRvIGNvbmZpcm0gdGhlIG9mZmxvYWQgcGF0aC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGludGVyYWN0IGFuZCBob3cgdG8gcHJvcGVybHkgZnV6eiBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfb2ZmbG9hZF9jdHhfdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYz01OD1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX2ZyZWVfY3R4KHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTYwLVx0aWYgKGN0eC1cdTAwM2V0eF9jb25mID09IFRMU19IVylcbm5ldC90bHMvdGxzX2RldmljZS5jOjYxOlx0XHRrZnJlZSh0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02Mi1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz04OD1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3F1ZXVlX2N0eF9kZXN0cnVjdGlvbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMDktXHRpZiAoYXN5bmNfY2xlYW51cCkge1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MTEwOlx0XHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTExMS1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xNjI9c3RhdGljIHZvaWQgdGxzX3RjcF9jbGVhbl9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2tlZF9zZXEpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTcyLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTczOlx0Y3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMTc0LVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTE5Nz12b2lkIHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OS1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjIwMDpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDEtXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDI3LVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyODpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjktXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM9Mjk1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX2VuY19za2Ioc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuLS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTMwMC17XG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYzozMDE6XHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzAyLVx0aW50IHRjcF9wYXlsb2FkX29mZnNldCA9IHNrYl90Y3BfYWxsX2hlYWRlcnMoc2tiKTtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0zNjE9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfc3dfZmFsbGJhY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTM2NC1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjM2NTpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zNjYtXHRpbnQgcGF5bG9hZF9sZW4gPSBza2ItXHUwMDNlbGVuIC0gdGNwX3BheWxvYWRfb2Zmc2V0O1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz04Mzk9c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy04NDQtXHRjYXNlIFRMU19IVzpcbm5ldC90bHMvdGxzX21haW4uYzo4NDU6XHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xubmV0L3Rscy90bHNfbWFpbi5jLTg0Ni1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODE2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYHRsc19vZmZsb2FkX2N0eF90eGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gYW5kIHB1cnBvc2Ugb2YgYHRsc19vZmZsb2FkX2N0eF90eGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGVyZSB0aGlzIHZhcmlhYmxlLCBzdHJ1Y3QsIG9yIHdoYXRldmVyIGl0IGlzLCBnZXRzIGl0cyBzaGFwZSBhbmQgZGVmaW5pdGlvbi4gVGhlIGNvbnRleHQgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byBUTFMgb2ZmbG9hZGluZywgd2hpY2ggbWVhbnMgaXQgbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBvdXRzaWRlIG9mIHRoZSBtYWluIENQVSwgcGVyaGFwcyBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgb3IgYSBkZWRpY2F0ZWQgc2VjdXJpdHkgcHJvY2Vzc29yLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgcGxhY2VzIHRoaXMgd291bGQgYmUgZGVmaW5lZDogaGVhZGVyIGZpbGVzLCBzb3VyY2UgZmlsZXMgd2l0aGluIHRoZSBUTFMgbGlicmFyeSBpdHNlbGYsIGRyaXZlciBjb2RlIGlmIGl0JiMzOTtzIE5JQy1zcGVjaWZpYywgb3IgcG90ZW50aWFsbHkgaW4gc29tZSBnZW5lcmljIG9mZmxvYWQgZnJhbWV3b3JrLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgc28gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCB3aGF0IGl0IGlzLCBhbmQgbGlrZWx5IHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX29mZmxvYWRfY3R4X3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGxzLmg9Mzk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxuaW5jbHVkZS9uZXQvdGxzLmg6Mzk2OnRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5pbmNsdWRlL25ldC90bHMuaC0zOTcte1xuLS1cbmluY2x1ZGUvbmV0L3Rscy5oPTQzMz1zdGF0aWMgaW5saW5lIHZvaWQgKl9fdGxzX2RyaXZlcl9jdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuLS1cbmluY2x1ZGUvbmV0L3Rscy5oLTQzNi1cdGlmIChkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWClcbmluY2x1ZGUvbmV0L3Rscy5oOjQzNzpcdFx0cmV0dXJuIHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KS1cdTAwM2Vkcml2ZXJfc3RhdGU7XG5pbmNsdWRlL25ldC90bHMuaC00MzgtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgYGluY2x1ZGUvbmV0L3Rscy5oYCBoZWFkZXIsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAzOTUuIEkmIzM5O20gbGlrZWx5IGRlYnVnZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBUTFMsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBwcm9ibGVtIG9yIGZlYXR1cmUgbGllcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlLiBJIGV4cGVjdCB0aGF0IGxpbmUgMzk1IGhvbGRzIGEgY3J1Y2lhbCBkZWZpbml0aW9uIG9yIGEgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbCByZWxhdGVkIHRvIFRMUyBoYW5kbGluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIEkgbmVlZCB0byB6b29tIGluIG9uIGl0IG5vdy4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGxzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdHtcbiAzODY6XHRcdHJldHVybiAoc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICopdGxzX2N0eC1cdTAwM2Vwcml2X2N0eF9yeDtcbiAzODc6XHR9XG4gMzg4Olx0XG4gMzg5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnRsc19zd19jdHhfdHgoXG4gMzkwOlx0XHRcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbiAzOTE6XHR7XG4gMzkyOlx0XHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqKXRsc19jdHgtXHUwMDNlcHJpdl9jdHhfdHg7XG4gMzkzOlx0fVxuIDM5NDpcdFxuIDM5NTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxuIDM5NjpcdHRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4gMzk3Olx0e1xuIDM5ODpcdFx0cmV0dXJuIChzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqKXRsc19jdHgtXHUwMDNlcHJpdl9jdHhfdHg7XG4gMzk5Olx0fVxuIDQwMDpcdFxuIDQwMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF90eChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gNDAyOlx0e1xuIDQwMzpcdFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHg7XG4gNDA0Olx0XG4gNDA1Olx0XHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcbiA0MDY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQwNzpcdFxuIDQwODpcdFx0Y3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIDQwOTpcdFx0aWYgKCFjdHgpXG4gNDEwOlx0XHRcdHJldHVybiBmYWxzZTtcbiA0MTE6XHRcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3J4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MzAKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRMUyBTb2NrZXQgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZml4LCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIHN0YWJpbGl0eSBvZiBvdXIgVExTIGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhhcmR3YXJlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIGluIGB0bHNfbWFpbi5jYCBpcyB0aGUgdGFyZ2V0LCB3aGVyZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjYWxsIHRvIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAuIFNtYXJ0LiBUaGlzIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgVExTX0hXYCBjb250ZXh0cy4gQXBwYXJlbnRseSwgd2l0aG91dCB0aGlzIGNoZWNrLCB3ZSB3ZXJlIHJ1bm5pbmcgdGhlIHJpc2sgb2YgaW5jb3JyZWN0bHkgaW50ZXJwcmV0aW5nIGBwcml2X2N0eF90eGAgYXMgYSBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgLiBUaGlzIG1pc2ludGVycHJldGF0aW9uIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyB3aGVuIHNldHRpbmcgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gIHRocm91Z2ggYHNldHNvY2tvcHRgIHdoaWxlIHRyYW5zbWlzc2lvbiByZWNvcmRzIGFyZSBvcGVuLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbG9naWMgY2hhbmdlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb2RlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscy4gVGhhdCBtYWtlcyBpdCBjcml0aWNhbCB3ZSBnZXQgdGhpcyByaWdodC4gSXQgdG91Y2hlcyBvbiBgc2V0c29ja29wdGAgd2hpY2ggaXMgYSBicmVhZCBhbmQgYnV0dGVyIGludGVyZmFjZSBmb3IgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24uCgpJIHNlZSB0aGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBUTFNgIGFuZCBgVExTX0RFVklDRWAuIE5vdywgbGV0IG1lIHNlZSB3aGljaCBvdGhlciBzeW1ib2xzIGFyZSBpbnZvbHZlZCBoZXJlLiBGcm9tIHRoZSB0ZXh0LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb246IGB0bHNfc2V0c29ja29wdGAsIGB0bHNfc2V0X3N3X29mZmxvYWRgLCBgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZGAsIGB0bHNfdHhfcmVjb3Jkc2AsIGFuZCBgdGxzX3N3X3NlbmRtc2dgLgoKTGV0JiMzOTtzIGNhbGwgdGhpcyBzZXQgb2YgaW5mb3JtYXRpb24gYHNldC1yZXN1bHRzYC4gSSB0aGluayBJJiMzOTttIHJlYWR5IHRvIGRpZyBkZWVwZXIgYW5kIHRlc3QgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGxzX3NldF9zd19vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc19zZXRfZGV2aWNlX29mZmxvYWQmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3N3X3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4gY2FzdCBjdHgtXHUwMDNlcHJpdl9jdHhfdHggdG8gc3RydWN0IHRsc19zd19jb250ZXh0X3R4IHdpdGhvdXQgY2hlY2tpbmcgY3R4LVx1MDAzZXR4X2NvbmYsIHdoaWNoIGNhdXNlZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0eF9jb25mIHdhcyBUTFNfSFcuIEl0IGFkZHMgdGxzX3R4X3JlY29yZF9pc19vcGVuKCkgdG8gcHJvcGVybHkgY2hlY2sgb3BlbiByZWNvcmRzIGJhc2VkIG9uIHdoZXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgVExTIGlzIGNvbmZpZ3VyZWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBUTFMgc2V0c29ja29wdCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2VyIHNwYWNlIHNvY2tldCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3Rsc19zZXRfc3dfb2ZmbG9hZCYjMzQ7LAogICAgJiMzNDt0bHNfc2V0X2RldmljZV9vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc190eF9yZWNvcmRzJiMzNDssCiAgICAmIzM0O3Rsc19zd19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVx1MDAzZXByaXZfY3R4X3R4IHRvIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCB3aXRob3V0IGNoZWNraW5nIGN0eC1cdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdHlwZSBjb25mdXNpb24gaXNzdWUgaW4gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKClgIHdoZXJlIGBjdHgtXHUwMDNlcHJpdl9jdHhfdHhgIHdhcyB1bmNvbmRpdGlvbmFsbHkgY2FzdCB0byBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgIGFuZCBjaGVja2VkIGZvciBgb3Blbl9yZWNgLCBldmVuIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2FzIGNvbmZpZ3VyZWQgZm9yIEhXIG9mZmxvYWQgKGBUTFNfSFdgLCB3aGVyZSBgcHJpdl9jdHhfdHhgIGhvbGRzIGBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eGApLiBUaGUgZml4IGludHJvZHVjZXMgYHRsc190eF9yZWNvcmRfaXNfb3BlbigpYCB0byBwcm9wZXJseSBpbnNwZWN0IHRoZSBhcHByb3ByaWF0ZSBvcGVuIHJlY29yZCBwb2ludGVyIGJhc2VkIG9uIGBjdHgtXHUwMDNldHhfY29uZmAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBrZXJuZWwtdG8tdXNlciBjb3B5IGJ1ZmZlcnMgb3IgaW5mby1sZWFrIHBhdGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCB0cmFja2luZyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RydWN0IGNhc3RpbmcvYWNjZXNzZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vVUJTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ1NmY1OTY4ZDY2M2FiMmY0MmEyNzNlYmZlNTI3ZmI2MTc3NjJmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDAzOjQ5OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmMKQEAgLTgzMywxNSAmIzQzOzgzMywyOSBAQCBzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7LyogcHJpdl9jdHhfdHggaG9sZHMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIG9uIGVhY2ggVFggcGF0aCwgc28gdHhfY29uZiBoYXMgdG8KJiM0MzsgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGN0eC0mZ3Q7dHhfY29uZikgewomIzQzOwljYXNlIFRMU19TVzoKJiM0MzsJCXJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS0mZ3Q7b3Blbl9yZWM7CiYjNDM7CWNhc2UgVExTX0hXOgomIzQzOwkJcmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktJmd0O29wZW5fcmVjb3JkOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwotCXN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqc3dfY3R4ID0gdGxzX3N3X2N0eF90eChjdHgpOwogCXUxNiB2YWx1ZTsKIAlib29sIHRsc18xMyA9IGN0eC0mZ3Q7cHJvdF9pbmZvLnZlcnNpb24gPT0gVExTXzFfM19WRVJTSU9OOwogCi0JaWYgKHN3X2N0eCAmYW1wOyZhbXA7IHN3X2N0eC0mZ3Q7b3Blbl9yZWMpCiYjNDM7CWlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiAtIEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBuZWVkcyBLTVNBTiB0ZXN0aW5nLiBNeSBndXQgZmVlbGluZyBpcyB0byBhbHdheXMgbGVhbiB0b3dhcmRzIHRoZSAmIzM0O2JldHRlciBzYWZlIHRoYW4gc29ycnkmIzM0OyBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXNuJiMzOTt0IGFib3V0IGxvb2tpbmcgZm9yIG1hbHdhcmUgb3IgZXhwbG9pdCBwYXlsb2Fkcy4gSXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgdGFzaywgYSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGV2YWx1YXRpb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIGNoZWNraW5nIGlmIHRoaXMgY29kZSBjaGFuZ2UgY291bGQgaW50cm9kdWNlIGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLCBhcyBvcHBvc2VkIHRvIEtBU0FOLiBJdCYjMzk7cyBhIGJlbmlnbiB0YXNrLCBmb3J0dW5hdGVseS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgaW4gYG5ldC90bHMvdGxzX21haW4uY2AuIFRoZSBjaGFuZ2UgbG9va3MgcmVsYXRpdmVseSBjb250YWluZWQg4oCTIGl0JiMzOTtzIHJlcGxhY2luZyBhIGNoZWNrIHdpdGggYSBmdW5jdGlvbiBjYWxsLCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYC4gRnJvbSBhIGJyaWVmIGdsYW5jZSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGEgVExTIHJlY29yZCBpcyAmIzM0O29wZW4mIzM0OyBiZWZvcmUgYWxsb3dpbmcgYSBgc2V0c29ja29wdGAgY2FsbC4gVGhlIG9sZCBjaGVjayAoYHN3X2N0eCAmYW1wOyZhbXA7IHN3X2N0eC0mZ3Q7b3Blbl9yZWNgKSB3YXMgc3BlY2lmaWMgdG8gdGhlIHNvZnR3YXJlIFRMUyBjb250ZXh0LiBUaGUgbmV3IGZ1bmN0aW9uLCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCwgaXMgZGVzaWduZWQgdG8gaGFuZGxlIGJvdGggc29mdHdhcmUgKGBUTFNfU1dgKSBhbmQgaGFyZHdhcmUgKGBUTFNfSFdgKSBjb250ZXh0cy4KCkkgc3VzcGVjdCB0aGlzIGNoYW5nZSBpcyByZWZhY3RvcmluZyB0aGUgY29kZSB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYyBhbmQgaGFuZGxlIGJvdGggc29mdHdhcmUgYW5kIGhhcmR3YXJlIG9mZmxvYWQgY29udGV4dHMuIFRoZSBmdW5jdGlvbiBpcyBjaGVja2luZyBjb250ZXh0IG1lbWJlcnMsIGJ1dCBpbiBkaWZmZXJlbnQgc3RydWN0dXJlcy4KCkkmIzM5O20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gdW5kZXJzdGFuZCB0aGUgYHRsc19jb250ZXh0YCBzdHJ1Y3QsIGB0bHNfc3dfY3R4X3R4YCBhbmQgYHRsc19vZmZsb2FkX2N0eF90eGAsIGFuZCBob3cgYHR4X2NvbmZgIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBvcGVuX3JlY2AgYW5kIGBvcGVuX3JlY29yZGAgaW4gdGhlIGNvbnRleHQgb2YgVExTIGNvbm5lY3Rpb24gc3RhdGUuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgaXQmIzM5O3MgYWJvdXQgY2hlY2tpbmcgd2hldGhlciB0aGUgVFggcGF0aCBoYXMgYW4gb3BlbiByZWNvcmQuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgVFggcmVjb3JkIGlzIG9wZW4sIEkgYW0gZ29pbmcgdG8gZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uICoqTmVlZHNLTVNBTjogdHJ1ZS4qKiBJIHdpbGwgY29uZmlybSB0aGlzIGxhdGVyIHdpdGggdG9vbHMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGF0YSByYWNlcyBoZXJlLgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFx0cmMgPSBjaGVja196ZXJvZWRfc29ja3B0cihvcHR2YWwsIHNpemVvZih2YWwpLCBvcHRsZW4gLSBzaXplb2YodmFsKSk7XG4gODIxOlx0XHRpZiAocmMgXHUwMDNjIDEpXG4gODIyOlx0XHRcdHJldHVybiByYyA9PSAwID8gLUVJTlZBTCA6IHJjO1xuIDgyMzpcdFxuIDgyNDpcdFx0bG9ja19zb2NrKHNrKTtcbiA4MjU6XHRcdHJjID0gLUVJTlZBTDtcbiA4MjY6XHRcdGlmIChjdHgtXHUwMDNlcnhfY29uZiA9PSBUTFNfU1cgfHwgY3R4LVx1MDAzZXJ4X2NvbmYgPT0gVExTX0hXKSB7XG4gODI3Olx0XHRcdGN0eC1cdTAwM2VyeF9ub19wYWQgPSB2YWw7XG4gODI4Olx0XHRcdHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShjdHgpO1xuIDgyOTpcdFx0XHRyYyA9IDA7XG4gODMwOlx0XHR9XG4gODMxOlx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDgzMjpcdFxuIDgzMzpcdFx0cmV0dXJuIHJjO1xuIDgzNDpcdH1cbiA4MzU6XHRcbiA4MzY6XHQvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xuIDgzNzpcdCAqIHNheSB3aGljaCBvcGVuIHJlY29yZCB0byBsb29rIGF0LlxuIDgzODpcdCAqL1xuIDgzOTpcdHN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbiA4NDA6XHR7XG4gODQxOlx0XHRzd2l0Y2ggKGN0eC1cdTAwM2V0eF9jb25mKSB7XG4gODQyOlx0XHRjYXNlIFRMU19TVzpcbiA4NDM6XHRcdFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjO1xuIDg0NDpcdFx0Y2FzZSBUTFNfSFc6XG4gODQ1Olx0XHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xuIDg0NjpcdFx0ZGVmYXVsdDpcbiA4NDc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg0ODpcdFx0fVxuIDg0OTpcdH1cbiA4NTA6XHRcbiA4NTE6XHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiA4NTI6XHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4gODUzOlx0e1xuIDg1NDpcdFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gODU1Olx0XHR1MTYgdmFsdWU7XG4gODU2Olx0XHRib29sIHRsc18xMyA9IGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiA9PSBUTFNfMV8zX1ZFUlNJT047XG4gODU3Olx0XG4gODU4Olx0XHRpZiAodGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eCkpXG4gODU5Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gODYwOlx0XG4gODYxOlx0XHRpZiAoc29ja3B0cl9pc19udWxsKG9wdHZhbCkgfHwgb3B0bGVuICE9IHNpemVvZih2YWx1ZSkpXG4gODYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg2MzpcdFxuIDg2NDpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZhbHVlLCBvcHR2YWwsIHNpemVvZih2YWx1ZSkpKVxuIDg2NTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4NjY6XHRcbiA4Njc6XHRcdGlmICh2YWx1ZSBcdTAwM2MgVExTX01JTl9SRUNPUkRfU0laRV9MSU0gLSAodGxzXzEzID8gMSA6IDApIHx8XG4gODY4Olx0XHQgICAgdmFsdWUgXHUwMDNlIFRMU19NQVhfUEFZTE9BRF9TSVpFKVxuIDg2OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4NzA6XHRcbiA4NzE6XHRcdGN0eC1cdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSB2YWx1ZTtcbiA4NzI6XHRcbiA4NzM6XHRcdHJldHVybiAwO1xuIDg3NDpcdH1cbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gODc3Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIDg3ODpcdHtcbiA4Nzk6XHRcdGludCByYyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgdHdvIGNvbnRleHQgdHlwZXM6IGB0bHNfc3dfY3R4X3R4YCBhbmQgYHRsc19vZmZsb2FkX2N0eF90eGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdHJhbnNtaXNzaW9uICh0eCkgc2lkZSBvZiBhIFRMUyBjb25uZWN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBUTFMgY29udGV4dCBpcyBoYW5kbGVkIGR1cmluZyB0aGUgb3V0Ym91bmQgZGF0YSBmbG93LiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgYSBrZXkgZGlzdGluY3Rpb246ICYjMzQ7c3cmIzM0OyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBzb2Z0d2FyZS1iYXNlZCBUTFMgaW1wbGVtZW50YXRpb24sIHdoaWxlICYjMzQ7b2ZmbG9hZCYjMzQ7IGhpbnRzIGF0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgbWF5YmUgYSBkZWRpY2F0ZWQgY3J5cHRvIGVuZ2luZSBvciBhIE5JQyB3aXRoIFRMUyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb250ZXh0IGlzIHN0cnVjdHVyZWQgZm9yIGVhY2ggb2YgdGhlbS4KCkkmIzM5O20gYXNzdW1pbmcgdGhpcyBjb250ZXh0IGhvbGRzIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdGhlIFRMUyBoYW5kc2hha2UgKGNsaWVudC9zZXJ2ZXIgaGVsbG8sIGtleSBleGNoYW5nZSksIHNlc3Npb24ga2V5cywgYW5kIGFueSBzdGF0ZSByZWxhdGVkIHRvIHRoZSBhY3RpdmUgY29ubmVjdGlvbiAoc2VxdWVuY2UgbnVtYmVycywgZXRjLikgZHVyaW5nIHRyYW5zbWlzc2lvbi4gSSBuZWVkIHRvIGxvb2sgZGVlcGVyLiBUaGUgZGlmZmVyZW5jZSBpbiBjb250ZXh0IHN0cnVjdHVyZSBiZXR3ZWVuIHNvZnR3YXJlIGFuZCBvZmZsb2FkZWQgYXBwcm9hY2hlcyBjb3VsZCBiZSBzaWduaWZpY2FudC4gU29mdHdhcmUgY29udGV4dCBsaWtlbHkgaW52b2x2ZXMgbW9yZSBmbGV4aWJsZSBkYXRhIHN0cnVjdHVyZXMgdG8gaGFuZGxlIGRpdmVyc2UgVExTIGNpcGhlciBzdWl0ZXMgYW5kIHByb3RvY29sIHZlcnNpb25zLCBhbmQgbWF5IGluY2x1ZGUgcG9pbnRlcnMgdG8gYnVmZmVycyBmb3IgcGxhaW50ZXh0IGFuZCBjaXBoZXJ0ZXh0LiBUaGUgb2ZmbG9hZGVkIG9uZSBjb3VsZCBiZSBvcHRpbWl6ZWQgd2l0aCB0aGUgaGFyZHdhcmXigJlzIGNhcGFiaWxpdGllcywgcGVyaGFwcyBjb250YWluaW5nIGEgc21hbGxlciwgaGFyZHdhcmUtc3BlY2lmaWMgc2V0IG9mIHNlc3Npb24ga2V5cyBvciBwb2ludGVycyB0byBoYXJkd2FyZSByZWdpc3RlcnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkuIEhvdyBpcyB0aGUgcHJpdmF0ZSBrZXkgaGFuZGxlZCBpbiBlYWNoIGNvbnRleHQ/IElzIHRoZSBvZmZsb2FkIGNvbnRleHQgc2VjdXJlIGVub3VnaCB0byBhdm9pZCBzZW5zaXRpdmUga2V5IG1hdGVyaWFsIGV2ZXIgbGVhdmluZyB0aGUgZGVkaWNhdGVkIGhhcmR3YXJlPyBBbHNvLCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdC4gQXJlIHRoZXJlIGFyY2hpdGVjdHVyYWwgdHJhZGUtb2ZmcyBpbiB0aGVzZSB0d28gbW9kZXMgb2Ygb3BlcmF0aW9uPyBBbmQsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gZXJyb3IgaGFuZGxpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXBwbGljYXRpb24tbGF5ZXIgaXMgYWZmZWN0ZWQuIERvZXMgdGhlIEFQSSBkaWZmZXIgc2lnbmlmaWNhbnRseSBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBhbmQgb2ZmbG9hZCBtb2Rlcz8KClVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaG93IHRoZSBkZXNpZ24gb2YgdGhlc2UgY29udGV4dHMgYWZmZWN0cyB0aGUgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IG9mIHRoZSBzeXN0ZW0sIGFuZCBob3cgdGhlIGRldmVsb3BlciB3b3VsZCBpbnRlcmFjdCB3aXRoIHRoZSBkaWZmZXJlbnQgY29udGV4dHMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNvbnRleHRzIHRpZSBpbnRvIHRoZSBvdmVyYWxsIFRMUyBhcmNoaXRlY3R1cmUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgcG9zc2libGUsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciB1c2UgY2FzZSBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfc3dfY3R4X3R4fHRsc19vZmZsb2FkX2N0eF90eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jPTU4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfZnJlZV9jdHgoc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjAtXHRpZiAoY3R4LVx1MDAzZXR4X2NvbmYgPT0gVExTX0hXKVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NjE6XHRcdGtmcmVlKHRsc19vZmZsb2FkX2N0eF90eChjdHgpKTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTYyLVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTg4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfcXVldWVfY3R4X2Rlc3RydWN0aW9uKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTEwOS1cdGlmIChhc3luY19jbGVhbnVwKSB7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxMTA6XHRcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCA9IHRsc19vZmZsb2FkX2N0eF90eChjdHgpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMTExLVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTE2Mj1zdGF0aWMgdm9pZCB0bHNfdGNwX2NsZWFuX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFja2VkX3NlcSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzItXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxNzM6XHRjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzQtXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9MTk3PXZvaWQgdGxzX2RldmljZV9za19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTk5LVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MjAwOlx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTIwMS1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjctXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDI4Olx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyOS1cdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZDtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0yOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfZW5jX3NrYihzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzAwLXtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjMwMTpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zMDItXHRpbnQgdGNwX3BheWxvYWRfb2Zmc2V0ID0gc2tiX3RjcF9hbGxfaGVhZGVycyhza2IpO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jPTM2MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRsc19zd19mYWxsYmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzY0LVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM6MzY1Olx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTM2Ni1cdGludCBwYXlsb2FkX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSB0Y3BfcGF5bG9hZF9vZmZzZXQ7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg0Mi1cdGNhc2UgVExTX1NXOlxubmV0L3Rscy90bHNfbWFpbi5jOjg0MzpcdFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjO1xubmV0L3Rscy90bHNfbWFpbi5jLTg0NC1cdGNhc2UgVExTX0hXOlxubmV0L3Rscy90bHNfbWFpbi5jOjg0NTpcdFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXHUwMDNlb3Blbl9yZWNvcmQ7XG5uZXQvdGxzL3Rsc19tYWluLmMtODQ2LVx0ZGVmYXVsdDpcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTMwOD1zdGF0aWMgdm9pZCB0bHNfdHJpbV9ib3RoX21zZ3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGFyZ2V0X3NpemUpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0zMTEtXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfc3cuYzozMTI6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTMxMy1cdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXHUwMDNlb3Blbl9yZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz0zMjE9c3RhdGljIGludCB0bHNfYWxsb2NfZW5jcnlwdGVkX21zZyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pXG4tLVxubmV0L3Rscy90bHNfc3cuYy0zMjMtXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG5uZXQvdGxzL3Rsc19zdy5jOjMyNDpcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX3N3LmMtMzI1LVx0c3RydWN0IHRsc19yZWMgKnJlYyA9IGN0eC1cdTAwM2VvcGVuX3JlYztcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTMzMT1zdGF0aWMgaW50IHRsc19jbG9uZV9wbGFpbnRleHRfbXNnKHN0cnVjdCBzb2NrICpzaywgaW50IHJlcXVpcmVkKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMzM0LVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX3N3LmM6MzM1Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy0zMzYtXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVx1MDAzZW9wZW5fcmVjO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MzU1PXN0YXRpYyBzdHJ1Y3QgdGxzX3JlYyAqdGxzX2dldF9yZWMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMzU4LVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX3N3LmM6MzU5Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy0zNjAtXHRzdHJ1Y3Qgc2tfbXNnICptc2dfcGwsICptc2dfZW47XG4tLVxubmV0L3Rscy90bHNfc3cuYz0zOTY9c3RhdGljIHZvaWQgdGxzX2ZyZWVfb3Blbl9yZWMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMzk4LVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfc3cuYzozOTk6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTQwMC1cdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXHUwMDNlb3Blbl9yZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz00MDg9aW50IHRsc190eF9yZWNvcmRzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNDEwLVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfc3cuYzo0MTE6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTQxMi1cdHN0cnVjdCB0bHNfcmVjICpyZWMsICp0bXA7XG4tLVxubmV0L3Rscy90bHNfc3cuYz00Njc9c3RhdGljIHZvaWQgdGxzX2VuY3J5cHRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNDg0LVx0cHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfc3cuYzo0ODU6XHRjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy00ODYtXG4tLVxubmV0L3Rscy90bHNfc3cuYz02MTc9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy02MjEtXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfc3cuYzo2MjI6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTYyMy1cdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXHUwMDNlb3Blbl9yZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz03MTU9c3RhdGljIGludCB0bHNfc3dfcHVzaF9wZW5kaW5nX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTcxNy1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX3N3LmM6NzE4Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy03MTktXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVx1MDAzZW9wZW5fcmVjO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNzcxLVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX3N3LmM6NzcyOlx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy03NzMtXHRib29sIGFzeW5jX2NhcGFibGUgPSBjdHgtXHUwMDNlYXN5bmNfY2FwYWJsZTtcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTEwMzE9dm9pZCB0bHNfc3dfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTAzNC1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX3N3LmM6MTAzNTpcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX3N3LmMtMTAzNi1cdHN0cnVjdCB0bHNfcmVjICpyZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMjczPXZvaWQgdGxzX3N3X2NhbmNlbF93b3JrX3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjI3NC17XG5uZXQvdGxzL3Rsc19zdy5jOjIyNzU6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTIyNzYtXG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMjgyPXZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTIyODQtXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG5uZXQvdGxzL3Rsc19zdy5jOjIyODU6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTIyODYtXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjLCAqdG1wO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjMxNj12b2lkIHRsc19zd19mcmVlX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19zdy5jLTIzMTcte1xubmV0L3Rscy90bHNfc3cuYzoyMzE4Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy0yMzE5LVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjM3MT1zdGF0aWMgdm9pZCB0eF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjM4Mi1cbm5ldC90bHMvdGxzX3N3LmM6MjM4MzpcdGN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTIzODQtXHRpZiAodGVzdF9iaXQoQklUX1RYX0NMT1NJTkcsIFx1MDAyNmN0eC1cdTAwM2V0eF9iaXRtYXNrKSlcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTI0MTU9dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XG5uZXQvdGxzL3Rsc19zdy5jOjI0MTc6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnR4X2N0eCA9IHRsc19zd19jdHhfdHgoY3R4KTtcbm5ldC90bHMvdGxzX3N3LmMtMjQxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzMAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6CgoqKkV4YW1pbmluZyBUTFMgQ29udGV4dCBUcmFuc21pc3Npb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIFRMUyBjb250ZXh0IHRyYW5zbWlzc2lvbi4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGJvdGggYHRsc19zd19jdHhfdHhgIGFuZCBgdGxzX29mZmxvYWRfY3R4X3R4YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcywgc28gdW5kZXJzdGFuZGluZyB0aGVpciBvdXRwdXRzIGlzIGNyaXRpY2FsLgoKVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgaW5jbHVkZS9uZXQvdGxzLmhgIGhlYWRlciBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIGJvdGggZnVuY3Rpb25zLiBCeSBleGFtaW5pbmcgdGhlaXIgc2lnbmF0dXJlcywgcmV0dXJuIHR5cGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIGhlYWRlciwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiB0aGV5IGFyZSBjb21tdW5pY2F0aW5nIGJhY2sgdG8gdGhlIGNhbGxlciBhbmQgaG93IEkgc2hvdWxkIGludGVycHJldCB0aGVpciByZXR1cm5lZCB2YWx1ZXMgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3MgY29udGV4dC4gVGhpcyBzaG91bGQgaGVscCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N3X2N0eF90eHx0bHNfb2ZmbG9hZF9jdHhfdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaD0zODM9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKnRsc19zd19jdHhfcngoXG4tLVxuaW5jbHVkZS9uZXQvdGxzLmgtMzg4LVxuaW5jbHVkZS9uZXQvdGxzLmg6Mzg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICp0bHNfc3dfY3R4X3R4KFxuaW5jbHVkZS9uZXQvdGxzLmgtMzkwLVx0XHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxuaW5jbHVkZS9uZXQvdGxzLmg9Mzk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxuaW5jbHVkZS9uZXQvdGxzLmg6Mzk2OnRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5pbmNsdWRlL25ldC90bHMuaC0zOTcte1xuLS1cbmluY2x1ZGUvbmV0L3Rscy5oPTQwMT1zdGF0aWMgaW5saW5lIGJvb2wgdGxzX3N3X2hhc19jdHhfdHgoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3Rscy5oLTQxMC1cdFx0cmV0dXJuIGZhbHNlO1xuaW5jbHVkZS9uZXQvdGxzLmg6NDExOlx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpO1xuaW5jbHVkZS9uZXQvdGxzLmgtNDEyLX1cbi0tXG5pbmNsdWRlL25ldC90bHMuaD00MzM9c3RhdGljIGlubGluZSB2b2lkICpfX3Rsc19kcml2ZXJfY3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcbi0tXG5pbmNsdWRlL25ldC90bHMuaC00MzYtXHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG5pbmNsdWRlL25ldC90bHMuaDo0Mzc6XHRcdHJldHVybiB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCktXHUwMDNlZHJpdmVyX3N0YXRlO1xuaW5jbHVkZS9uZXQvdGxzLmgtNDM4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgVExTIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBUTFMgaGVhZGVyIGRlZmluaXRpb24sIHNwZWNpZmljYWxseSwgbGluZXMgMzgwIHRvIDQxMCB3aXRoaW4gYGluY2x1ZGUvbmV0L3Rscy5oYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0dXJlcyBvciBlbnVtcyBpbiB0aGVyZS4gRGVwZW5kaW5nIG9uIHdoYXQgdGhvc2UgbGluZXMgY29udGFpbiwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQsIGxpa2VseSBhdCBhIGxvdyBsZXZlbCwgaG93IHRoZSBUTFMgY29ubmVjdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyLCBvciBiZSBhYmxlIHRvIGluZmVyLCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIEJhc2VkIG9uIHRoZSBmaWxlIGxvY2F0aW9uLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjayBpbXBsZW1lbnRhdGlvbiBvZiBUTFMuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWFwIGhvdyB0aGUgVExTIHJlY29yZHMgYXJlIHBhcnNlZCBvciB0aGUgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG1zIHVzZWQgYXJlIHN0cnVjdHVyZWQuIFBlcmhhcHMgSSYjMzk7bGwgZmluZCBzb21lIGRlYnVnIHN5bWJvbHMgdGhhdCBJIGNhbiB1c2UgdG8gaW5zcGVjdCBpbiBmdXJ0aGVyIGRldGFpbC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHRyZXR1cm4gKF9fZm9yY2Ugdm9pZCAqKWljc2stXHUwMDNlaWNza191bHBfZGF0YTtcbiAzODE6XHR9XG4gMzgyOlx0XG4gMzgzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKnRsc19zd19jdHhfcngoXG4gMzg0Olx0XHRcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbiAzODU6XHR7XG4gMzg2Olx0XHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqKXRsc19jdHgtXHUwMDNlcHJpdl9jdHhfcng7XG4gMzg3Olx0fVxuIDM4ODpcdFxuIDM4OTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICp0bHNfc3dfY3R4X3R4KFxuIDM5MDpcdFx0XHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4gMzkxOlx0e1xuIDM5MjpcdFx0cmV0dXJuIChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKil0bHNfY3R4LVx1MDAzZXByaXZfY3R4X3R4O1xuIDM5MzpcdH1cbiAzOTQ6XHRcbiAzOTU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpcbiAzOTY6XHR0bHNfb2ZmbG9hZF9jdHhfdHgoY29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxuIDM5NzpcdHtcbiAzOTg6XHRcdHJldHVybiAoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKil0bHNfY3R4LVx1MDAzZXByaXZfY3R4X3R4O1xuIDM5OTpcdH1cbiA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgdGxzX3N3X2hhc19jdHhfdHgoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDQwMjpcdHtcbiA0MDM6XHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xuIDQwNDpcdFxuIDQwNTpcdFx0aWYgKCFza19pc19pbmV0KHNrKSB8fCAhaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzaykpXG4gNDA2Olx0XHRcdHJldHVybiBmYWxzZTtcbiA0MDc6XHRcbiA0MDg6XHRcdGN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiA0MDk6XHRcdGlmICghY3R4KVxuIDQxMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDExOlx0XHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCk7XG4gNDEyOlx0fVxuIDQxMzpcdFxuIDQxNDpcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF9yeChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gNDE1Olx0e1xuIDQxNjpcdFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHg7XG4gNDE3Olx0XG4gNDE4Olx0XHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcbiA0MTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTg3CgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDk0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaXNzdWUgd2FzIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHR5cGUgY29uZnVzaW9uIHdoZXJlIGBwcml2X2N0eF90eGAgd2FzIGJlaW5nIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgZXZlbiB3aGVuIGBjdHgtJmd0O3R4X2NvbmZgIHdhcyBzZXQgdG8gYFRMU19IV2AsIG1lYW5pbmcgaXQgc2hvdWxkIGhhdmUgYmVlbiBhIGBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eGAuIFRoaXMgbGVkIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGJlY2F1c2UgYG9wZW5fcmVjYCYjMzk7cyBvZmZzZXQgaXMgZGlmZmVyZW50IGluIHRoZSB0d28gc3RydWN0cywgb3IgcG90ZW50aWFsbHkgZmFpbGluZyB0byBjaGVjayB0aGUgaGFyZHdhcmUgb3BlbiByZWNvcmQuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgb3BlbiByZWNvcmQgYmFzZWQgb24gd2hldGhlciB0aGUgY29udGV4dCBpcyBzb2Z0d2FyZSAoYFRMU19TV2ApIG9yIGhhcmR3YXJlIChgVExTX0hXYCkuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBmaXggaW50cm9kdWNlIG9yIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgdGh1cyB3YXJyYW50aW5nIGEgYE5lZWRzS01TQU5gIHRhZz8gSSBkb24mIzM5O3QgdGhpbmsgc28uIExldCYjMzk7cyB3YWxrIHRocm91Z2ggdGhlIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUuIFRoaXMgaXMgYHNldHNvY2tvcHRgLCByZWNlaXZpbmcgZGF0YSBmcm9tIHVzZXJzcGFjZSwgbm90IHNlbmRpbmcgaXQuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZGVwZW5kZW5jZToqKiBgY3R4LSZndDt0eF9jb25mYCBpcyBpbml0aWFsaXplZCBkdXJpbmcgVExTIGNvbmZpZ3VyYXRpb24sIGFuZCBgb3Blbl9yZWNgL2BvcGVuX3JlY29yZGAgYXJlIHBvaW50ZXJzIGluaXRpYWxpemVkIGR1cmluZyBjb250ZXh0L3JlY29yZCBhbGxvY2F0aW9uLiBUaGUgbG9naWMgYnJhbmNoZXMgY29ycmVjdGx5IGJhc2VkIG9uIHRoZSBpbml0aWFsaXplZCBgY3R4LSZndDt0eF9jb25mYCB2YWx1ZS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyB0byBpbml0aWFsaXphdGlvbnMgYXJlIGhhcHBlbmluZyBoZXJlLgo0LiAgKipCb3VuZHMvTGVuZ3RoIGNoZWNrczoqKiBObywgdGhpcyBmaXggZG9lc24mIzM5O3QgYWZmZWN0IGFueSBib3VuZHMgb3IgbGVuZ3Rocywgb25seSB0aGUgY29ycmVjdCB0eXBlIGNoZWNrIGJlZm9yZSBwZXJtaXR0aW5nIGEgcGF5bG9hZCBsZW5ndGggY2hhbmdlLiBJdCBjb3JyZWN0cyB0eXBlIGNvbmZ1c2lvbiBhbmQgbWVtYmVyIGFjY2VzcyBpc3N1ZXMuCgpTbywgaW4gZXNzZW5jZSwgdGhlIGJ1ZyB3YXMgYSB0eXBlIGNvbmZ1c2lvbiBhbmQgbG9naWNhbCBlcnJvcuKAlGEgY2xhc3NpYyBLQVNBTi9VQlNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgbGF0dGVyLCB3aGlsZSBLQVNBTiBhbmQgdGhlIHVzdWFsIHN1aXRlIG9mIHRvb2xzIGNvdmVyIHRoZSBidWcgdGhpcyBwYXRjaCBjb3JyZWN0cy4gVGhlIG5ldyBoZWxwZXIgZnVuY3Rpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBvciBwb3RlbnRpYWwgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIHJlbWFpbiBgZmFsc2VgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHJlYXNvbmluZy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdHlwZSBjb25mdXNpb24sIHdoaWNoIGlzbiYjMzk7dCBLTVNBTiYjMzk7cyBkb21haW4uIFRoZSBwYXRjaCBjbGFyaWZpZXMgdGhlIGxvZ2ljIGFuZCBmaXhlcyB0aGUgdHlwZSBpc3N1ZS4gVGhpcyBwYXRjaCBpc24mIzM5O3QgYWJvdXQgS01TQU4tc3BlY2lmaWMgcHJvYmxlbXMgYW5kIGRvZXNuJiMzOTt0IHJldmVhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkga2VybmVsLXRvLXVzZXIgc3BhY2UgbGVha3MuIEFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB0eXBlIGNvbmZ1c2lvbiBpc3N1ZSBpbiBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oKWAgd2hlcmUgYGN0eC1cdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cdTAwM2V0eF9jb25mYC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB0eXBlIGNvbmZ1c2lvbiBpc3N1ZSBpbiBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oKWAgd2hlcmUgYGN0eC1cdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cdTAwM2V0eF9jb25mYC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OToyOC43OTg1NTMyNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2ODExNzI2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3NldHNvY2tvcHRcIixcbiAgICBcInRsc19zZXRfc3dfb2ZmbG9hZFwiLFxuICAgIFwidGxzX3NldF9kZXZpY2Vfb2ZmbG9hZFwiLFxuICAgIFwidGxzX3R4X3JlY29yZHNcIixcbiAgICBcInRsc19zd19zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVxcdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cXHUwMDNldHhfY29uZmAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVxcdTAwM2Vwcml2X2N0eF90eCB0byBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggd2l0aG91dCBjaGVja2luZyBjdHgtXFx1MDAzZXR4X2NvbmYsIHdoaWNoIGNhdXNlZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0eF9jb25mIHdhcyBUTFNfSFcuIEl0IGFkZHMgdGxzX3R4X3JlY29yZF9pc19vcGVuKCkgdG8gcHJvcGVybHkgY2hlY2sgb3BlbiByZWNvcmRzIGJhc2VkIG9uIHdoZXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgVExTIGlzIGNvbmZpZ3VyZWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBUTFMgc2V0c29ja29wdCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2VyIHNwYWNlIHNvY2tldCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OToyOC43OTg1NjAyODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDI0MTEzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NDU2ZjU5NjhkNjYzYWIyZjQyYTI3M2ViZmU1MjdmYjYxNzc2MmY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDAzOjQ5OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xcbmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0XFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXFxuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXFxuQEAgLTgzMywxNSArODMzLDI5IEBAIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbisvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xcbisgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cXG4rICovXFxuK3N0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4re1xcbitcXHRzd2l0Y2ggKGN0eC1cXHUwMDNldHhfY29uZikge1xcbitcXHRjYXNlIFRMU19TVzpcXG4rXFx0XFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlYztcXG4rXFx0Y2FzZSBUTFNfSFc6XFxuK1xcdFxcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlY29yZDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4tXFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpzd19jdHggPSB0bHNfc3dfY3R4X3R4KGN0eCk7XFxuIFxcdHUxNiB2YWx1ZTtcXG4gXFx0Ym9vbCB0bHNfMTMgPSBjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcXG4gXFxuLVxcdGlmIChzd19jdHggXFx1MDAyNlxcdTAwMjYgc3dfY3R4LVxcdTAwM2VvcGVuX3JlYylcXG4rXFx0aWYgKHRsc190eF9yZWNvcmRfaXNfb3BlbihjdHgpKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpIHx8IG9wdGxlbiAhPSBzaXplb2YodmFsdWUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozMC40MDE5NzU1NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYxNTc5Njc0MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ0bHNfc2V0X3N3X29mZmxvYWRcIixcbiAgICBcInRsc19zZXRfZGV2aWNlX29mZmxvYWRcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfc3dfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVxcdTAwM2Vwcml2X2N0eF90eCB0byBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggd2l0aG91dCBjaGVja2luZyBjdHgtXFx1MDAzZXR4X2NvbmYsIHdoaWNoIGNhdXNlZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0eF9jb25mIHdhcyBUTFNfSFcuIEl0IGFkZHMgdGxzX3R4X3JlY29yZF9pc19vcGVuKCkgdG8gcHJvcGVybHkgY2hlY2sgb3BlbiByZWNvcmRzIGJhc2VkIG9uIHdoZXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgVExTIGlzIGNvbmZpZ3VyZWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBUTFMgc2V0c29ja29wdCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2VyIHNwYWNlIHNvY2tldCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDU2ZjU5NjhkNjYzYWIyZjQyYTI3M2ViZmU1MjdmYjYxNzc2MmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDM6NDk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmNcbmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbisrKyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTgzMywxNSArODMzLDI5IEBAIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4rLyogcHJpdl9jdHhfdHggaG9sZHMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIG9uIGVhY2ggVFggcGF0aCwgc28gdHhfY29uZiBoYXMgdG9cbisgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cbisgKi9cbitzdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4re1xuK1x0c3dpdGNoIChjdHgtXHUwMDNldHhfY29uZikge1xuK1x0Y2FzZSBUTFNfU1c6XG4rXHRcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlYztcbitcdGNhc2UgVExTX0hXOlxuK1x0XHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlY29yZDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuLVx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpzd19jdHggPSB0bHNfc3dfY3R4X3R4KGN0eCk7XG4gXHR1MTYgdmFsdWU7XG4gXHRib29sIHRsc18xMyA9IGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiA9PSBUTFNfMV8zX1ZFUlNJT047XG4gXG4tXHRpZiAoc3dfY3R4IFx1MDAyNlx1MDAyNiBzd19jdHgtXHUwMDNlb3Blbl9yZWMpXG4rXHRpZiAodGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eCkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRpZiAoc29ja3B0cl9pc19udWxsKG9wdHZhbCkgfHwgb3B0bGVuICE9IHNpemVvZih2YWx1ZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozMC40MDE5NzgzMzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTc2NTY3NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUTFMgQ29kZSoqXG5cbkFscmlnaHQsIHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGF0J3MgYSBrZXkgYXJlYSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgY2hhbmdpbmcuIE15IGZpcnN0IG1vdmUgaXMgdG8gY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIGRpZmYgaXRzZWxmIOKAkyBJIG5lZWQgdG8gc2VlIHRoZSBsaW5lLWJ5LWxpbmUgYWx0ZXJhdGlvbnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIGFuZCBpbXBhY3QuIFRoZW4sIEknbGwgbmVlZCB0byByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBhcm91bmQgdGhvc2UgbW9kaWZpZWQgbGluZXMgaW4gYHRsc19tYWluLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWUgd2hlbiByZXZpZXdpbmcga2VybmVsIGNoYW5nZXMsIGVzcGVjaWFsbHkgaW4gc2VjdXJpdHktc2Vuc2l0aXZlIG1vZHVsZXMuXG5cblRvIGV4cGVkaXRlIHRoaXMsIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYC4gVGhlc2UgdG9vbHMgYXJlIGludmFsdWFibGUgZm9yIHF1aWNrbHkgbmF2aWdhdGluZyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29kZSwgbWFraW5nIHRoZSBhbmFseXNpcyBmYXIgbW9yZSBlZmZpY2llbnQuIFRoZXknbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYW55IGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBkZWZpbml0aW9ucywgb3IgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGltcGFjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozNi41Nzg1NDc5NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyMDpcXHRcXHRyYyA9IGNoZWNrX3plcm9lZF9zb2NrcHRyKG9wdHZhbCwgc2l6ZW9mKHZhbCksIG9wdGxlbiAtIHNpemVvZih2YWwpKTtcXG4gODIxOlxcdFxcdGlmIChyYyBcXHUwMDNjIDEpXFxuIDgyMjpcXHRcXHRcXHRyZXR1cm4gcmMgPT0gMCA/IC1FSU5WQUwgOiByYztcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gODI1OlxcdFxcdHJjID0gLUVJTlZBTDtcXG4gODI2OlxcdFxcdGlmIChjdHgtXFx1MDAzZXJ4X2NvbmYgPT0gVExTX1NXIHx8IGN0eC1cXHUwMDNlcnhfY29uZiA9PSBUTFNfSFcpIHtcXG4gODI3OlxcdFxcdFxcdGN0eC1cXHUwMDNlcnhfbm9fcGFkID0gdmFsO1xcbiA4Mjg6XFx0XFx0XFx0dGxzX3VwZGF0ZV9yeF96Y19jYXBhYmxlKGN0eCk7XFxuIDgyOTpcXHRcXHRcXHRyYyA9IDA7XFxuIDgzMDpcXHRcXHR9XFxuIDgzMTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRyZXR1cm4gcmM7XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdC8qIHByaXZfY3R4X3R4IGhvbGRzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBvbiBlYWNoIFRYIHBhdGgsIHNvIHR4X2NvbmYgaGFzIHRvXFxuIDgzNzpcXHQgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cXG4gODM4OlxcdCAqL1xcbiA4Mzk6XFx0c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbiA4NDA6XFx0e1xcbiA4NDE6XFx0XFx0c3dpdGNoIChjdHgtXFx1MDAzZXR4X2NvbmYpIHtcXG4gODQyOlxcdFxcdGNhc2UgVExTX1NXOlxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlYztcXG4gODQ0OlxcdFxcdGNhc2UgVExTX0hXOlxcbiA4NDU6XFx0XFx0XFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXFx1MDAzZW9wZW5fcmVjb3JkO1xcbiA4NDY6XFx0XFx0ZGVmYXVsdDpcXG4gODQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODQ4OlxcdFxcdH1cXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuIDg1MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gODUzOlxcdHtcXG4gODU0OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiA4NTU6XFx0XFx0dTE2IHZhbHVlO1xcbiA4NTY6XFx0XFx0Ym9vbCB0bHNfMTMgPSBjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0aWYgKHRsc190eF9yZWNvcmRfaXNfb3BlbihjdHgpKVxcbiA4NTk6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpIHx8IG9wdGxlbiAhPSBzaXplb2YodmFsdWUpKVxcbiA4NjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2dmFsdWUsIG9wdHZhbCwgc2l6ZW9mKHZhbHVlKSkpXFxuIDg2NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0aWYgKHZhbHVlIFxcdTAwM2MgVExTX01JTl9SRUNPUkRfU0laRV9MSU0gLSAodGxzXzEzID8gMSA6IDApIHx8XFxuIDg2ODpcXHRcXHQgICAgdmFsdWUgXFx1MDAzZSBUTFNfTUFYX1BBWUxPQURfU0laRSlcXG4gODY5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozNi41Nzg2ODUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3MjA3NTYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgVExTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiB0aGUgVExTIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIHRyYW5zbWlzc2lvbiBwYXlsb2FkIGxlbmd0aCBpcyBoYW5kbGVkLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgY2FsbCB0byBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIGFuZCBJJ2xsIHRyYWNlIGl0cyB1c2FnZSBiYWNrIHRvIHRoZSBgdGxzX21haW4uY2AgZmlsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgd2hlcmUgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cblxuT2YgY291cnNlLCBmaWd1cmluZyBvdXQgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBiZWhhdmlvdXIgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdG8gYWRqdXN0IGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBgbmV0L3Rscy9gIHNpdHVhdGlvbiwgc28gSSdsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciB0aGF0IGRpcmVjdG9yeS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFmZmVjdCB0aGUgY2FsbCB0byBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDExLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0MS45NTA3NjUxOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTY3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjQyLjE0NzM1NDY3MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzI0MTc1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiByZWFkaW5nIGBuZXQvdGxzL0tjb25maWdgLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUTFMgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBuZXQvdGxzL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBuaXR0eS1ncml0dHkgb2YgY29uZmlndXJpbmcgVExTIHN1cHBvcnQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gSSBuZWVkIHRvIHNlZSB3aGF0IGtub2JzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgb2YgY291cnNlIOKAkyB3aGljaCBmZWF0dXJlcyByZWx5IG9uIHdoaWNoIG90aGVycz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgc3BlY2lmaWMgVExTLXJlbGF0ZWQgb3B0aW9ucz8gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGJyb2tlbiBkb3duIGJ5IGNpcGhlciBzdWl0ZXMsIGtleSBleGNoYW5nZSBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBzb21lIGZpbmUtZ3JhaW5lZCBjb250cm9scyBvdmVyIGZlYXR1cmVzIGxpa2Ugc2Vzc2lvbiByZXN1bXB0aW9uIG9yIGhhcmR3YXJlIG9mZmxvYWRpbmcsIGlmIHRoZXkncmUgc3VwcG9ydGVkLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlJ3MgYW55IG5ldyBsb2dpYyBJJ3ZlIG5vdCBsb29rZWQgaW50byBiZWZvcmUsIG9yIGFueXRoaW5nIHRoYXQncyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzLiBBcmUgdGhlcmUgYW55IG5ldyBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQ/IEhhcyB0aGVyZSBiZWVuIGFueSBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgZmxleGliaWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhlIGV4aXN0aW5nIFRMUyBzdGFjaz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgdWx0aW1hdGUgdHJ1dGggb24gd2hhdCB0aGUga2VybmVsIGNhbiBkbyBhbmQgd2hhdCBJIGNhbiBlbmFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0NC4zMTk3NzQ3OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NDk6NDQuMzE5ODc5Mjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNzk1OTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZGlnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBhbHdheXMgdGhlIHNhbWU6IGxldCdzIHRyYWNlIGl0cyB1c2FnZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZXMuIEkgd2FudCB0byBzZWUgKmV2ZXJ5d2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBhcyB0aGlzIHNob3VsZCByZXZlYWwgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGl0IHBsYXlzIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHN1cnByaXNpbmcgY2FsbHMsIGFueSBvZGQgY29udHJvbCBmbG93cywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB0aGF0IG1pZ2h0IGp1bXAgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0Ni4zMjc4NDIxMzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzA2NTI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NTAtXFxubmV0L3Rscy90bHNfbWFpbi5jOjg1MTpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvdGxzL3Rsc19tYWluLmMtODUyLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTg3Nj1zdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5OTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTkwMC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0Ni41MDQ5MTMzMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NTk5MjUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBmYW1pbGlhciB3aXRoIGxvdy1sZXZlbCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgVExTOlxuXG4qKkRpZ2dpbmcgaW50byBUTFMgU29ja2V0IE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHVzaW5nIGBkb190bHNfc2V0c29ja29wdGAgb3IgYHRsc19zZXRzb2Nrb3B0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIHByZXR0eSBjbGVhciBpbmRpY2F0b3JzIG9mIG1hbmlwdWxhdGlvbiBvZiBzb2NrZXQgb3B0aW9ucyByZWxhdGVkIHRvIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBuZXh0IHN0ZXAgc2hvdWxkIGJlIGEgY29kZSBhdWRpdCBvZiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIGNhbGxzIGFuZCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGludGVudGlvbiBhbmQgcmVhc29uaW5nIGJlaGluZCB0aG9zZSBzb2NrZXQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0OC41ODA5MDg1OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDYzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3Rsc19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX21haW4uYz01OTg9c3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy02MjItXFxubmV0L3Rscy90bHNfbWFpbi5jOjYyMzpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC90bHMvdGxzX21haW4uYy02MjQtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuLCBpbnQgdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNzgzLVxcbm5ldC90bHMvdGxzX21haW4uYzo3ODQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTc4NS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTgwMy1cXG5uZXQvdGxzL3Rsc19tYWluLmM6ODA0OnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvdGxzL3Rsc19tYWluLmMtODA1LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODUwLVxcbm5ldC90bHMvdGxzX21haW4uYzo4NTE6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg1Mi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NzUtXFxubmV0L3Rscy90bHNfbWFpbi5jOjg3NjpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg3Ny1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODg0LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg4NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC90bHMvdGxzX21haW4uYy04ODYtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdG5hbWUgPT0gVExTX1RYKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04OTAtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6ODkxOlxcdFxcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtODkyLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk0LVxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC90bHMvdGxzX21haW4uYy04OTYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5OTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTkwMC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTkwOT1zdGF0aWMgaW50IHRsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy05MTctXFxubmV0L3Rscy90bHNfbWFpbi5jOjkxODpcXHRyZXR1cm4gZG9fdGxzX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtOTE5LX1cXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjUyNT1pbnQgdGxzX3NldF9zd19vZmZsb2FkKHN0cnVjdCBzb2NrICpzaywgaW50IHR4LFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yNjMzLVxcdFxcdFxcdCAgICAgIGNpcGhlcl9kZXNjLVxcdTAwM2VjcnlwdG9faW5mbyxcXG5uZXQvdGxzL3Rsc19zdy5jOjI2MzQ6XFx0XFx0XFx0ICAgICAgLyogc2l6ZSB3YXMgY2hlY2tlZCBpbiBkb190bHNfc2V0c29ja29wdF9jb25mICovKTtcXG5uZXQvdGxzL3Rsc19zdy5jLTI2MzUtXFx0XFx0bWVtemVyb19leHBsaWNpdChuZXdfY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVxcdTAwM2VjcnlwdG9faW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjQ4LjY3OTk3ODQ1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA1NDE4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgVExTIFNvY2tldCBPcHRpb25zIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBgdGxzYCBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHNwZWNpZmljYWxseSBgdGxzX3NldHNvY2tvcHRgIGFuZCBgdGxzX2luaXRgLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZXkncmUgY2VudHJhbCB0byBjb25maWd1cmluZyBhbmQgZXN0YWJsaXNoaW5nIHRoZSBUTFMgY29ubmVjdGlvbnMsIHdoaWNoIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIFdoZXJlIGFyZSB0aGV5IGJlaW5nIGNhbGxlZD8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IEFuZCB3aGF0LCBpZiBhbnl0aGluZywgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgdGhlc2UgZnVuY3Rpb25zPyBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYG5ldC90bHMvdGxzX21haW4uY2AgYXJvdW5kIHRoZSBgdGxzX3NldHNvY2tvcHRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEknbSBob3BpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9yY2hlc3RyYXRlZCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBUTFMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo1MC41ODUzOTk1MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gOTAxOlxcdFxcdFxcdGJyZWFrO1xcbiA5MDI6XFx0XFx0ZGVmYXVsdDpcXG4gOTAzOlxcdFxcdFxcdHJjID0gLUVOT1BST1RPT1BUO1xcbiA5MDQ6XFx0XFx0XFx0YnJlYWs7XFxuIDkwNTpcXHRcXHR9XFxuIDkwNjpcXHRcXHRyZXR1cm4gcmM7XFxuIDkwNzpcXHR9XFxuIDkwODpcXHRcXG4gOTA5OlxcdHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiA5MTA6XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiA5MTE6XFx0e1xcbiA5MTI6XFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIDkxMzpcXHRcXG4gOTE0OlxcdFxcdGlmIChsZXZlbCAhPSBTT0xfVExTKVxcbiA5MTU6XFx0XFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlc2tfcHJvdG8tXFx1MDAzZXNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsXFxuIDkxNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgb3B0bGVuKTtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0cmV0dXJuIGRvX3Rsc19zZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDkxOTpcXHR9XFxuIDkyMDpcXHRcXG4gOTIxOlxcdHN0YXRpYyBpbnQgdGxzX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuIDkyMjpcXHR7XFxuIDkyMzpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDkyNDpcXHR9XFxuIDkyNTpcXHRcXG4gOTI2OlxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrKVxcbiA5Mjc6XFx0e1xcbiA5Mjg6XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiA5Mjk6XFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHg7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgsIEdGUF9BVE9NSUMpO1xcbiA5MzI6XFx0XFx0aWYgKCFjdHgpXFxuIDkzMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTM0OlxcdFxcbiA5MzU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2V0eF9sb2NrKTtcXG4gOTM2OlxcdFxcdGN0eC1cXHUwMDNlc2tfcHJvdG8gPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbiA5Mzc6XFx0XFx0Y3R4LVxcdTAwM2VzayA9IHNrO1xcbiA5Mzg6XFx0XFx0LyogUmVsZWFzZSBzZW1hbnRpYyBvZiByY3VfYXNzaWduX3BvaW50ZXIoKSBlbnN1cmVzIHRoYXRcXG4gOTM5OlxcdFxcdCAqIGN0eC1cXHUwMDNlc2tfcHJvdG8gaXMgdmlzaWJsZSBiZWZvcmUgY2hhbmdpbmcgc2stXFx1MDAzZXNrX3Byb3QgaW5cXG4gOTQwOlxcdFxcdCAqIHVwZGF0ZV9za19wcm90KCksIGFuZCBwcmV2ZW50cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaW5cXG4gOTQxOlxcdFxcdCAqIHRsc197Z2V0c29ja29wdCwgc2V0c29ja29wdH0uIE5vdGUgdGhhdCB3ZSBkbyBub3QgbmVlZCBhXFxuIDk0MjpcXHRcXHQgKiByZWFkIGJhcnJpZXIgaW4gdGxzX3tnZXRzb2Nrb3B0LHNldHNvY2tvcHR9IGFzIHRoZXJlIGlzIGFuXFxuIDk0MzpcXHRcXHQgKiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBzay1cXHUwMDNlc2tfcHJvdG8tXFx1MDAzZXtnZXRzb2Nrb3B0LHNldHNvY2tvcHR9XFxuIDk0NDpcXHRcXHQgKiBhbmQgY3R4LVxcdTAwM2Vza19wcm90by5cXG4gOTQ1OlxcdFxcdCAqL1xcbiA5NDY6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGljc2stXFx1MDAzZWljc2tfdWxwX2RhdGEsIGN0eCk7XFxuIDk0NzpcXHRcXHRyZXR1cm4gY3R4O1xcbiA5NDg6XFx0fVxcbiA5NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjUwLjU4NTU1MzEzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTUxODQyOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRsc19zZXRzb2Nrb3B0YCBBc3NpZ25tZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBgdGxzX3NldHNvY2tvcHRgIGlzIGJlaW5nIGFzc29jaWF0ZWQgd2l0aCBlaXRoZXIgcHJvdG9jb2wtbGV2ZWwgb3Igc3BlY2lmaWMgc29ja2V0LWxldmVsIG9wZXJhdGlvbnMuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBwcm9iYWJseSBub3QgYSBzaW1wbGUsIG9uZS1zaXplLWZpdHMtYWxsIGFwcHJvYWNoLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB3aGVyZSBpdCBnZXRzIGNhbGxlZCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyB0aWVkIHRvIGEgKnNwZWNpZmljKiBzb2NrZXQgdmVyc3VzIGJlaW5nIGhhbmRsZWQgYXQgYSBicm9hZGVyLCBtb3JlIGdlbmVyaWMgcHJvdG9jb2wgbGV2ZWwuIElzIHRoZSBhc3NpZ25tZW50IGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCAoZS5nLiwgVENQLCBVRFApIG9yIFRMUyBpbXBsZW1lbnRhdGlvbj8gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGdvaW5nIHRvIHZhcnkgYWNyb3NzIHRoZSBsaWJyYXJ5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBzb2NrZXQgb3B0aW9ucyBhbmQgaG93IGB0bHNfc2V0c29ja29wdGAgbWlnaHQgYWZmZWN0IHRoZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBzZWN1cml0eSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGFyZSB3ZSB0YWxraW5nIGFib3V0IHBlci1zb2NrZXQgc2VjdXJpdHkgcGFyYW1ldGVycyBvciBnbG9iYWwgc2V0dGluZ3M/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjU0LjUzNzQwMDQyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzOTY3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX21haW4uYz01OTg9c3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy02MjItXFxubmV0L3Rscy90bHNfbWFpbi5jOjYyMzpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC90bHMvdGxzX21haW4uYy02MjQtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuLCBpbnQgdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNzgzLVxcbm5ldC90bHMvdGxzX21haW4uYzo3ODQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTc4NS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTgwMy1cXG5uZXQvdGxzL3Rsc19tYWluLmM6ODA0OnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvdGxzL3Rsc19tYWluLmMtODA1LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODUwLVxcbm5ldC90bHMvdGxzX21haW4uYzo4NTE6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg1Mi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NzUtXFxubmV0L3Rscy90bHNfbWFpbi5jOjg3NjpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg3Ny1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODg0LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg4NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC90bHMvdGxzX21haW4uYy04ODYtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdG5hbWUgPT0gVExTX1RYKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04OTAtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6ODkxOlxcdFxcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtODkyLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk0LVxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC90bHMvdGxzX21haW4uYy04OTYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5OTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTkwMC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTkwOC1cXG5uZXQvdGxzL3Rsc19tYWluLmM6OTA5OnN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC90bHMvdGxzX21haW4uYy05MTAtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTkxNy1cXG5uZXQvdGxzL3Rsc19tYWluLmM6OTE4OlxcdHJldHVybiBkb190bHNfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC90bHMvdGxzX21haW4uYy05MTktfVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTEwMTI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAxNS1cXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0gPSAqYmFzZTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdFxcdD0gdGxzX3NldHNvY2tvcHQ7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLmdldHNvY2tvcHRcXHQ9IHRsc19nZXRzb2Nrb3B0O1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yNTI1PWludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTI2MzMtXFx0XFx0XFx0ICAgICAgY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvLFxcbm5ldC90bHMvdGxzX3N3LmM6MjYzNDpcXHRcXHRcXHQgICAgICAvKiBzaXplIHdhcyBjaGVja2VkIGluIGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYgKi8pO1xcbm5ldC90bHMvdGxzX3N3LmMtMjYzNS1cXHRcXHRtZW16ZXJvX2V4cGxpY2l0KG5ld19jcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NDk6NTQuNzUxMzcyNjgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTcyNDI2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhwbG9yaW5nIFRMUyBhbmQgVUxQIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgd2l0aGluIFRMUyBhbmQgYHRsc19tYWluLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9yIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nIHdpdGhpbiB0aGUgVExTIHN0cnVjdHVyZSBpdHNlbGYuIEkgd2FudCB0byBleHBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW52aXJvbm1lbnQuXG5cbkkgc2hvdWxkIGV4YW1pbmUgYHRsc19tYWluLmNgIHNwZWNpZmljYWxseSwgYW5kIEknbGwgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIGBidWlsZF9wcm90b3NgIGFuZCBVTFAgcmVnaXN0cmF0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNwb3QgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NDk6NTcuMjQ4NjE5NTQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHQgICAgdW5saWtlbHkocHJvdCAhPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzYXZlZF90Y3B2NF9wcm90KSkpIHtcXG4xMDAxOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnRjcHY0X3Byb3RfbXV0ZXgpO1xcbjEwMDI6XFx0XFx0XFx0aWYgKGxpa2VseShwcm90ICE9IHNhdmVkX3RjcHY0X3Byb3QpKSB7XFxuMTAwMzpcXHRcXHRcXHRcXHRidWlsZF9wcm90b3ModGxzX3Byb3RzW1RMU1Y0XSwgcHJvdCk7XFxuMTAwNDpcXHRcXHRcXHRcXHRidWlsZF9wcm90b19vcHModGxzX3Byb3RvX29wc1tUTFNWNF0sXFxuMTAwNTpcXHRcXHRcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VvcHMpO1xcbjEwMDY6XFx0XFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNhdmVkX3RjcHY0X3Byb3QsIHByb3QpO1xcbjEwMDc6XFx0XFx0XFx0fVxcbjEwMDg6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0Y3B2NF9wcm90X211dGV4KTtcXG4xMDA5OlxcdFxcdH1cXG4xMDEwOlxcdH1cXG4xMDExOlxcdFxcbjEwMTI6XFx0c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXFxuMTAxMzpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvICpiYXNlKVxcbjEwMTQ6XFx0e1xcbjEwMTU6XFx0XFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdID0gKmJhc2U7XFxuMTAxNjpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdFxcdD0gdGxzX3NldHNvY2tvcHQ7XFxuMTAxNzpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZ2V0c29ja29wdFxcdD0gdGxzX2dldHNvY2tvcHQ7XFxuMTAxODpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZGlzY29ubmVjdFxcdD0gdGxzX2Rpc2Nvbm5lY3Q7XFxuMTAxOTpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uY2xvc2VcXHRcXHQ9IHRsc19za19wcm90b19jbG9zZTtcXG4xMDIwOlxcdFxcbjEwMjE6XFx0XFx0cHJvdFtUTFNfU1ddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG4xMDIyOlxcdFxcdHByb3RbVExTX1NXXVtUTFNfQkFTRV0uc2VuZG1zZ1xcdFxcdD0gdGxzX3N3X3NlbmRtc2c7XFxuMTAyMzpcXHRcXHRwcm90W1RMU19TV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcXHQ9IHRsc19zd19zcGxpY2VfZW9mO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xcbjEwMjY6XFx0XFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5yZWN2bXNnXFx0XFx0ICA9IHRsc19zd19yZWN2bXNnO1xcbjEwMjc6XFx0XFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4xMDI4OlxcdFxcdHByb3RbVExTX0JBU0VdW1RMU19TV10uY2xvc2VcXHRcXHQgID0gdGxzX3NrX3Byb3RvX2Nsb3NlO1xcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHRwcm90W1RMU19TV11bVExTX1NXXSA9IHByb3RbVExTX1NXXVtUTFNfQkFTRV07XFxuMTAzMTpcXHRcXHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXFx0XFx0PSB0bHNfc3dfcmVjdm1zZztcXG4xMDMyOlxcdFxcdHByb3RbVExTX1NXXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xcbjEwMzM6XFx0XFx0cHJvdFtUTFNfU1ddW1RMU19TV10uY2xvc2VcXHRcXHQ9IHRsc19za19wcm90b19jbG9zZTtcXG4xMDM0OlxcdFxcbjEwMzU6XFx0I2lmZGVmIENPTkZJR19UTFNfREVWSUNFXFxuMTAzNjpcXHRcXHRwcm90W1RMU19IV11bVExTX0JBU0VdID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xcbjEwMzc6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19CQVNFXS5zZW5kbXNnXFx0XFx0PSB0bHNfZGV2aWNlX3NlbmRtc2c7XFxuMTAzODpcXHRcXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcXHQ9IHRsc19kZXZpY2Vfc3BsaWNlX2VvZjtcXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19TV10gPSBwcm90W1RMU19CQVNFXVtUTFNfU1ddO1xcbjEwNDE6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19TV10uc2VuZG1zZ1xcdFxcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xcbjEwNDI6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19TV10uc3BsaWNlX2VvZlxcdFxcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xcbjEwNDM6XFx0XFxuMTA0NDpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfSFddID0gcHJvdFtUTFNfQkFTRV1bVExTX1NXXTtcXG4xMDQ1OlxcdFxcbjEwNDY6XFx0XFx0cHJvdFtUTFNfU1ddW1RMU19IV10gPSBwcm90W1RMU19TV11bVExTX1NXXTtcXG4xMDQ3OlxcdFxcbjEwNDg6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19IV10gPSBwcm90W1RMU19IV11bVExTX1NXXTtcXG4xMDQ5OlxcdCNlbmRpZlxcbjEwNTA6XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRzdGF0aWMgaW50IHRsc19pbml0KHN0cnVjdCBzb2NrICpzaylcXG4xMDUzOlxcdHtcXG4xMDU0OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xcbjEwNTU6XFx0XFx0aW50IHJjID0gMDtcXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0dGxzX2J1aWxkX3Byb3RvKHNrKTtcXG4xMDU4OlxcdFxcbjEwNTk6XFx0XFx0LyogVGhlIFRMUyB1bHAgaXMgY3VycmVudGx5IHN1cHBvcnRlZCBvbmx5IGZvciBUQ1Agc29ja2V0c1xcbjEwNjA6XFx0XFx0ICogaW4gRVNUQUJMSVNIRUQgc3RhdGUuXFxuMTA2MTpcXHRcXHQgKiBTdXBwb3J0aW5nIHNvY2tldHMgaW4gTElTVEVOIHN0YXRlIHdpbGwgcmVxdWlyZSB1c1xcbjEwNjI6XFx0XFx0ICogdG8gbW9kaWZ5IHRoZSBhY2NlcHQgaW1wbGVtZW50YXRpb24gdG8gY2xvbmUgcmF0aGVyIHRoZW5cXG4xMDYzOlxcdFxcdCAqIHNoYXJlIHRoZSB1bHAgY29udGV4dC5cXG4xMDY0OlxcdFxcdCAqL1xcbjEwNjU6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpXFxuMTA2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT1RDT05OO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHQvKiBhbGxvY2F0ZSB0bHMgY29udGV4dCAqL1xcbjEwNjk6XFx0XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xcbjEwNzA6XFx0XFx0Y3R4ID0gdGxzX2N0eF9jcmVhdGUoc2spO1xcbjEwNzE6XFx0XFx0aWYgKCFjdHgpIHtcXG4xMDcyOlxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4xMDczOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEwNzQ6XFx0XFx0fVxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHRjdHgtXFx1MDAzZXR4X2NvbmYgPSBUTFNfQkFTRTtcXG4xMDc3OlxcdFxcdGN0eC1cXHUwMDNlcnhfY29uZiA9IFRMU19CQVNFO1xcbjEwNzg6XFx0XFx0Y3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSBUTFNfTUFYX1BBWUxPQURfU0laRTtcXG4xMDc5OlxcdFxcdHVwZGF0ZV9za19wcm90KHNrLCBjdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo1Ny4yNDg3ODA4MDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYzOTA4MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBUTFMgUGF5bG9hZCBTaXplIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgbWF4aW11bSBwYXlsb2FkIHNpemUgZm9yIFRMUyB0cmFuc21pc3Npb25zLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYFRMU19UWF9NQVhfUEFZTE9BRF9TSVpFYCwgYW5kIEknbSBwcmV0dHkgc3VyZSB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGBUTFNfTUFYX1BBWUxPQURfU0laRWAgb3B0aW9uIHdoZW4gd2UncmUgdXNpbmcgYHNldHNvY2tvcHRgLiBKdXN0IHdhbnQgdG8gY29uZmlybSB0aGF0IG1hcHBpbmcuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBgb3B0bmFtZWAgdmFsdWVzIGluIGBkb190bHNfc2V0c29ja29wdGAg4oCTIGdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgb3B0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4gSSB3YW50IHRvIGNvbmZpcm0gSSdtIGRlYWxpbmcgd2l0aCB0aGUgY29ycmVjdCBzZXR0aW5nLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMzOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MDUuODg3ODY2OTA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDI4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXG4gODcxOlxcdFxcdGN0eC1cXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuID0gdmFsdWU7XFxuIDg3MjpcXHRcXG4gODczOlxcdFxcdHJldHVybiAwO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIDg3NzpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIDg3ODpcXHR7XFxuIDg3OTpcXHRcXHRpbnQgcmMgPSAwO1xcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gODgyOlxcdFxcdGNhc2UgVExTX1RYOlxcbiA4ODM6XFx0XFx0Y2FzZSBUTFNfUlg6XFxuIDg4NDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbiA4ODU6XFx0XFx0XFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbixcXG4gODg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XFxuIDg4NzpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA4ODg6XFx0XFx0XFx0YnJlYWs7XFxuIDg4OTpcXHRcXHRjYXNlIFRMU19UWF9aRVJPQ09QWV9STzpcXG4gODkwOlxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDg5MTpcXHRcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuIDg5MjpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA4OTM6XFx0XFx0XFx0YnJlYWs7XFxuIDg5NDpcXHRcXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxcbiA4OTU6XFx0XFx0XFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4gODk2OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTc6XFx0XFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxcbiA4OTg6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gODk5OlxcdFxcdFxcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4gOTAwOlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDkwMTpcXHRcXHRcXHRicmVhaztcXG4gOTAyOlxcdFxcdGRlZmF1bHQ6XFxuIDkwMzpcXHRcXHRcXHRyYyA9IC1FTk9QUk9UT09QVDtcXG4gOTA0OlxcdFxcdFxcdGJyZWFrO1xcbiA5MDU6XFx0XFx0fVxcbiA5MDY6XFx0XFx0cmV0dXJuIHJjO1xcbiA5MDc6XFx0fVxcbiA5MDg6XFx0XFxuIDkwOTpcXHRzdGF0aWMgaW50IHRsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MDUuODg5MTEzNjk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzU3NTc0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVExTIEJ1ZyBGaXggYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugc29tZW9uZSBhZGRlZCBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIHRvIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSd2ZSByZXBsYWNlZCBhIGRpcmVjdCwgdW5jaGVja2VkIGNhc3Qgb2YgYGN0eC1cdTAwM2Vwcml2X2N0eF90eGAgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCB3aXRoIGEgZnVuY3Rpb24gdGhhdCAqaW50ZWxsaWdlbnRseSogZGV0ZXJtaW5lcyBpZiB0aGUgcmVjb3JkIGlzIG9wZW4uIEJlZm9yZSwgdGhlIGNvZGUgd2FzIGltcGxpY2l0bHkgYXNzdW1pbmcgaXQgd2FzIGRlYWxpbmcgd2l0aCBzb2Z0d2FyZSBUTFMgKGBUTFNfU1dgKS4gTm93LCBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjYXNlIChgVExTX0hXYCkgYnkgY2hlY2tpbmcgYGN0eC1cdTAwM2V0eF9jb25mYC5cblxuVGhlIG9sZCBjb2RlIHdhcyBkb2luZyBhIGJsaW5kIGNhc3QgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCBldmVuIGlmIGhhcmR3YXJlIG9mZmxvYWQgd2FzIGVuYWJsZWQuIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgYWRkcmVzc2VzIHRoaXMgYnkgdXNpbmcgYSBgc3dpdGNoYCBzdGF0ZW1lbnQgdGhhdCBjaGVja3MgYGN0eC1cdTAwM2V0eF9jb25mYC4gRGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBzb2Z0d2FyZSBvciBoYXJkd2FyZSBUTFMsIGl0IGNhbGxzIHRoZSByaWdodCBmdW5jdGlvbiAoYHRsc19zd19jdHhfdHgoY3R4KWAgb3IgYHRsc19vZmZsb2FkX2N0eF90eChjdHgpYCkgdG8gZ2V0IHRoZSByZWxldmFudCBgb3Blbl9yZWNgIG9yIGBvcGVuX3JlY29yZGAgZmllbGQsIHJlc3BlY3RpdmVseS4gQ3J1Y2lhbGx5LCBpdCBoYW5kbGVzIHRoZSBgZGVmYXVsdGAgY2FzZSwgcmV0dXJuaW5nIGBmYWxzZWAgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdW5leHBlY3RlZC4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgZml4LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIGBUTFNfVFhfTUFYX1BBWUxPQURfTEVOYCBpcyB1c2VkLCBlc3BlY2lhbGx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBpbnZvbHZlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrOiBpcyB0aGlzIHNvbWV0aGluZyBJIGNhbiBmdXp6PyBBYnNvbHV0ZWx5LiBLZXJuZWwgVExTIChrdGxzKSBpcyBhIHByaW1lIHRhcmdldC4gSXQncyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3RhbmRhcmQgVENQIHNvY2tldHMgYW5kIGBzZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfVUxQYCAtXHUwMDNlIFwidGxzXCIgYW5kIGBzZXRzb2Nrb3B0KFNPTF9UTFMsIC4uLilgLiBUaGF0J3MgZWFzeSB0byBzZXQgdXAsIGVhc3kgdG8gcmVwcm9kdWNlIGluIFFFTVUgb3IgR0NFLCBhbmQgc29mdHdhcmUgVExTIGlzIHN0YW5kYXJkLiBJZiB0aGVyZSBhcmUgYW55IGR1bW15IG9yIGVtdWxhdGVkIGhhcmR3YXJlIG9mZmxvYWQgZGV2aWNlcywgdGhvc2Ugd291bGQgYmUgZ3JlYXQgdG9vLCBidXQgc29mdHdhcmUgVExTIGlzIGxpa2VseSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgZml4IGFsc28gaW52b2x2ZXMgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gLCBzbyB0aGF0J3MgYW5vdGhlciB2ZWN0b3IgSSBzaG91bGQgY29uc2lkZXIuXG5cbk5leHQgc3RlcDogSSBzaG91bGQgY2hlY2sgd2hlcmUgZWxzZSBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCwgYG9wZW5fcmVjb3JkYCwgb3IgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gIGFyZSB1c2VkIGluIHRoZSBjb2RlIGJhc2UuIFRoYXQgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBjb250cm9sIGZsb3dzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjEwLjc2NDg3NDYwMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNTA3MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wZW5fcmVjb3JkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzLmg9Mjc1PXN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHMuaC0yNzktXFxubmV0L3Rscy90bHMuaDoyODA6c3RhdGljIGlubGluZSBib29sIHRsc19pc19wZW5kaW5nX29wZW5fcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG5uZXQvdGxzL3Rscy5oLTI4MS17XFxubmV0L3Rscy90bHMuaDoyODI6XFx0cmV0dXJuIHRsc19jdHgtXFx1MDAzZXBlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3M7XFxubmV0L3Rscy90bHMuaC0yODMtfVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MTk3PXZvaWQgdGxzX2RldmljZV9za19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDQtXFx0aWYgKHRsc19jdHgtXFx1MDAzZXR4X2NvbmYgPT0gVExTX0hXKSB7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjA1OlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wZW5fcmVjb3JkKVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjIwNjpcXHRcXHRcXHRkZXN0cm95X3JlY29yZChjdHgtXFx1MDAzZW9wZW5fcmVjb3JkKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDctXFx0XFx0ZGVsZXRlX2FsbF9yZWNvcmRzKGN0eCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0yNzk9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjkxLVxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZyZWNvcmQtXFx1MDAzZWxpc3QsIFxcdTAwMjZvZmZsb2FkX2N0eC1cXHUwMDNlcmVjb3Jkc19saXN0KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyOTI6XFx0b2ZmbG9hZF9jdHgtXFx1MDAzZW9wZW5fcmVjb3JkID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yOTMtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0zNDI9c3RhdGljIGludCB0bHNfY3JlYXRlX25ld19yZWNvcmQoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzYxLVxcdHJlY29yZC1cXHUwMDNlbGVuID0gcHJlcGVuZF9zaXplO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjM2MjpcXHRvZmZsb2FkX2N0eC1cXHUwMDNlb3Blbl9yZWNvcmQgPSByZWNvcmQ7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzYzLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzY2PXN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzcyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjM3MzpcXHRpZiAoIW9mZmxvYWRfY3R4LVxcdTAwM2VvcGVuX3JlY29yZCkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTM3NC1cXHRcXHRpZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVmaWxsKHByZXBlbmRfc2l6ZSwgcGZyYWcsXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQzMi1cXHRzaXplX3Qgb3JpZ19zaXplID0gc2l6ZTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0MzM6XFx0dTMyIG1heF9vcGVuX3JlY29yZF9sZW47XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDM0LVxcdGJvb2wgbW9yZSA9IGZhbHNlO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDY0LVxcdCAqL1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ2NTpcXHRtYXhfb3Blbl9yZWNvcmRfbGVuID0gdGxzX2N0eC1cXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuICtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjYtXFx0XFx0XFx0ICAgICAgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDczLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ3NDpcXHRcXHRcXHRyZWNvcmQgPSBjdHgtXFx1MDAzZW9wZW5fcmVjb3JkO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ3NS1cXHRcXHRcXHRpZiAoIXJlY29yZClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ4NC1cXHRcXHRcXHRcXHRkZXN0cm95X3JlY29yZChyZWNvcmQpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ4NTpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZW9wZW5fcmVjb3JkID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00ODYtXFx0XFx0XFx0fSBlbHNlIGlmIChyZWNvcmQtXFx1MDAzZWxlbiBcXHUwMDNlIHByb3QtXFx1MDAzZXByZXBlbmRfc2l6ZSkge1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDkyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ5MzpcXHRcXHRyZWNvcmQgPSBjdHgtXFx1MDAzZW9wZW5fcmVjb3JkO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ5NC1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0OTU6XFx0XFx0Y29weSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgbWF4X29wZW5fcmVjb3JkX2xlbiAtIHJlY29yZC1cXHUwMDNlbGVuKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00OTYtXFx0XFx0aWYgKGNvcHkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykpIHtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU0Mi1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NDM6XFx0XFx0aWYgKGRvbmUgfHwgcmVjb3JkLVxcdTAwM2VsZW4gXFx1MDAzZT0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU0NC1cXHRcXHQgICAgKHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzIFxcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSkge1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTU3LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU1ODpcXHR0bHNfY3R4LVxcdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gbW9yZTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NTktXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz01OTM9dm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU5OS1cXHRpZiAoIXRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo2MDA6XFx0ICAgICF0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSlcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjA2LVxcdGlmICh0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIHx8XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NjA3OlxcdCAgICB0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwOC1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9MTY4PWludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjI1LVxcbm5ldC90bHMvdGxzX21haW4uYzoyMjY6c3RhdGljIGludCB0bHNfaGFuZGxlX29wZW5fcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbm5ldC90bHMvdGxzX21haW4uYy0yMjcte1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTIyOS1cXG5uZXQvdGxzL3Rsc19tYWluLmM6MjMwOlxcdGlmICh0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZChjdHgpKVxcbm5ldC90bHMvdGxzX21haW4uYy0yMzEtXFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlcHVzaF9wZW5kaW5nX3JlY29yZChzaywgZmxhZ3MpO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTIzNj1pbnQgdGxzX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0yNTctXFxubmV0L3Rscy90bHNfbWFpbi5jOjI1ODpcXHRcXHRcXHRyYyA9IHRsc19oYW5kbGVfb3Blbl9yZWNvcmQoc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtMjU5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTMzOD1zdGF0aWMgdm9pZCB0bHNfc2tfcHJvdG9fY2xlYW51cChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMzQyLVxcdCAgICAhd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzaywgXFx1MDAyNnRpbWVvKSlcXG5uZXQvdGxzL3Rsc19tYWluLmM6MzQzOlxcdFxcdHRsc19oYW5kbGVfb3Blbl9yZWNvcmQoc2ssIDApO1xcbm5ldC90bHMvdGxzX21haW4uYy0zNDQtXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NDQtXFx0Y2FzZSBUTFNfSFc6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg0NTpcXHRcXHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cXHUwMDNlb3Blbl9yZWNvcmQ7XFxubmV0L3Rscy90bHNfbWFpbi5jLTg0Ni1cXHRkZWZhdWx0Olxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz02MTc9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTY4Ni1cXG5uZXQvdGxzL3Rsc19zdy5jOjY4NzpcXHR0bHNfY3R4LVxcdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gZmFsc2U7XFxubmV0L3Rscy90bHNfc3cuYy02ODgtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTc2Nj1zdGF0aWMgaW50IHRsc19zd19zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtODYxLVxcdFxcdFxcdFxcdGdvdG8gc2VuZF9lbmQ7XFxubmV0L3Rscy90bHNfc3cuYzo4NjI6XFx0XFx0XFx0dGxzX2N0eC1cXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IHRydWU7XFxubmV0L3Rscy90bHNfc3cuYy04NjMtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTk0Mi1cXHRcXHQgKi9cXG5uZXQvdGxzL3Rsc19zdy5jOjk0MzpcXHRcXHR0bHNfY3R4LVxcdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gdHJ1ZTtcXG5uZXQvdGxzL3Rsc19zdy5jLTk0NC1cXHRcXHRjb3BpZWQgKz0gdHJ5X3RvX2NvcHk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjExLjI4NjM5MDExM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDU0MDEwODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVExTIFNvY2tldCBPcHRpb24gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBUTFMgc29ja2V0IG9wdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhlIHRyYWNlIHNob3dzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgYmVpbmcgY2FsbGVkIGZyb20gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgcmVsYXRlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCB0byBgdGxzX3NldHNvY2tvcHRgLiBSaWdodCwgaGVyZSB3ZSBnby4uLlxuXG5Mb29rcyBsaWtlIGB0bHNfc2V0c29ja29wdGAgaXMgdGhlIGNvcmUsIGFuZCBJIHNlZSBpdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0J3MgY29uZmluZWQgdG8gYHRsc19tYWluLmNgLCB3aGljaCBtYWtlcyB0aGluZ3MgYSBiaXQgc2ltcGxlciBmb3Igbm93LiBPa2F5LCBgdGxzX3NldHNvY2tvcHRgIGlzIGFzc2lnbmVkIHRvIGBwcm90LVx1MDAzZXNldHNvY2tvcHRgLCB3aGljaCBnaXZlcyB1cyBhIHdheSBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIG91dCBhbmQgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBlbnRyeXBvaW50cyBhbmQga2V5IHN5bWJvbHMgaW4gYG5ldC90bHMvdGxzX21haW4uY2AgYW5kIHBvdGVudGlhbGx5IG90aGVyIFRMUyBmaWxlcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZpbGUgb3ZlcnZpZXcsIGNoZWNraW5nIGFsbCBmdW5jdGlvbnMvZmlsZXMgaW4gYG5ldC90bHMvYC4gVGhhdCB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhpcyBzb2NrZXQgb3B0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUTFMgaW1wbGVtZW50YXRpb24uIEknbGwgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBvbmNlIEkgZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBhdmFpbGFibGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MTQuMzQwNDA0MDg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxNDUxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB0bHNffF52b2lkIHRsc19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHMuaD0xMzk9c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4X2NyZWF0ZShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTQwOnZvaWQgdGxzX2N0eF9mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xcbm5ldC90bHMvdGxzLmgtMTQxLXZvaWQgdXBkYXRlX3NrX3Byb3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XFxuLS1cXG5uZXQvdGxzL3Rscy5oPTE0Mz1pbnQgd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvKTtcXG5uZXQvdGxzL3Rscy5oOjE0NDp2b2lkIHRsc19lcnJfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcXG5uZXQvdGxzL3Rscy5oOjE0NTp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpO1xcbm5ldC90bHMvdGxzLmgtMTQ2LVxcbm5ldC90bHMvdGxzLmg9MTQ3PWludCBpbml0X3Byb3RfaW5mbyhzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCxcXG4tLVxcbm5ldC90bHMvdGxzLmgtMTQ5LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjKTtcXG5uZXQvdGxzL3Rscy5oOjE1MDppbnQgdGxzX3NldF9zd19vZmZsb2FkKHN0cnVjdCBzb2NrICpzaywgaW50IHR4LFxcbm5ldC90bHMvdGxzLmgtMTUxLVxcdFxcdCAgICAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpuZXdfY3J5cHRvX2luZm8pO1xcbm5ldC90bHMvdGxzLmg6MTUyOnZvaWQgdGxzX3VwZGF0ZV9yeF96Y19jYXBhYmxlKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNTM6dm9pZCB0bHNfc3dfc3RycGFyc2VyX2FybShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KTtcXG5uZXQvdGxzL3Rscy5oOjE1NDp2b2lkIHRsc19zd19zdHJwYXJzZXJfZG9uZShzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xcbm5ldC90bHMvdGxzLmg6MTU1OmludCB0bHNfc3dfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbm5ldC90bHMvdGxzLmg6MTU2OnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L3Rscy90bHMuaDoxNTc6dm9pZCB0bHNfc3dfY2FuY2VsX3dvcmtfdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KTtcXG5uZXQvdGxzL3Rscy5oOjE1ODp2b2lkIHRsc19zd19yZWxlYXNlX3Jlc291cmNlc190eChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTU5OnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNjA6dm9pZCB0bHNfc3dfZnJlZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvdGxzL3Rscy5oOjE2MTp2b2lkIHRsc19zd19yZWxlYXNlX3Jlc291cmNlc19yeChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTYyOnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNjM6aW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC90bHMvdGxzLmgtMTY0LVxcdFxcdCAgIGludCBmbGFncyk7XFxuLS1cXG5uZXQvdGxzL3Rscy5oPTE2Nj1zc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvdGxzL3Rscy5oLTE2OC1cXHRcXHRcXHQgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbm5ldC90bHMvdGxzLmg6MTY5OmludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxubmV0L3Rscy90bHMuaC0xNzAtXFx0XFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XFxubmV0L3Rscy90bHMuaC0xNzEtXFxubmV0L3Rscy90bHMuaDoxNzI6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbm5ldC90bHMvdGxzLmg6MTczOnZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC90bHMvdGxzLmg6MTc0OmludCB0bHNfdHhfcmVjb3JkcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7XFxubmV0L3Rscy90bHMuaC0xNzUtXFxubmV0L3Rscy90bHMuaDoxNzY6dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XFxubmV0L3Rscy90bHMuaDoxNzc6dm9pZCB0bHNfZGV2aWNlX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xcbm5ldC90bHMvdGxzLmgtMTc4LVxcbm5ldC90bHMvdGxzLmg6MTc5OmludCB0bHNfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC90bHMvdGxzLmgtMTgwLVxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpO1xcbm5ldC90bHMvdGxzLmg9MTgxPWludCBkZWNyeXB0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dvdXQpO1xcbm5ldC90bHMvdGxzLmgtMTgyLVxcbm5ldC90bHMvdGxzLmg6MTgzOmludCB0bHNfc3dfZmFsbGJhY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHMuaC0xODQtXFx0XFx0XFx0IHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzLmgtMTg2LVxcbm5ldC90bHMvdGxzLmg6MTg3OmludCB0bHNfc3RycF9kZXZfaW5pdCh2b2lkKTtcXG5uZXQvdGxzL3Rscy5oOjE4ODp2b2lkIHRsc19zdHJwX2Rldl9leGl0KHZvaWQpO1xcbm5ldC90bHMvdGxzLmgtMTg5LVxcbm5ldC90bHMvdGxzLmg6MTkwOnZvaWQgdGxzX3N0cnBfZG9uZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxubmV0L3Rscy90bHMuaC0xOTEtdm9pZCBfX3Rsc19zdHJwX2RvbmUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmg6MTkyOnZvaWQgdGxzX3N0cnBfc3RvcChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxubmV0L3Rscy90bHMuaDoxOTM6aW50IHRsc19zdHJwX2luaXQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3Rscy90bHMuaDoxOTQ6dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG5uZXQvdGxzL3Rscy5oLTE5NS1cXG5uZXQvdGxzL3Rscy5oOjE5Njp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSk7XFxubmV0L3Rscy90bHMuaDoxOTc6dm9pZCB0bHNfc3RycF9tc2dfY29uc3VtZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxubmV0L3Rscy90bHMuaC0xOTgtXFxubmV0L3Rscy90bHMuaDoxOTk6aW50IHRsc19yeF9tc2dfc2l6ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L3Rscy90bHMuaDoyMDA6dm9pZCB0bHNfcnhfbXNnX21heWJlX2Fubm91bmNlKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG5uZXQvdGxzL3Rscy5oLTIwMS1cXG5uZXQvdGxzL3Rscy5oPTIwMj1ib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpO1xcbm5ldC90bHMvdGxzLmg6MjAzOmludCB0bHNfc3RycF9tc2dfY293KHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KTtcXG5uZXQvdGxzL3Rscy5oLTIwNC1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCk7XFxubmV0L3Rscy90bHMuaDoyMDU6aW50IHRsc19zdHJwX21zZ19ob2xkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpkc3QpO1xcbm5ldC90bHMvdGxzLmgtMjA2LVxcbi0tXFxubmV0L3Rscy90bHMuaD0yMjU9c3RhdGljIGlubGluZSBib29sIHRsc19zdHJwX21zZ19taXhlZF9kZWNyeXB0ZWQoc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rscy5oLTIzMC0jaWZkZWYgQ09ORklHX1RMU19ERVZJQ0VcXG5uZXQvdGxzL3Rscy5oOjIzMTppbnQgdGxzX2RldmljZV9pbml0KHZvaWQpO1xcbm5ldC90bHMvdGxzLmg6MjMyOnZvaWQgdGxzX2RldmljZV9jbGVhbnVwKHZvaWQpO1xcbm5ldC90bHMvdGxzLmg6MjMzOmludCB0bHNfc2V0X2RldmljZV9vZmZsb2FkKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3Rscy90bHMuaDoyMzQ6dm9pZCB0bHNfZGV2aWNlX2ZyZWVfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3Rscy90bHMuaDoyMzU6aW50IHRsc19zZXRfZGV2aWNlX29mZmxvYWRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XFxubmV0L3Rscy90bHMuaDoyMzY6dm9pZCB0bHNfZGV2aWNlX29mZmxvYWRfY2xlYW51cF9yeChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MjM3OnZvaWQgdGxzX2RldmljZV9yeF9yZXN5bmNfbmV3X3JlYyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiByY2RfbGVuLCB1MzIgc2VxKTtcXG5uZXQvdGxzL3Rscy5oOjIzODppbnQgdGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xcbm5ldC90bHMvdGxzLmgtMjM5LSNlbHNlXFxuLS1cXG5uZXQvdGxzL3Rscy5oPTI2Mj10bHNfZGV2aWNlX2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4tLVxcbm5ldC90bHMvdGxzLmgtMjY3LVxcbm5ldC90bHMvdGxzLmg6MjY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxcbm5ldC90bHMvdGxzLmgtMjY5LVxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHUxNiBmaXJzdF9vZmZzZXQsXFxubmV0L3Rscy90bHMuaC0yNzAtXFx0XFx0aW50IGZsYWdzKTtcXG5uZXQvdGxzL3Rscy5oOjI3MTppbnQgdGxzX3B1c2hfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcXG5uZXQvdGxzL3Rscy5oLTI3Mi1cXHRcXHRcXHQgICAgaW50IGZsYWdzKTtcXG5uZXQvdGxzL3Rscy5oOjI3Mzp2b2lkIHRsc19mcmVlX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xcbm5ldC90bHMvdGxzLmgtMjc0LVxcbi0tXFxubmV0L3Rscy90bHMuaD0zNjQ9c3RhdGljIGlubGluZVxcbm5ldC90bHMvdGxzLmg6MzY1OnZvaWQgdGxzX21ha2VfYWFkKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNoYXIgKnJlY29yZF9zZXF1ZW5jZSxcXG5uZXQvdGxzL3Rscy5oLTM2Ni1cXHRcXHQgIHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUsIHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90KVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MTYyPXN0YXRpYyB2b2lkIHRsc190Y3BfY2xlYW5fYWNrZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrZWRfc2VxKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTk2LSAqL1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjE5Nzp2b2lkIHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OC17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0yMTQ9RVhQT1JUX1NZTUJPTF9HUEwodGxzX2RldmljZV9za19kZXN0cnVjdCk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjE1LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjIxNjp2b2lkIHRsc19kZXZpY2VfZnJlZV9yZXNvdXJjZXNfdHgoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTIxNy17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMjItXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjIzOnZvaWQgdGxzX29mZmxvYWRfdHhfcmVzeW5jX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCB1MzIgZ290X3NlcSwgdTMyIGV4cF9zZXEpXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjI0LXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY1LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU2NjppbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01Njcte1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTkyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU5Mzp2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU5NC17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODMtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6Njg0OnZvaWQgdGxzX2RldmljZV93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTY4NS17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz03MTY9dGxzX2RldmljZV9yeF9yZXN5bmNfYXN5bmMoc3RydWN0IHRsc19vZmZsb2FkX3Jlc3luY19hc3luYyAqcmVzeW5jX2FzeW5jLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNzcyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjc3Mzp2b2lkIHRsc19kZXZpY2VfcnhfcmVzeW5jX25ld19yZWMoc3RydWN0IHNvY2sgKnNrLCB1MzIgcmNkX2xlbiwgdTMyIHNlcSlcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy03NzQte1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9ODg2PXRsc19kZXZpY2VfcmVlbmNyeXB0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtOTc2LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjk3NzppbnQgdGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtOTc4LXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTEwNDE9c3RhdGljIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICphbGxvY19vZmZsb2FkX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTEwNjQtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTA2NTppbnQgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTA2Ni17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTk0LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjExOTU6aW50IHRsc19zZXRfZGV2aWNlX29mZmxvYWRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTk2LXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTEyNzAtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTI3MTp2b2lkIHRsc19kZXZpY2Vfb2ZmbG9hZF9jbGVhbnVwX3J4KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMjcyLXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jPTQzND1FWFBPUlRfU1lNQk9MX0dQTCh0bHNfZW5jcnlwdF9za2IpO1xcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTQzNS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYzo0MzY6aW50IHRsc19zd19mYWxsYmFja19pbml0KHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy00MzctXFx0XFx0XFx0IHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMzk9aW50IHdhaXRfb25fcGVuZGluZ193cml0ZXIoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lbylcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xNjctXFxubmV0L3Rscy90bHNfbWFpbi5jOjE2ODppbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX21haW4uYy0xNjktXFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9MjI2PXN0YXRpYyBpbnQgdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0yMzUtXFxubmV0L3Rscy90bHNfbWFpbi5jOjIzNjppbnQgdGxzX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvdGxzL3Rsc19tYWluLmMtMjM3LVxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjY3LVxcbm5ldC90bHMvdGxzX21haW4uYzoyNjg6aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxubmV0L3Rscy90bHNfbWFpbi5jLTI2OS1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTI4MC1cXG5uZXQvdGxzL3Rsc19tYWluLmM6MjgxOnZvaWQgdGxzX2ZyZWVfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG5uZXQvdGxzL3Rsc19tYWluLmMtMjgyLXtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0yOTI9c3RhdGljIHZvaWQgdGxzX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0zMjItICovXFxubmV0L3Rscy90bHNfbWFpbi5jOjMyMzp2b2lkIHRsc19jdHhfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX21haW4uYy0zMjQte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTE0PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdGxzX3N0cnBfd3E7XFxubmV0L3Rscy90bHNfc3RycC5jLTE1LVxcbm5ldC90bHMvdGxzX3N0cnAuYzoxNjp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXFxubmV0L3Rscy90bHNfc3RycC5jLTE3LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz04NT1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xMTktICovXFxubmV0L3Rscy90bHNfc3RycC5jOjEyMDppbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTIxLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xNDQtICovXFxubmV0L3Rscy90bHNfc3RycC5jOjE0NTppbnQgdGxzX3N0cnBfbXNnX2hvbGQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmX2hlYWQgKmRzdClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTQ2LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01MTM9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xcbm5ldC90bHMvdGxzX3N0cnAuYzo1NTc6dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXFxubmV0L3Rscy90bHNfc3RycC5jLTU1OC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTY4LS8qIExvd2VyIHNvY2sgbG9jayBoZWxkICovXFxubmV0L3Rscy90bHNfc3RycC5jOjU2OTp2b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTU3MC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTg2PXN0YXRpYyB2b2lkIHRsc19zdHJwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTYwMC0gKi9cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjAxOnZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTYwMi17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjE0LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo2MTU6dm9pZCB0bHNfc3RycF9zdG9wKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbm5ldC90bHMvdGxzX3N0cnAuYy02MTYte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTYxOS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjIwOmludCB0bHNfc3RycF9pbml0KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3Rscy90bHNfc3RycC5jLTYyMS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjM3LSAqL1xcbm5ldC90bHMvdGxzX3N0cnAuYzo2Mzg6dm9pZCB0bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbm5ldC90bHMvdGxzX3N0cnAuYy02Mzkte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTY1Mj1pbnQgX19pbml0IHRsc19zdHJwX2Rldl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjYwLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo2NjE6dm9pZCB0bHNfc3RycF9kZXZfZXhpdCh2b2lkKVxcbm5ldC90bHMvdGxzX3N0cnAuYy02NjIte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0zOTY9c3RhdGljIHZvaWQgdGxzX2ZyZWVfb3Blbl9yZWMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy00MDctXFxubmV0L3Rscy90bHNfc3cuYzo0MDg6aW50IHRsc190eF9yZWNvcmRzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbm5ldC90bHMvdGxzX3N3LmMtNDA5LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xMDA3LVxcbm5ldC90bHMvdGxzX3N3LmM6MTAwODppbnQgdGxzX3N3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC90bHMvdGxzX3N3LmMtMTAwOS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTEwMzAtICovXFxubmV0L3Rscy90bHNfc3cuYzoxMDMxOnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvdGxzL3Rsc19zdy5jLTEwMzIte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0xODAwPXN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTE4MDUtXFxubmV0L3Rscy90bHNfc3cuYzoxODA2OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfc3cuYy0xODA3LVxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTk5OT1zc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMDcyLVxcbm5ldC90bHMvdGxzX3N3LmM6MjA3MzppbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbm5ldC90bHMvdGxzX3N3LmMtMjA3NC1cXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMTc1PWJvb2wgdGxzX3N3X3NvY2tfaXNfcmVhZGFibGUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMTgzLVxcbm5ldC90bHMvdGxzX3N3LmM6MjE4NDppbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC90bHMvdGxzX3N3LmMtMjE4NS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIyNDYtICovXFxubmV0L3Rscy90bHNfc3cuYzoyMjQ3OnZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdy5jLTIyNDgte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMjU5PXN0YXRpYyB2b2lkIHRsc19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjI3Mi1cXG5uZXQvdGxzL3Rsc19zdy5jOjIyNzM6dm9pZCB0bHNfc3dfY2FuY2VsX3dvcmtfdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjI3NC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIyODEtXFxubmV0L3Rscy90bHNfc3cuYzoyMjgyOnZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvdGxzL3Rsc19zdy5jLTIyODMte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMzE1LVxcbm5ldC90bHMvdGxzX3N3LmM6MjMxNjp2b2lkIHRsc19zd19mcmVlX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yMzE3LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjMyMi1cXG5uZXQvdGxzL3Rsc19zdy5jOjIzMjM6dm9pZCB0bHNfc3dfcmVsZWFzZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX3N3LmMtMjMyNC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIzNDMtXFxubmV0L3Rscy90bHNfc3cuYzoyMzQ0OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9kb25lKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG5uZXQvdGxzL3Rsc19zdy5jLTIzNDUte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMzUwLVxcbm5ldC90bHMvdGxzX3N3LmM6MjM1MTp2b2lkIHRsc19zd19mcmVlX2N0eF9yeChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yMzUyLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjM1Ny1cXG5uZXQvdGxzL3Rsc19zdy5jOjIzNTg6dm9pZCB0bHNfc3dfZnJlZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX3N3LmMtMjM1OS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTI0MDQ9c3RhdGljIGJvb2wgdGxzX2lzX3R4X3JlYWR5KHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yNDE0LVxcbm5ldC90bHMvdGxzX3N3LmM6MjQxNTp2b2lkIHRsc19zd193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTI0MjQtXFxubmV0L3Rscy90bHNfc3cuYzoyNDI1OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9hcm0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yNDI2LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjQzNC1cXG5uZXQvdGxzL3Rsc19zdy5jOjI0MzU6dm9pZCB0bHNfdXBkYXRlX3J4X3pjX2NhcGFibGUoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjQzNi17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTI1MTY9c3RhdGljIHZvaWQgdGxzX2ZpbmlzaF9rZXlfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yNTI0LVxcbm5ldC90bHMvdGxzX3N3LmM6MjUyNTppbnQgdGxzX3NldF9zd19vZmZsb2FkKHN0cnVjdCBzb2NrICpzaywgaW50IHR4LFxcbm5ldC90bHMvdGxzX3N3LmMtMjUyNi1cXHRcXHQgICAgICAgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqbmV3X2NyeXB0b19pbmZvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo1MDoxNC40NjU1NTUwMzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0MDY4NjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRMUyBTZXRzb2Nrb3B0IEZ1bmN0aW9uIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCBpcyB0cmlnZ2VyZWQgYnkgYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRvX3Rsc19zZXRzb2Nrb3B0YCBhbmQgdWx0aW1hdGVseSwgYHRsc19zZXRzb2Nrb3B0YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBgdGxzX3NldHNvY2tvcHRgIGlzIHJlZ2lzdGVyZWQgaW4gYHN0cnVjdCBwcm90b2AgYXMgYC5zZXRzb2Nrb3B0YCwgd2hpY2ggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBub24tc3RhdGljIGVudHJ5IHBvaW50cywgcGVyaGFwcyByZWxhdGVkIHRvIG9mZmxvYWRpbmcgZnVuY3Rpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGB0bHNfc2V0X3N3X29mZmxvYWRgIG9yIGB0bHNfZGV2aWNlX3NlbmRtc2dgLlxuXG5Gb2xsb3dpbmcgdGhlIGluc3RydWN0aW9uIG9uIEZvY3VzU3ltYm9scywgSSBuZWVkIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgbm90IGludGVybmFsIHN0YXRpYyBoZWxwZXJzIHRoYXQgbWlnaHQgYmUgaW5saW5lZC4gSSdsbCBjaGVjayBpZiBgdGxzX3NldHNvY2tvcHRgIGlzIHN0YXRpYyBvciBpbmxpbmVkLiBMb29raW5nIGF0IGBuZXQvdGxzL3Rsc19tYWluLmNgIGxpbmUgOTA5LCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoLi4uKWAuIEhvd2V2ZXIsIGJlY2F1c2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGBwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdCA9IHRsc19zZXRzb2Nrb3B0O2ApLCBpdCBsaWtlbHkgKndvbid0KiBiZSBjb21wbGV0ZWx5IGlubGluZWQgYXdheSBieSB0aGUgY29tcGlsZXIgYW5kIGl0IHdpbGwgaGF2ZSBhIHN5bWJvbCBpbiB0aGUgb2JqZWN0IGZpbGUsIHVubGVzcyBhZ2dyZXNzaXZlIExUTyBvciBzdGF0aWMgc3ltYm9sIHN0cmlwcGluZyBpcyBhcHBsaWVkLiBHb29kIHRvIGtub3cuIEFuZCwgYXMgc3VzcGVjdGVkLCBgdGxzX3NldF9zd19vZmZsb2FkYCBhbmQgYHRsc19zZXRfZGV2aWNlX29mZmxvYWRgIGFyZSB0aGVyZSB0byBjb25maWd1cmUgVExTIFRYL1JYIG9mZmxvYWQuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYENPTkZJR19UTFNgIGFuZCBgQ09ORklHX1RMU19ERVZJQ0VgIGFyZSBjbGVhcmx5IHRoZSBrZXkgaGVyZS4gTGV0J3MgY2hlY2sgYG5ldC90bHMvS2NvbmZpZ2AuIGBUTFNgIGRlcGVuZHMgb24gYElORVRgLCBgQ1JZUFRPYCwgYW5kIHNvbWUgb3RoZXIgY3J5cHRvIGNvbXBvbmVudHMuIGBUTFNfREVWSUNFYCBmdXJ0aGVyIGRlcGVuZHMgb24gYFRMU2AsIGFuZCBzZWxlY3RzIGFkZGl0aW9uYWwgZmVhdHVyZXMgbGlrZSBgU0tCX0RFQ1JZUFRFRGAgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBgSU5FVGAgaXMgc3RyYWlnaHRmb3J3YXJkIG5ldHdvcmtpbmcuIFNvLCBjbGVhcmx5IGBUTFNgIGFuZCBgVExTX0RFVklDRWAgYXJlIGVzc2VudGlhbCwgYXMgYHRsc190eF9yZWNvcmRfaXNfb3BlbmAgaGFuZGxlcyBib3RoIGBUTFNfU1dgIGFuZCBgVExTX0hXYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGB0bHNfb2ZmbG9hZF9jdHhfdHhgIGRlcGVuZHMgb24gYENPTkZJR19UTFNfREVWSUNFYCB0byBjb25maXJtIHRoZSBvZmZsb2FkIHBhdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbnRlcmFjdCBhbmQgaG93IHRvIHByb3Blcmx5IGZ1enogYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MjAuMjA2MjQ1MzEzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5ODQ2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX29mZmxvYWRfY3R4X3R4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTU4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfZnJlZV9jdHgoc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MC1cXHRpZiAoY3R4LVxcdTAwM2V0eF9jb25mID09IFRMU19IVylcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo2MTpcXHRcXHRrZnJlZSh0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjItXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz04OD1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3F1ZXVlX2N0eF9kZXN0cnVjdGlvbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTEwOS1cXHRpZiAoYXN5bmNfY2xlYW51cCkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjExMDpcXHRcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTEtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xNjI9c3RhdGljIHZvaWQgdGxzX3RjcF9jbGVhbl9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2tlZF9zZXEpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzItXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTczOlxcdGN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzQtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xOTc9dm9pZCB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OS1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjAwOlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjAxLVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjctXFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyODpcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyOS1cXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0yOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfZW5jX3NrYihzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zMDAte1xcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjMwMTpcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTMwMi1cXHRpbnQgdGNwX3BheWxvYWRfb2Zmc2V0ID0gc2tiX3RjcF9hbGxfaGVhZGVycyhza2IpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM9MzYxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N3X2ZhbGxiYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTM2NC1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM6MzY1OlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzY2LVxcdGludCBwYXlsb2FkX2xlbiA9IHNrYi1cXHUwMDNlbGVuIC0gdGNwX3BheWxvYWRfb2Zmc2V0O1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODQ0LVxcdGNhc2UgVExTX0hXOlxcbm5ldC90bHMvdGxzX21haW4uYzo4NDU6XFx0XFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXFx1MDAzZW9wZW5fcmVjb3JkO1xcbm5ldC90bHMvdGxzX21haW4uYy04NDYtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MjAuMzE4MjM2MjIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjE0ODMwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBEZWZpbml0aW9uIG9mIGB0bHNfb2ZmbG9hZF9jdHhfdHhgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBhbmQgcHVycG9zZSBvZiBgdGxzX29mZmxvYWRfY3R4X3R4YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIHRoaXMgdmFyaWFibGUsIHN0cnVjdCwgb3Igd2hhdGV2ZXIgaXQgaXMsIGdldHMgaXRzIHNoYXBlIGFuZCBkZWZpbml0aW9uLiBUaGUgY29udGV4dCBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gVExTIG9mZmxvYWRpbmcsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBoYW5kbGluZyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgb3V0c2lkZSBvZiB0aGUgbWFpbiBDUFUsIHBlcmhhcHMgb24gYSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChOSUMpIG9yIGEgZGVkaWNhdGVkIHNlY3VyaXR5IHByb2Nlc3Nvci5cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBwbGFjZXMgdGhpcyB3b3VsZCBiZSBkZWZpbmVkOiBoZWFkZXIgZmlsZXMsIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIFRMUyBsaWJyYXJ5IGl0c2VsZiwgZHJpdmVyIGNvZGUgaWYgaXQncyBOSUMtc3BlY2lmaWMsIG9yIHBvdGVudGlhbGx5IGluIHNvbWUgZ2VuZXJpYyBvZmZsb2FkIGZyYW1ld29yay4gSXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgc28gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB0ZWxsIHdoYXQgaXQgaXMsIGFuZCBsaWtlbHkgd2hhdCBpdCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjI0Ljg3OTcyMjcyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDgzMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19vZmZsb2FkX2N0eF90eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90bHMuaD0zOTU9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqXFxuaW5jbHVkZS9uZXQvdGxzLmg6Mzk2OnRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxuaW5jbHVkZS9uZXQvdGxzLmgtMzk3LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Rscy5oPTQzMz1zdGF0aWMgaW5saW5lIHZvaWQgKl9fdGxzX2RyaXZlcl9jdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmgtNDM2LVxcdGlmIChkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWClcXG5pbmNsdWRlL25ldC90bHMuaDo0Mzc6XFx0XFx0cmV0dXJuIHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KS1cXHUwMDNlZHJpdmVyX3N0YXRlO1xcbmluY2x1ZGUvbmV0L3Rscy5oLTQzOC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjI1LjM2OTIxMjQ3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc0MDcwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMUyBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGBpbmNsdWRlL25ldC90bHMuaGAgaGVhZGVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMzk1LiBJJ20gbGlrZWx5IGRlYnVnZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBUTFMsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBwcm9ibGVtIG9yIGZlYXR1cmUgbGllcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlLiBJIGV4cGVjdCB0aGF0IGxpbmUgMzk1IGhvbGRzIGEgY3J1Y2lhbCBkZWZpbml0aW9uIG9yIGEgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbCByZWxhdGVkIHRvIFRMUyBoYW5kbGluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIEkgbmVlZCB0byB6b29tIGluIG9uIGl0IG5vdy4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo1MDoyNy45NDMyODU2MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3Rscy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqKXRsc19jdHgtXFx1MDAzZXByaXZfY3R4X3J4O1xcbiAzODc6XFx0fVxcbiAzODg6XFx0XFxuIDM4OTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdGxzX3N3X2N0eF90eChcXG4gMzkwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzkxOlxcdHtcXG4gMzkyOlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICopdGxzX2N0eC1cXHUwMDNlcHJpdl9jdHhfdHg7XFxuIDM5MzpcXHR9XFxuIDM5NDpcXHRcXG4gMzk1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxcbiAzOTY6XFx0dGxzX29mZmxvYWRfY3R4X3R4KGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzk3OlxcdHtcXG4gMzk4OlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKil0bHNfY3R4LVxcdTAwM2Vwcml2X2N0eF90eDtcXG4gMzk5OlxcdH1cXG4gNDAwOlxcdFxcbiA0MDE6XFx0c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3R4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcXG4gNDA2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDA3OlxcdFxcbiA0MDg6XFx0XFx0Y3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiA0MDk6XFx0XFx0aWYgKCFjdHgpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxMTpcXHRcXHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF9yeChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjI3Ljk0MzQwMjU2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODE5ODM0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRMUyBTb2NrZXQgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGl0J3MgY3J1Y2lhbCBmb3IgdGhlIHN0YWJpbGl0eSBvZiBvdXIgVExTIGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhhcmR3YXJlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIGluIGB0bHNfbWFpbi5jYCBpcyB0aGUgdGFyZ2V0LCB3aGVyZSB0aGV5J3JlIGFkZGluZyBhIGNhbGwgdG8gYHRsc190eF9yZWNvcmRfaXNfb3BlbihjdHgpYC4gU21hcnQuIFRoaXMgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGBUTFNfSFdgIGNvbnRleHRzLiBBcHBhcmVudGx5LCB3aXRob3V0IHRoaXMgY2hlY2ssIHdlIHdlcmUgcnVubmluZyB0aGUgcmlzayBvZiBpbmNvcnJlY3RseSBpbnRlcnByZXRpbmcgYHByaXZfY3R4X3R4YCBhcyBhIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAuIFRoaXMgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHdoZW4gc2V0dGluZyBgVExTX1RYX01BWF9QQVlMT0FEX0xFTmAgdGhyb3VnaCBgc2V0c29ja29wdGAgd2hpbGUgdHJhbnNtaXNzaW9uIHJlY29yZHMgYXJlIG9wZW4uXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgY29kZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscy4gVGhhdCBtYWtlcyBpdCBjcml0aWNhbCB3ZSBnZXQgdGhpcyByaWdodC4gSXQgdG91Y2hlcyBvbiBgc2V0c29ja29wdGAgd2hpY2ggaXMgYSBicmVhZCBhbmQgYnV0dGVyIGludGVyZmFjZSBmb3IgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24uXG5cbkkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTm93LCBsZXQgbWUgc2VlIHdoaWNoIG90aGVyIHN5bWJvbHMgYXJlIGludm9sdmVkIGhlcmUuIEZyb20gdGhlIHRleHQsIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gZm9jdXMgb246IGB0bHNfc2V0c29ja29wdGAsIGB0bHNfc2V0X3N3X29mZmxvYWRgLCBgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZGAsIGB0bHNfdHhfcmVjb3Jkc2AsIGFuZCBgdGxzX3N3X3NlbmRtc2dgLlxuXG5MZXQncyBjYWxsIHRoaXMgc2V0IG9mIGluZm9ybWF0aW9uIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSdtIHJlYWR5IHRvIGRpZyBkZWVwZXIgYW5kIHRlc3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5MzAsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MzEuNzYzMjQwMTExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NDA1ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc2V0c29ja29wdFwiLFxuICAgIFwidGxzX3NldF9zd19vZmZsb2FkXCIsXG4gICAgXCJ0bHNfc2V0X2RldmljZV9vZmZsb2FkXCIsXG4gICAgXCJ0bHNfdHhfcmVjb3Jkc1wiLFxuICAgIFwidGxzX3N3X3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiBjYXN0IGN0eC1cXHUwMDNlcHJpdl9jdHhfdHggdG8gc3RydWN0IHRsc19zd19jb250ZXh0X3R4IHdpdGhvdXQgY2hlY2tpbmcgY3R4LVxcdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc2V0c29ja29wdFwiLFxuICAgIFwidGxzX3NldF9zd19vZmZsb2FkXCIsXG4gICAgXCJ0bHNfc2V0X2RldmljZV9vZmZsb2FkXCIsXG4gICAgXCJ0bHNfdHhfcmVjb3Jkc1wiLFxuICAgIFwidGxzX3N3X3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiBjYXN0IGN0eC1cXHUwMDNlcHJpdl9jdHhfdHggdG8gc3RydWN0IHRsc19zd19jb250ZXh0X3R4IHdpdGhvdXQgY2hlY2tpbmcgY3R4LVxcdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MzEuOTgxNjU0Mjk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ5ODA1OTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjMxLjk4MjQ3OTM0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUwNDk3MjI4NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVxcdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cXHUwMDNldHhfY29uZmAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0NTZmNTk2OGQ2NjNhYjJmNDJhMjczZWJmZTUyN2ZiNjE3NzYyZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMzo0OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uZTRmMjg4YzFmYTM0NiAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX21haW4uY1xuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5AQCAtODMzLDE1ICs4MzMsMjkgQEAgc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbisvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xuKyAqIHNheSB3aGljaCBvcGVuIHJlY29yZCB0byBsb29rIGF0LlxuKyAqL1xuK3N0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbit7XG4rXHRzd2l0Y2ggKGN0eC1cdTAwM2V0eF9jb25mKSB7XG4rXHRjYXNlIFRMU19TVzpcbitcdFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjO1xuK1x0Y2FzZSBUTFNfSFc6XG4rXHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4tXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnN3X2N0eCA9IHRsc19zd19jdHhfdHgoY3R4KTtcbiBcdHUxNiB2YWx1ZTtcbiBcdGJvb2wgdGxzXzEzID0gY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcbiBcbi1cdGlmIChzd19jdHggXHUwMDI2XHUwMDI2IHN3X2N0eC1cdTAwM2VvcGVuX3JlYylcbitcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjMxLjk4MjQ4MTEyN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTc4NDg1NTI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBFdmFsdWF0aW9uIC0gQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBuZWVkcyBLTVNBTiB0ZXN0aW5nLiBNeSBndXQgZmVlbGluZyBpcyB0byBhbHdheXMgbGVhbiB0b3dhcmRzIHRoZSBcImJldHRlciBzYWZlIHRoYW4gc29ycnlcIiBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpc24ndCBhYm91dCBsb29raW5nIGZvciBtYWx3YXJlIG9yIGV4cGxvaXQgcGF5bG9hZHMuIEl0J3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgdGFzaywgYSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGV2YWx1YXRpb24uIEVzc2VudGlhbGx5LCBJJ20gY2hlY2tpbmcgaWYgdGhpcyBjb2RlIGNoYW5nZSBjb3VsZCBpbnRyb2R1Y2UgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2gsIGFzIG9wcG9zZWQgdG8gS0FTQU4uIEl0J3MgYSBiZW5pZ24gdGFzaywgZm9ydHVuYXRlbHkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGUgY2hhbmdlIGxvb2tzIHJlbGF0aXZlbHkgY29udGFpbmVkIOKAkyBpdCdzIHJlcGxhY2luZyBhIGNoZWNrIHdpdGggYSBmdW5jdGlvbiBjYWxsLCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYC4gRnJvbSBhIGJyaWVmIGdsYW5jZSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGEgVExTIHJlY29yZCBpcyBcIm9wZW5cIiBiZWZvcmUgYWxsb3dpbmcgYSBgc2V0c29ja29wdGAgY2FsbC4gVGhlIG9sZCBjaGVjayAoYHN3X2N0eCBcdTAwMjZcdTAwMjYgc3dfY3R4LVx1MDAzZW9wZW5fcmVjYCkgd2FzIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZSBUTFMgY29udGV4dC4gVGhlIG5ldyBmdW5jdGlvbiwgYHRsc190eF9yZWNvcmRfaXNfb3BlbmAsIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBib3RoIHNvZnR3YXJlIChgVExTX1NXYCkgYW5kIGhhcmR3YXJlIChgVExTX0hXYCkgY29udGV4dHMuXG5cbkkgc3VzcGVjdCB0aGlzIGNoYW5nZSBpcyByZWZhY3RvcmluZyB0aGUgY29kZSB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYyBhbmQgaGFuZGxlIGJvdGggc29mdHdhcmUgYW5kIGhhcmR3YXJlIG9mZmxvYWQgY29udGV4dHMuIFRoZSBmdW5jdGlvbiBpcyBjaGVja2luZyBjb250ZXh0IG1lbWJlcnMsIGJ1dCBpbiBkaWZmZXJlbnQgc3RydWN0dXJlcy5cblxuSSdtIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gdW5kZXJzdGFuZCB0aGUgYHRsc19jb250ZXh0YCBzdHJ1Y3QsIGB0bHNfc3dfY3R4X3R4YCBhbmQgYHRsc19vZmZsb2FkX2N0eF90eGAsIGFuZCBob3cgYHR4X2NvbmZgIGlzIHVzZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG9wZW5fcmVjYCBhbmQgYG9wZW5fcmVjb3JkYCBpbiB0aGUgY29udGV4dCBvZiBUTFMgY29ubmVjdGlvbiBzdGF0ZS4gRnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCBpdCdzIGFib3V0IGNoZWNraW5nIHdoZXRoZXIgdGhlIFRYIHBhdGggaGFzIGFuIG9wZW4gcmVjb3JkLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgVFggcmVjb3JkIGlzIG9wZW4sIEkgYW0gZ29pbmcgdG8gZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uICoqTmVlZHNLTVNBTjogdHJ1ZS4qKiBJIHdpbGwgY29uZmlybSB0aGlzIGxhdGVyIHdpdGggdG9vbHMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGF0YSByYWNlcyBoZXJlLlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo1MTowMS43NjczNDAxOThaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjA6XFx0XFx0cmMgPSBjaGVja196ZXJvZWRfc29ja3B0cihvcHR2YWwsIHNpemVvZih2YWwpLCBvcHRsZW4gLSBzaXplb2YodmFsKSk7XFxuIDgyMTpcXHRcXHRpZiAocmMgXFx1MDAzYyAxKVxcbiA4MjI6XFx0XFx0XFx0cmV0dXJuIHJjID09IDAgPyAtRUlOVkFMIDogcmM7XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDgyNTpcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIDgyNjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9jb25mID09IFRMU19TVyB8fCBjdHgtXFx1MDAzZXJ4X2NvbmYgPT0gVExTX0hXKSB7XFxuIDgyNzpcXHRcXHRcXHRjdHgtXFx1MDAzZXJ4X25vX3BhZCA9IHZhbDtcXG4gODI4OlxcdFxcdFxcdHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShjdHgpO1xcbiA4Mjk6XFx0XFx0XFx0cmMgPSAwO1xcbiA4MzA6XFx0XFx0fVxcbiA4MzE6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0cmV0dXJuIHJjO1xcbiA4MzQ6XFx0fVxcbiA4MzU6XFx0XFxuIDgzNjpcXHQvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xcbiA4Mzc6XFx0ICogc2F5IHdoaWNoIG9wZW4gcmVjb3JkIHRvIGxvb2sgYXQuXFxuIDgzODpcXHQgKi9cXG4gODM5OlxcdHN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4gODQwOlxcdHtcXG4gODQxOlxcdFxcdHN3aXRjaCAoY3R4LVxcdTAwM2V0eF9jb25mKSB7XFxuIDg0MjpcXHRcXHRjYXNlIFRMU19TVzpcXG4gODQzOlxcdFxcdFxcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS1cXHUwMDNlb3Blbl9yZWM7XFxuIDg0NDpcXHRcXHRjYXNlIFRMU19IVzpcXG4gODQ1OlxcdFxcdFxcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlY29yZDtcXG4gODQ2OlxcdFxcdGRlZmF1bHQ6XFxuIDg0NzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDg0ODpcXHRcXHR9XFxuIDg0OTpcXHR9XFxuIDg1MDpcXHRcXG4gODUxOlxcdHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiA4NTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIDg1MzpcXHR7XFxuIDg1NDpcXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gODU1OlxcdFxcdHUxNiB2YWx1ZTtcXG4gODU2OlxcdFxcdGJvb2wgdGxzXzEzID0gY3R4LVxcdTAwM2Vwcm90X2luZm8udmVyc2lvbiA9PSBUTFNfMV8zX1ZFUlNJT047XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcXG4gODU5OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcXG4gODYyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNnZhbHVlLCBvcHR2YWwsIHNpemVvZih2YWx1ZSkpKVxcbiA4NjU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDg2NjpcXHRcXG4gODY3OlxcdFxcdGlmICh2YWx1ZSBcXHUwMDNjIFRMU19NSU5fUkVDT1JEX1NJWkVfTElNIC0gKHRsc18xMyA/IDEgOiAwKSB8fFxcbiA4Njg6XFx0XFx0ICAgIHZhbHVlIFxcdTAwM2UgVExTX01BWF9QQVlMT0FEX1NJWkUpXFxuIDg2OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODcwOlxcdFxcbiA4NzE6XFx0XFx0Y3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSB2YWx1ZTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0dXJuIDA7XFxuIDg3NDpcXHR9XFxuIDg3NTpcXHRcXG4gODc2OlxcdHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gODc3OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gODc4OlxcdHtcXG4gODc5OlxcdFxcdGludCByYyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjAxLjc2NzUxMjk3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjM0NTE3Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHR3byBjb250ZXh0IHR5cGVzOiBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHRyYW5zbWlzc2lvbiAodHgpIHNpZGUgb2YgYSBUTFMgY29ubmVjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgVExTIGNvbnRleHQgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIG91dGJvdW5kIGRhdGEgZmxvdy4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGEga2V5IGRpc3RpbmN0aW9uOiBcInN3XCIgcHJvYmFibHkgaW5kaWNhdGVzIGEgc29mdHdhcmUtYmFzZWQgVExTIGltcGxlbWVudGF0aW9uLCB3aGlsZSBcIm9mZmxvYWRcIiBoaW50cyBhdCBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIG1heWJlIGEgZGVkaWNhdGVkIGNyeXB0byBlbmdpbmUgb3IgYSBOSUMgd2l0aCBUTFMgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29udGV4dCBpcyBzdHJ1Y3R1cmVkIGZvciBlYWNoIG9mIHRoZW0uXG5cbkknbSBhc3N1bWluZyB0aGlzIGNvbnRleHQgaG9sZHMgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB0aGUgVExTIGhhbmRzaGFrZSAoY2xpZW50L3NlcnZlciBoZWxsbywga2V5IGV4Y2hhbmdlKSwgc2Vzc2lvbiBrZXlzLCBhbmQgYW55IHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIChzZXF1ZW5jZSBudW1iZXJzLCBldGMuKSBkdXJpbmcgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSBkaWZmZXJlbmNlIGluIGNvbnRleHQgc3RydWN0dXJlIGJldHdlZW4gc29mdHdhcmUgYW5kIG9mZmxvYWRlZCBhcHByb2FjaGVzIGNvdWxkIGJlIHNpZ25pZmljYW50LiBTb2Z0d2FyZSBjb250ZXh0IGxpa2VseSBpbnZvbHZlcyBtb3JlIGZsZXhpYmxlIGRhdGEgc3RydWN0dXJlcyB0byBoYW5kbGUgZGl2ZXJzZSBUTFMgY2lwaGVyIHN1aXRlcyBhbmQgcHJvdG9jb2wgdmVyc2lvbnMsIGFuZCBtYXkgaW5jbHVkZSBwb2ludGVycyB0byBidWZmZXJzIGZvciBwbGFpbnRleHQgYW5kIGNpcGhlcnRleHQuIFRoZSBvZmZsb2FkZWQgb25lIGNvdWxkIGJlIG9wdGltaXplZCB3aXRoIHRoZSBoYXJkd2FyZeKAmXMgY2FwYWJpbGl0aWVzLCBwZXJoYXBzIGNvbnRhaW5pbmcgYSBzbWFsbGVyLCBoYXJkd2FyZS1zcGVjaWZpYyBzZXQgb2Ygc2Vzc2lvbiBrZXlzIG9yIHBvaW50ZXJzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkuIEhvdyBpcyB0aGUgcHJpdmF0ZSBrZXkgaGFuZGxlZCBpbiBlYWNoIGNvbnRleHQ/IElzIHRoZSBvZmZsb2FkIGNvbnRleHQgc2VjdXJlIGVub3VnaCB0byBhdm9pZCBzZW5zaXRpdmUga2V5IG1hdGVyaWFsIGV2ZXIgbGVhdmluZyB0aGUgZGVkaWNhdGVkIGhhcmR3YXJlPyBBbHNvLCBJJ20gY3VyaW91cyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0LiBBcmUgdGhlcmUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIGluIHRoZXNlIHR3byBtb2RlcyBvZiBvcGVyYXRpb24/IEFuZCwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBlcnJvciBoYW5kbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcHBsaWNhdGlvbi1sYXllciBpcyBhZmZlY3RlZC4gRG9lcyB0aGUgQVBJIGRpZmZlciBzaWduaWZpY2FudGx5IGJldHdlZW4gdGhlIHNvZnR3YXJlIGFuZCBvZmZsb2FkIG1vZGVzP1xuXG5VbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZGVzaWduIG9mIHRoZXNlIGNvbnRleHRzIGFmZmVjdHMgdGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IHRoZSBkZXZlbG9wZXIgd291bGQgaW50ZXJhY3Qgd2l0aCB0aGUgZGlmZmVyZW50IGNvbnRleHRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjb250ZXh0cyB0aWUgaW50byB0aGUgb3ZlcmFsbCBUTFMgYXJjaGl0ZWN0dXJlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb25zIHBvc3NpYmxlLCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgdXNlIGNhc2UgYW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MDYuMDAyMDM0MTUyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTExMjc0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N3X2N0eF90eHx0bHNfb2ZmbG9hZF9jdHhfdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmM9NTg9c3RhdGljIHZvaWQgdGxzX2RldmljZV9mcmVlX2N0eChzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwLVxcdGlmIChjdHgtXFx1MDAzZXR4X2NvbmYgPT0gVExTX0hXKVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjYxOlxcdFxcdGtmcmVlKHRsc19vZmZsb2FkX2N0eF90eChjdHgpKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02Mi1cXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTg4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfcXVldWVfY3R4X2Rlc3RydWN0aW9uKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTA5LVxcdGlmIChhc3luY19jbGVhbnVwKSB7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTEwOlxcdFxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCA9IHRsc19vZmZsb2FkX2N0eF90eChjdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTExMS1cXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTE2Mj1zdGF0aWMgdm9pZCB0bHNfdGNwX2NsZWFuX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFja2VkX3NlcSlcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTE3Mi1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxNzM6XFx0Y3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTE3NC1cXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTE5Nz12b2lkIHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTk5LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyMDA6XFx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDEtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyNy1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NDI4OlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDI5LVxcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZDtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jPTI5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRsc19lbmNfc2tiKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTMwMC17XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM6MzAxOlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzAyLVxcdGludCB0Y3BfcGF5bG9hZF9vZmZzZXQgPSBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0zNjE9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfc3dfZmFsbGJhY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzY0LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYzozNjU6XFx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zNjYtXFx0aW50IHBheWxvYWRfbGVuID0gc2tiLVxcdTAwM2VsZW4gLSB0Y3BfcGF5bG9hZF9vZmZzZXQ7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NDItXFx0Y2FzZSBUTFNfU1c6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg0MzpcXHRcXHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCktXFx1MDAzZW9wZW5fcmVjO1xcbm5ldC90bHMvdGxzX21haW4uYy04NDQtXFx0Y2FzZSBUTFNfSFc6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg0NTpcXHRcXHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cXHUwMDNlb3Blbl9yZWNvcmQ7XFxubmV0L3Rscy90bHNfbWFpbi5jLTg0Ni1cXHRkZWZhdWx0Olxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0zMDg9c3RhdGljIHZvaWQgdGxzX3RyaW1fYm90aF9tc2dzKHN0cnVjdCBzb2NrICpzaywgaW50IHRhcmdldF9zaXplKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0zMTEtXFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbm5ldC90bHMvdGxzX3N3LmM6MzEyOlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTMxMy1cXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVxcdTAwM2VvcGVuX3JlYztcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MzIxPXN0YXRpYyBpbnQgdGxzX2FsbG9jX2VuY3J5cHRlZF9tc2coc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0zMjMtXFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbm5ldC90bHMvdGxzX3N3LmM6MzI0OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTMyNS1cXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVxcdTAwM2VvcGVuX3JlYztcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MzMxPXN0YXRpYyBpbnQgdGxzX2Nsb25lX3BsYWludGV4dF9tc2coc3RydWN0IHNvY2sgKnNrLCBpbnQgcmVxdWlyZWQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTMzNC1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfc3cuYzozMzU6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMzM2LVxcdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXFx1MDAzZW9wZW5fcmVjO1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0zNTU9c3RhdGljIHN0cnVjdCB0bHNfcmVjICp0bHNfZ2V0X3JlYyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTM1OC1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfc3cuYzozNTk6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMzYwLVxcdHN0cnVjdCBza19tc2cgKm1zZ19wbCwgKm1zZ19lbjtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9Mzk2PXN0YXRpYyB2b2lkIHRsc19mcmVlX29wZW5fcmVjKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMzk4LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19zdy5jOjM5OTpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy00MDAtXFx0c3RydWN0IHRsc19yZWMgKnJlYyA9IGN0eC1cXHUwMDNlb3Blbl9yZWM7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTQwOD1pbnQgdGxzX3R4X3JlY29yZHMoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTQxMC1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfc3cuYzo0MTE6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtNDEyLVxcdHN0cnVjdCB0bHNfcmVjICpyZWMsICp0bXA7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTQ2Nz1zdGF0aWMgdm9pZCB0bHNfZW5jcnlwdF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTQ4NC1cXHRwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG5uZXQvdGxzL3Rsc19zdy5jOjQ4NTpcXHRjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtNDg2LVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz02MTc9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTYyMS1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfc3cuYzo2MjI6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtNjIzLVxcdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXFx1MDAzZW9wZW5fcmVjO1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz03MTU9c3RhdGljIGludCB0bHNfc3dfcHVzaF9wZW5kaW5nX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtNzE3LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19zdy5jOjcxODpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy03MTktXFx0c3RydWN0IHRsc19yZWMgKnJlYyA9IGN0eC1cXHUwMDNlb3Blbl9yZWM7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTc2Nj1zdGF0aWMgaW50IHRsc19zd19zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtNzcxLVxcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG5uZXQvdGxzL3Rsc19zdy5jOjc3MjpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy03NzMtXFx0Ym9vbCBhc3luY19jYXBhYmxlID0gY3R4LVxcdTAwM2Vhc3luY19jYXBhYmxlO1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0xMDMxPXZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMTAzNC1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfc3cuYzoxMDM1OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTEwMzYtXFx0c3RydWN0IHRsc19yZWMgKnJlYztcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjI3Mz12b2lkIHRsc19zd19jYW5jZWxfd29ya190eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yMjc0LXtcXG5uZXQvdGxzL3Rsc19zdy5jOjIyNzU6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMjI3Ni1cXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjI4Mj12b2lkIHRsc19zd19yZWxlYXNlX3Jlc291cmNlc190eChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIyODQtXFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbm5ldC90bHMvdGxzX3N3LmM6MjI4NTpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy0yMjg2LVxcdHN0cnVjdCB0bHNfcmVjICpyZWMsICp0bXA7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTIzMTY9dm9pZCB0bHNfc3dfZnJlZV9jdHhfdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjMxNy17XFxubmV0L3Rscy90bHNfc3cuYzoyMzE4OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTIzMTktXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTIzNzE9c3RhdGljIHZvaWQgdHhfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjM4Mi1cXG5uZXQvdGxzL3Rsc19zdy5jOjIzODM6XFx0Y3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTIzODQtXFx0aWYgKHRlc3RfYml0KEJJVF9UWF9DTE9TSU5HLCBcXHUwMDI2Y3R4LVxcdTAwM2V0eF9iaXRtYXNrKSlcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjQxNT12b2lkIHRsc19zd193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XFxubmV0L3Rscy90bHNfc3cuYzoyNDE3OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdHhfY3R4ID0gdGxzX3N3X2N0eF90eChjdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMjQxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MDYuMTEzMTY3MjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY1NDUyMzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkV4YW1pbmluZyBUTFMgQ29udGV4dCBUcmFuc21pc3Npb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgVExTIGNvbnRleHQgdHJhbnNtaXNzaW9uLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gYm90aCBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIG91dHB1dHMgaXMgY3JpdGljYWwuXG5cblRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgaW5jbHVkZS9uZXQvdGxzLmhgIGhlYWRlciBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3IgYm90aCBmdW5jdGlvbnMuIEJ5IGV4YW1pbmluZyB0aGVpciBzaWduYXR1cmVzLCByZXR1cm4gdHlwZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgaGVhZGVyLCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBncmFzcCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gdGhleSBhcmUgY29tbXVuaWNhdGluZyBiYWNrIHRvIHRoZSBjYWxsZXIgYW5kIGhvdyBJIHNob3VsZCBpbnRlcnByZXQgdGhlaXIgcmV0dXJuZWQgdmFsdWVzIHdpdGhpbiB0aGUgc3lzdGVtJ3MgY29udGV4dC4gVGhpcyBzaG91bGQgaGVscCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjA4Ljc2NzY5NDg2OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMjQ3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N3X2N0eF90eHx0bHNfb2ZmbG9hZF9jdHhfdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvdGxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGxzLmg9MzgzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICp0bHNfc3dfY3R4X3J4KFxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmgtMzg4LVxcbmluY2x1ZGUvbmV0L3Rscy5oOjM4OTpzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdGxzX3N3X2N0eF90eChcXG5pbmNsdWRlL25ldC90bHMuaC0zOTAtXFx0XFx0Y29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmg9Mzk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxcbmluY2x1ZGUvbmV0L3Rscy5oOjM5Njp0bHNfb2ZmbG9hZF9jdHhfdHgoY29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbmluY2x1ZGUvbmV0L3Rscy5oLTM5Ny17XFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaD00MDE9c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3R4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3Rscy5oLTQxMC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuaW5jbHVkZS9uZXQvdGxzLmg6NDExOlxcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KTtcXG5pbmNsdWRlL25ldC90bHMuaC00MTItfVxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmg9NDMzPXN0YXRpYyBpbmxpbmUgdm9pZCAqX190bHNfZHJpdmVyX2N0eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaC00MzYtXFx0aWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKVxcbmluY2x1ZGUvbmV0L3Rscy5oOjQzNzpcXHRcXHRyZXR1cm4gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpLVxcdTAwM2Vkcml2ZXJfc3RhdGU7XFxuaW5jbHVkZS9uZXQvdGxzLmgtNDM4LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MDguODMxMDI2Mzk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjEzMzY3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMUyBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBUTFMgaGVhZGVyIGRlZmluaXRpb24sIHNwZWNpZmljYWxseSwgbGluZXMgMzgwIHRvIDQxMCB3aXRoaW4gYGluY2x1ZGUvbmV0L3Rscy5oYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBzdHJ1Y3R1cmVzIG9yIGVudW1zIGluIHRoZXJlLiBEZXBlbmRpbmcgb24gd2hhdCB0aG9zZSBsaW5lcyBjb250YWluLCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kLCBsaWtlbHkgYXQgYSBsb3cgbGV2ZWwsIGhvdyB0aGUgVExTIGNvbm5lY3Rpb24gaXMgc3RydWN0dXJlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyLCBvciBiZSBhYmxlIHRvIGluZmVyLCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIEJhc2VkIG9uIHRoZSBmaWxlIGxvY2F0aW9uLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrIGltcGxlbWVudGF0aW9uIG9mIFRMUy4gSSBhbnRpY2lwYXRlIGVuY291bnRlcmluZyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtYXAgaG93IHRoZSBUTFMgcmVjb3JkcyBhcmUgcGFyc2VkIG9yIHRoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgdXNlZCBhcmUgc3RydWN0dXJlZC4gUGVyaGFwcyBJJ2xsIGZpbmQgc29tZSBkZWJ1ZyBzeW1ib2xzIHRoYXQgSSBjYW4gdXNlIHRvIGluc3BlY3QgaW4gZnVydGhlciBkZXRhaWwuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjEwLjc1MjM3MzA1N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvdGxzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdHJldHVybiAoX19mb3JjZSB2b2lkICopaWNzay1cXHUwMDNlaWNza191bHBfZGF0YTtcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdFxcbiAzODM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKnRsc19zd19jdHhfcngoXFxuIDM4NDpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqKXRsc19jdHgtXFx1MDAzZXByaXZfY3R4X3J4O1xcbiAzODc6XFx0fVxcbiAzODg6XFx0XFxuIDM4OTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdGxzX3N3X2N0eF90eChcXG4gMzkwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzkxOlxcdHtcXG4gMzkyOlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICopdGxzX2N0eC1cXHUwMDNlcHJpdl9jdHhfdHg7XFxuIDM5MzpcXHR9XFxuIDM5NDpcXHRcXG4gMzk1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxcbiAzOTY6XFx0dGxzX29mZmxvYWRfY3R4X3R4KGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzk3OlxcdHtcXG4gMzk4OlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKil0bHNfY3R4LVxcdTAwM2Vwcml2X2N0eF90eDtcXG4gMzk5OlxcdH1cXG4gNDAwOlxcdFxcbiA0MDE6XFx0c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3R4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcXG4gNDA2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDA3OlxcdFxcbiA0MDg6XFx0XFx0Y3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiA0MDk6XFx0XFx0aWYgKCFjdHgpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxMTpcXHRcXHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF9yeChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDQxNTpcXHR7XFxuIDQxNjpcXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eDtcXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0aWYgKCFza19pc19pbmV0KHNrKSB8fCAhaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzaykpXFxuIDQxOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjEwLjc1MjQ4MjMyN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTcyNzE5NzU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGlzc3VlIHdhcyBpbiBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSB0eXBlIGNvbmZ1c2lvbiB3aGVyZSBgcHJpdl9jdHhfdHhgIHdhcyBiZWluZyB1bmNvbmRpdGlvbmFsbHkgY2FzdCB0byBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgIGV2ZW4gd2hlbiBgY3R4LVx1MDAzZXR4X2NvbmZgIHdhcyBzZXQgdG8gYFRMU19IV2AsIG1lYW5pbmcgaXQgc2hvdWxkIGhhdmUgYmVlbiBhIGBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eGAuIFRoaXMgbGVkIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGJlY2F1c2UgYG9wZW5fcmVjYCdzIG9mZnNldCBpcyBkaWZmZXJlbnQgaW4gdGhlIHR3byBzdHJ1Y3RzLCBvciBwb3RlbnRpYWxseSBmYWlsaW5nIHRvIGNoZWNrIHRoZSBoYXJkd2FyZSBvcGVuIHJlY29yZC4gVGhlIGZpeCBpbnRyb2R1Y2VzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBvcGVuIHJlY29yZCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBjb250ZXh0IGlzIHNvZnR3YXJlIChgVExTX1NXYCkgb3IgaGFyZHdhcmUgKGBUTFNfSFdgKS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgZml4IGludHJvZHVjZSBvciBleHBvc2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIHRodXMgd2FycmFudGluZyBhIGBOZWVkc0tNU0FOYCB0YWc/IEkgZG9uJ3QgdGhpbmsgc28uIExldCdzIHdhbGsgdGhyb3VnaCB0aGUgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGlzIGlzIGBzZXRzb2Nrb3B0YCwgcmVjZWl2aW5nIGRhdGEgZnJvbSB1c2Vyc3BhY2UsIG5vdCBzZW5kaW5nIGl0LlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSBkZXBlbmRlbmNlOioqIGBjdHgtXHUwMDNldHhfY29uZmAgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIFRMUyBjb25maWd1cmF0aW9uLCBhbmQgYG9wZW5fcmVjYC9gb3Blbl9yZWNvcmRgIGFyZSBwb2ludGVycyBpbml0aWFsaXplZCBkdXJpbmcgY29udGV4dC9yZWNvcmQgYWxsb2NhdGlvbi4gVGhlIGxvZ2ljIGJyYW5jaGVzIGNvcnJlY3RseSBiYXNlZCBvbiB0aGUgaW5pdGlhbGl6ZWQgYGN0eC1cdTAwM2V0eF9jb25mYCB2YWx1ZS5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gbmV3IGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gaW5pdGlhbGl6YXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZS5cbjQuICAqKkJvdW5kcy9MZW5ndGggY2hlY2tzOioqIE5vLCB0aGlzIGZpeCBkb2Vzbid0IGFmZmVjdCBhbnkgYm91bmRzIG9yIGxlbmd0aHMsIG9ubHkgdGhlIGNvcnJlY3QgdHlwZSBjaGVjayBiZWZvcmUgcGVybWl0dGluZyBhIHBheWxvYWQgbGVuZ3RoIGNoYW5nZS4gSXQgY29ycmVjdHMgdHlwZSBjb25mdXNpb24gYW5kIG1lbWJlciBhY2Nlc3MgaXNzdWVzLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIGJ1ZyB3YXMgYSB0eXBlIGNvbmZ1c2lvbiBhbmQgbG9naWNhbCBlcnJvcuKAlGEgY2xhc3NpYyBLQVNBTi9VQlNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgbGF0dGVyLCB3aGlsZSBLQVNBTiBhbmQgdGhlIHVzdWFsIHN1aXRlIG9mIHRvb2xzIGNvdmVyIHRoZSBidWcgdGhpcyBwYXRjaCBjb3JyZWN0cy4gVGhlIG5ldyBoZWxwZXIgZnVuY3Rpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgcmVtYWluIGBmYWxzZWAuIExldCdzIGNvbmZpcm0gdGhhdCByZWFzb25pbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdHlwZSBjb25mdXNpb24sIHdoaWNoIGlzbid0IEtNU0FOJ3MgZG9tYWluLiBUaGUgcGF0Y2ggY2xhcmlmaWVzIHRoZSBsb2dpYyBhbmQgZml4ZXMgdGhlIHR5cGUgaXNzdWUuIFRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgS01TQU4tc3BlY2lmaWMgcHJvYmxlbXMgYW5kIGRvZXNuJ3QgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBrZXJuZWwtdG8tdXNlciBzcGFjZSBsZWFrcy4gQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODcsIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MjIuNDc5NjgzNzcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVxcdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cXHUwMDNldHhfY29uZmAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdHlwZSBjb25mdXNpb24gaXNzdWUgaW4gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKClgIHdoZXJlIGBjdHgtXFx1MDAzZXByaXZfY3R4X3R4YCB3YXMgdW5jb25kaXRpb25hbGx5IGNhc3QgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCBhbmQgY2hlY2tlZCBmb3IgYG9wZW5fcmVjYCwgZXZlbiB3aGVuIHRoZSBjb25uZWN0aW9uIHdhcyBjb25maWd1cmVkIGZvciBIVyBvZmZsb2FkIChgVExTX0hXYCwgd2hlcmUgYHByaXZfY3R4X3R4YCBob2xkcyBgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHhgKS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oKWAgdG8gcHJvcGVybHkgaW5zcGVjdCB0aGUgYXBwcm9wcmlhdGUgb3BlbiByZWNvcmQgcG9pbnRlciBiYXNlZCBvbiBgY3R4LVxcdTAwM2V0eF9jb25mYC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkga2VybmVsLXRvLXVzZXIgY29weSBidWZmZXJzIG9yIGluZm8tbGVhayBwYXRocywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggdHJhY2tpbmcgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0cnVjdCBjYXN0aW5nL2FjY2Vzc2VzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL1VCU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgrml8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 03:08:07 +0000 UTC FinishedAt: 2026-08-31 03:51:24 +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": [ "TLS", "TLS_DEVICE" ], "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": [ "TLS", "TLS_DEVICE" ], "series_id": "b430516a-1cf9-48cd-ab10-7269384a5a44" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_setsockopt", "tls_set_sw_offload", "tls_set_device_offload", "tls_tx_records", "tls_sw_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGxzX3NldF9zd19vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc19zZXRfZGV2aWNlX29mZmxvYWQmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3N3X3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVx1MDAzZXByaXZfY3R4X3R4YCB3YXMgdW5jb25kaXRpb25hbGx5IGNhc3QgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCBhbmQgY2hlY2tlZCBmb3IgYG9wZW5fcmVjYCwgZXZlbiB3aGVuIHRoZSBjb25uZWN0aW9uIHdhcyBjb25maWd1cmVkIGZvciBIVyBvZmZsb2FkIChgVExTX0hXYCwgd2hlcmUgYHByaXZfY3R4X3R4YCBob2xkcyBgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHhgKS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oKWAgdG8gcHJvcGVybHkgaW5zcGVjdCB0aGUgYXBwcm9wcmlhdGUgb3BlbiByZWNvcmQgcG9pbnRlciBiYXNlZCBvbiBgY3R4LVx1MDAzZXR4X2NvbmZgLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkga2VybmVsLXRvLXVzZXIgY29weSBidWZmZXJzIG9yIGluZm8tbGVhayBwYXRocywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggdHJhY2tpbmcgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0cnVjdCBjYXN0aW5nL2FjY2Vzc2VzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL1VCU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVx1MDAzZXByaXZfY3R4X3R4IHRvIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCB3aXRob3V0IGNoZWNraW5nIGN0eC1cdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ0NTZmNTk2OGQ2NjNhYjJmNDJhMjczZWJmZTUyN2ZiNjE3NzYyZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMzo0OToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmNcbmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTgzMywxNSAmIzQzOzgzMywyOSBAQCBzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuJiM0MzsvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xuJiM0MzsgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoY3R4LVx1MDAzZXR4X2NvbmYpIHtcbiYjNDM7XHRjYXNlIFRMU19TVzpcbiYjNDM7XHRcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlYztcbiYjNDM7XHRjYXNlIFRMU19IVzpcbiYjNDM7XHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG4gXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbi1cdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqc3dfY3R4ID0gdGxzX3N3X2N0eF90eChjdHgpO1xuIFx0dTE2IHZhbHVlO1xuIFx0Ym9vbCB0bHNfMTMgPSBjdHgtXHUwMDNlcHJvdF9pbmZvLnZlcnNpb24gPT0gVExTXzFfM19WRVJTSU9OO1xuIFxuLVx0aWYgKHN3X2N0eCBcdTAwMjZcdTAwMjYgc3dfY3R4LVx1MDAzZW9wZW5fcmVjKVxuJiM0MztcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3Rsc19zZXRfc3dfb2ZmbG9hZCYjMzQ7LAogICAgJiMzNDt0bHNfc2V0X2RldmljZV9vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc190eF9yZWNvcmRzJiMzNDssCiAgICAmIzM0O3Rsc19zd19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVx1MDAzZXByaXZfY3R4X3R4IHRvIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCB3aXRob3V0IGNoZWNraW5nIGN0eC1cdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0NTZmNTk2OGQ2NjNhYjJmNDJhMjczZWJmZTUyN2ZiNjE3NzYyZjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMzo0OToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uYwppbmRleCBmYmIyNzQyODdhYTVmLi5lNGYyODhjMWZhMzQ2IDEwMDY0NAotLS0gYS9uZXQvdGxzL3Rsc19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfbWFpbi5jCkBAIC04MzMsMTUgJiM0Mzs4MzMsMjkgQEAgc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogCXJldHVybiByYzsKIH0KIAomIzQzOy8qIHByaXZfY3R4X3R4IGhvbGRzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBvbiBlYWNoIFRYIHBhdGgsIHNvIHR4X2NvbmYgaGFzIHRvCiYjNDM7ICogc2F5IHdoaWNoIG9wZW4gcmVjb3JkIHRvIGxvb2sgYXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJc3dpdGNoIChjdHgtJmd0O3R4X2NvbmYpIHsKJiM0MzsJY2FzZSBUTFNfU1c6CiYjNDM7CQlyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCktJmd0O29wZW5fcmVjOwomIzQzOwljYXNlIFRMU19IVzoKJiM0MzsJCXJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLSZndDtvcGVuX3JlY29yZDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogCQkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTsKLQlzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnN3X2N0eCA9IHRsc19zd19jdHhfdHgoY3R4KTsKIAl1MTYgdmFsdWU7CiAJYm9vbCB0bHNfMTMgPSBjdHgtJmd0O3Byb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjsKIAotCWlmIChzd19jdHggJmFtcDsmYW1wOyBzd19jdHgtJmd0O29wZW5fcmVjKQomIzQzOwlpZiAodGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eCkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc29ja3B0cl9pc19udWxsKG9wdHZhbCkgfHwgb3B0bGVuICE9IHNpemVvZih2YWx1ZSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgQ29kZSoqCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggdG91Y2hlcyBgbmV0L3Rscy90bHNfbWFpbi5jYC4gVGhhdCYjMzk7cyBhIGtleSBhcmVhLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgY2hhbmdpbmcuIE15IGZpcnN0IG1vdmUgaXMgdG8gY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIGRpZmYgaXRzZWxmIOKAkyBJIG5lZWQgdG8gc2VlIHRoZSBsaW5lLWJ5LWxpbmUgYWx0ZXJhdGlvbnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIGFuZCBpbXBhY3QuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgYXJvdW5kIHRob3NlIG1vZGlmaWVkIGxpbmVzIGluIGB0bHNfbWFpbi5jYCB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcHVycG9zZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgZm9yIG1lIHdoZW4gcmV2aWV3aW5nIGtlcm5lbCBjaGFuZ2VzLCBlc3BlY2lhbGx5IGluIHNlY3VyaXR5LXNlbnNpdGl2ZSBtb2R1bGVzLgoKVG8gZXhwZWRpdGUgdGhpcywgSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYC4gVGhlc2UgdG9vbHMgYXJlIGludmFsdWFibGUgZm9yIHF1aWNrbHkgbmF2aWdhdGluZyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29kZSwgbWFraW5nIHRoZSBhbmFseXNpcyBmYXIgbW9yZSBlZmZpY2llbnQuIFRoZXkmIzM5O2xsIGFsbG93IG1lIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGFueSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgZGVmaW5pdGlvbnMsIG9yIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBpbXBhY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODIwOlx0XHRyYyA9IGNoZWNrX3plcm9lZF9zb2NrcHRyKG9wdHZhbCwgc2l6ZW9mKHZhbCksIG9wdGxlbiAtIHNpemVvZih2YWwpKTtcbiA4MjE6XHRcdGlmIChyYyBcdTAwM2MgMSlcbiA4MjI6XHRcdFx0cmV0dXJuIHJjID09IDAgPyAtRUlOVkFMIDogcmM7XG4gODIzOlx0XG4gODI0Olx0XHRsb2NrX3NvY2soc2spO1xuIDgyNTpcdFx0cmMgPSAtRUlOVkFMO1xuIDgyNjpcdFx0aWYgKGN0eC1cdTAwM2VyeF9jb25mID09IFRMU19TVyB8fCBjdHgtXHUwMDNlcnhfY29uZiA9PSBUTFNfSFcpIHtcbiA4Mjc6XHRcdFx0Y3R4LVx1MDAzZXJ4X25vX3BhZCA9IHZhbDtcbiA4Mjg6XHRcdFx0dGxzX3VwZGF0ZV9yeF96Y19jYXBhYmxlKGN0eCk7XG4gODI5Olx0XHRcdHJjID0gMDtcbiA4MzA6XHRcdH1cbiA4MzE6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gODMyOlx0XG4gODMzOlx0XHRyZXR1cm4gcmM7XG4gODM0Olx0fVxuIDgzNTpcdFxuIDgzNjpcdC8qIHByaXZfY3R4X3R4IGhvbGRzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBvbiBlYWNoIFRYIHBhdGgsIHNvIHR4X2NvbmYgaGFzIHRvXG4gODM3Olx0ICogc2F5IHdoaWNoIG9wZW4gcmVjb3JkIHRvIGxvb2sgYXQuXG4gODM4Olx0ICovXG4gODM5Olx0c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuIDg0MDpcdHtcbiA4NDE6XHRcdHN3aXRjaCAoY3R4LVx1MDAzZXR4X2NvbmYpIHtcbiA4NDI6XHRcdGNhc2UgVExTX1NXOlxuIDg0MzpcdFx0XHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCktXHUwMDNlb3Blbl9yZWM7XG4gODQ0Olx0XHRjYXNlIFRMU19IVzpcbiA4NDU6XHRcdFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXHUwMDNlb3Blbl9yZWNvcmQ7XG4gODQ2Olx0XHRkZWZhdWx0OlxuIDg0NzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODQ4Olx0XHR9XG4gODQ5Olx0fVxuIDg1MDpcdFxuIDg1MTpcdHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIDg1MjpcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbiA4NTM6XHR7XG4gODU0Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiA4NTU6XHRcdHUxNiB2YWx1ZTtcbiA4NTY6XHRcdGJvb2wgdGxzXzEzID0gY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcbiA4NTc6XHRcbiA4NTg6XHRcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcbiA4NTk6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA4NjA6XHRcbiA4NjE6XHRcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiA4NjI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODYzOlx0XG4gODY0Olx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2dmFsdWUsIG9wdHZhbCwgc2l6ZW9mKHZhbHVlKSkpXG4gODY1Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDg2NjpcdFxuIDg2NzpcdFx0aWYgKHZhbHVlIFx1MDAzYyBUTFNfTUlOX1JFQ09SRF9TSVpFX0xJTSAtICh0bHNfMTMgPyAxIDogMCkgfHxcbiA4Njg6XHRcdCAgICB2YWx1ZSBcdTAwM2UgVExTX01BWF9QQVlMT0FEX1NJWkUpXG4gODY5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgVExTIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBUTFMgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgdHJhbnNtaXNzaW9uIHBheWxvYWQgbGVuZ3RoIGlzIGhhbmRsZWQuIE15IHByaW1hcnkgaW50ZXJlc3QgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBjYWxsIHRvIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAgYW5kIEkmIzM5O2xsIHRyYWNlIGl0cyB1c2FnZSBiYWNrIHRvIHRoZSBgdGxzX21haW4uY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHdoZXJlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuCgpPZiBjb3Vyc2UsIGZpZ3VyaW5nIG91dCB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGlzIGJlaGF2aW91ciB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0byBhZGp1c3QgaXQuIFRoaXMgc2VlbXMgbGlrZSBhIGBuZXQvdGxzL2Agc2l0dWF0aW9uLCBzbyBJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciB0aGF0IGRpcmVjdG9yeS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFmZmVjdCB0aGUgY2FsbCB0byBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZy00LSNcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcbm5ldC90bHMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGxzL0tjb25maWctMTgtXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0Vcbm5ldC90bHMvS2NvbmZpZy0yMC1cdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzcwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgcmVhZGluZyBgbmV0L3Rscy9LY29uZmlnYCwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlcjoKCioqRGl2aW5nIGludG8gdGhlIFRMUyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgbmV0L3Rscy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbml0dHktZ3JpdHR5IG9mIGNvbmZpZ3VyaW5nIFRMUyBzdXBwb3J0IGF0IHRoZSBrZXJuZWwgbGV2ZWwuIEkgbmVlZCB0byBzZWUgd2hhdCBrbm9icyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCBvZiBjb3Vyc2Ug4oCTIHdoaWNoIGZlYXR1cmVzIHJlbHkgb24gd2hpY2ggb3RoZXJzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzcGVjaWZpYyBUTFMtcmVsYXRlZCBvcHRpb25zPyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGJyb2tlbiBkb3duIGJ5IGNpcGhlciBzdWl0ZXMsIGtleSBleGNoYW5nZSBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBzb21lIGZpbmUtZ3JhaW5lZCBjb250cm9scyBvdmVyIGZlYXR1cmVzIGxpa2Ugc2Vzc2lvbiByZXN1bXB0aW9uIG9yIGhhcmR3YXJlIG9mZmxvYWRpbmcsIGlmIHRoZXkmIzM5O3JlIHN1cHBvcnRlZC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlJiMzOTtzIGFueSBuZXcgbG9naWMgSSYjMzk7dmUgbm90IGxvb2tlZCBpbnRvIGJlZm9yZSwgb3IgYW55dGhpbmcgdGhhdCYjMzk7cyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzLiBBcmUgdGhlcmUgYW55IG5ldyBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQ/IEhhcyB0aGVyZSBiZWVuIGFueSBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgZmxleGliaWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhlIGV4aXN0aW5nIFRMUyBzdGFjaz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgdWx0aW1hdGUgdHJ1dGggb24gd2hhdCB0aGUga2VybmVsIGNhbiBkbyBhbmQgd2hhdCBJIGNhbiBlbmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUTFMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgVExTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAgMTI6XHRcdGRlZmF1bHQgblxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBUTFMgcHJvdG9jb2wuIFRoaXMgYWxsb3dzIHN5bW1ldHJpY1xuICAxNTpcdFx0ZW5jcnlwdGlvbiBoYW5kbGluZyBvZiB0aGUgVExTIHByb3RvY29sIHRvIGJlIGRvbmUgaW4ta2VybmVsLlxuICAxNjpcdFxuICAxNzpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVExTX0RFVklDRVxuICAyMDpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBUTFNcbiAgMjI6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gIDIzOlx0XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4gIDI0Olx0XHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgSFcgb2ZmbG9hZCBvZiB0aGUgVExTIHByb3RvY29sLlxuICAyODpcdFxuICAyOTpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRpZ2dpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgYWx3YXlzIHRoZSBzYW1lOiBsZXQmIzM5O3MgdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZXMuIEkgd2FudCB0byBzZWUgKmV2ZXJ5d2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBhcyB0aGlzIHNob3VsZCByZXZlYWwgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGl0IHBsYXlzIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzaW5nIGNhbGxzLCBhbnkgb2RkIGNvbnRyb2wgZmxvd3MsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4gdGhhdCBtaWdodCBqdW1wIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODUwLVxubmV0L3Rscy90bHNfbWFpbi5jOjg1MTpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbm5ldC90bHMvdGxzX21haW4uYy04NTItXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz04NzY9c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTgtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvdGxzL3Rsc19tYWluLmM6ODk5Olx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvdGxzL3Rsc19tYWluLmMtOTAwLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODk3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggbG93LWxldmVsIHNvY2tldCBvcGVyYXRpb25zIGFuZCBUTFM6CgoqKkRpZ2dpbmcgaW50byBUTFMgU29ja2V0IE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHVzaW5nIGBkb190bHNfc2V0c29ja29wdGAgb3IgYHRsc19zZXRzb2Nrb3B0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIHByZXR0eSBjbGVhciBpbmRpY2F0b3JzIG9mIG1hbmlwdWxhdGlvbiBvZiBzb2NrZXQgb3B0aW9ucyByZWxhdGVkIHRvIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBuZXh0IHN0ZXAgc2hvdWxkIGJlIGEgY29kZSBhdWRpdCBvZiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIGNhbGxzIGFuZCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGludGVudGlvbiBhbmQgcmVhc29uaW5nIGJlaGluZCB0aG9zZSBzb2NrZXQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3Rsc19zZXRzb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jPTU5OD1zdGF0aWMgaW50IHZhbGlkYXRlX2NyeXB0b19pbmZvKGNvbnN0IHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKmNyeXB0b19pbmZvLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy02MjItXG5uZXQvdGxzL3Rsc19tYWluLmM6NjIzOnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfY29uZihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtNjI0LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuLCBpbnQgdHgpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTc4My1cbm5ldC90bHMvdGxzX21haW4uYzo3ODQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtNzg1LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODAzLVxubmV0L3Rscy90bHNfbWFpbi5jOjgwNDpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtODA1LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg1MC1cbm5ldC90bHMvdGxzX21haW4uYzo4NTE6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtODUyLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODc1LVxubmV0L3Rscy90bHNfbWFpbi5jOjg3NjpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG5uZXQvdGxzL3Rsc19tYWluLmMtODc3LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODg0LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L3Rscy90bHNfbWFpbi5jOjg4NTpcdFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbixcbm5ldC90bHMvdGxzX21haW4uYy04ODYtXHRcdFx0XHRcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg5MC1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90bHMvdGxzX21haW4uYzo4OTE6XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy04OTItXHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg5NC1cdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XG5uZXQvdGxzL3Rsc19tYWluLmM6ODk1Olx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3Rscy90bHNfbWFpbi5jLTg5Ni1cdFx0YnJlYWs7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg5OC1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90bHMvdGxzX21haW4uYzo4OTk6XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy05MDAtXHRcdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTkwOT1zdGF0aWMgaW50IHRsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtOTE3LVxubmV0L3Rscy90bHNfbWFpbi5jOjkxODpcdHJldHVybiBkb190bHNfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L3Rscy90bHNfbWFpbi5jLTkxOS19XG4tLVxubmV0L3Rscy90bHNfc3cuYz0yNTI1PWludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yNjMzLVx0XHRcdCAgICAgIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvLFxubmV0L3Rscy90bHNfc3cuYzoyNjM0Olx0XHRcdCAgICAgIC8qIHNpemUgd2FzIGNoZWNrZWQgaW4gZG9fdGxzX3NldHNvY2tvcHRfY29uZiAqLyk7XG5uZXQvdGxzL3Rsc19zdy5jLTI2MzUtXHRcdG1lbXplcm9fZXhwbGljaXQobmV3X2NyeXB0b19pbmZvLCBjaXBoZXJfZGVzYy1cdTAwM2VjcnlwdG9faW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgVExTIFNvY2tldCBPcHRpb25zIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYHRsc2AgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCBzcGVjaWZpY2FsbHkgYHRsc19zZXRzb2Nrb3B0YCBhbmQgYHRsc19pbml0YC4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGV5JiMzOTtyZSBjZW50cmFsIHRvIGNvbmZpZ3VyaW5nIGFuZCBlc3RhYmxpc2hpbmcgdGhlIFRMUyBjb25uZWN0aW9ucywgd2hpY2ggSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gV2hlcmUgYXJlIHRoZXkgYmVpbmcgY2FsbGVkPyBXaGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZD8gQW5kIHdoYXQsIGlmIGFueXRoaW5nLCBpcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCB0aGVzZSBmdW5jdGlvbnM/IE15IGZpcnN0IHN0b3Agd2lsbCBiZSBgbmV0L3Rscy90bHNfbWFpbi5jYCBhcm91bmQgdGhlIGB0bHNfc2V0c29ja29wdGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9yY2hlc3RyYXRlZCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBUTFMgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MDA6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA5MDE6XHRcdFx0YnJlYWs7XG4gOTAyOlx0XHRkZWZhdWx0OlxuIDkwMzpcdFx0XHRyYyA9IC1FTk9QUk9UT09QVDtcbiA5MDQ6XHRcdFx0YnJlYWs7XG4gOTA1Olx0XHR9XG4gOTA2Olx0XHRyZXR1cm4gcmM7XG4gOTA3Olx0fVxuIDkwODpcdFxuIDkwOTpcdHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIDkxMDpcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiA5MTE6XHR7XG4gOTEyOlx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiA5MTM6XHRcbiA5MTQ6XHRcdGlmIChsZXZlbCAhPSBTT0xfVExTKVxuIDkxNTpcdFx0XHRyZXR1cm4gY3R4LVx1MDAzZXNrX3Byb3RvLVx1MDAzZXNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsXG4gOTE2Olx0XHRcdFx0XHRcdFx0IG9wdGxlbik7XG4gOTE3Olx0XG4gOTE4Olx0XHRyZXR1cm4gZG9fdGxzX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiA5MTk6XHR9XG4gOTIwOlx0XG4gOTIxOlx0c3RhdGljIGludCB0bHNfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbiA5MjI6XHR7XG4gOTIzOlx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTI0Olx0fVxuIDkyNTpcdFxuIDkyNjpcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrKVxuIDkyNzpcdHtcbiA5Mjg6XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiA5Mjk6XHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xuIDkzMDpcdFxuIDkzMTpcdFx0Y3R4ID0ga3phbGxvY19vYmooKmN0eCwgR0ZQX0FUT01JQyk7XG4gOTMyOlx0XHRpZiAoIWN0eClcbiA5MzM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gOTM0Olx0XG4gOTM1Olx0XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2V0eF9sb2NrKTtcbiA5MzY6XHRcdGN0eC1cdTAwM2Vza19wcm90byA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbiA5Mzc6XHRcdGN0eC1cdTAwM2VzayA9IHNrO1xuIDkzODpcdFx0LyogUmVsZWFzZSBzZW1hbnRpYyBvZiByY3VfYXNzaWduX3BvaW50ZXIoKSBlbnN1cmVzIHRoYXRcbiA5Mzk6XHRcdCAqIGN0eC1cdTAwM2Vza19wcm90byBpcyB2aXNpYmxlIGJlZm9yZSBjaGFuZ2luZyBzay1cdTAwM2Vza19wcm90IGluXG4gOTQwOlx0XHQgKiB1cGRhdGVfc2tfcHJvdCgpLCBhbmQgcHJldmVudHMgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhbHVlIGluXG4gOTQxOlx0XHQgKiB0bHNfe2dldHNvY2tvcHQsIHNldHNvY2tvcHR9LiBOb3RlIHRoYXQgd2UgZG8gbm90IG5lZWQgYVxuIDk0MjpcdFx0ICogcmVhZCBiYXJyaWVyIGluIHRsc197Z2V0c29ja29wdCxzZXRzb2Nrb3B0fSBhcyB0aGVyZSBpcyBhblxuIDk0MzpcdFx0ICogYWRkcmVzcyBkZXBlbmRlbmN5IGJldHdlZW4gc2stXHUwMDNlc2tfcHJvdG8tXHUwMDNle2dldHNvY2tvcHQsc2V0c29ja29wdH1cbiA5NDQ6XHRcdCAqIGFuZCBjdHgtXHUwMDNlc2tfcHJvdG8uXG4gOTQ1Olx0XHQgKi9cbiA5NDY6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihpY3NrLVx1MDAzZWljc2tfdWxwX2RhdGEsIGN0eCk7XG4gOTQ3Olx0XHRyZXR1cm4gY3R4O1xuIDk0ODpcdH1cbiA5NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgdGxzX3NldHNvY2tvcHRgIEFzc2lnbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBob3cgYHRsc19zZXRzb2Nrb3B0YCBpcyBiZWluZyBhc3NvY2lhdGVkIHdpdGggZWl0aGVyIHByb3RvY29sLWxldmVsIG9yIHNwZWNpZmljIHNvY2tldC1sZXZlbCBvcGVyYXRpb25zLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhIHNpbXBsZSwgb25lLXNpemUtZml0cy1hbGwgYXBwcm9hY2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHdoZXJlIGl0IGdldHMgY2FsbGVkIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIHRpZWQgdG8gYSAqc3BlY2lmaWMqIHNvY2tldCB2ZXJzdXMgYmVpbmcgaGFuZGxlZCBhdCBhIGJyb2FkZXIsIG1vcmUgZ2VuZXJpYyBwcm90b2NvbCBsZXZlbC4gSXMgdGhlIGFzc2lnbm1lbnQgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IChlLmcuLCBUQ1AsIFVEUCkgb3IgVExTIGltcGxlbWVudGF0aW9uPyBJIHN1c3BlY3QgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZ29pbmcgdG8gdmFyeSBhY3Jvc3MgdGhlIGxpYnJhcnkuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBzb2NrZXQgb3B0aW9ucyBhbmQgaG93IGB0bHNfc2V0c29ja29wdGAgbWlnaHQgYWZmZWN0IHRoZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgc2VjdXJpdHkgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBhcmUgd2UgdGFsa2luZyBhYm91dCBwZXItc29ja2V0IHNlY3VyaXR5IHBhcmFtZXRlcnMgb3IgZ2xvYmFsIHNldHRpbmdzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfc2V0c29ja29wdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYz01OTg9c3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtNjIyLVxubmV0L3Rscy90bHNfbWFpbi5jOjYyMzpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTYyNC1cdFx0XHRcdCAgdW5zaWduZWQgaW50IG9wdGxlbiwgaW50IHR4KVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy03ODMtXG5uZXQvdGxzL3Rsc19tYWluLmM6Nzg0OnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTc4NS1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTgwMy1cbm5ldC90bHMvdGxzX21haW4uYzo4MDQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTgwNS1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz04Mzk9c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy04NTAtXG5uZXQvdGxzL3Rsc19tYWluLmM6ODUxOnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTg1Mi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg3NS1cbm5ldC90bHMvdGxzX21haW4uYzo4NzY6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L3Rscy90bHNfbWFpbi5jLTg3Ny1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg4NC1cdFx0bG9ja19zb2NrKHNrKTtcbm5ldC90bHMvdGxzX21haW4uYzo4ODU6XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sXG5uZXQvdGxzL3Rsc19tYWluLmMtODg2LVx0XHRcdFx0XHQgICAgb3B0bmFtZSA9PSBUTFNfVFgpO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTAtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvdGxzL3Rsc19tYWluLmM6ODkxOlx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvdGxzL3Rsc19tYWluLmMtODkyLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTQtXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxubmV0L3Rscy90bHNfbWFpbi5jOjg5NTpcdFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy04OTYtXHRcdGJyZWFrO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy04OTgtXHRcdGxvY2tfc29jayhzayk7XG5uZXQvdGxzL3Rsc19tYWluLmM6ODk5Olx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvdGxzL3Rsc19tYWluLmMtOTAwLVx0XHRyZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy05MDgtXG5uZXQvdGxzL3Rsc19tYWluLmM6OTA5OnN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L3Rscy90bHNfbWFpbi5jLTkxMC1cdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTkxNy1cbm5ldC90bHMvdGxzX21haW4uYzo5MTg6XHRyZXR1cm4gZG9fdGxzX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC90bHMvdGxzX21haW4uYy05MTktfVxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0xMDEyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDE1LVx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdID0gKmJhc2U7XG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5zZXRzb2Nrb3B0XHQ9IHRsc19zZXRzb2Nrb3B0O1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZ2V0c29ja29wdFx0PSB0bHNfZ2V0c29ja29wdDtcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTI1MjU9aW50IHRsc19zZXRfc3dfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2ssIGludCB0eCxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTI2MzMtXHRcdFx0ICAgICAgY2lwaGVyX2Rlc2MtXHUwMDNlY3J5cHRvX2luZm8sXG5uZXQvdGxzL3Rsc19zdy5jOjI2MzQ6XHRcdFx0ICAgICAgLyogc2l6ZSB3YXMgY2hlY2tlZCBpbiBkb190bHNfc2V0c29ja29wdF9jb25mICovKTtcbm5ldC90bHMvdGxzX3N3LmMtMjYzNS1cdFx0bWVtemVyb19leHBsaWNpdChuZXdfY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVx1MDAzZWNyeXB0b19pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4cGxvcmluZyBUTFMgYW5kIFVMUCBSZWdpc3RyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgd2l0aGluIFRMUyBhbmQgYHRsc19tYWluLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9yIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nIHdpdGhpbiB0aGUgVExTIHN0cnVjdHVyZSBpdHNlbGYuIEkgd2FudCB0byBleHBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW52aXJvbm1lbnQuCgpJIHNob3VsZCBleGFtaW5lIGB0bHNfbWFpbi5jYCBzcGVjaWZpY2FsbHksIGFuZCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYXJlYSBhcm91bmQgYGJ1aWxkX3Byb3Rvc2AgYW5kIFVMUCByZWdpc3RyYXRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3BvdCB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDAwOlx0XHQgICAgdW5saWtlbHkocHJvdCAhPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNhdmVkX3RjcHY0X3Byb3QpKSkge1xuMTAwMTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRjcHY0X3Byb3RfbXV0ZXgpO1xuMTAwMjpcdFx0XHRpZiAobGlrZWx5KHByb3QgIT0gc2F2ZWRfdGNwdjRfcHJvdCkpIHtcbjEwMDM6XHRcdFx0XHRidWlsZF9wcm90b3ModGxzX3Byb3RzW1RMU1Y0XSwgcHJvdCk7XG4xMDA0Olx0XHRcdFx0YnVpbGRfcHJvdG9fb3BzKHRsc19wcm90b19vcHNbVExTVjRdLFxuMTAwNTpcdFx0XHRcdFx0XHRzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzKTtcbjEwMDY6XHRcdFx0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzYXZlZF90Y3B2NF9wcm90LCBwcm90KTtcbjEwMDc6XHRcdFx0fVxuMTAwODpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2dGNwdjRfcHJvdF9tdXRleCk7XG4xMDA5Olx0XHR9XG4xMDEwOlx0fVxuMTAxMTpcdFxuMTAxMjpcdHN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuMTAxMzpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgcHJvdG8gKmJhc2UpXG4xMDE0Olx0e1xuMTAxNTpcdFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdID0gKmJhc2U7XG4xMDE2Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdFx0PSB0bHNfc2V0c29ja29wdDtcbjEwMTc6XHRcdHByb3RbVExTX0JBU0VdW1RMU19CQVNFXS5nZXRzb2Nrb3B0XHQ9IHRsc19nZXRzb2Nrb3B0O1xuMTAxODpcdFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLmRpc2Nvbm5lY3RcdD0gdGxzX2Rpc2Nvbm5lY3Q7XG4xMDE5Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uY2xvc2VcdFx0PSB0bHNfc2tfcHJvdG9fY2xvc2U7XG4xMDIwOlx0XG4xMDIxOlx0XHRwcm90W1RMU19TV11bVExTX0JBU0VdID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xuMTAyMjpcdFx0cHJvdFtUTFNfU1ddW1RMU19CQVNFXS5zZW5kbXNnXHRcdD0gdGxzX3N3X3NlbmRtc2c7XG4xMDIzOlx0XHRwcm90W1RMU19TV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcdD0gdGxzX3N3X3NwbGljZV9lb2Y7XG4xMDI0Olx0XG4xMDI1Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xuMTAyNjpcdFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5yZWN2bXNnXHRcdCAgPSB0bHNfc3dfcmVjdm1zZztcbjEwMjc6XHRcdHByb3RbVExTX0JBU0VdW1RMU19TV10uc29ja19pc19yZWFkYWJsZSAgID0gdGxzX3N3X3NvY2tfaXNfcmVhZGFibGU7XG4xMDI4Olx0XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLmNsb3NlXHRcdCAgPSB0bHNfc2tfcHJvdG9fY2xvc2U7XG4xMDI5Olx0XG4xMDMwOlx0XHRwcm90W1RMU19TV11bVExTX1NXXSA9IHByb3RbVExTX1NXXVtUTFNfQkFTRV07XG4xMDMxOlx0XHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXHRcdD0gdGxzX3N3X3JlY3Ztc2c7XG4xMDMyOlx0XHRwcm90W1RMU19TV11bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcbjEwMzM6XHRcdHByb3RbVExTX1NXXVtUTFNfU1ddLmNsb3NlXHRcdD0gdGxzX3NrX3Byb3RvX2Nsb3NlO1xuMTAzNDpcdFxuMTAzNTpcdCNpZmRlZiBDT05GSUdfVExTX0RFVklDRVxuMTAzNjpcdFx0cHJvdFtUTFNfSFddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcbjEwMzc6XHRcdHByb3RbVExTX0hXXVtUTFNfQkFTRV0uc2VuZG1zZ1x0XHQ9IHRsc19kZXZpY2Vfc2VuZG1zZztcbjEwMzg6XHRcdHByb3RbVExTX0hXXVtUTFNfQkFTRV0uc3BsaWNlX2VvZlx0PSB0bHNfZGV2aWNlX3NwbGljZV9lb2Y7XG4xMDM5Olx0XG4xMDQwOlx0XHRwcm90W1RMU19IV11bVExTX1NXXSA9IHByb3RbVExTX0JBU0VdW1RMU19TV107XG4xMDQxOlx0XHRwcm90W1RMU19IV11bVExTX1NXXS5zZW5kbXNnXHRcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xuMTA0MjpcdFx0cHJvdFtUTFNfSFddW1RMU19TV10uc3BsaWNlX2VvZlx0XHQ9IHRsc19kZXZpY2Vfc3BsaWNlX2VvZjtcbjEwNDM6XHRcbjEwNDQ6XHRcdHByb3RbVExTX0JBU0VdW1RMU19IV10gPSBwcm90W1RMU19CQVNFXVtUTFNfU1ddO1xuMTA0NTpcdFxuMTA0NjpcdFx0cHJvdFtUTFNfU1ddW1RMU19IV10gPSBwcm90W1RMU19TV11bVExTX1NXXTtcbjEwNDc6XHRcbjEwNDg6XHRcdHByb3RbVExTX0hXXVtUTFNfSFddID0gcHJvdFtUTFNfSFddW1RMU19TV107XG4xMDQ5Olx0I2VuZGlmXG4xMDUwOlx0fVxuMTA1MTpcdFxuMTA1MjpcdHN0YXRpYyBpbnQgdGxzX2luaXQoc3RydWN0IHNvY2sgKnNrKVxuMTA1MzpcdHtcbjEwNTQ6XHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xuMTA1NTpcdFx0aW50IHJjID0gMDtcbjEwNTY6XHRcbjEwNTc6XHRcdHRsc19idWlsZF9wcm90byhzayk7XG4xMDU4Olx0XG4xMDU5Olx0XHQvKiBUaGUgVExTIHVscCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgZm9yIFRDUCBzb2NrZXRzXG4xMDYwOlx0XHQgKiBpbiBFU1RBQkxJU0hFRCBzdGF0ZS5cbjEwNjE6XHRcdCAqIFN1cHBvcnRpbmcgc29ja2V0cyBpbiBMSVNURU4gc3RhdGUgd2lsbCByZXF1aXJlIHVzXG4xMDYyOlx0XHQgKiB0byBtb2RpZnkgdGhlIGFjY2VwdCBpbXBsZW1lbnRhdGlvbiB0byBjbG9uZSByYXRoZXIgdGhlblxuMTA2MzpcdFx0ICogc2hhcmUgdGhlIHVscCBjb250ZXh0LlxuMTA2NDpcdFx0ICovXG4xMDY1Olx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKVxuMTA2NjpcdFx0XHRyZXR1cm4gLUVOT1RDT05OO1xuMTA2NzpcdFxuMTA2ODpcdFx0LyogYWxsb2NhdGUgdGxzIGNvbnRleHQgKi9cbjEwNjk6XHRcdHdyaXRlX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfY2FsbGJhY2tfbG9jayk7XG4xMDcwOlx0XHRjdHggPSB0bHNfY3R4X2NyZWF0ZShzayk7XG4xMDcxOlx0XHRpZiAoIWN0eCkge1xuMTA3MjpcdFx0XHRyYyA9IC1FTk9NRU07XG4xMDczOlx0XHRcdGdvdG8gb3V0O1xuMTA3NDpcdFx0fVxuMTA3NTpcdFxuMTA3NjpcdFx0Y3R4LVx1MDAzZXR4X2NvbmYgPSBUTFNfQkFTRTtcbjEwNzc6XHRcdGN0eC1cdTAwM2VyeF9jb25mID0gVExTX0JBU0U7XG4xMDc4Olx0XHRjdHgtXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuID0gVExTX01BWF9QQVlMT0FEX1NJWkU7XG4xMDc5Olx0XHR1cGRhdGVfc2tfcHJvdChzaywgY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBUTFMgUGF5bG9hZCBTaXplIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgbWF4aW11bSBwYXlsb2FkIHNpemUgZm9yIFRMUyB0cmFuc21pc3Npb25zLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBUTFNfVFhfTUFYX1BBWUxPQURfU0laRWAsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYFRMU19NQVhfUEFZTE9BRF9TSVpFYCBvcHRpb24gd2hlbiB3ZSYjMzk7cmUgdXNpbmcgYHNldHNvY2tvcHRgLiBKdXN0IHdhbnQgdG8gY29uZmlybSB0aGF0IG1hcHBpbmcuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBgb3B0bmFtZWAgdmFsdWVzIGluIGBkb190bHNfc2V0c29ja29wdGAg4oCTIGdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgb3B0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4gSSB3YW50IHRvIGNvbmZpcm0gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGNvcnJlY3Qgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHRcbiA4NzE6XHRcdGN0eC1cdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSB2YWx1ZTtcbiA4NzI6XHRcbiA4NzM6XHRcdHJldHVybiAwO1xuIDg3NDpcdH1cbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gODc3Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIDg3ODpcdHtcbiA4Nzk6XHRcdGludCByYyA9IDA7XG4gODgwOlx0XG4gODgxOlx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA4ODI6XHRcdGNhc2UgVExTX1RYOlxuIDg4MzpcdFx0Y2FzZSBUTFNfUlg6XG4gODg0Olx0XHRcdGxvY2tfc29jayhzayk7XG4gODg1Olx0XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfY29uZihzaywgb3B0dmFsLCBvcHRsZW4sXG4gODg2Olx0XHRcdFx0XHRcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XG4gODg3Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gODg4Olx0XHRcdGJyZWFrO1xuIDg4OTpcdFx0Y2FzZSBUTFNfVFhfWkVST0NPUFlfUk86XG4gODkwOlx0XHRcdGxvY2tfc29jayhzayk7XG4gODkxOlx0XHRcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcbiA4OTI6XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA4OTM6XHRcdFx0YnJlYWs7XG4gODk0Olx0XHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxuIDg5NTpcdFx0XHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xuIDg5NjpcdFx0XHRicmVhaztcbiA4OTc6XHRcdGNhc2UgVExTX1RYX01BWF9QQVlMT0FEX0xFTjpcbiA4OTg6XHRcdFx0bG9ja19zb2NrKHNrKTtcbiA4OTk6XHRcdFx0cmMgPSBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzaywgb3B0dmFsLCBvcHRsZW4pO1xuIDkwMDpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDkwMTpcdFx0XHRicmVhaztcbiA5MDI6XHRcdGRlZmF1bHQ6XG4gOTAzOlx0XHRcdHJjID0gLUVOT1BST1RPT1BUO1xuIDkwNDpcdFx0XHRicmVhaztcbiA5MDU6XHRcdH1cbiA5MDY6XHRcdHJldHVybiByYztcbiA5MDc6XHR9XG4gOTA4Olx0XG4gOTA5Olx0c3RhdGljIGludCB0bHNfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRMUyBCdWcgRml4IGFuZCBJdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugc29tZW9uZSBhZGRlZCBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIHRvIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSYjMzk7dmUgcmVwbGFjZWQgYSBkaXJlY3QsIHVuY2hlY2tlZCBjYXN0IG9mIGBjdHgtJmd0O3ByaXZfY3R4X3R4YCB0byBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgIHdpdGggYSBmdW5jdGlvbiB0aGF0ICppbnRlbGxpZ2VudGx5KiBkZXRlcm1pbmVzIGlmIHRoZSByZWNvcmQgaXMgb3Blbi4gQmVmb3JlLCB0aGUgY29kZSB3YXMgaW1wbGljaXRseSBhc3N1bWluZyBpdCB3YXMgZGVhbGluZyB3aXRoIHNvZnR3YXJlIFRMUyAoYFRMU19TV2ApLiBOb3csIGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBoYXJkd2FyZSBvZmZsb2FkIGNhc2UgKGBUTFNfSFdgKSBieSBjaGVja2luZyBgY3R4LSZndDt0eF9jb25mYC4KClRoZSBvbGQgY29kZSB3YXMgZG9pbmcgYSBibGluZCBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgZXZlbiBpZiBoYXJkd2FyZSBvZmZsb2FkIHdhcyBlbmFibGVkLiBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIGFkZHJlc3NlcyB0aGlzIGJ5IHVzaW5nIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRoYXQgY2hlY2tzIGBjdHgtJmd0O3R4X2NvbmZgLiBEZXBlbmRpbmcgb24gd2hldGhlciBpdCYjMzk7cyBzb2Z0d2FyZSBvciBoYXJkd2FyZSBUTFMsIGl0IGNhbGxzIHRoZSByaWdodCBmdW5jdGlvbiAoYHRsc19zd19jdHhfdHgoY3R4KWAgb3IgYHRsc19vZmZsb2FkX2N0eF90eChjdHgpYCkgdG8gZ2V0IHRoZSByZWxldmFudCBgb3Blbl9yZWNgIG9yIGBvcGVuX3JlY29yZGAgZmllbGQsIHJlc3BlY3RpdmVseS4gQ3J1Y2lhbGx5LCBpdCBoYW5kbGVzIHRoZSBgZGVmYXVsdGAgY2FzZSwgcmV0dXJuaW5nIGBmYWxzZWAgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdW5leHBlY3RlZC4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgZml4LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIGBUTFNfVFhfTUFYX1BBWUxPQURfTEVOYCBpcyB1c2VkLCBlc3BlY2lhbGx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBpbnZvbHZlZC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgbXkgd29yazogaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZnV6ej8gQWJzb2x1dGVseS4gS2VybmVsIFRMUyAoa3RscykgaXMgYSBwcmltZSB0YXJnZXQuIEl0JiMzOTtzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0cyBhbmQgYHNldHNvY2tvcHRgIHdpdGggYFRDUF9VTFBgIC0mZ3Q7ICYjMzQ7dGxzJiMzNDsgYW5kIGBzZXRzb2Nrb3B0KFNPTF9UTFMsIC4uLilgLiBUaGF0JiMzOTtzIGVhc3kgdG8gc2V0IHVwLCBlYXN5IHRvIHJlcHJvZHVjZSBpbiBRRU1VIG9yIEdDRSwgYW5kIHNvZnR3YXJlIFRMUyBpcyBzdGFuZGFyZC4gSWYgdGhlcmUgYXJlIGFueSBkdW1teSBvciBlbXVsYXRlZCBoYXJkd2FyZSBvZmZsb2FkIGRldmljZXMsIHRob3NlIHdvdWxkIGJlIGdyZWF0IHRvbywgYnV0IHNvZnR3YXJlIFRMUyBpcyBsaWtlbHkgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIGZpeCBhbHNvIGludm9sdmVzIGBUTFNfVFhfTUFYX1BBWUxPQURfTEVOYCwgc28gdGhhdCYjMzk7cyBhbm90aGVyIHZlY3RvciBJIHNob3VsZCBjb25zaWRlci4KCk5leHQgc3RlcDogSSBzaG91bGQgY2hlY2sgd2hlcmUgZWxzZSBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCwgYG9wZW5fcmVjb3JkYCwgb3IgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gIGFyZSB1c2VkIGluIHRoZSBjb2RlIGJhc2UuIFRoYXQgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBjb250cm9sIGZsb3dzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcGVuX3JlY29yZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9Mjc1PXN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzLmgtMjc5LVxubmV0L3Rscy90bHMuaDoyODA6c3RhdGljIGlubGluZSBib29sIHRsc19pc19wZW5kaW5nX29wZW5fcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzLmgtMjgxLXtcbm5ldC90bHMvdGxzLmg6MjgyOlx0cmV0dXJuIHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncztcbm5ldC90bHMvdGxzLmgtMjgzLX1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xOTc9dm9pZCB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDQtXHRpZiAodGxzX2N0eC1cdTAwM2V0eF9jb25mID09IFRMU19IVykge1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MjA1Olx0XHRpZiAoY3R4LVx1MDAzZW9wZW5fcmVjb3JkKVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjA2Olx0XHRcdGRlc3Ryb3lfcmVjb3JkKGN0eC1cdTAwM2VvcGVuX3JlY29yZCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDctXHRcdGRlbGV0ZV9hbGxfcmVjb3JkcyhjdHgpO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTI3OT1zdGF0aWMgaW50IHRsc19wdXNoX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjkxLVx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cmVjb3JkLVx1MDAzZWxpc3QsIFx1MDAyNm9mZmxvYWRfY3R4LVx1MDAzZXJlY29yZHNfbGlzdCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyOTI6XHRvZmZsb2FkX2N0eC1cdTAwM2VvcGVuX3JlY29yZCA9IE5VTEw7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yOTMtXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzQyPXN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjEtXHRyZWNvcmQtXHUwMDNlbGVuID0gcHJlcGVuZF9zaXplO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MzYyOlx0b2ZmbG9hZF9jdHgtXHUwMDNlb3Blbl9yZWNvcmQgPSByZWNvcmQ7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjMtXHRyZXR1cm4gMDtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0zNjY9c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzcyLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzczOlx0aWYgKCFvZmZsb2FkX2N0eC1cdTAwM2VvcGVuX3JlY29yZCkge1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzc0LVx0XHRpZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVmaWxsKHByZXBlbmRfc2l6ZSwgcGZyYWcsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDMyLVx0c2l6ZV90IG9yaWdfc2l6ZSA9IHNpemU7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0MzM6XHR1MzIgbWF4X29wZW5fcmVjb3JkX2xlbjtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQzNC1cdGJvb2wgbW9yZSA9IGZhbHNlO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTQ2NC1cdCAqL1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDY1Olx0bWF4X29wZW5fcmVjb3JkX2xlbiA9IHRsc19jdHgtXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuICYjNDM7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjYtXHRcdFx0ICAgICAgcHJvdC1cdTAwM2VwcmVwZW5kX3NpemU7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDczLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NDc0Olx0XHRcdHJlY29yZCA9IGN0eC1cdTAwM2VvcGVuX3JlY29yZDtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ3NS1cdFx0XHRpZiAoIXJlY29yZClcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00ODQtXHRcdFx0XHRkZXN0cm95X3JlY29yZChyZWNvcmQpO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDg1Olx0XHRcdFx0Y3R4LVx1MDAzZW9wZW5fcmVjb3JkID0gTlVMTDtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ4Ni1cdFx0XHR9IGVsc2UgaWYgKHJlY29yZC1cdTAwM2VsZW4gXHUwMDNlIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplKSB7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDkyLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NDkzOlx0XHRyZWNvcmQgPSBjdHgtXHUwMDNlb3Blbl9yZWNvcmQ7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00OTQtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0OTU6XHRcdGNvcHkgPSBtaW5fdChzaXplX3QsIHNpemUsIG1heF9vcGVuX3JlY29yZF9sZW4gLSByZWNvcmQtXHUwMDNlbGVuKTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ5Ni1cdFx0aWYgKGNvcHkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykpIHtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NDItXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NDM6XHRcdGlmIChkb25lIHx8IHJlY29yZC1cdTAwM2VsZW4gXHUwMDNlPSBtYXhfb3Blbl9yZWNvcmRfbGVuIHx8XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NDQtXHRcdCAgICAocmVjb3JkLVx1MDAzZW51bV9mcmFncyBcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSkge1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU1Ny1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU1ODpcdHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IG1vcmU7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NTktXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk5LVx0aWYgKCF0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIFx1MDAyNlx1MDAyNlxubmV0L3Rscy90bHNfZGV2aWNlLmM6NjAwOlx0ICAgICF0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSlcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwMS1cdFx0cmV0dXJuO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTYwNi1cdGlmICh0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIHx8XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo2MDc6XHQgICAgdGxzX2lzX3BlbmRpbmdfb3Blbl9yZWNvcmQodGxzX2N0eCkpIHtcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwOC1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTE2OD1pbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yMjUtXG5uZXQvdGxzL3Rsc19tYWluLmM6MjI2OnN0YXRpYyBpbnQgdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC90bHMvdGxzX21haW4uYy0yMjcte1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yMjktXG5uZXQvdGxzL3Rsc19tYWluLmM6MjMwOlx0aWYgKHRsc19pc19wZW5kaW5nX29wZW5fcmVjb3JkKGN0eCkpXG5uZXQvdGxzL3Rsc19tYWluLmMtMjMxLVx0XHRyZXR1cm4gY3R4LVx1MDAzZXB1c2hfcGVuZGluZ19yZWNvcmQoc2ssIGZsYWdzKTtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MjM2PWludCB0bHNfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0yNTctXG5uZXQvdGxzL3Rsc19tYWluLmM6MjU4Olx0XHRcdHJjID0gdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzaywgbXNnLVx1MDAzZW1zZ19mbGFncyk7XG5uZXQvdGxzL3Rsc19tYWluLmMtMjU5LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz0zMzg9c3RhdGljIHZvaWQgdGxzX3NrX3Byb3RvX2NsZWFudXAoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0zNDItXHQgICAgIXdhaXRfb25fcGVuZGluZ193cml0ZXIoc2ssIFx1MDAyNnRpbWVvKSlcbm5ldC90bHMvdGxzX21haW4uYzozNDM6XHRcdHRsc19oYW5kbGVfb3Blbl9yZWNvcmQoc2ssIDApO1xubmV0L3Rscy90bHNfbWFpbi5jLTM0NC1cbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtODQ0LVx0Y2FzZSBUTFNfSFc6XG5uZXQvdGxzL3Rsc19tYWluLmM6ODQ1Olx0XHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlY29yZDtcbm5ldC90bHMvdGxzX21haW4uYy04NDYtXHRkZWZhdWx0OlxuLS1cbm5ldC90bHMvdGxzX3N3LmM9NjE3PXN0YXRpYyBpbnQgdGxzX3B1c2hfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNjg2LVxubmV0L3Rscy90bHNfc3cuYzo2ODc6XHR0bHNfY3R4LVx1MDAzZXBlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3MgPSBmYWxzZTtcbm5ldC90bHMvdGxzX3N3LmMtNjg4LVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtODYxLVx0XHRcdFx0Z290byBzZW5kX2VuZDtcbm5ldC90bHMvdGxzX3N3LmM6ODYyOlx0XHRcdHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IHRydWU7XG5uZXQvdGxzL3Rsc19zdy5jLTg2My1cbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTk0Mi1cdFx0ICovXG5uZXQvdGxzL3Rsc19zdy5jOjk0MzpcdFx0dGxzX2N0eC1cdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gdHJ1ZTtcbm5ldC90bHMvdGxzX3N3LmMtOTQ0LVx0XHRjb3BpZWQgJiM0Mzs9IHRyeV90b19jb3B5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRMUyBTb2NrZXQgT3B0aW9uIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBUTFMgc29ja2V0IG9wdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhlIHRyYWNlIHNob3dzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgYmVpbmcgY2FsbGVkIGZyb20gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgcmVsYXRlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAgdG8gYHRsc19zZXRzb2Nrb3B0YC4gUmlnaHQsIGhlcmUgd2UgZ28uLi4KCkxvb2tzIGxpa2UgYHRsc19zZXRzb2Nrb3B0YCBpcyB0aGUgY29yZSwgYW5kIEkgc2VlIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCYjMzk7cyBjb25maW5lZCB0byBgdGxzX21haW4uY2AsIHdoaWNoIG1ha2VzIHRoaW5ncyBhIGJpdCBzaW1wbGVyIGZvciBub3cuIE9rYXksIGB0bHNfc2V0c29ja29wdGAgaXMgYXNzaWduZWQgdG8gYHByb3QtJmd0O3NldHNvY2tvcHRgLCB3aGljaCBnaXZlcyB1cyBhIHdheSBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKTm93LCBJIG5lZWQgdG8gem9vbSBvdXQgYW5kIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMgYW5kIGtleSBzeW1ib2xzIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciBUTFMgZmlsZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZmlsZSBvdmVydmlldywgY2hlY2tpbmcgYWxsIGZ1bmN0aW9ucy9maWxlcyBpbiBgbmV0L3Rscy9gLiBUaGF0IHdpbGwgaGVscCBtZSBncmFzcCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIHNvY2tldCBvcHRpb24gaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBvbmNlIEkgZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYXZhaWxhYmxlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgdGxzX3xedm9pZCB0bHNfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHMuaD0xMzk9c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4X2NyZWF0ZShzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoxNDA6dm9pZCB0bHNfY3R4X2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XG5uZXQvdGxzL3Rscy5oLTE0MS12b2lkIHVwZGF0ZV9za19wcm90KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xuLS1cbm5ldC90bHMvdGxzLmg9MTQzPWludCB3YWl0X29uX3BlbmRpbmdfd3JpdGVyKHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW8pO1xubmV0L3Rscy90bHMuaDoxNDQ6dm9pZCB0bHNfZXJyX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycik7XG5uZXQvdGxzL3Rscy5oOjE0NTp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpO1xubmV0L3Rscy90bHMuaC0xNDYtXG5uZXQvdGxzL3Rscy5oPTE0Nz1pbnQgaW5pdF9wcm90X2luZm8oc3RydWN0IHRsc19wcm90X2luZm8gKnByb3QsXG4tLVxubmV0L3Rscy90bHMuaC0xNDktXHRcdCAgIGNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjKTtcbm5ldC90bHMvdGxzLmg6MTUwOmludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXG5uZXQvdGxzL3Rscy5oLTE1MS1cdFx0ICAgICAgIHN0cnVjdCB0bHNfY3J5cHRvX2luZm8gKm5ld19jcnlwdG9faW5mbyk7XG5uZXQvdGxzL3Rscy5oOjE1Mjp2b2lkIHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xubmV0L3Rscy90bHMuaDoxNTM6dm9pZCB0bHNfc3dfc3RycGFyc2VyX2FybShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KTtcbm5ldC90bHMvdGxzLmg6MTU0OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9kb25lKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE1NTppbnQgdGxzX3N3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcbm5ldC90bHMvdGxzLmg6MTU2OnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvdGxzL3Rscy5oOjE1Nzp2b2lkIHRsc19zd19jYW5jZWxfd29ya190eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xubmV0L3Rscy90bHMuaDoxNTg6dm9pZCB0bHNfc3dfcmVsZWFzZV9yZXNvdXJjZXNfdHgoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTU5OnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE2MDp2b2lkIHRsc19zd19mcmVlX3Jlc291cmNlc19yeChzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoxNjE6dm9pZCB0bHNfc3dfcmVsZWFzZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTYyOnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE2MzppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdGxzL3Rscy5oLTE2NC1cdFx0ICAgaW50IGZsYWdzKTtcbi0tXG5uZXQvdGxzL3Rscy5oPTE2Nj1zc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXG4tLVxubmV0L3Rscy90bHMuaC0xNjgtXHRcdFx0ICAgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTtcbm5ldC90bHMvdGxzLmg6MTY5OmludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG5uZXQvdGxzL3Rscy5oLTE3MC1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XG5uZXQvdGxzL3Rscy5oLTE3MS1cbm5ldC90bHMvdGxzLmg6MTcyOmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTtcbm5ldC90bHMvdGxzLmg6MTczOnZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xubmV0L3Rscy90bHMuaDoxNzQ6aW50IHRsc190eF9yZWNvcmRzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTtcbm5ldC90bHMvdGxzLmgtMTc1LVxubmV0L3Rscy90bHMuaDoxNzY6dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XG5uZXQvdGxzL3Rscy5oOjE3Nzp2b2lkIHRsc19kZXZpY2Vfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XG5uZXQvdGxzL3Rscy5oLTE3OC1cbm5ldC90bHMvdGxzLmg6MTc5OmludCB0bHNfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L3Rscy90bHMuaC0xODAtXHRcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpO1xubmV0L3Rscy90bHMuaD0xODE9aW50IGRlY3J5cHRfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ291dCk7XG5uZXQvdGxzL3Rscy5oLTE4Mi1cbm5ldC90bHMvdGxzLmg6MTgzOmludCB0bHNfc3dfZmFsbGJhY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rscy5oLTE4NC1cdFx0XHQgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxuLS1cbm5ldC90bHMvdGxzLmgtMTg2LVxubmV0L3Rscy90bHMuaDoxODc6aW50IHRsc19zdHJwX2Rldl9pbml0KHZvaWQpO1xubmV0L3Rscy90bHMuaDoxODg6dm9pZCB0bHNfc3RycF9kZXZfZXhpdCh2b2lkKTtcbm5ldC90bHMvdGxzLmgtMTg5LVxubmV0L3Rscy90bHMuaDoxOTA6dm9pZCB0bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcbm5ldC90bHMvdGxzLmgtMTkxLXZvaWQgX190bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcbm5ldC90bHMvdGxzLmg6MTkyOnZvaWQgdGxzX3N0cnBfc3RvcChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oOjE5MzppbnQgdGxzX3N0cnBfaW5pdChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTk0OnZvaWQgdGxzX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTE5NS1cbm5ldC90bHMvdGxzLmg6MTk2OnZvaWQgdGxzX3N0cnBfY2hlY2tfcmN2KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGFubm91bmNlKTtcbm5ldC90bHMvdGxzLmg6MTk3OnZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xubmV0L3Rscy90bHMuaC0xOTgtXG5uZXQvdGxzL3Rscy5oOjE5OTppbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC90bHMvdGxzLmg6MjAwOnZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XG5uZXQvdGxzL3Rscy5oLTIwMS1cbm5ldC90bHMvdGxzLmg9MjAyPWJvb2wgdGxzX3N0cnBfbXNnX2xvYWQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgZm9yY2VfcmVmcmVzaCk7XG5uZXQvdGxzL3Rscy5oOjIwMzppbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCk7XG5uZXQvdGxzL3Rscy5oLTIwNC1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCk7XG5uZXQvdGxzL3Rscy5oOjIwNTppbnQgdGxzX3N0cnBfbXNnX2hvbGQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmX2hlYWQgKmRzdCk7XG5uZXQvdGxzL3Rscy5oLTIwNi1cbi0tXG5uZXQvdGxzL3Rscy5oPTIyNT1zdGF0aWMgaW5saW5lIGJvb2wgdGxzX3N0cnBfbXNnX21peGVkX2RlY3J5cHRlZChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbi0tXG5uZXQvdGxzL3Rscy5oLTIzMC0jaWZkZWYgQ09ORklHX1RMU19ERVZJQ0Vcbm5ldC90bHMvdGxzLmg6MjMxOmludCB0bHNfZGV2aWNlX2luaXQodm9pZCk7XG5uZXQvdGxzL3Rscy5oOjIzMjp2b2lkIHRsc19kZXZpY2VfY2xlYW51cCh2b2lkKTtcbm5ldC90bHMvdGxzLmg6MjMzOmludCB0bHNfc2V0X2RldmljZV9vZmZsb2FkKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvdGxzL3Rscy5oOjIzNDp2b2lkIHRsc19kZXZpY2VfZnJlZV9yZXNvdXJjZXNfdHgoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MjM1OmludCB0bHNfc2V0X2RldmljZV9vZmZsb2FkX3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xubmV0L3Rscy90bHMuaDoyMzY6dm9pZCB0bHNfZGV2aWNlX29mZmxvYWRfY2xlYW51cF9yeChzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3Rscy90bHMuaDoyMzc6dm9pZCB0bHNfZGV2aWNlX3J4X3Jlc3luY19uZXdfcmVjKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjZF9sZW4sIHUzMiBzZXEpO1xubmV0L3Rscy90bHMuaDoyMzg6aW50IHRsc19kZXZpY2VfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KTtcbm5ldC90bHMvdGxzLmgtMjM5LSNlbHNlXG4tLVxubmV0L3Rscy90bHMuaD0yNjI9dGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxubmV0L3Rscy90bHMuaC0yNjctXG5uZXQvdGxzL3Rscy5oOjI2ODppbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbm5ldC90bHMvdGxzLmgtMjY5LVx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1MTYgZmlyc3Rfb2Zmc2V0LFxubmV0L3Rscy90bHMuaC0yNzAtXHRcdGludCBmbGFncyk7XG5uZXQvdGxzL3Rscy5oOjI3MTppbnQgdGxzX3B1c2hfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbm5ldC90bHMvdGxzLmgtMjcyLVx0XHRcdCAgICBpbnQgZmxhZ3MpO1xubmV0L3Rscy90bHMuaDoyNzM6dm9pZCB0bHNfZnJlZV9wYXJ0aWFsX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KTtcbm5ldC90bHMvdGxzLmgtMjc0LVxuLS1cbm5ldC90bHMvdGxzLmg9MzY0PXN0YXRpYyBpbmxpbmVcbm5ldC90bHMvdGxzLmg6MzY1OnZvaWQgdGxzX21ha2VfYWFkKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNoYXIgKnJlY29yZF9zZXF1ZW5jZSxcbm5ldC90bHMvdGxzLmgtMzY2LVx0XHQgIHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUsIHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTE2Mj1zdGF0aWMgdm9pZCB0bHNfdGNwX2NsZWFuX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFja2VkX3NlcSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xOTYtICovXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxOTc6dm9pZCB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OC17XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9MjE0PUVYUE9SVF9TWU1CT0xfR1BMKHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3QpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMjE1LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjE2OnZvaWQgdGxzX2RldmljZV9mcmVlX3Jlc291cmNlc190eChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMTcte1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTIyMi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjIyMzp2b2lkIHRsc19vZmZsb2FkX3R4X3Jlc3luY19yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgdTMyIGdvdF9zZXEsIHUzMiBleHBfc2VxKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjI0LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NjUtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NjY6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01Njcte1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU5Mi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU5Mzp2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk0LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgzLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6Njg0OnZvaWQgdGxzX2RldmljZV93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjg1LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz03MTY9dGxzX2RldmljZV9yeF9yZXN5bmNfYXN5bmMoc3RydWN0IHRsc19vZmZsb2FkX3Jlc3luY19hc3luYyAqcmVzeW5jX2FzeW5jLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTc3Mi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjc3Mzp2b2lkIHRsc19kZXZpY2VfcnhfcmVzeW5jX25ld19yZWMoc3RydWN0IHNvY2sgKnNrLCB1MzIgcmNkX2xlbiwgdTMyIHNlcSlcbm5ldC90bHMvdGxzX2RldmljZS5jLTc3NC17XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9ODg2PXRsc19kZXZpY2VfcmVlbmNyeXB0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTk3Ni1cbm5ldC90bHMvdGxzX2RldmljZS5jOjk3NzppbnQgdGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy05Nzgte1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTEwNDE9c3RhdGljIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICphbGxvY19vZmZsb2FkX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMDY0LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTA2NTppbnQgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMDY2LXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTk0LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTE5NTppbnQgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTE5Ni17XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTI3MC1cbm5ldC90bHMvdGxzX2RldmljZS5jOjEyNzE6dm9pZCB0bHNfZGV2aWNlX29mZmxvYWRfY2xlYW51cF9yeChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMjcyLXtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz00MzQ9RVhQT1JUX1NZTUJPTF9HUEwodGxzX2VuY3J5cHRfc2tiKTtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTQzNS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjQzNjppbnQgdGxzX3N3X2ZhbGxiYWNrX2luaXQoc3RydWN0IHNvY2sgKnNrLFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtNDM3LVx0XHRcdCBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTEzOT1pbnQgd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xNjctXG5uZXQvdGxzL3Rsc19tYWluLmM6MTY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19tYWluLmMtMTY5LVx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MjI2PXN0YXRpYyBpbnQgdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmMtMjM1LVxubmV0L3Rscy90bHNfbWFpbi5jOjIzNjppbnQgdGxzX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC90bHMvdGxzX21haW4uYy0yMzctXHRcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTI2Ny1cbm5ldC90bHMvdGxzX21haW4uYzoyNjg6aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXG5uZXQvdGxzL3Rsc19tYWluLmMtMjY5LVx0XHRcdCAgICBpbnQgZmxhZ3MpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTI4MC1cbm5ldC90bHMvdGxzX21haW4uYzoyODE6dm9pZCB0bHNfZnJlZV9wYXJ0aWFsX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxubmV0L3Rscy90bHNfbWFpbi5jLTI4Mi17XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTI5Mj1zdGF0aWMgdm9pZCB0bHNfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0zMjItICovXG5uZXQvdGxzL3Rsc19tYWluLmM6MzIzOnZvaWQgdGxzX2N0eF9mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG5uZXQvdGxzL3Rsc19tYWluLmMtMzI0LXtcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmM9MTQ9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0bHNfc3RycF93cTtcbm5ldC90bHMvdGxzX3N0cnAuYy0xNS1cbm5ldC90bHMvdGxzX3N0cnAuYzoxNjp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTcte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz04NT1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTE5LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjEyMDppbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcbm5ldC90bHMvdGxzX3N0cnAuYy0xMjEte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy0xNDQtICovXG5uZXQvdGxzL3Rsc19zdHJwLmM6MTQ1OmludCB0bHNfc3RycF9tc2dfaG9sZChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHN0KVxubmV0L3Rscy90bHNfc3RycC5jLTE0Ni17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTUxMz1zdGF0aWMgaW50IHRsc19zdHJwX3JlYWRfc29jayhzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjU1Nzp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSlcbm5ldC90bHMvdGxzX3N0cnAuYy01NTgte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy01NjgtLyogTG93ZXIgc29jayBsb2NrIGhlbGQgKi9cbm5ldC90bHMvdGxzX3N0cnAuYzo1Njk6dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTU3MC17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jPTU4Nj1zdGF0aWMgdm9pZCB0bHNfc3RycF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjAwLSAqL1xubmV0L3Rscy90bHNfc3RycC5jOjYwMTp2b2lkIHRsc19zdHJwX21zZ19jb25zdW1lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTYwMi17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTYxNC1cbm5ldC90bHMvdGxzX3N0cnAuYzo2MTU6dm9pZCB0bHNfc3RycF9zdG9wKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxubmV0L3Rscy90bHNfc3RycC5jLTYxNi17XG4tLVxubmV0L3Rscy90bHNfc3RycC5jLTYxOS1cbm5ldC90bHMvdGxzX3N0cnAuYzo2MjA6aW50IHRsc19zdHJwX2luaXQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N0cnAuYy02MjEte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy02MzctICovXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjM4OnZvaWQgdGxzX3N0cnBfZG9uZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcbm5ldC90bHMvdGxzX3N0cnAuYy02Mzkte1xuLS1cbm5ldC90bHMvdGxzX3N0cnAuYz02NTI9aW50IF9faW5pdCB0bHNfc3RycF9kZXZfaW5pdCh2b2lkKVxuLS1cbm5ldC90bHMvdGxzX3N0cnAuYy02NjAtXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjYxOnZvaWQgdGxzX3N0cnBfZGV2X2V4aXQodm9pZClcbm5ldC90bHMvdGxzX3N0cnAuYy02NjIte1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9Mzk2PXN0YXRpYyB2b2lkIHRsc19mcmVlX29wZW5fcmVjKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTQwNy1cbm5ldC90bHMvdGxzX3N3LmM6NDA4OmludCB0bHNfdHhfcmVjb3JkcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC90bHMvdGxzX3N3LmMtNDA5LXtcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTc2Nj1zdGF0aWMgaW50IHRsc19zd19zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTEwMDctXG5uZXQvdGxzL3Rsc19zdy5jOjEwMDg6aW50IHRsc19zd19zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC90bHMvdGxzX3N3LmMtMTAwOS17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0xMDMwLSAqL1xubmV0L3Rscy90bHNfc3cuYzoxMDMxOnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC90bHMvdGxzX3N3LmMtMTAzMi17XG4tLVxubmV0L3Rscy90bHNfc3cuYz0xODAwPXN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xODA1LVxubmV0L3Rscy90bHNfc3cuYzoxODA2OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19zdy5jLTE4MDctXHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTE5OTk9c3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTIwNzItXG5uZXQvdGxzL3Rsc19zdy5jOjIwNzM6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC90bHMvdGxzX3N3LmMtMjA3NC1cdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcilcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTIxNzU9Ym9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMTgzLVxubmV0L3Rscy90bHNfc3cuYzoyMTg0OmludCB0bHNfcnhfbXNnX3NpemUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvdGxzL3Rsc19zdy5jLTIxODUte1xuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjI0Ni0gKi9cbm5ldC90bHMvdGxzX3N3LmM6MjI0Nzp2b2lkIHRsc19yeF9tc2dfbWF5YmVfYW5ub3VuY2Uoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXG5uZXQvdGxzL3Rsc19zdy5jLTIyNDgte1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjI1OT1zdGF0aWMgdm9pZCB0bHNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMjcyLVxubmV0L3Rscy90bHNfc3cuYzoyMjczOnZvaWQgdGxzX3N3X2NhbmNlbF93b3JrX3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjI3NC17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMjgxLVxubmV0L3Rscy90bHNfc3cuYzoyMjgyOnZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N3LmMtMjI4My17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzE1LVxubmV0L3Rscy90bHNfc3cuYzoyMzE2OnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjMxNy17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzIyLVxubmV0L3Rscy90bHNfc3cuYzoyMzIzOnZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3J4KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N3LmMtMjMyNC17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzQzLVxubmV0L3Rscy90bHNfc3cuYzoyMzQ0OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9kb25lKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjM0NS17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzUwLVxubmV0L3Rscy90bHNfc3cuYzoyMzUxOnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjM1Mi17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yMzU3LVxubmV0L3Rscy90bHNfc3cuYzoyMzU4OnZvaWQgdGxzX3N3X2ZyZWVfcmVzb3VyY2VzX3J4KHN0cnVjdCBzb2NrICpzaylcbm5ldC90bHMvdGxzX3N3LmMtMjM1OS17XG4tLVxubmV0L3Rscy90bHNfc3cuYz0yNDA0PXN0YXRpYyBib29sIHRsc19pc190eF9yZWFkeShzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTI0MTQtXG5uZXQvdGxzL3Rsc19zdy5jOjI0MTU6dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XG4tLVxubmV0L3Rscy90bHNfc3cuYy0yNDI0LVxubmV0L3Rscy90bHNfc3cuYzoyNDI1OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9hcm0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19zdy5jLTI0MjYte1xuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjQzNC1cbm5ldC90bHMvdGxzX3N3LmM6MjQzNTp2b2lkIHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19zdy5jLTI0MzYte1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjUxNj1zdGF0aWMgdm9pZCB0bHNfZmluaXNoX2tleV91cGRhdGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0yNTI0LVxubmV0L3Rscy90bHNfc3cuYzoyNTI1OmludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXG5uZXQvdGxzL3Rsc19zdy5jLTI1MjYtXHRcdCAgICAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpuZXdfY3J5cHRvX2luZm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExTIFNldHNvY2tvcHQgRnVuY3Rpb24gYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgYHRsc190eF9yZWNvcmRfaXNfb3BlbmAgaXMgdHJpZ2dlcmVkIGJ5IGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBkb190bHNfc2V0c29ja29wdGAgYW5kIHVsdGltYXRlbHksIGB0bHNfc2V0c29ja29wdGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIGB0bHNfc2V0c29ja29wdGAgaXMgcmVnaXN0ZXJlZCBpbiBgc3RydWN0IHByb3RvYCBhcyBgLnNldHNvY2tvcHRgLCB3aGljaCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZyBmdW5jdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGB0bHNfc2V0X3N3X29mZmxvYWRgIG9yIGB0bHNfZGV2aWNlX3NlbmRtc2dgLgoKRm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbiBvbiBGb2N1c1N5bWJvbHMsIEkgbmVlZCB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnlwb2ludHMsIG5vdCBpbnRlcm5hbCBzdGF0aWMgaGVscGVycyB0aGF0IG1pZ2h0IGJlIGlubGluZWQuIEkmIzM5O2xsIGNoZWNrIGlmIGB0bHNfc2V0c29ja29wdGAgaXMgc3RhdGljIG9yIGlubGluZWQuIExvb2tpbmcgYXQgYG5ldC90bHMvdGxzX21haW4uY2AgbGluZSA5MDksIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoLi4uKWAuIEhvd2V2ZXIsIGJlY2F1c2UgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIChgcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLnNldHNvY2tvcHQgPSB0bHNfc2V0c29ja29wdDtgKSwgaXQgbGlrZWx5ICp3b24mIzM5O3QqIGJlIGNvbXBsZXRlbHkgaW5saW5lZCBhd2F5IGJ5IHRoZSBjb21waWxlciBhbmQgaXQgd2lsbCBoYXZlIGEgc3ltYm9sIGluIHRoZSBvYmplY3QgZmlsZSwgdW5sZXNzIGFnZ3Jlc3NpdmUgTFRPIG9yIHN0YXRpYyBzeW1ib2wgc3RyaXBwaW5nIGlzIGFwcGxpZWQuIEdvb2QgdG8ga25vdy4gQW5kLCBhcyBzdXNwZWN0ZWQsIGB0bHNfc2V0X3N3X29mZmxvYWRgIGFuZCBgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZGAgYXJlIHRoZXJlIHRvIGNvbmZpZ3VyZSBUTFMgVFgvUlggb2ZmbG9hZC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYENPTkZJR19UTFNgIGFuZCBgQ09ORklHX1RMU19ERVZJQ0VgIGFyZSBjbGVhcmx5IHRoZSBrZXkgaGVyZS4gTGV0JiMzOTtzIGNoZWNrIGBuZXQvdGxzL0tjb25maWdgLiBgVExTYCBkZXBlbmRzIG9uIGBJTkVUYCwgYENSWVBUT2AsIGFuZCBzb21lIG90aGVyIGNyeXB0byBjb21wb25lbnRzLiBgVExTX0RFVklDRWAgZnVydGhlciBkZXBlbmRzIG9uIGBUTFNgLCBhbmQgc2VsZWN0cyBhZGRpdGlvbmFsIGZlYXR1cmVzIGxpa2UgYFNLQl9ERUNSWVBURURgIGFuZCBgU09DS19WQUxJREFURV9YTUlUYC4gYElORVRgIGlzIHN0cmFpZ2h0Zm9yd2FyZCBuZXR3b3JraW5nLiBTbywgY2xlYXJseSBgVExTYCBhbmQgYFRMU19ERVZJQ0VgIGFyZSBlc3NlbnRpYWwsIGFzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW5gIGhhbmRsZXMgYm90aCBgVExTX1NXYCBhbmQgYFRMU19IV2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgYHRsc19vZmZsb2FkX2N0eF90eGAgZGVwZW5kcyBvbiBgQ09ORklHX1RMU19ERVZJQ0VgIHRvIGNvbmZpcm0gdGhlIG9mZmxvYWQgcGF0aC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGludGVyYWN0IGFuZCBob3cgdG8gcHJvcGVybHkgZnV6eiBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfb2ZmbG9hZF9jdHhfdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYz01OD1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX2ZyZWVfY3R4KHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTYwLVx0aWYgKGN0eC1cdTAwM2V0eF9jb25mID09IFRMU19IVylcbm5ldC90bHMvdGxzX2RldmljZS5jOjYxOlx0XHRrZnJlZSh0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02Mi1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz04OD1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3F1ZXVlX2N0eF9kZXN0cnVjdGlvbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMDktXHRpZiAoYXN5bmNfY2xlYW51cCkge1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MTEwOlx0XHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTExMS1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xNjI9c3RhdGljIHZvaWQgdGxzX3RjcF9jbGVhbl9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2tlZF9zZXEpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTcyLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTczOlx0Y3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMTc0LVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTE5Nz12b2lkIHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OS1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjIwMDpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDEtXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDI3LVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyODpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjktXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM9Mjk1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX2VuY19za2Ioc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuLS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTMwMC17XG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYzozMDE6XHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzAyLVx0aW50IHRjcF9wYXlsb2FkX29mZnNldCA9IHNrYl90Y3BfYWxsX2hlYWRlcnMoc2tiKTtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0zNjE9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfc3dfZmFsbGJhY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTM2NC1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjM2NTpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zNjYtXHRpbnQgcGF5bG9hZF9sZW4gPSBza2ItXHUwMDNlbGVuIC0gdGNwX3BheWxvYWRfb2Zmc2V0O1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz04Mzk9c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX21haW4uYy04NDQtXHRjYXNlIFRMU19IVzpcbm5ldC90bHMvdGxzX21haW4uYzo4NDU6XHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xubmV0L3Rscy90bHNfbWFpbi5jLTg0Ni1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODE2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlRyYWNpbmcgdGhlIERlZmluaXRpb24gb2YgYHRsc19vZmZsb2FkX2N0eF90eGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBvcmlnaW4gYW5kIHB1cnBvc2Ugb2YgYHRsc19vZmZsb2FkX2N0eF90eGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGVyZSB0aGlzIHZhcmlhYmxlLCBzdHJ1Y3QsIG9yIHdoYXRldmVyIGl0IGlzLCBnZXRzIGl0cyBzaGFwZSBhbmQgZGVmaW5pdGlvbi4gVGhlIGNvbnRleHQgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byBUTFMgb2ZmbG9hZGluZywgd2hpY2ggbWVhbnMgaXQgbGlrZWx5IHBsYXlzIGEgY3J1Y2lhbCByb2xlIGluIGhhbmRsaW5nIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBvdXRzaWRlIG9mIHRoZSBtYWluIENQVSwgcGVyaGFwcyBvbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgb3IgYSBkZWRpY2F0ZWQgc2VjdXJpdHkgcHJvY2Vzc29yLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgcGxhY2VzIHRoaXMgd291bGQgYmUgZGVmaW5lZDogaGVhZGVyIGZpbGVzLCBzb3VyY2UgZmlsZXMgd2l0aGluIHRoZSBUTFMgbGlicmFyeSBpdHNlbGYsIGRyaXZlciBjb2RlIGlmIGl0JiMzOTtzIE5JQy1zcGVjaWZpYywgb3IgcG90ZW50aWFsbHkgaW4gc29tZSBnZW5lcmljIG9mZmxvYWQgZnJhbWV3b3JrLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgc28gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gdGVsbCB3aGF0IGl0IGlzLCBhbmQgbGlrZWx5IHdoYXQgaXQgZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX29mZmxvYWRfY3R4X3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGxzLmg9Mzk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxuaW5jbHVkZS9uZXQvdGxzLmg6Mzk2OnRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5pbmNsdWRlL25ldC90bHMuaC0zOTcte1xuLS1cbmluY2x1ZGUvbmV0L3Rscy5oPTQzMz1zdGF0aWMgaW5saW5lIHZvaWQgKl9fdGxzX2RyaXZlcl9jdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxuLS1cbmluY2x1ZGUvbmV0L3Rscy5oLTQzNi1cdGlmIChkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWClcbmluY2x1ZGUvbmV0L3Rscy5oOjQzNzpcdFx0cmV0dXJuIHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KS1cdTAwM2Vkcml2ZXJfc3RhdGU7XG5pbmNsdWRlL25ldC90bHMuaC00MzgtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBUTFMgSGVhZGVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgYGluY2x1ZGUvbmV0L3Rscy5oYCBoZWFkZXIsIHBhcnRpY3VsYXJseSBhcm91bmQgbGluZSAzOTUuIEkmIzM5O20gbGlrZWx5IGRlYnVnZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBUTFMsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBwcm9ibGVtIG9yIGZlYXR1cmUgbGllcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlLiBJIGV4cGVjdCB0aGF0IGxpbmUgMzk1IGhvbGRzIGEgY3J1Y2lhbCBkZWZpbml0aW9uIG9yIGEgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbCByZWxhdGVkIHRvIFRMUyBoYW5kbGluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIEkgbmVlZCB0byB6b29tIGluIG9uIGl0IG5vdy4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgaXQgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGxzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdHtcbiAzODY6XHRcdHJldHVybiAoc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICopdGxzX2N0eC1cdTAwM2Vwcml2X2N0eF9yeDtcbiAzODc6XHR9XG4gMzg4Olx0XG4gMzg5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnRsc19zd19jdHhfdHgoXG4gMzkwOlx0XHRcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbiAzOTE6XHR7XG4gMzkyOlx0XHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqKXRsc19jdHgtXHUwMDNlcHJpdl9jdHhfdHg7XG4gMzkzOlx0fVxuIDM5NDpcdFxuIDM5NTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxuIDM5NjpcdHRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4gMzk3Olx0e1xuIDM5ODpcdFx0cmV0dXJuIChzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqKXRsc19jdHgtXHUwMDNlcHJpdl9jdHhfdHg7XG4gMzk5Olx0fVxuIDQwMDpcdFxuIDQwMTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF90eChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gNDAyOlx0e1xuIDQwMzpcdFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHg7XG4gNDA0Olx0XG4gNDA1Olx0XHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcbiA0MDY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQwNzpcdFxuIDQwODpcdFx0Y3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIDQwOTpcdFx0aWYgKCFjdHgpXG4gNDEwOlx0XHRcdHJldHVybiBmYWxzZTtcbiA0MTE6XHRcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3J4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5MzAKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRMUyBTb2NrZXQgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZml4LCBidXQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIHN0YWJpbGl0eSBvZiBvdXIgVExTIGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhhcmR3YXJlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIGluIGB0bHNfbWFpbi5jYCBpcyB0aGUgdGFyZ2V0LCB3aGVyZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjYWxsIHRvIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAuIFNtYXJ0LiBUaGlzIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgVExTX0hXYCBjb250ZXh0cy4gQXBwYXJlbnRseSwgd2l0aG91dCB0aGlzIGNoZWNrLCB3ZSB3ZXJlIHJ1bm5pbmcgdGhlIHJpc2sgb2YgaW5jb3JyZWN0bHkgaW50ZXJwcmV0aW5nIGBwcml2X2N0eF90eGAgYXMgYSBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgLiBUaGlzIG1pc2ludGVycHJldGF0aW9uIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyB3aGVuIHNldHRpbmcgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gIHRocm91Z2ggYHNldHNvY2tvcHRgIHdoaWxlIHRyYW5zbWlzc2lvbiByZWNvcmRzIGFyZSBvcGVuLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgbG9naWMgY2hhbmdlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBjb2RlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscy4gVGhhdCBtYWtlcyBpdCBjcml0aWNhbCB3ZSBnZXQgdGhpcyByaWdodC4gSXQgdG91Y2hlcyBvbiBgc2V0c29ja29wdGAgd2hpY2ggaXMgYSBicmVhZCBhbmQgYnV0dGVyIGludGVyZmFjZSBmb3IgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24uCgpJIHNlZSB0aGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGBUTFNgIGFuZCBgVExTX0RFVklDRWAuIE5vdywgbGV0IG1lIHNlZSB3aGljaCBvdGhlciBzeW1ib2xzIGFyZSBpbnZvbHZlZCBoZXJlLiBGcm9tIHRoZSB0ZXh0LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgb246IGB0bHNfc2V0c29ja29wdGAsIGB0bHNfc2V0X3N3X29mZmxvYWRgLCBgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZGAsIGB0bHNfdHhfcmVjb3Jkc2AsIGFuZCBgdGxzX3N3X3NlbmRtc2dgLgoKTGV0JiMzOTtzIGNhbGwgdGhpcyBzZXQgb2YgaW5mb3JtYXRpb24gYHNldC1yZXN1bHRzYC4gSSB0aGluayBJJiMzOTttIHJlYWR5IHRvIGRpZyBkZWVwZXIgYW5kIHRlc3QgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dGxzX3NldF9zd19vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc19zZXRfZGV2aWNlX29mZmxvYWQmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3N3X3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4gY2FzdCBjdHgtXHUwMDNlcHJpdl9jdHhfdHggdG8gc3RydWN0IHRsc19zd19jb250ZXh0X3R4IHdpdGhvdXQgY2hlY2tpbmcgY3R4LVx1MDAzZXR4X2NvbmYsIHdoaWNoIGNhdXNlZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0eF9jb25mIHdhcyBUTFNfSFcuIEl0IGFkZHMgdGxzX3R4X3JlY29yZF9pc19vcGVuKCkgdG8gcHJvcGVybHkgY2hlY2sgb3BlbiByZWNvcmRzIGJhc2VkIG9uIHdoZXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgVExTIGlzIGNvbmZpZ3VyZWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBUTFMgc2V0c29ja29wdCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2VyIHNwYWNlIHNvY2tldCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O3Rsc19zZXRfc3dfb2ZmbG9hZCYjMzQ7LAogICAgJiMzNDt0bHNfc2V0X2RldmljZV9vZmZsb2FkJiMzNDssCiAgICAmIzM0O3Rsc190eF9yZWNvcmRzJiMzNDssCiAgICAmIzM0O3Rsc19zd19zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVx1MDAzZXByaXZfY3R4X3R4IHRvIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCB3aXRob3V0IGNoZWNraW5nIGN0eC1cdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdHlwZSBjb25mdXNpb24gaXNzdWUgaW4gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKClgIHdoZXJlIGBjdHgtXHUwMDNlcHJpdl9jdHhfdHhgIHdhcyB1bmNvbmRpdGlvbmFsbHkgY2FzdCB0byBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgIGFuZCBjaGVja2VkIGZvciBgb3Blbl9yZWNgLCBldmVuIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2FzIGNvbmZpZ3VyZWQgZm9yIEhXIG9mZmxvYWQgKGBUTFNfSFdgLCB3aGVyZSBgcHJpdl9jdHhfdHhgIGhvbGRzIGBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eGApLiBUaGUgZml4IGludHJvZHVjZXMgYHRsc190eF9yZWNvcmRfaXNfb3BlbigpYCB0byBwcm9wZXJseSBpbnNwZWN0IHRoZSBhcHByb3ByaWF0ZSBvcGVuIHJlY29yZCBwb2ludGVyIGJhc2VkIG9uIGBjdHgtXHUwMDNldHhfY29uZmAuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBrZXJuZWwtdG8tdXNlciBjb3B5IGJ1ZmZlcnMgb3IgaW5mby1sZWFrIHBhdGhzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGluaXRpYWxpemF0aW9uIG9yIGxlbmd0aCB0cmFja2luZyBpbiBhIHdheSB0aGF0IHJpc2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucyByZWxhdGVkIHRvIGludmFsaWQgc3RydWN0IGNhc3RpbmcvYWNjZXNzZXMgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4vVUJTQU4sIG5vdCBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQ1NmY1OTY4ZDY2M2FiMmY0MmEyNzNlYmZlNTI3ZmI2MTc3NjJmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDAzOjQ5OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmMKQEAgLTgzMywxNSAmIzQzOzgzMywyOSBAQCBzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiAJcmV0dXJuIHJjOwogfQogCiYjNDM7LyogcHJpdl9jdHhfdHggaG9sZHMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIG9uIGVhY2ggVFggcGF0aCwgc28gdHhfY29uZiBoYXMgdG8KJiM0MzsgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGN0eC0mZ3Q7dHhfY29uZikgewomIzQzOwljYXNlIFRMU19TVzoKJiM0MzsJCXJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS0mZ3Q7b3Blbl9yZWM7CiYjNDM7CWNhc2UgVExTX0hXOgomIzQzOwkJcmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktJmd0O29wZW5fcmVjb3JkOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spOwotCXN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqc3dfY3R4ID0gdGxzX3N3X2N0eF90eChjdHgpOwogCXUxNiB2YWx1ZTsKIAlib29sIHRsc18xMyA9IGN0eC0mZ3Q7cHJvdF9pbmZvLnZlcnNpb24gPT0gVExTXzFfM19WRVJTSU9OOwogCi0JaWYgKHN3X2N0eCAmYW1wOyZhbXA7IHN3X2N0eC0mZ3Q7b3Blbl9yZWMpCiYjNDM7CWlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiAtIEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBuZWVkcyBLTVNBTiB0ZXN0aW5nLiBNeSBndXQgZmVlbGluZyBpcyB0byBhbHdheXMgbGVhbiB0b3dhcmRzIHRoZSAmIzM0O2JldHRlciBzYWZlIHRoYW4gc29ycnkmIzM0OyBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXNuJiMzOTt0IGFib3V0IGxvb2tpbmcgZm9yIG1hbHdhcmUgb3IgZXhwbG9pdCBwYXlsb2Fkcy4gSXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgdGFzaywgYSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGV2YWx1YXRpb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIGNoZWNraW5nIGlmIHRoaXMgY29kZSBjaGFuZ2UgY291bGQgaW50cm9kdWNlIGlzc3VlcyB0aGF0IEtNU0FOIG1pZ2h0IGNhdGNoLCBhcyBvcHBvc2VkIHRvIEtBU0FOLiBJdCYjMzk7cyBhIGJlbmlnbiB0YXNrLCBmb3J0dW5hdGVseS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgaW4gYG5ldC90bHMvdGxzX21haW4uY2AuIFRoZSBjaGFuZ2UgbG9va3MgcmVsYXRpdmVseSBjb250YWluZWQg4oCTIGl0JiMzOTtzIHJlcGxhY2luZyBhIGNoZWNrIHdpdGggYSBmdW5jdGlvbiBjYWxsLCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYC4gRnJvbSBhIGJyaWVmIGdsYW5jZSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGEgVExTIHJlY29yZCBpcyAmIzM0O29wZW4mIzM0OyBiZWZvcmUgYWxsb3dpbmcgYSBgc2V0c29ja29wdGAgY2FsbC4gVGhlIG9sZCBjaGVjayAoYHN3X2N0eCAmYW1wOyZhbXA7IHN3X2N0eC0mZ3Q7b3Blbl9yZWNgKSB3YXMgc3BlY2lmaWMgdG8gdGhlIHNvZnR3YXJlIFRMUyBjb250ZXh0LiBUaGUgbmV3IGZ1bmN0aW9uLCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCwgaXMgZGVzaWduZWQgdG8gaGFuZGxlIGJvdGggc29mdHdhcmUgKGBUTFNfU1dgKSBhbmQgaGFyZHdhcmUgKGBUTFNfSFdgKSBjb250ZXh0cy4KCkkgc3VzcGVjdCB0aGlzIGNoYW5nZSBpcyByZWZhY3RvcmluZyB0aGUgY29kZSB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYyBhbmQgaGFuZGxlIGJvdGggc29mdHdhcmUgYW5kIGhhcmR3YXJlIG9mZmxvYWQgY29udGV4dHMuIFRoZSBmdW5jdGlvbiBpcyBjaGVja2luZyBjb250ZXh0IG1lbWJlcnMsIGJ1dCBpbiBkaWZmZXJlbnQgc3RydWN0dXJlcy4KCkkmIzM5O20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gdW5kZXJzdGFuZCB0aGUgYHRsc19jb250ZXh0YCBzdHJ1Y3QsIGB0bHNfc3dfY3R4X3R4YCBhbmQgYHRsc19vZmZsb2FkX2N0eF90eGAsIGFuZCBob3cgYHR4X2NvbmZgIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBvcGVuX3JlY2AgYW5kIGBvcGVuX3JlY29yZGAgaW4gdGhlIGNvbnRleHQgb2YgVExTIGNvbm5lY3Rpb24gc3RhdGUuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgaXQmIzM5O3MgYWJvdXQgY2hlY2tpbmcgd2hldGhlciB0aGUgVFggcGF0aCBoYXMgYW4gb3BlbiByZWNvcmQuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgVFggcmVjb3JkIGlzIG9wZW4sIEkgYW0gZ29pbmcgdG8gZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uICoqTmVlZHNLTVNBTjogdHJ1ZS4qKiBJIHdpbGwgY29uZmlybSB0aGlzIGxhdGVyIHdpdGggdG9vbHMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGF0YSByYWNlcyBoZXJlLgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFx0cmMgPSBjaGVja196ZXJvZWRfc29ja3B0cihvcHR2YWwsIHNpemVvZih2YWwpLCBvcHRsZW4gLSBzaXplb2YodmFsKSk7XG4gODIxOlx0XHRpZiAocmMgXHUwMDNjIDEpXG4gODIyOlx0XHRcdHJldHVybiByYyA9PSAwID8gLUVJTlZBTCA6IHJjO1xuIDgyMzpcdFxuIDgyNDpcdFx0bG9ja19zb2NrKHNrKTtcbiA4MjU6XHRcdHJjID0gLUVJTlZBTDtcbiA4MjY6XHRcdGlmIChjdHgtXHUwMDNlcnhfY29uZiA9PSBUTFNfU1cgfHwgY3R4LVx1MDAzZXJ4X2NvbmYgPT0gVExTX0hXKSB7XG4gODI3Olx0XHRcdGN0eC1cdTAwM2VyeF9ub19wYWQgPSB2YWw7XG4gODI4Olx0XHRcdHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShjdHgpO1xuIDgyOTpcdFx0XHRyYyA9IDA7XG4gODMwOlx0XHR9XG4gODMxOlx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDgzMjpcdFxuIDgzMzpcdFx0cmV0dXJuIHJjO1xuIDgzNDpcdH1cbiA4MzU6XHRcbiA4MzY6XHQvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xuIDgzNzpcdCAqIHNheSB3aGljaCBvcGVuIHJlY29yZCB0byBsb29rIGF0LlxuIDgzODpcdCAqL1xuIDgzOTpcdHN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbiA4NDA6XHR7XG4gODQxOlx0XHRzd2l0Y2ggKGN0eC1cdTAwM2V0eF9jb25mKSB7XG4gODQyOlx0XHRjYXNlIFRMU19TVzpcbiA4NDM6XHRcdFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjO1xuIDg0NDpcdFx0Y2FzZSBUTFNfSFc6XG4gODQ1Olx0XHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xuIDg0NjpcdFx0ZGVmYXVsdDpcbiA4NDc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg0ODpcdFx0fVxuIDg0OTpcdH1cbiA4NTA6XHRcbiA4NTE6XHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiA4NTI6XHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4gODUzOlx0e1xuIDg1NDpcdFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gODU1Olx0XHR1MTYgdmFsdWU7XG4gODU2Olx0XHRib29sIHRsc18xMyA9IGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiA9PSBUTFNfMV8zX1ZFUlNJT047XG4gODU3Olx0XG4gODU4Olx0XHRpZiAodGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eCkpXG4gODU5Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gODYwOlx0XG4gODYxOlx0XHRpZiAoc29ja3B0cl9pc19udWxsKG9wdHZhbCkgfHwgb3B0bGVuICE9IHNpemVvZih2YWx1ZSkpXG4gODYyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg2MzpcdFxuIDg2NDpcdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNnZhbHVlLCBvcHR2YWwsIHNpemVvZih2YWx1ZSkpKVxuIDg2NTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4NjY6XHRcbiA4Njc6XHRcdGlmICh2YWx1ZSBcdTAwM2MgVExTX01JTl9SRUNPUkRfU0laRV9MSU0gLSAodGxzXzEzID8gMSA6IDApIHx8XG4gODY4Olx0XHQgICAgdmFsdWUgXHUwMDNlIFRMU19NQVhfUEFZTE9BRF9TSVpFKVxuIDg2OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4NzA6XHRcbiA4NzE6XHRcdGN0eC1cdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSB2YWx1ZTtcbiA4NzI6XHRcbiA4NzM6XHRcdHJldHVybiAwO1xuIDg3NDpcdH1cbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gODc3Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIDg3ODpcdHtcbiA4Nzk6XHRcdGludCByYyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgdHdvIGNvbnRleHQgdHlwZXM6IGB0bHNfc3dfY3R4X3R4YCBhbmQgYHRsc19vZmZsb2FkX2N0eF90eGAuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdHJhbnNtaXNzaW9uICh0eCkgc2lkZSBvZiBhIFRMUyBjb25uZWN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBUTFMgY29udGV4dCBpcyBoYW5kbGVkIGR1cmluZyB0aGUgb3V0Ym91bmQgZGF0YSBmbG93LiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgYSBrZXkgZGlzdGluY3Rpb246ICYjMzQ7c3cmIzM0OyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBzb2Z0d2FyZS1iYXNlZCBUTFMgaW1wbGVtZW50YXRpb24sIHdoaWxlICYjMzQ7b2ZmbG9hZCYjMzQ7IGhpbnRzIGF0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgbWF5YmUgYSBkZWRpY2F0ZWQgY3J5cHRvIGVuZ2luZSBvciBhIE5JQyB3aXRoIFRMUyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb250ZXh0IGlzIHN0cnVjdHVyZWQgZm9yIGVhY2ggb2YgdGhlbS4KCkkmIzM5O20gYXNzdW1pbmcgdGhpcyBjb250ZXh0IGhvbGRzIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdGhlIFRMUyBoYW5kc2hha2UgKGNsaWVudC9zZXJ2ZXIgaGVsbG8sIGtleSBleGNoYW5nZSksIHNlc3Npb24ga2V5cywgYW5kIGFueSBzdGF0ZSByZWxhdGVkIHRvIHRoZSBhY3RpdmUgY29ubmVjdGlvbiAoc2VxdWVuY2UgbnVtYmVycywgZXRjLikgZHVyaW5nIHRyYW5zbWlzc2lvbi4gSSBuZWVkIHRvIGxvb2sgZGVlcGVyLiBUaGUgZGlmZmVyZW5jZSBpbiBjb250ZXh0IHN0cnVjdHVyZSBiZXR3ZWVuIHNvZnR3YXJlIGFuZCBvZmZsb2FkZWQgYXBwcm9hY2hlcyBjb3VsZCBiZSBzaWduaWZpY2FudC4gU29mdHdhcmUgY29udGV4dCBsaWtlbHkgaW52b2x2ZXMgbW9yZSBmbGV4aWJsZSBkYXRhIHN0cnVjdHVyZXMgdG8gaGFuZGxlIGRpdmVyc2UgVExTIGNpcGhlciBzdWl0ZXMgYW5kIHByb3RvY29sIHZlcnNpb25zLCBhbmQgbWF5IGluY2x1ZGUgcG9pbnRlcnMgdG8gYnVmZmVycyBmb3IgcGxhaW50ZXh0IGFuZCBjaXBoZXJ0ZXh0LiBUaGUgb2ZmbG9hZGVkIG9uZSBjb3VsZCBiZSBvcHRpbWl6ZWQgd2l0aCB0aGUgaGFyZHdhcmXigJlzIGNhcGFiaWxpdGllcywgcGVyaGFwcyBjb250YWluaW5nIGEgc21hbGxlciwgaGFyZHdhcmUtc3BlY2lmaWMgc2V0IG9mIHNlc3Npb24ga2V5cyBvciBwb2ludGVycyB0byBoYXJkd2FyZSByZWdpc3RlcnMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkuIEhvdyBpcyB0aGUgcHJpdmF0ZSBrZXkgaGFuZGxlZCBpbiBlYWNoIGNvbnRleHQ/IElzIHRoZSBvZmZsb2FkIGNvbnRleHQgc2VjdXJlIGVub3VnaCB0byBhdm9pZCBzZW5zaXRpdmUga2V5IG1hdGVyaWFsIGV2ZXIgbGVhdmluZyB0aGUgZGVkaWNhdGVkIGhhcmR3YXJlPyBBbHNvLCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGFjdC4gQXJlIHRoZXJlIGFyY2hpdGVjdHVyYWwgdHJhZGUtb2ZmcyBpbiB0aGVzZSB0d28gbW9kZXMgb2Ygb3BlcmF0aW9uPyBBbmQsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gZXJyb3IgaGFuZGxpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXBwbGljYXRpb24tbGF5ZXIgaXMgYWZmZWN0ZWQuIERvZXMgdGhlIEFQSSBkaWZmZXIgc2lnbmlmaWNhbnRseSBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBhbmQgb2ZmbG9hZCBtb2Rlcz8KClVsdGltYXRlbHksIG15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaG93IHRoZSBkZXNpZ24gb2YgdGhlc2UgY29udGV4dHMgYWZmZWN0cyB0aGUgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IG9mIHRoZSBzeXN0ZW0sIGFuZCBob3cgdGhlIGRldmVsb3BlciB3b3VsZCBpbnRlcmFjdCB3aXRoIHRoZSBkaWZmZXJlbnQgY29udGV4dHMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGNvbnRleHRzIHRpZSBpbnRvIHRoZSBvdmVyYWxsIFRMUyBhcmNoaXRlY3R1cmUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIG9wdGltaXphdGlvbnMgcG9zc2libGUsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciB1c2UgY2FzZSBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfc3dfY3R4X3R4fHRsc19vZmZsb2FkX2N0eF90eCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jPTU4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfZnJlZV9jdHgoc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjAtXHRpZiAoY3R4LVx1MDAzZXR4X2NvbmYgPT0gVExTX0hXKVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NjE6XHRcdGtmcmVlKHRsc19vZmZsb2FkX2N0eF90eChjdHgpKTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTYyLVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTg4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfcXVldWVfY3R4X2Rlc3RydWN0aW9uKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTEwOS1cdGlmIChhc3luY19jbGVhbnVwKSB7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxMTA6XHRcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCA9IHRsc19vZmZsb2FkX2N0eF90eChjdHgpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMTExLVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTE2Mj1zdGF0aWMgdm9pZCB0bHNfdGNwX2NsZWFuX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFja2VkX3NlcSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzItXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxNzM6XHRjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzQtXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9MTk3PXZvaWQgdGxzX2RldmljZV9za19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTk5LVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6MjAwOlx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTIwMS1cbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjctXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDI4Olx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyOS1cdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZDtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0yOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfZW5jX3NrYihzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzAwLXtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjMwMTpcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zMDItXHRpbnQgdGNwX3BheWxvYWRfb2Zmc2V0ID0gc2tiX3RjcF9hbGxfaGVhZGVycyhza2IpO1xuLS1cbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jPTM2MT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRsc19zd19mYWxsYmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzY0LVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM6MzY1Olx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTM2Ni1cdGludCBwYXlsb2FkX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSB0Y3BfcGF5bG9hZF9vZmZzZXQ7XG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTg0Mi1cdGNhc2UgVExTX1NXOlxubmV0L3Rscy90bHNfbWFpbi5jOjg0MzpcdFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjO1xubmV0L3Rscy90bHNfbWFpbi5jLTg0NC1cdGNhc2UgVExTX0hXOlxubmV0L3Rscy90bHNfbWFpbi5jOjg0NTpcdFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXHUwMDNlb3Blbl9yZWNvcmQ7XG5uZXQvdGxzL3Rsc19tYWluLmMtODQ2LVx0ZGVmYXVsdDpcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTMwOD1zdGF0aWMgdm9pZCB0bHNfdHJpbV9ib3RoX21zZ3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdGFyZ2V0X3NpemUpXG4tLVxubmV0L3Rscy90bHNfc3cuYy0zMTEtXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfc3cuYzozMTI6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTMxMy1cdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXHUwMDNlb3Blbl9yZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz0zMjE9c3RhdGljIGludCB0bHNfYWxsb2NfZW5jcnlwdGVkX21zZyhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pXG4tLVxubmV0L3Rscy90bHNfc3cuYy0zMjMtXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG5uZXQvdGxzL3Rsc19zdy5jOjMyNDpcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX3N3LmMtMzI1LVx0c3RydWN0IHRsc19yZWMgKnJlYyA9IGN0eC1cdTAwM2VvcGVuX3JlYztcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTMzMT1zdGF0aWMgaW50IHRsc19jbG9uZV9wbGFpbnRleHRfbXNnKHN0cnVjdCBzb2NrICpzaywgaW50IHJlcXVpcmVkKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMzM0LVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX3N3LmM6MzM1Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy0zMzYtXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVx1MDAzZW9wZW5fcmVjO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MzU1PXN0YXRpYyBzdHJ1Y3QgdGxzX3JlYyAqdGxzX2dldF9yZWMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMzU4LVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX3N3LmM6MzU5Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy0zNjAtXHRzdHJ1Y3Qgc2tfbXNnICptc2dfcGwsICptc2dfZW47XG4tLVxubmV0L3Rscy90bHNfc3cuYz0zOTY9c3RhdGljIHZvaWQgdGxzX2ZyZWVfb3Blbl9yZWMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMzk4LVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfc3cuYzozOTk6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTQwMC1cdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXHUwMDNlb3Blbl9yZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz00MDg9aW50IHRsc190eF9yZWNvcmRzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNDEwLVx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xubmV0L3Rscy90bHNfc3cuYzo0MTE6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTQxMi1cdHN0cnVjdCB0bHNfcmVjICpyZWMsICp0bXA7XG4tLVxubmV0L3Rscy90bHNfc3cuYz00Njc9c3RhdGljIHZvaWQgdGxzX2VuY3J5cHRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNDg0LVx0cHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfc3cuYzo0ODU6XHRjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy00ODYtXG4tLVxubmV0L3Rscy90bHNfc3cuYz02MTc9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsXG4tLVxubmV0L3Rscy90bHNfc3cuYy02MjEtXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFx1MDAyNnRsc19jdHgtXHUwMDNlcHJvdF9pbmZvO1xubmV0L3Rscy90bHNfc3cuYzo2MjI6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTYyMy1cdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXHUwMDNlb3Blbl9yZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz03MTU9c3RhdGljIGludCB0bHNfc3dfcHVzaF9wZW5kaW5nX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTcxNy1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX3N3LmM6NzE4Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy03MTktXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVx1MDAzZW9wZW5fcmVjO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtNzcxLVx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbm5ldC90bHMvdGxzX3N3LmM6NzcyOlx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy03NzMtXHRib29sIGFzeW5jX2NhcGFibGUgPSBjdHgtXHUwMDNlYXN5bmNfY2FwYWJsZTtcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTEwMzE9dm9pZCB0bHNfc3dfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTAzNC1cdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcbm5ldC90bHMvdGxzX3N3LmM6MTAzNTpcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcbm5ldC90bHMvdGxzX3N3LmMtMTAzNi1cdHN0cnVjdCB0bHNfcmVjICpyZWM7XG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMjczPXZvaWQgdGxzX3N3X2NhbmNlbF93b3JrX3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbm5ldC90bHMvdGxzX3N3LmMtMjI3NC17XG5uZXQvdGxzL3Rsc19zdy5jOjIyNzU6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTIyNzYtXG4tLVxubmV0L3Rscy90bHNfc3cuYz0yMjgyPXZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTIyODQtXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG5uZXQvdGxzL3Rsc19zdy5jOjIyODU6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTIyODYtXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjLCAqdG1wO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjMxNj12b2lkIHRsc19zd19mcmVlX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5uZXQvdGxzL3Rsc19zdy5jLTIzMTcte1xubmV0L3Rscy90bHNfc3cuYzoyMzE4Olx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xubmV0L3Rscy90bHNfc3cuYy0yMzE5LVxuLS1cbm5ldC90bHMvdGxzX3N3LmM9MjM3MT1zdGF0aWMgdm9pZCB0eF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjM4Mi1cbm5ldC90bHMvdGxzX3N3LmM6MjM4MzpcdGN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XG5uZXQvdGxzL3Rsc19zdy5jLTIzODQtXHRpZiAodGVzdF9iaXQoQklUX1RYX0NMT1NJTkcsIFx1MDAyNmN0eC1cdTAwM2V0eF9iaXRtYXNrKSlcbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTI0MTU9dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XG5uZXQvdGxzL3Rsc19zdy5jOjI0MTc6XHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnR4X2N0eCA9IHRsc19zd19jdHhfdHgoY3R4KTtcbm5ldC90bHMvdGxzX3N3LmMtMjQxOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzMAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6CgoqKkV4YW1pbmluZyBUTFMgQ29udGV4dCBUcmFuc21pc3Npb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIFRMUyBjb250ZXh0IHRyYW5zbWlzc2lvbi4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIGJvdGggYHRsc19zd19jdHhfdHhgIGFuZCBgdGxzX29mZmxvYWRfY3R4X3R4YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcywgc28gdW5kZXJzdGFuZGluZyB0aGVpciBvdXRwdXRzIGlzIGNyaXRpY2FsLgoKVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgaW5jbHVkZS9uZXQvdGxzLmhgIGhlYWRlciBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbnMgYW5kIHByb3RvdHlwZXMgZm9yIGJvdGggZnVuY3Rpb25zLiBCeSBleGFtaW5pbmcgdGhlaXIgc2lnbmF0dXJlcywgcmV0dXJuIHR5cGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB3aXRoaW4gdGhlIGhlYWRlciwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiB0aGV5IGFyZSBjb21tdW5pY2F0aW5nIGJhY2sgdG8gdGhlIGNhbGxlciBhbmQgaG93IEkgc2hvdWxkIGludGVycHJldCB0aGVpciByZXR1cm5lZCB2YWx1ZXMgd2l0aGluIHRoZSBzeXN0ZW0mIzM5O3MgY29udGV4dC4gVGhpcyBzaG91bGQgaGVscCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3N3X2N0eF90eHx0bHNfb2ZmbG9hZF9jdHhfdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaD0zODM9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKnRsc19zd19jdHhfcngoXG4tLVxuaW5jbHVkZS9uZXQvdGxzLmgtMzg4LVxuaW5jbHVkZS9uZXQvdGxzLmg6Mzg5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICp0bHNfc3dfY3R4X3R4KFxuaW5jbHVkZS9uZXQvdGxzLmgtMzkwLVx0XHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxuaW5jbHVkZS9uZXQvdGxzLmg9Mzk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxuaW5jbHVkZS9uZXQvdGxzLmg6Mzk2OnRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG5pbmNsdWRlL25ldC90bHMuaC0zOTcte1xuLS1cbmluY2x1ZGUvbmV0L3Rscy5oPTQwMT1zdGF0aWMgaW5saW5lIGJvb2wgdGxzX3N3X2hhc19jdHhfdHgoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L3Rscy5oLTQxMC1cdFx0cmV0dXJuIGZhbHNlO1xuaW5jbHVkZS9uZXQvdGxzLmg6NDExOlx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpO1xuaW5jbHVkZS9uZXQvdGxzLmgtNDEyLX1cbi0tXG5pbmNsdWRlL25ldC90bHMuaD00MzM9c3RhdGljIGlubGluZSB2b2lkICpfX3Rsc19kcml2ZXJfY3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcbi0tXG5pbmNsdWRlL25ldC90bHMuaC00MzYtXHRpZiAoZGlyZWN0aW9uID09IFRMU19PRkZMT0FEX0NUWF9ESVJfVFgpXG5pbmNsdWRlL25ldC90bHMuaDo0Mzc6XHRcdHJldHVybiB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCktXHUwMDNlZHJpdmVyX3N0YXRlO1xuaW5jbHVkZS9uZXQvdGxzLmgtNDM4LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzE3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgVExTIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBUTFMgaGVhZGVyIGRlZmluaXRpb24sIHNwZWNpZmljYWxseSwgbGluZXMgMzgwIHRvIDQxMCB3aXRoaW4gYGluY2x1ZGUvbmV0L3Rscy5oYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0dXJlcyBvciBlbnVtcyBpbiB0aGVyZS4gRGVwZW5kaW5nIG9uIHdoYXQgdGhvc2UgbGluZXMgY29udGFpbiwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IHVuZGVyc3RhbmQsIGxpa2VseSBhdCBhIGxvdyBsZXZlbCwgaG93IHRoZSBUTFMgY29ubmVjdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyLCBvciBiZSBhYmxlIHRvIGluZmVyLCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIEJhc2VkIG9uIHRoZSBmaWxlIGxvY2F0aW9uLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBzdGFjayBpbXBsZW1lbnRhdGlvbiBvZiBUTFMuIEkgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWFwIGhvdyB0aGUgVExTIHJlY29yZHMgYXJlIHBhcnNlZCBvciB0aGUgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG1zIHVzZWQgYXJlIHN0cnVjdHVyZWQuIFBlcmhhcHMgSSYjMzk7bGwgZmluZCBzb21lIGRlYnVnIHN5bWJvbHMgdGhhdCBJIGNhbiB1c2UgdG8gaW5zcGVjdCBpbiBmdXJ0aGVyIGRldGFpbC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0XHRyZXR1cm4gKF9fZm9yY2Ugdm9pZCAqKWljc2stXHUwMDNlaWNza191bHBfZGF0YTtcbiAzODE6XHR9XG4gMzgyOlx0XG4gMzgzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKnRsc19zd19jdHhfcngoXG4gMzg0Olx0XHRcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcbiAzODU6XHR7XG4gMzg2Olx0XHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqKXRsc19jdHgtXHUwMDNlcHJpdl9jdHhfcng7XG4gMzg3Olx0fVxuIDM4ODpcdFxuIDM4OTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICp0bHNfc3dfY3R4X3R4KFxuIDM5MDpcdFx0XHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4gMzkxOlx0e1xuIDM5MjpcdFx0cmV0dXJuIChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKil0bHNfY3R4LVx1MDAzZXByaXZfY3R4X3R4O1xuIDM5MzpcdH1cbiAzOTQ6XHRcbiAzOTU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpcbiAzOTY6XHR0bHNfb2ZmbG9hZF9jdHhfdHgoY29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxuIDM5NzpcdHtcbiAzOTg6XHRcdHJldHVybiAoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKil0bHNfY3R4LVx1MDAzZXByaXZfY3R4X3R4O1xuIDM5OTpcdH1cbiA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgdGxzX3N3X2hhc19jdHhfdHgoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDQwMjpcdHtcbiA0MDM6XHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xuIDQwNDpcdFxuIDQwNTpcdFx0aWYgKCFza19pc19pbmV0KHNrKSB8fCAhaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzaykpXG4gNDA2Olx0XHRcdHJldHVybiBmYWxzZTtcbiA0MDc6XHRcbiA0MDg6XHRcdGN0eCA9IHRsc19nZXRfY3R4KHNrKTtcbiA0MDk6XHRcdGlmICghY3R4KVxuIDQxMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNDExOlx0XHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCk7XG4gNDEyOlx0fVxuIDQxMzpcdFxuIDQxNDpcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF9yeChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gNDE1Olx0e1xuIDQxNjpcdFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHg7XG4gNDE3Olx0XG4gNDE4Olx0XHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcbiA0MTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTg3CgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDk0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaXNzdWUgd2FzIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbmAuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIHR5cGUgY29uZnVzaW9uIHdoZXJlIGBwcml2X2N0eF90eGAgd2FzIGJlaW5nIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgZXZlbiB3aGVuIGBjdHgtJmd0O3R4X2NvbmZgIHdhcyBzZXQgdG8gYFRMU19IV2AsIG1lYW5pbmcgaXQgc2hvdWxkIGhhdmUgYmVlbiBhIGBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eGAuIFRoaXMgbGVkIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGJlY2F1c2UgYG9wZW5fcmVjYCYjMzk7cyBvZmZzZXQgaXMgZGlmZmVyZW50IGluIHRoZSB0d28gc3RydWN0cywgb3IgcG90ZW50aWFsbHkgZmFpbGluZyB0byBjaGVjayB0aGUgaGFyZHdhcmUgb3BlbiByZWNvcmQuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIHRvIGNvcnJlY3RseSBjaGVjayB0aGUgb3BlbiByZWNvcmQgYmFzZWQgb24gd2hldGhlciB0aGUgY29udGV4dCBpcyBzb2Z0d2FyZSAoYFRMU19TV2ApIG9yIGhhcmR3YXJlIChgVExTX0hXYCkuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBmaXggaW50cm9kdWNlIG9yIGV4cG9zZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgdGh1cyB3YXJyYW50aW5nIGEgYE5lZWRzS01TQU5gIHRhZz8gSSBkb24mIzM5O3QgdGhpbmsgc28uIExldCYjMzk7cyB3YWxrIHRocm91Z2ggdGhlIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlOioqIE5vcGUuIFRoaXMgaXMgYHNldHNvY2tvcHRgLCByZWNlaXZpbmcgZGF0YSBmcm9tIHVzZXJzcGFjZSwgbm90IHNlbmRpbmcgaXQuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgZGVwZW5kZW5jZToqKiBgY3R4LSZndDt0eF9jb25mYCBpcyBpbml0aWFsaXplZCBkdXJpbmcgVExTIGNvbmZpZ3VyYXRpb24sIGFuZCBgb3Blbl9yZWNgL2BvcGVuX3JlY29yZGAgYXJlIHBvaW50ZXJzIGluaXRpYWxpemVkIGR1cmluZyBjb250ZXh0L3JlY29yZCBhbGxvY2F0aW9uLiBUaGUgbG9naWMgYnJhbmNoZXMgY29ycmVjdGx5IGJhc2VkIG9uIHRoZSBpbml0aWFsaXplZCBgY3R4LSZndDt0eF9jb25mYCB2YWx1ZS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgbW9kaWZpY2F0aW9ucyB0byBpbml0aWFsaXphdGlvbnMgYXJlIGhhcHBlbmluZyBoZXJlLgo0LiAgKipCb3VuZHMvTGVuZ3RoIGNoZWNrczoqKiBObywgdGhpcyBmaXggZG9lc24mIzM5O3QgYWZmZWN0IGFueSBib3VuZHMgb3IgbGVuZ3Rocywgb25seSB0aGUgY29ycmVjdCB0eXBlIGNoZWNrIGJlZm9yZSBwZXJtaXR0aW5nIGEgcGF5bG9hZCBsZW5ndGggY2hhbmdlLiBJdCBjb3JyZWN0cyB0eXBlIGNvbmZ1c2lvbiBhbmQgbWVtYmVyIGFjY2VzcyBpc3N1ZXMuCgpTbywgaW4gZXNzZW5jZSwgdGhlIGJ1ZyB3YXMgYSB0eXBlIGNvbmZ1c2lvbiBhbmQgbG9naWNhbCBlcnJvcuKAlGEgY2xhc3NpYyBLQVNBTi9VQlNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgbGF0dGVyLCB3aGlsZSBLQVNBTiBhbmQgdGhlIHVzdWFsIHN1aXRlIG9mIHRvb2xzIGNvdmVyIHRoZSBidWcgdGhpcyBwYXRjaCBjb3JyZWN0cy4gVGhlIG5ldyBoZWxwZXIgZnVuY3Rpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBvciBwb3RlbnRpYWwgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIHJlbWFpbiBgZmFsc2VgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IHJlYXNvbmluZy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdHlwZSBjb25mdXNpb24sIHdoaWNoIGlzbiYjMzk7dCBLTVNBTiYjMzk7cyBkb21haW4uIFRoZSBwYXRjaCBjbGFyaWZpZXMgdGhlIGxvZ2ljIGFuZCBmaXhlcyB0aGUgdHlwZSBpc3N1ZS4gVGhpcyBwYXRjaCBpc24mIzM5O3QgYWJvdXQgS01TQU4tc3BlY2lmaWMgcHJvYmxlbXMgYW5kIGRvZXNuJiMzOTt0IHJldmVhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkga2VybmVsLXRvLXVzZXIgc3BhY2UgbGVha3MuIEFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB0eXBlIGNvbmZ1c2lvbiBpc3N1ZSBpbiBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oKWAgd2hlcmUgYGN0eC1cdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cdTAwM2V0eF9jb25mYC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB0eXBlIGNvbmZ1c2lvbiBpc3N1ZSBpbiBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oKWAgd2hlcmUgYGN0eC1cdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cdTAwM2V0eF9jb25mYC5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OToyOC43OTg1NTMyNzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM2ODExNzI2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3NldHNvY2tvcHRcIixcbiAgICBcInRsc19zZXRfc3dfb2ZmbG9hZFwiLFxuICAgIFwidGxzX3NldF9kZXZpY2Vfb2ZmbG9hZFwiLFxuICAgIFwidGxzX3R4X3JlY29yZHNcIixcbiAgICBcInRsc19zd19zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVxcdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cXHUwMDNldHhfY29uZmAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVxcdTAwM2Vwcml2X2N0eF90eCB0byBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggd2l0aG91dCBjaGVja2luZyBjdHgtXFx1MDAzZXR4X2NvbmYsIHdoaWNoIGNhdXNlZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0eF9jb25mIHdhcyBUTFNfSFcuIEl0IGFkZHMgdGxzX3R4X3JlY29yZF9pc19vcGVuKCkgdG8gcHJvcGVybHkgY2hlY2sgb3BlbiByZWNvcmRzIGJhc2VkIG9uIHdoZXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgVExTIGlzIGNvbmZpZ3VyZWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBUTFMgc2V0c29ja29wdCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2VyIHNwYWNlIHNvY2tldCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OToyOC43OTg1NjAyODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDI0MTEzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NDU2ZjU5NjhkNjYzYWIyZjQyYTI3M2ViZmU1MjdmYjYxNzc2MmY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDAzOjQ5OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xcbmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0XFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXFxuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXFxuQEAgLTgzMywxNSArODMzLDI5IEBAIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbisvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xcbisgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cXG4rICovXFxuK3N0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4re1xcbitcXHRzd2l0Y2ggKGN0eC1cXHUwMDNldHhfY29uZikge1xcbitcXHRjYXNlIFRMU19TVzpcXG4rXFx0XFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlYztcXG4rXFx0Y2FzZSBUTFNfSFc6XFxuK1xcdFxcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlY29yZDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4tXFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpzd19jdHggPSB0bHNfc3dfY3R4X3R4KGN0eCk7XFxuIFxcdHUxNiB2YWx1ZTtcXG4gXFx0Ym9vbCB0bHNfMTMgPSBjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcXG4gXFxuLVxcdGlmIChzd19jdHggXFx1MDAyNlxcdTAwMjYgc3dfY3R4LVxcdTAwM2VvcGVuX3JlYylcXG4rXFx0aWYgKHRsc190eF9yZWNvcmRfaXNfb3BlbihjdHgpKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpIHx8IG9wdGxlbiAhPSBzaXplb2YodmFsdWUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozMC40MDE5NzU1NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYxNTc5Njc0MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ0bHNfc2V0X3N3X29mZmxvYWRcIixcbiAgICBcInRsc19zZXRfZGV2aWNlX29mZmxvYWRcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfc3dfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuIGNhc3QgY3R4LVxcdTAwM2Vwcml2X2N0eF90eCB0byBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggd2l0aG91dCBjaGVja2luZyBjdHgtXFx1MDAzZXR4X2NvbmYsIHdoaWNoIGNhdXNlZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiB0eF9jb25mIHdhcyBUTFNfSFcuIEl0IGFkZHMgdGxzX3R4X3JlY29yZF9pc19vcGVuKCkgdG8gcHJvcGVybHkgY2hlY2sgb3BlbiByZWNvcmRzIGJhc2VkIG9uIHdoZXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgVExTIGlzIGNvbmZpZ3VyZWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBUTFMgc2V0c29ja29wdCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2VyIHNwYWNlIHNvY2tldCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NDU2ZjU5NjhkNjYzYWIyZjQyYTI3M2ViZmU1MjdmYjYxNzc2MmY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDM6NDk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19tYWluLmMgYi9uZXQvdGxzL3Rsc19tYWluLmNcbmluZGV4IGZiYjI3NDI4N2FhNWYuLmU0ZjI4OGMxZmEzNDYgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcbisrKyBiL25ldC90bHMvdGxzX21haW4uY1xuQEAgLTgzMywxNSArODMzLDI5IEBAIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4rLyogcHJpdl9jdHhfdHggaG9sZHMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIG9uIGVhY2ggVFggcGF0aCwgc28gdHhfY29uZiBoYXMgdG9cbisgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cbisgKi9cbitzdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXG4re1xuK1x0c3dpdGNoIChjdHgtXHUwMDNldHhfY29uZikge1xuK1x0Y2FzZSBUTFNfU1c6XG4rXHRcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlYztcbitcdGNhc2UgVExTX0hXOlxuK1x0XHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cdTAwM2VvcGVuX3JlY29yZDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIHtcbiBcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuLVx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpzd19jdHggPSB0bHNfc3dfY3R4X3R4KGN0eCk7XG4gXHR1MTYgdmFsdWU7XG4gXHRib29sIHRsc18xMyA9IGN0eC1cdTAwM2Vwcm90X2luZm8udmVyc2lvbiA9PSBUTFNfMV8zX1ZFUlNJT047XG4gXG4tXHRpZiAoc3dfY3R4IFx1MDAyNlx1MDAyNiBzd19jdHgtXHUwMDNlb3Blbl9yZWMpXG4rXHRpZiAodGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eCkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRpZiAoc29ja3B0cl9pc19udWxsKG9wdHZhbCkgfHwgb3B0bGVuICE9IHNpemVvZih2YWx1ZSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozMC40MDE5NzgzMzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTc2NTY3NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUTFMgQ29kZSoqXG5cbkFscmlnaHQsIHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGF0J3MgYSBrZXkgYXJlYSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgY2hhbmdpbmcuIE15IGZpcnN0IG1vdmUgaXMgdG8gY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIGRpZmYgaXRzZWxmIOKAkyBJIG5lZWQgdG8gc2VlIHRoZSBsaW5lLWJ5LWxpbmUgYWx0ZXJhdGlvbnMgdG8gZ2V0IGEgZmVlbCBmb3IgdGhlIHNjb3BlIGFuZCBpbXBhY3QuIFRoZW4sIEknbGwgbmVlZCB0byByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBhcm91bmQgdGhvc2UgbW9kaWZpZWQgbGluZXMgaW4gYHRsc19tYWluLmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWUgd2hlbiByZXZpZXdpbmcga2VybmVsIGNoYW5nZXMsIGVzcGVjaWFsbHkgaW4gc2VjdXJpdHktc2Vuc2l0aXZlIG1vZHVsZXMuXG5cblRvIGV4cGVkaXRlIHRoaXMsIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYC4gVGhlc2UgdG9vbHMgYXJlIGludmFsdWFibGUgZm9yIHF1aWNrbHkgbmF2aWdhdGluZyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgY29kZSwgbWFraW5nIHRoZSBhbmFseXNpcyBmYXIgbW9yZSBlZmZpY2llbnQuIFRoZXknbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgYW55IGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBkZWZpbml0aW9ucywgb3IgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGltcGFjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozNi41Nzg1NDc5NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyMDpcXHRcXHRyYyA9IGNoZWNrX3plcm9lZF9zb2NrcHRyKG9wdHZhbCwgc2l6ZW9mKHZhbCksIG9wdGxlbiAtIHNpemVvZih2YWwpKTtcXG4gODIxOlxcdFxcdGlmIChyYyBcXHUwMDNjIDEpXFxuIDgyMjpcXHRcXHRcXHRyZXR1cm4gcmMgPT0gMCA/IC1FSU5WQUwgOiByYztcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gODI1OlxcdFxcdHJjID0gLUVJTlZBTDtcXG4gODI2OlxcdFxcdGlmIChjdHgtXFx1MDAzZXJ4X2NvbmYgPT0gVExTX1NXIHx8IGN0eC1cXHUwMDNlcnhfY29uZiA9PSBUTFNfSFcpIHtcXG4gODI3OlxcdFxcdFxcdGN0eC1cXHUwMDNlcnhfbm9fcGFkID0gdmFsO1xcbiA4Mjg6XFx0XFx0XFx0dGxzX3VwZGF0ZV9yeF96Y19jYXBhYmxlKGN0eCk7XFxuIDgyOTpcXHRcXHRcXHRyYyA9IDA7XFxuIDgzMDpcXHRcXHR9XFxuIDgzMTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRyZXR1cm4gcmM7XFxuIDgzNDpcXHR9XFxuIDgzNTpcXHRcXG4gODM2OlxcdC8qIHByaXZfY3R4X3R4IGhvbGRzIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBvbiBlYWNoIFRYIHBhdGgsIHNvIHR4X2NvbmYgaGFzIHRvXFxuIDgzNzpcXHQgKiBzYXkgd2hpY2ggb3BlbiByZWNvcmQgdG8gbG9vayBhdC5cXG4gODM4OlxcdCAqL1xcbiA4Mzk6XFx0c3RhdGljIGJvb2wgdGxzX3R4X3JlY29yZF9pc19vcGVuKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbiA4NDA6XFx0e1xcbiA4NDE6XFx0XFx0c3dpdGNoIChjdHgtXFx1MDAzZXR4X2NvbmYpIHtcXG4gODQyOlxcdFxcdGNhc2UgVExTX1NXOlxcbiA4NDM6XFx0XFx0XFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlYztcXG4gODQ0OlxcdFxcdGNhc2UgVExTX0hXOlxcbiA4NDU6XFx0XFx0XFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXFx1MDAzZW9wZW5fcmVjb3JkO1xcbiA4NDY6XFx0XFx0ZGVmYXVsdDpcXG4gODQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODQ4OlxcdFxcdH1cXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuIDg1MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gODUzOlxcdHtcXG4gODU0OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiA4NTU6XFx0XFx0dTE2IHZhbHVlO1xcbiA4NTY6XFx0XFx0Ym9vbCB0bHNfMTMgPSBjdHgtXFx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0aWYgKHRsc190eF9yZWNvcmRfaXNfb3BlbihjdHgpKVxcbiA4NTk6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0aWYgKHNvY2twdHJfaXNfbnVsbChvcHR2YWwpIHx8IG9wdGxlbiAhPSBzaXplb2YodmFsdWUpKVxcbiA4NjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2dmFsdWUsIG9wdHZhbCwgc2l6ZW9mKHZhbHVlKSkpXFxuIDg2NTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODY2OlxcdFxcbiA4Njc6XFx0XFx0aWYgKHZhbHVlIFxcdTAwM2MgVExTX01JTl9SRUNPUkRfU0laRV9MSU0gLSAodGxzXzEzID8gMSA6IDApIHx8XFxuIDg2ODpcXHRcXHQgICAgdmFsdWUgXFx1MDAzZSBUTFNfTUFYX1BBWUxPQURfU0laRSlcXG4gODY5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTozNi41Nzg2ODUyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3MjA3NTYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgVExTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiB0aGUgVExTIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIHRyYW5zbWlzc2lvbiBwYXlsb2FkIGxlbmd0aCBpcyBoYW5kbGVkLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgY2FsbCB0byBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIGFuZCBJJ2xsIHRyYWNlIGl0cyB1c2FnZSBiYWNrIHRvIHRoZSBgdGxzX21haW4uY2AgZmlsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgd2hlcmUgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cblxuT2YgY291cnNlLCBmaWd1cmluZyBvdXQgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBiZWhhdmlvdXIgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdG8gYWRqdXN0IGl0LiBUaGlzIHNlZW1zIGxpa2UgYSBgbmV0L3Rscy9gIHNpdHVhdGlvbiwgc28gSSdsbCBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyB1bmRlciB0aGF0IGRpcmVjdG9yeS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFmZmVjdCB0aGUgY2FsbCB0byBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDExLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0MS45NTA3NjUxOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTY3NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjQyLjE0NzM1NDY3MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzI0MTc1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiByZWFkaW5nIGBuZXQvdGxzL0tjb25maWdgLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUTFMgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBuZXQvdGxzL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBuaXR0eS1ncml0dHkgb2YgY29uZmlndXJpbmcgVExTIHN1cHBvcnQgYXQgdGhlIGtlcm5lbCBsZXZlbC4gSSBuZWVkIHRvIHNlZSB3aGF0IGtub2JzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgb2YgY291cnNlIOKAkyB3aGljaCBmZWF0dXJlcyByZWx5IG9uIHdoaWNoIG90aGVycz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgc3BlY2lmaWMgVExTLXJlbGF0ZWQgb3B0aW9ucz8gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGJyb2tlbiBkb3duIGJ5IGNpcGhlciBzdWl0ZXMsIGtleSBleGNoYW5nZSBhbGdvcml0aG1zLCBhbmQgcGVyaGFwcyBzb21lIGZpbmUtZ3JhaW5lZCBjb250cm9scyBvdmVyIGZlYXR1cmVzIGxpa2Ugc2Vzc2lvbiByZXN1bXB0aW9uIG9yIGhhcmR3YXJlIG9mZmxvYWRpbmcsIGlmIHRoZXkncmUgc3VwcG9ydGVkLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGlmIHRoZXJlJ3MgYW55IG5ldyBsb2dpYyBJJ3ZlIG5vdCBsb29rZWQgaW50byBiZWZvcmUsIG9yIGFueXRoaW5nIHRoYXQncyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzLiBBcmUgdGhlcmUgYW55IG5ldyBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQ/IEhhcyB0aGVyZSBiZWVuIGFueSBlZmZvcnQgdG8gaW1wcm92ZSB0aGUgZmxleGliaWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhlIGV4aXN0aW5nIFRMUyBzdGFjaz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgdWx0aW1hdGUgdHJ1dGggb24gd2hhdCB0aGUga2VybmVsIGNhbiBkbyBhbmQgd2hhdCBJIGNhbiBlbmFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0NC4zMTk3NzQ3OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NDk6NDQuMzE5ODc5Mjg4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNzk1OTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZGlnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBhbHdheXMgdGhlIHNhbWU6IGxldCdzIHRyYWNlIGl0cyB1c2FnZS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZXMuIEkgd2FudCB0byBzZWUgKmV2ZXJ5d2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBhcyB0aGlzIHNob3VsZCByZXZlYWwgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIGFuIG92ZXJ2aWV3IG9mIHRoZSByb2xlIGl0IHBsYXlzIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHN1cnByaXNpbmcgY2FsbHMsIGFueSBvZGQgY29udHJvbCBmbG93cywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB0aGF0IG1pZ2h0IGp1bXAgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0Ni4zMjc4NDIxMzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzA2NTI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NTAtXFxubmV0L3Rscy90bHNfbWFpbi5jOjg1MTpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvdGxzL3Rsc19tYWluLmMtODUyLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTg3Nj1zdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5OTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTkwMC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0Ni41MDQ5MTMzMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NTk5MjUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBmYW1pbGlhciB3aXRoIGxvdy1sZXZlbCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgVExTOlxuXG4qKkRpZ2dpbmcgaW50byBUTFMgU29ja2V0IE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHVzaW5nIGBkb190bHNfc2V0c29ja29wdGAgb3IgYHRsc19zZXRzb2Nrb3B0YC4gVGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIHByZXR0eSBjbGVhciBpbmRpY2F0b3JzIG9mIG1hbmlwdWxhdGlvbiBvZiBzb2NrZXQgb3B0aW9ucyByZWxhdGVkIHRvIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBuZXh0IHN0ZXAgc2hvdWxkIGJlIGEgY29kZSBhdWRpdCBvZiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIGNhbGxzIGFuZCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGludGVudGlvbiBhbmQgcmVhc29uaW5nIGJlaGluZCB0aG9zZSBzb2NrZXQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo0OC41ODA5MDg1OTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MDYzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3Rsc19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX21haW4uYz01OTg9c3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy02MjItXFxubmV0L3Rscy90bHNfbWFpbi5jOjYyMzpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC90bHMvdGxzX21haW4uYy02MjQtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuLCBpbnQgdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNzgzLVxcbm5ldC90bHMvdGxzX21haW4uYzo3ODQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTc4NS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTgwMy1cXG5uZXQvdGxzL3Rsc19tYWluLmM6ODA0OnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvdGxzL3Rsc19tYWluLmMtODA1LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODUwLVxcbm5ldC90bHMvdGxzX21haW4uYzo4NTE6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg1Mi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NzUtXFxubmV0L3Rscy90bHNfbWFpbi5jOjg3NjpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg3Ny1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODg0LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg4NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC90bHMvdGxzX21haW4uYy04ODYtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdG5hbWUgPT0gVExTX1RYKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04OTAtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6ODkxOlxcdFxcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtODkyLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk0LVxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC90bHMvdGxzX21haW4uYy04OTYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5OTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTkwMC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTkwOT1zdGF0aWMgaW50IHRsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy05MTctXFxubmV0L3Rscy90bHNfbWFpbi5jOjkxODpcXHRyZXR1cm4gZG9fdGxzX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtOTE5LX1cXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjUyNT1pbnQgdGxzX3NldF9zd19vZmZsb2FkKHN0cnVjdCBzb2NrICpzaywgaW50IHR4LFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yNjMzLVxcdFxcdFxcdCAgICAgIGNpcGhlcl9kZXNjLVxcdTAwM2VjcnlwdG9faW5mbyxcXG5uZXQvdGxzL3Rsc19zdy5jOjI2MzQ6XFx0XFx0XFx0ICAgICAgLyogc2l6ZSB3YXMgY2hlY2tlZCBpbiBkb190bHNfc2V0c29ja29wdF9jb25mICovKTtcXG5uZXQvdGxzL3Rsc19zdy5jLTI2MzUtXFx0XFx0bWVtemVyb19leHBsaWNpdChuZXdfY3J5cHRvX2luZm8sIGNpcGhlcl9kZXNjLVxcdTAwM2VjcnlwdG9faW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjQ4LjY3OTk3ODQ1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA1NDE4NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgVExTIFNvY2tldCBPcHRpb25zIGFuZCBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBgdGxzYCBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHNwZWNpZmljYWxseSBgdGxzX3NldHNvY2tvcHRgIGFuZCBgdGxzX2luaXRgLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZXkncmUgY2VudHJhbCB0byBjb25maWd1cmluZyBhbmQgZXN0YWJsaXNoaW5nIHRoZSBUTFMgY29ubmVjdGlvbnMsIHdoaWNoIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIFdoZXJlIGFyZSB0aGV5IGJlaW5nIGNhbGxlZD8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IEFuZCB3aGF0LCBpZiBhbnl0aGluZywgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgRm9jdXNTeW1ib2xzYCBhbmQgdGhlc2UgZnVuY3Rpb25zPyBNeSBmaXJzdCBzdG9wIHdpbGwgYmUgYG5ldC90bHMvdGxzX21haW4uY2AgYXJvdW5kIHRoZSBgdGxzX3NldHNvY2tvcHRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEknbSBob3BpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIG9yY2hlc3RyYXRlZCBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgb3ZlcmFsbCBUTFMgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo1MC41ODUzOTk1MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gOTAxOlxcdFxcdFxcdGJyZWFrO1xcbiA5MDI6XFx0XFx0ZGVmYXVsdDpcXG4gOTAzOlxcdFxcdFxcdHJjID0gLUVOT1BST1RPT1BUO1xcbiA5MDQ6XFx0XFx0XFx0YnJlYWs7XFxuIDkwNTpcXHRcXHR9XFxuIDkwNjpcXHRcXHRyZXR1cm4gcmM7XFxuIDkwNzpcXHR9XFxuIDkwODpcXHRcXG4gOTA5OlxcdHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiA5MTA6XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiA5MTE6XFx0e1xcbiA5MTI6XFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIDkxMzpcXHRcXG4gOTE0OlxcdFxcdGlmIChsZXZlbCAhPSBTT0xfVExTKVxcbiA5MTU6XFx0XFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlc2tfcHJvdG8tXFx1MDAzZXNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsXFxuIDkxNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgb3B0bGVuKTtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0cmV0dXJuIGRvX3Rsc19zZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDkxOTpcXHR9XFxuIDkyMDpcXHRcXG4gOTIxOlxcdHN0YXRpYyBpbnQgdGxzX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuIDkyMjpcXHR7XFxuIDkyMzpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDkyNDpcXHR9XFxuIDkyNTpcXHRcXG4gOTI2OlxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrKVxcbiA5Mjc6XFx0e1xcbiA5Mjg6XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiA5Mjk6XFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHg7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgsIEdGUF9BVE9NSUMpO1xcbiA5MzI6XFx0XFx0aWYgKCFjdHgpXFxuIDkzMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTM0OlxcdFxcbiA5MzU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2V0eF9sb2NrKTtcXG4gOTM2OlxcdFxcdGN0eC1cXHUwMDNlc2tfcHJvdG8gPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbiA5Mzc6XFx0XFx0Y3R4LVxcdTAwM2VzayA9IHNrO1xcbiA5Mzg6XFx0XFx0LyogUmVsZWFzZSBzZW1hbnRpYyBvZiByY3VfYXNzaWduX3BvaW50ZXIoKSBlbnN1cmVzIHRoYXRcXG4gOTM5OlxcdFxcdCAqIGN0eC1cXHUwMDNlc2tfcHJvdG8gaXMgdmlzaWJsZSBiZWZvcmUgY2hhbmdpbmcgc2stXFx1MDAzZXNrX3Byb3QgaW5cXG4gOTQwOlxcdFxcdCAqIHVwZGF0ZV9za19wcm90KCksIGFuZCBwcmV2ZW50cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaW5cXG4gOTQxOlxcdFxcdCAqIHRsc197Z2V0c29ja29wdCwgc2V0c29ja29wdH0uIE5vdGUgdGhhdCB3ZSBkbyBub3QgbmVlZCBhXFxuIDk0MjpcXHRcXHQgKiByZWFkIGJhcnJpZXIgaW4gdGxzX3tnZXRzb2Nrb3B0LHNldHNvY2tvcHR9IGFzIHRoZXJlIGlzIGFuXFxuIDk0MzpcXHRcXHQgKiBhZGRyZXNzIGRlcGVuZGVuY3kgYmV0d2VlbiBzay1cXHUwMDNlc2tfcHJvdG8tXFx1MDAzZXtnZXRzb2Nrb3B0LHNldHNvY2tvcHR9XFxuIDk0NDpcXHRcXHQgKiBhbmQgY3R4LVxcdTAwM2Vza19wcm90by5cXG4gOTQ1OlxcdFxcdCAqL1xcbiA5NDY6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGljc2stXFx1MDAzZWljc2tfdWxwX2RhdGEsIGN0eCk7XFxuIDk0NzpcXHRcXHRyZXR1cm4gY3R4O1xcbiA5NDg6XFx0fVxcbiA5NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjUwLjU4NTU1MzEzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTUxODQyOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHRsc19zZXRzb2Nrb3B0YCBBc3NpZ25tZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGhvdyBgdGxzX3NldHNvY2tvcHRgIGlzIGJlaW5nIGFzc29jaWF0ZWQgd2l0aCBlaXRoZXIgcHJvdG9jb2wtbGV2ZWwgb3Igc3BlY2lmaWMgc29ja2V0LWxldmVsIG9wZXJhdGlvbnMuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBwcm9iYWJseSBub3QgYSBzaW1wbGUsIG9uZS1zaXplLWZpdHMtYWxsIGFwcHJvYWNoLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB3aGVyZSBpdCBnZXRzIGNhbGxlZCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyB0aWVkIHRvIGEgKnNwZWNpZmljKiBzb2NrZXQgdmVyc3VzIGJlaW5nIGhhbmRsZWQgYXQgYSBicm9hZGVyLCBtb3JlIGdlbmVyaWMgcHJvdG9jb2wgbGV2ZWwuIElzIHRoZSBhc3NpZ25tZW50IGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCAoZS5nLiwgVENQLCBVRFApIG9yIFRMUyBpbXBsZW1lbnRhdGlvbj8gSSBzdXNwZWN0IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGdvaW5nIHRvIHZhcnkgYWNyb3NzIHRoZSBsaWJyYXJ5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBzb2NrZXQgb3B0aW9ucyBhbmQgaG93IGB0bHNfc2V0c29ja29wdGAgbWlnaHQgYWZmZWN0IHRoZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBzZWN1cml0eSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGFyZSB3ZSB0YWxraW5nIGFib3V0IHBlci1zb2NrZXQgc2VjdXJpdHkgcGFyYW1ldGVycyBvciBnbG9iYWwgc2V0dGluZ3M/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjQ5OjU0LjUzNzQwMDQyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzOTY3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX21haW4uYz01OTg9c3RhdGljIGludCB2YWxpZGF0ZV9jcnlwdG9faW5mbyhjb25zdCBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpjcnlwdG9faW5mbyxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy02MjItXFxubmV0L3Rscy90bHNfbWFpbi5jOjYyMzpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC90bHMvdGxzX21haW4uYy02MjQtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb3B0bGVuLCBpbnQgdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtNzgzLVxcbm5ldC90bHMvdGxzX21haW4uYzo3ODQ6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF96YyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTc4NS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTgwMy1cXG5uZXQvdGxzL3Rsc19tYWluLmM6ODA0OnN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfbm9fcGFkKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvdGxzL3Rsc19tYWluLmMtODA1LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODUwLVxcbm5ldC90bHMvdGxzX21haW4uYzo4NTE6c3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg1Mi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NzUtXFxubmV0L3Rscy90bHNfbWFpbi5jOjg3NjpzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L3Rscy90bHNfbWFpbi5jLTg3Ny1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODg0LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg4NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYoc2ssIG9wdHZhbCwgb3B0bGVuLFxcbm5ldC90bHMvdGxzX21haW4uYy04ODYtXFx0XFx0XFx0XFx0XFx0ICAgIG9wdG5hbWUgPT0gVExTX1RYKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04OTAtXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6ODkxOlxcdFxcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfemMoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtODkyLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk0LVxcdGNhc2UgVExTX1JYX0VYUEVDVF9OT19QQUQ6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5NTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X25vX3BhZChzaywgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC90bHMvdGxzX21haW4uYy04OTYtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODk4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L3Rscy90bHNfbWFpbi5jOjg5OTpcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTkwMC1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTkwOC1cXG5uZXQvdGxzL3Rsc19tYWluLmM6OTA5OnN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC90bHMvdGxzX21haW4uYy05MTAtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTkxNy1cXG5uZXQvdGxzL3Rsc19tYWluLmM6OTE4OlxcdHJldHVybiBkb190bHNfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC90bHMvdGxzX21haW4uYy05MTktfVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTEwMTI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAxNS1cXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0gPSAqYmFzZTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdFxcdD0gdGxzX3NldHNvY2tvcHQ7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdLmdldHNvY2tvcHRcXHQ9IHRsc19nZXRzb2Nrb3B0O1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yNTI1PWludCB0bHNfc2V0X3N3X29mZmxvYWQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTI2MzMtXFx0XFx0XFx0ICAgICAgY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvLFxcbm5ldC90bHMvdGxzX3N3LmM6MjYzNDpcXHRcXHRcXHQgICAgICAvKiBzaXplIHdhcyBjaGVja2VkIGluIGRvX3Rsc19zZXRzb2Nrb3B0X2NvbmYgKi8pO1xcbm5ldC90bHMvdGxzX3N3LmMtMjYzNS1cXHRcXHRtZW16ZXJvX2V4cGxpY2l0KG5ld19jcnlwdG9faW5mbywgY2lwaGVyX2Rlc2MtXFx1MDAzZWNyeXB0b19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NDk6NTQuNzUxMzcyNjgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTcyNDI2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhwbG9yaW5nIFRMUyBhbmQgVUxQIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBsYW5kc2NhcGUgd2l0aGluIFRMUyBhbmQgYHRsc19tYWluLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9yIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nIHdpdGhpbiB0aGUgVExTIHN0cnVjdHVyZSBpdHNlbGYuIEkgd2FudCB0byBleHBhbmQgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW52aXJvbm1lbnQuXG5cbkkgc2hvdWxkIGV4YW1pbmUgYHRsc19tYWluLmNgIHNwZWNpZmljYWxseSwgYW5kIEknbGwgZm9jdXMgb24gdGhlIGFyZWEgYXJvdW5kIGBidWlsZF9wcm90b3NgIGFuZCBVTFAgcmVnaXN0cmF0aW9uLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNwb3QgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NDk6NTcuMjQ4NjE5NTQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHQgICAgdW5saWtlbHkocHJvdCAhPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzYXZlZF90Y3B2NF9wcm90KSkpIHtcXG4xMDAxOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnRjcHY0X3Byb3RfbXV0ZXgpO1xcbjEwMDI6XFx0XFx0XFx0aWYgKGxpa2VseShwcm90ICE9IHNhdmVkX3RjcHY0X3Byb3QpKSB7XFxuMTAwMzpcXHRcXHRcXHRcXHRidWlsZF9wcm90b3ModGxzX3Byb3RzW1RMU1Y0XSwgcHJvdCk7XFxuMTAwNDpcXHRcXHRcXHRcXHRidWlsZF9wcm90b19vcHModGxzX3Byb3RvX29wc1tUTFNWNF0sXFxuMTAwNTpcXHRcXHRcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VvcHMpO1xcbjEwMDY6XFx0XFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNhdmVkX3RjcHY0X3Byb3QsIHByb3QpO1xcbjEwMDc6XFx0XFx0XFx0fVxcbjEwMDg6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0Y3B2NF9wcm90X211dGV4KTtcXG4xMDA5OlxcdFxcdH1cXG4xMDEwOlxcdH1cXG4xMDExOlxcdFxcbjEwMTI6XFx0c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXFxuMTAxMzpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByb3RvICpiYXNlKVxcbjEwMTQ6XFx0e1xcbjEwMTU6XFx0XFx0cHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdID0gKmJhc2U7XFxuMTAxNjpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdFxcdD0gdGxzX3NldHNvY2tvcHQ7XFxuMTAxNzpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZ2V0c29ja29wdFxcdD0gdGxzX2dldHNvY2tvcHQ7XFxuMTAxODpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uZGlzY29ubmVjdFxcdD0gdGxzX2Rpc2Nvbm5lY3Q7XFxuMTAxOTpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uY2xvc2VcXHRcXHQ9IHRsc19za19wcm90b19jbG9zZTtcXG4xMDIwOlxcdFxcbjEwMjE6XFx0XFx0cHJvdFtUTFNfU1ddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG4xMDIyOlxcdFxcdHByb3RbVExTX1NXXVtUTFNfQkFTRV0uc2VuZG1zZ1xcdFxcdD0gdGxzX3N3X3NlbmRtc2c7XFxuMTAyMzpcXHRcXHRwcm90W1RMU19TV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcXHQ9IHRsc19zd19zcGxpY2VfZW9mO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xcbjEwMjY6XFx0XFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5yZWN2bXNnXFx0XFx0ICA9IHRsc19zd19yZWN2bXNnO1xcbjEwMjc6XFx0XFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4xMDI4OlxcdFxcdHByb3RbVExTX0JBU0VdW1RMU19TV10uY2xvc2VcXHRcXHQgID0gdGxzX3NrX3Byb3RvX2Nsb3NlO1xcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHRwcm90W1RMU19TV11bVExTX1NXXSA9IHByb3RbVExTX1NXXVtUTFNfQkFTRV07XFxuMTAzMTpcXHRcXHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXFx0XFx0PSB0bHNfc3dfcmVjdm1zZztcXG4xMDMyOlxcdFxcdHByb3RbVExTX1NXXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xcbjEwMzM6XFx0XFx0cHJvdFtUTFNfU1ddW1RMU19TV10uY2xvc2VcXHRcXHQ9IHRsc19za19wcm90b19jbG9zZTtcXG4xMDM0OlxcdFxcbjEwMzU6XFx0I2lmZGVmIENPTkZJR19UTFNfREVWSUNFXFxuMTAzNjpcXHRcXHRwcm90W1RMU19IV11bVExTX0JBU0VdID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xcbjEwMzc6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19CQVNFXS5zZW5kbXNnXFx0XFx0PSB0bHNfZGV2aWNlX3NlbmRtc2c7XFxuMTAzODpcXHRcXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcXHQ9IHRsc19kZXZpY2Vfc3BsaWNlX2VvZjtcXG4xMDM5OlxcdFxcbjEwNDA6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19TV10gPSBwcm90W1RMU19CQVNFXVtUTFNfU1ddO1xcbjEwNDE6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19TV10uc2VuZG1zZ1xcdFxcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xcbjEwNDI6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19TV10uc3BsaWNlX2VvZlxcdFxcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xcbjEwNDM6XFx0XFxuMTA0NDpcXHRcXHRwcm90W1RMU19CQVNFXVtUTFNfSFddID0gcHJvdFtUTFNfQkFTRV1bVExTX1NXXTtcXG4xMDQ1OlxcdFxcbjEwNDY6XFx0XFx0cHJvdFtUTFNfU1ddW1RMU19IV10gPSBwcm90W1RMU19TV11bVExTX1NXXTtcXG4xMDQ3OlxcdFxcbjEwNDg6XFx0XFx0cHJvdFtUTFNfSFddW1RMU19IV10gPSBwcm90W1RMU19IV11bVExTX1NXXTtcXG4xMDQ5OlxcdCNlbmRpZlxcbjEwNTA6XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRzdGF0aWMgaW50IHRsc19pbml0KHN0cnVjdCBzb2NrICpzaylcXG4xMDUzOlxcdHtcXG4xMDU0OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xcbjEwNTU6XFx0XFx0aW50IHJjID0gMDtcXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0dGxzX2J1aWxkX3Byb3RvKHNrKTtcXG4xMDU4OlxcdFxcbjEwNTk6XFx0XFx0LyogVGhlIFRMUyB1bHAgaXMgY3VycmVudGx5IHN1cHBvcnRlZCBvbmx5IGZvciBUQ1Agc29ja2V0c1xcbjEwNjA6XFx0XFx0ICogaW4gRVNUQUJMSVNIRUQgc3RhdGUuXFxuMTA2MTpcXHRcXHQgKiBTdXBwb3J0aW5nIHNvY2tldHMgaW4gTElTVEVOIHN0YXRlIHdpbGwgcmVxdWlyZSB1c1xcbjEwNjI6XFx0XFx0ICogdG8gbW9kaWZ5IHRoZSBhY2NlcHQgaW1wbGVtZW50YXRpb24gdG8gY2xvbmUgcmF0aGVyIHRoZW5cXG4xMDYzOlxcdFxcdCAqIHNoYXJlIHRoZSB1bHAgY29udGV4dC5cXG4xMDY0OlxcdFxcdCAqL1xcbjEwNjU6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpXFxuMTA2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT1RDT05OO1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHQvKiBhbGxvY2F0ZSB0bHMgY29udGV4dCAqL1xcbjEwNjk6XFx0XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2NhbGxiYWNrX2xvY2spO1xcbjEwNzA6XFx0XFx0Y3R4ID0gdGxzX2N0eF9jcmVhdGUoc2spO1xcbjEwNzE6XFx0XFx0aWYgKCFjdHgpIHtcXG4xMDcyOlxcdFxcdFxcdHJjID0gLUVOT01FTTtcXG4xMDczOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEwNzQ6XFx0XFx0fVxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHRjdHgtXFx1MDAzZXR4X2NvbmYgPSBUTFNfQkFTRTtcXG4xMDc3OlxcdFxcdGN0eC1cXHUwMDNlcnhfY29uZiA9IFRMU19CQVNFO1xcbjEwNzg6XFx0XFx0Y3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSBUTFNfTUFYX1BBWUxPQURfU0laRTtcXG4xMDc5OlxcdFxcdHVwZGF0ZV9za19wcm90KHNrLCBjdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo0OTo1Ny4yNDg3ODA4MDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYzOTA4MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBUTFMgUGF5bG9hZCBTaXplIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgbWF4aW11bSBwYXlsb2FkIHNpemUgZm9yIFRMUyB0cmFuc21pc3Npb25zLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYFRMU19UWF9NQVhfUEFZTE9BRF9TSVpFYCwgYW5kIEknbSBwcmV0dHkgc3VyZSB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGBUTFNfTUFYX1BBWUxPQURfU0laRWAgb3B0aW9uIHdoZW4gd2UncmUgdXNpbmcgYHNldHNvY2tvcHRgLiBKdXN0IHdhbnQgdG8gY29uZmlybSB0aGF0IG1hcHBpbmcuIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBgb3B0bmFtZWAgdmFsdWVzIGluIGBkb190bHNfc2V0c29ja29wdGAg4oCTIGdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgb3B0aW9uIG5hbWVzIGFyZSBjb3JyZWN0IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZS4gSSB3YW50IHRvIGNvbmZpcm0gSSdtIGRlYWxpbmcgd2l0aCB0aGUgY29ycmVjdCBzZXR0aW5nLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMzOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MDUuODg3ODY2OTA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDI4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg3MDpcXHRcXG4gODcxOlxcdFxcdGN0eC1cXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuID0gdmFsdWU7XFxuIDg3MjpcXHRcXG4gODczOlxcdFxcdHJldHVybiAwO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuIDg3NzpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIDg3ODpcXHR7XFxuIDg3OTpcXHRcXHRpbnQgcmMgPSAwO1xcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gODgyOlxcdFxcdGNhc2UgVExTX1RYOlxcbiA4ODM6XFx0XFx0Y2FzZSBUTFNfUlg6XFxuIDg4NDpcXHRcXHRcXHRsb2NrX3NvY2soc2spO1xcbiA4ODU6XFx0XFx0XFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9jb25mKHNrLCBvcHR2YWwsIG9wdGxlbixcXG4gODg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcHRuYW1lID09IFRMU19UWCk7XFxuIDg4NzpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA4ODg6XFx0XFx0XFx0YnJlYWs7XFxuIDg4OTpcXHRcXHRjYXNlIFRMU19UWF9aRVJPQ09QWV9STzpcXG4gODkwOlxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDg5MTpcXHRcXHRcXHRyYyA9IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3pjKHNrLCBvcHR2YWwsIG9wdGxlbik7XFxuIDg5MjpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA4OTM6XFx0XFx0XFx0YnJlYWs7XFxuIDg5NDpcXHRcXHRjYXNlIFRMU19SWF9FWFBFQ1RfTk9fUEFEOlxcbiA4OTU6XFx0XFx0XFx0cmMgPSBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4gODk2OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTc6XFx0XFx0Y2FzZSBUTFNfVFhfTUFYX1BBWUxPQURfTEVOOlxcbiA4OTg6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gODk5OlxcdFxcdFxcdHJjID0gZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc2ssIG9wdHZhbCwgb3B0bGVuKTtcXG4gOTAwOlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDkwMTpcXHRcXHRcXHRicmVhaztcXG4gOTAyOlxcdFxcdGRlZmF1bHQ6XFxuIDkwMzpcXHRcXHRcXHRyYyA9IC1FTk9QUk9UT09QVDtcXG4gOTA0OlxcdFxcdFxcdGJyZWFrO1xcbiA5MDU6XFx0XFx0fVxcbiA5MDY6XFx0XFx0cmV0dXJuIHJjO1xcbiA5MDc6XFx0fVxcbiA5MDg6XFx0XFxuIDkwOTpcXHRzdGF0aWMgaW50IHRsc19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MDUuODg5MTEzNjk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzU3NTc0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVExTIEJ1ZyBGaXggYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugc29tZW9uZSBhZGRlZCBgdGxzX3R4X3JlY29yZF9pc19vcGVuKGN0eClgIHRvIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhleSd2ZSByZXBsYWNlZCBhIGRpcmVjdCwgdW5jaGVja2VkIGNhc3Qgb2YgYGN0eC1cdTAwM2Vwcml2X2N0eF90eGAgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCB3aXRoIGEgZnVuY3Rpb24gdGhhdCAqaW50ZWxsaWdlbnRseSogZGV0ZXJtaW5lcyBpZiB0aGUgcmVjb3JkIGlzIG9wZW4uIEJlZm9yZSwgdGhlIGNvZGUgd2FzIGltcGxpY2l0bHkgYXNzdW1pbmcgaXQgd2FzIGRlYWxpbmcgd2l0aCBzb2Z0d2FyZSBUTFMgKGBUTFNfU1dgKS4gTm93LCBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjYXNlIChgVExTX0hXYCkgYnkgY2hlY2tpbmcgYGN0eC1cdTAwM2V0eF9jb25mYC5cblxuVGhlIG9sZCBjb2RlIHdhcyBkb2luZyBhIGJsaW5kIGNhc3QgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCBldmVuIGlmIGhhcmR3YXJlIG9mZmxvYWQgd2FzIGVuYWJsZWQuIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgYWRkcmVzc2VzIHRoaXMgYnkgdXNpbmcgYSBgc3dpdGNoYCBzdGF0ZW1lbnQgdGhhdCBjaGVja3MgYGN0eC1cdTAwM2V0eF9jb25mYC4gRGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBzb2Z0d2FyZSBvciBoYXJkd2FyZSBUTFMsIGl0IGNhbGxzIHRoZSByaWdodCBmdW5jdGlvbiAoYHRsc19zd19jdHhfdHgoY3R4KWAgb3IgYHRsc19vZmZsb2FkX2N0eF90eChjdHgpYCkgdG8gZ2V0IHRoZSByZWxldmFudCBgb3Blbl9yZWNgIG9yIGBvcGVuX3JlY29yZGAgZmllbGQsIHJlc3BlY3RpdmVseS4gQ3J1Y2lhbGx5LCBpdCBoYW5kbGVzIHRoZSBgZGVmYXVsdGAgY2FzZSwgcmV0dXJuaW5nIGBmYWxzZWAgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdW5leHBlY3RlZC4gVGhpcyBpcyBhIHNvbGlkIGZ1bmN0aW9uYWwgZml4LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBjcmFzaGVzIG9yIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIGBUTFNfVFhfTUFYX1BBWUxPQURfTEVOYCBpcyB1c2VkLCBlc3BlY2lhbGx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBpbnZvbHZlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBteSB3b3JrOiBpcyB0aGlzIHNvbWV0aGluZyBJIGNhbiBmdXp6PyBBYnNvbHV0ZWx5LiBLZXJuZWwgVExTIChrdGxzKSBpcyBhIHByaW1lIHRhcmdldC4gSXQncyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgc3RhbmRhcmQgVENQIHNvY2tldHMgYW5kIGBzZXRzb2Nrb3B0YCB3aXRoIGBUQ1BfVUxQYCAtXHUwMDNlIFwidGxzXCIgYW5kIGBzZXRzb2Nrb3B0KFNPTF9UTFMsIC4uLilgLiBUaGF0J3MgZWFzeSB0byBzZXQgdXAsIGVhc3kgdG8gcmVwcm9kdWNlIGluIFFFTVUgb3IgR0NFLCBhbmQgc29mdHdhcmUgVExTIGlzIHN0YW5kYXJkLiBJZiB0aGVyZSBhcmUgYW55IGR1bW15IG9yIGVtdWxhdGVkIGhhcmR3YXJlIG9mZmxvYWQgZGV2aWNlcywgdGhvc2Ugd291bGQgYmUgZ3JlYXQgdG9vLCBidXQgc29mdHdhcmUgVExTIGlzIGxpa2VseSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgZml4IGFsc28gaW52b2x2ZXMgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gLCBzbyB0aGF0J3MgYW5vdGhlciB2ZWN0b3IgSSBzaG91bGQgY29uc2lkZXIuXG5cbk5leHQgc3RlcDogSSBzaG91bGQgY2hlY2sgd2hlcmUgZWxzZSBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCwgYG9wZW5fcmVjb3JkYCwgb3IgYFRMU19UWF9NQVhfUEFZTE9BRF9MRU5gIGFyZSB1c2VkIGluIHRoZSBjb2RlIGJhc2UuIFRoYXQgd2lsbCBoZWxwIG1lIHRvIGRldGVybWluZSBwb3RlbnRpYWwgZWRnZSBjYXNlcyBvciBjb250cm9sIGZsb3dzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjEwLjc2NDg3NDYwMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNTA3MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wZW5fcmVjb3JkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzLmg9Mjc1PXN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHMuaC0yNzktXFxubmV0L3Rscy90bHMuaDoyODA6c3RhdGljIGlubGluZSBib29sIHRsc19pc19wZW5kaW5nX29wZW5fcmVjb3JkKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG5uZXQvdGxzL3Rscy5oLTI4MS17XFxubmV0L3Rscy90bHMuaDoyODI6XFx0cmV0dXJuIHRsc19jdHgtXFx1MDAzZXBlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3M7XFxubmV0L3Rscy90bHMuaC0yODMtfVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MTk3PXZvaWQgdGxzX2RldmljZV9za19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDQtXFx0aWYgKHRsc19jdHgtXFx1MDAzZXR4X2NvbmYgPT0gVExTX0hXKSB7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjA1OlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wZW5fcmVjb3JkKVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjIwNjpcXHRcXHRcXHRkZXN0cm95X3JlY29yZChjdHgtXFx1MDAzZW9wZW5fcmVjb3JkKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDctXFx0XFx0ZGVsZXRlX2FsbF9yZWNvcmRzKGN0eCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0yNzk9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjkxLVxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZyZWNvcmQtXFx1MDAzZWxpc3QsIFxcdTAwMjZvZmZsb2FkX2N0eC1cXHUwMDNlcmVjb3Jkc19saXN0KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyOTI6XFx0b2ZmbG9hZF9jdHgtXFx1MDAzZW9wZW5fcmVjb3JkID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yOTMtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0zNDI9c3RhdGljIGludCB0bHNfY3JlYXRlX25ld19yZWNvcmQoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzYxLVxcdHJlY29yZC1cXHUwMDNlbGVuID0gcHJlcGVuZF9zaXplO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjM2MjpcXHRvZmZsb2FkX2N0eC1cXHUwMDNlb3Blbl9yZWNvcmQgPSByZWNvcmQ7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzYzLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzY2PXN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzcyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjM3MzpcXHRpZiAoIW9mZmxvYWRfY3R4LVxcdTAwM2VvcGVuX3JlY29yZCkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTM3NC1cXHRcXHRpZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVmaWxsKHByZXBlbmRfc2l6ZSwgcGZyYWcsXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQzMi1cXHRzaXplX3Qgb3JpZ19zaXplID0gc2l6ZTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0MzM6XFx0dTMyIG1heF9vcGVuX3JlY29yZF9sZW47XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDM0LVxcdGJvb2wgbW9yZSA9IGZhbHNlO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDY0LVxcdCAqL1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ2NTpcXHRtYXhfb3Blbl9yZWNvcmRfbGVuID0gdGxzX2N0eC1cXHUwMDNldHhfbWF4X3BheWxvYWRfbGVuICtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjYtXFx0XFx0XFx0ICAgICAgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDczLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ3NDpcXHRcXHRcXHRyZWNvcmQgPSBjdHgtXFx1MDAzZW9wZW5fcmVjb3JkO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ3NS1cXHRcXHRcXHRpZiAoIXJlY29yZClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ4NC1cXHRcXHRcXHRcXHRkZXN0cm95X3JlY29yZChyZWNvcmQpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ4NTpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZW9wZW5fcmVjb3JkID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00ODYtXFx0XFx0XFx0fSBlbHNlIGlmIChyZWNvcmQtXFx1MDAzZWxlbiBcXHUwMDNlIHByb3QtXFx1MDAzZXByZXBlbmRfc2l6ZSkge1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDkyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ5MzpcXHRcXHRyZWNvcmQgPSBjdHgtXFx1MDAzZW9wZW5fcmVjb3JkO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ5NC1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0OTU6XFx0XFx0Y29weSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgbWF4X29wZW5fcmVjb3JkX2xlbiAtIHJlY29yZC1cXHUwMDNlbGVuKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00OTYtXFx0XFx0aWYgKGNvcHkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykpIHtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU0Mi1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NDM6XFx0XFx0aWYgKGRvbmUgfHwgcmVjb3JkLVxcdTAwM2VsZW4gXFx1MDAzZT0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU0NC1cXHRcXHQgICAgKHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzIFxcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSkge1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTU3LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU1ODpcXHR0bHNfY3R4LVxcdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gbW9yZTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NTktXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz01OTM9dm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU5OS1cXHRpZiAoIXRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo2MDA6XFx0ICAgICF0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSlcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjA2LVxcdGlmICh0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIHx8XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NjA3OlxcdCAgICB0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwOC1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9MTY4PWludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjI1LVxcbm5ldC90bHMvdGxzX21haW4uYzoyMjY6c3RhdGljIGludCB0bHNfaGFuZGxlX29wZW5fcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbm5ldC90bHMvdGxzX21haW4uYy0yMjcte1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTIyOS1cXG5uZXQvdGxzL3Rsc19tYWluLmM6MjMwOlxcdGlmICh0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZChjdHgpKVxcbm5ldC90bHMvdGxzX21haW4uYy0yMzEtXFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlcHVzaF9wZW5kaW5nX3JlY29yZChzaywgZmxhZ3MpO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTIzNj1pbnQgdGxzX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0yNTctXFxubmV0L3Rscy90bHNfbWFpbi5jOjI1ODpcXHRcXHRcXHRyYyA9IHRsc19oYW5kbGVfb3Blbl9yZWNvcmQoc2ssIG1zZy1cXHUwMDNlbXNnX2ZsYWdzKTtcXG5uZXQvdGxzL3Rsc19tYWluLmMtMjU5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTMzOD1zdGF0aWMgdm9pZCB0bHNfc2tfcHJvdG9fY2xlYW51cChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMzQyLVxcdCAgICAhd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzaywgXFx1MDAyNnRpbWVvKSlcXG5uZXQvdGxzL3Rsc19tYWluLmM6MzQzOlxcdFxcdHRsc19oYW5kbGVfb3Blbl9yZWNvcmQoc2ssIDApO1xcbm5ldC90bHMvdGxzX21haW4uYy0zNDQtXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NDQtXFx0Y2FzZSBUTFNfSFc6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg0NTpcXHRcXHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cXHUwMDNlb3Blbl9yZWNvcmQ7XFxubmV0L3Rscy90bHNfbWFpbi5jLTg0Ni1cXHRkZWZhdWx0Olxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz02MTc9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTY4Ni1cXG5uZXQvdGxzL3Rsc19zdy5jOjY4NzpcXHR0bHNfY3R4LVxcdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gZmFsc2U7XFxubmV0L3Rscy90bHNfc3cuYy02ODgtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTc2Nj1zdGF0aWMgaW50IHRsc19zd19zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtODYxLVxcdFxcdFxcdFxcdGdvdG8gc2VuZF9lbmQ7XFxubmV0L3Rscy90bHNfc3cuYzo4NjI6XFx0XFx0XFx0dGxzX2N0eC1cXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IHRydWU7XFxubmV0L3Rscy90bHNfc3cuYy04NjMtXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTk0Mi1cXHRcXHQgKi9cXG5uZXQvdGxzL3Rsc19zdy5jOjk0MzpcXHRcXHR0bHNfY3R4LVxcdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gdHJ1ZTtcXG5uZXQvdGxzL3Rsc19zdy5jLTk0NC1cXHRcXHRjb3BpZWQgKz0gdHJ5X3RvX2NvcHk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjExLjI4NjM5MDExM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDU0MDEwODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVExTIFNvY2tldCBPcHRpb24gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBUTFMgc29ja2V0IG9wdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhlIHRyYWNlIHNob3dzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgYmVpbmcgY2FsbGVkIGZyb20gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgcmVsYXRlIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCB0byBgdGxzX3NldHNvY2tvcHRgLiBSaWdodCwgaGVyZSB3ZSBnby4uLlxuXG5Mb29rcyBsaWtlIGB0bHNfc2V0c29ja29wdGAgaXMgdGhlIGNvcmUsIGFuZCBJIHNlZSBpdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0J3MgY29uZmluZWQgdG8gYHRsc19tYWluLmNgLCB3aGljaCBtYWtlcyB0aGluZ3MgYSBiaXQgc2ltcGxlciBmb3Igbm93LiBPa2F5LCBgdGxzX3NldHNvY2tvcHRgIGlzIGFzc2lnbmVkIHRvIGBwcm90LVx1MDAzZXNldHNvY2tvcHRgLCB3aGljaCBnaXZlcyB1cyBhIHdheSBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIG91dCBhbmQgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBlbnRyeXBvaW50cyBhbmQga2V5IHN5bWJvbHMgaW4gYG5ldC90bHMvdGxzX21haW4uY2AgYW5kIHBvdGVudGlhbGx5IG90aGVyIFRMUyBmaWxlcy4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZpbGUgb3ZlcnZpZXcsIGNoZWNraW5nIGFsbCBmdW5jdGlvbnMvZmlsZXMgaW4gYG5ldC90bHMvYC4gVGhhdCB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhpcyBzb2NrZXQgb3B0aW9uIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBUTFMgaW1wbGVtZW50YXRpb24uIEknbGwgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBvbmNlIEkgZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBhdmFpbGFibGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MTQuMzQwNDA0MDg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxNDUxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCB0bHNffF52b2lkIHRsc19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHMuaD0xMzk9c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4X2NyZWF0ZShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTQwOnZvaWQgdGxzX2N0eF9mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xcbm5ldC90bHMvdGxzLmgtMTQxLXZvaWQgdXBkYXRlX3NrX3Byb3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XFxuLS1cXG5uZXQvdGxzL3Rscy5oPTE0Mz1pbnQgd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvKTtcXG5uZXQvdGxzL3Rscy5oOjE0NDp2b2lkIHRsc19lcnJfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcXG5uZXQvdGxzL3Rscy5oOjE0NTp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpO1xcbm5ldC90bHMvdGxzLmgtMTQ2LVxcbm5ldC90bHMvdGxzLmg9MTQ3PWludCBpbml0X3Byb3RfaW5mbyhzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCxcXG4tLVxcbm5ldC90bHMvdGxzLmgtMTQ5LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCB0bHNfY2lwaGVyX2Rlc2MgKmNpcGhlcl9kZXNjKTtcXG5uZXQvdGxzL3Rscy5oOjE1MDppbnQgdGxzX3NldF9zd19vZmZsb2FkKHN0cnVjdCBzb2NrICpzaywgaW50IHR4LFxcbm5ldC90bHMvdGxzLmgtMTUxLVxcdFxcdCAgICAgICBzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvICpuZXdfY3J5cHRvX2luZm8pO1xcbm5ldC90bHMvdGxzLmg6MTUyOnZvaWQgdGxzX3VwZGF0ZV9yeF96Y19jYXBhYmxlKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNTM6dm9pZCB0bHNfc3dfc3RycGFyc2VyX2FybShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KTtcXG5uZXQvdGxzL3Rscy5oOjE1NDp2b2lkIHRsc19zd19zdHJwYXJzZXJfZG9uZShzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xcbm5ldC90bHMvdGxzLmg6MTU1OmludCB0bHNfc3dfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbm5ldC90bHMvdGxzLmg6MTU2OnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L3Rscy90bHMuaDoxNTc6dm9pZCB0bHNfc3dfY2FuY2VsX3dvcmtfdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KTtcXG5uZXQvdGxzL3Rscy5oOjE1ODp2b2lkIHRsc19zd19yZWxlYXNlX3Jlc291cmNlc190eChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTU5OnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3R4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNjA6dm9pZCB0bHNfc3dfZnJlZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvdGxzL3Rscy5oOjE2MTp2b2lkIHRsc19zd19yZWxlYXNlX3Jlc291cmNlc19yeChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTYyOnZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNjM6aW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC90bHMvdGxzLmgtMTY0LVxcdFxcdCAgIGludCBmbGFncyk7XFxuLS1cXG5uZXQvdGxzL3Rscy5oPTE2Nj1zc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBsb2ZmX3QgKnBwb3MsXFxuLS1cXG5uZXQvdGxzL3Rscy5oLTE2OC1cXHRcXHRcXHQgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbm5ldC90bHMvdGxzLmg6MTY5OmludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxubmV0L3Rscy90bHMuaC0xNzAtXFx0XFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3Rvcik7XFxubmV0L3Rscy90bHMuaC0xNzEtXFxubmV0L3Rscy90bHMuaDoxNzI6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbm5ldC90bHMvdGxzLmg6MTczOnZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC90bHMvdGxzLmg6MTc0OmludCB0bHNfdHhfcmVjb3JkcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7XFxubmV0L3Rscy90bHMuaC0xNzUtXFxubmV0L3Rscy90bHMuaDoxNzY6dm9pZCB0bHNfc3dfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XFxubmV0L3Rscy90bHMuaDoxNzc6dm9pZCB0bHNfZGV2aWNlX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xcbm5ldC90bHMvdGxzLmgtMTc4LVxcbm5ldC90bHMvdGxzLmg6MTc5OmludCB0bHNfcHJvY2Vzc19jbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC90bHMvdGxzLmgtMTgwLVxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpO1xcbm5ldC90bHMvdGxzLmg9MTgxPWludCBkZWNyeXB0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dvdXQpO1xcbm5ldC90bHMvdGxzLmgtMTgyLVxcbm5ldC90bHMvdGxzLmg6MTgzOmludCB0bHNfc3dfZmFsbGJhY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHMuaC0xODQtXFx0XFx0XFx0IHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzLmgtMTg2LVxcbm5ldC90bHMvdGxzLmg6MTg3OmludCB0bHNfc3RycF9kZXZfaW5pdCh2b2lkKTtcXG5uZXQvdGxzL3Rscy5oOjE4ODp2b2lkIHRsc19zdHJwX2Rldl9leGl0KHZvaWQpO1xcbm5ldC90bHMvdGxzLmgtMTg5LVxcbm5ldC90bHMvdGxzLmg6MTkwOnZvaWQgdGxzX3N0cnBfZG9uZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxubmV0L3Rscy90bHMuaC0xOTEtdm9pZCBfX3Rsc19zdHJwX2RvbmUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApO1xcbm5ldC90bHMvdGxzLmg6MTkyOnZvaWQgdGxzX3N0cnBfc3RvcChzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxubmV0L3Rscy90bHMuaDoxOTM6aW50IHRsc19zdHJwX2luaXQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3Rscy90bHMuaDoxOTQ6dm9pZCB0bHNfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG5uZXQvdGxzL3Rscy5oLTE5NS1cXG5uZXQvdGxzL3Rscy5oOjE5Njp2b2lkIHRsc19zdHJwX2NoZWNrX3JjdihzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgYm9vbCBhbm5vdW5jZSk7XFxubmV0L3Rscy90bHMuaDoxOTc6dm9pZCB0bHNfc3RycF9tc2dfY29uc3VtZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCk7XFxubmV0L3Rscy90bHMuaC0xOTgtXFxubmV0L3Rscy90bHMuaDoxOTk6aW50IHRsc19yeF9tc2dfc2l6ZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L3Rscy90bHMuaDoyMDA6dm9pZCB0bHNfcnhfbXNnX21heWJlX2Fubm91bmNlKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKTtcXG5uZXQvdGxzL3Rscy5oLTIwMS1cXG5uZXQvdGxzL3Rscy5oPTIwMj1ib29sIHRsc19zdHJwX21zZ19sb2FkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBib29sIGZvcmNlX3JlZnJlc2gpO1xcbm5ldC90bHMvdGxzLmg6MjAzOmludCB0bHNfc3RycF9tc2dfY293KHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KTtcXG5uZXQvdGxzL3Rscy5oLTIwNC1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eCk7XFxubmV0L3Rscy90bHMuaDoyMDU6aW50IHRsc19zdHJwX21zZ19ob2xkKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpkc3QpO1xcbm5ldC90bHMvdGxzLmgtMjA2LVxcbi0tXFxubmV0L3Rscy90bHMuaD0yMjU9c3RhdGljIGlubGluZSBib29sIHRsc19zdHJwX21zZ19taXhlZF9kZWNyeXB0ZWQoc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rscy5oLTIzMC0jaWZkZWYgQ09ORklHX1RMU19ERVZJQ0VcXG5uZXQvdGxzL3Rscy5oOjIzMTppbnQgdGxzX2RldmljZV9pbml0KHZvaWQpO1xcbm5ldC90bHMvdGxzLmg6MjMyOnZvaWQgdGxzX2RldmljZV9jbGVhbnVwKHZvaWQpO1xcbm5ldC90bHMvdGxzLmg6MjMzOmludCB0bHNfc2V0X2RldmljZV9vZmZsb2FkKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3Rscy90bHMuaDoyMzQ6dm9pZCB0bHNfZGV2aWNlX2ZyZWVfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzayk7XFxubmV0L3Rscy90bHMuaDoyMzU6aW50IHRsc19zZXRfZGV2aWNlX29mZmxvYWRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7XFxubmV0L3Rscy90bHMuaDoyMzY6dm9pZCB0bHNfZGV2aWNlX29mZmxvYWRfY2xlYW51cF9yeChzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MjM3OnZvaWQgdGxzX2RldmljZV9yeF9yZXN5bmNfbmV3X3JlYyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiByY2RfbGVuLCB1MzIgc2VxKTtcXG5uZXQvdGxzL3Rscy5oOjIzODppbnQgdGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpO1xcbm5ldC90bHMvdGxzLmgtMjM5LSNlbHNlXFxuLS1cXG5uZXQvdGxzL3Rscy5oPTI2Mj10bHNfZGV2aWNlX2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4tLVxcbm5ldC90bHMvdGxzLmgtMjY3LVxcbm5ldC90bHMvdGxzLmg6MjY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxcbm5ldC90bHMvdGxzLmgtMjY5LVxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHUxNiBmaXJzdF9vZmZzZXQsXFxubmV0L3Rscy90bHMuaC0yNzAtXFx0XFx0aW50IGZsYWdzKTtcXG5uZXQvdGxzL3Rscy5oOjI3MTppbnQgdGxzX3B1c2hfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcXG5uZXQvdGxzL3Rscy5oLTI3Mi1cXHRcXHRcXHQgICAgaW50IGZsYWdzKTtcXG5uZXQvdGxzL3Rscy5oOjI3Mzp2b2lkIHRsc19mcmVlX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpO1xcbm5ldC90bHMvdGxzLmgtMjc0LVxcbi0tXFxubmV0L3Rscy90bHMuaD0zNjQ9c3RhdGljIGlubGluZVxcbm5ldC90bHMvdGxzLmg6MzY1OnZvaWQgdGxzX21ha2VfYWFkKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNoYXIgKnJlY29yZF9zZXF1ZW5jZSxcXG5uZXQvdGxzL3Rscy5oLTM2Ni1cXHRcXHQgIHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUsIHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90KVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MTYyPXN0YXRpYyB2b2lkIHRsc190Y3BfY2xlYW5fYWNrZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrZWRfc2VxKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTk2LSAqL1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjE5Nzp2b2lkIHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OC17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0yMTQ9RVhQT1JUX1NZTUJPTF9HUEwodGxzX2RldmljZV9za19kZXN0cnVjdCk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjE1LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjIxNjp2b2lkIHRsc19kZXZpY2VfZnJlZV9yZXNvdXJjZXNfdHgoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTIxNy17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMjItXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjIzOnZvaWQgdGxzX29mZmxvYWRfdHhfcmVzeW5jX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCB1MzIgZ290X3NlcSwgdTMyIGV4cF9zZXEpXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjI0LXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY1LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU2NjppbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01Njcte1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTkyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU5Mzp2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU5NC17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODMtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6Njg0OnZvaWQgdGxzX2RldmljZV93cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTY4NS17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz03MTY9dGxzX2RldmljZV9yeF9yZXN5bmNfYXN5bmMoc3RydWN0IHRsc19vZmZsb2FkX3Jlc3luY19hc3luYyAqcmVzeW5jX2FzeW5jLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNzcyLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjc3Mzp2b2lkIHRsc19kZXZpY2VfcnhfcmVzeW5jX25ld19yZWMoc3RydWN0IHNvY2sgKnNrLCB1MzIgcmNkX2xlbiwgdTMyIHNlcSlcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy03NzQte1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9ODg2PXRsc19kZXZpY2VfcmVlbmNyeXB0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtOTc2LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjk3NzppbnQgdGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtOTc4LXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTEwNDE9c3RhdGljIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICphbGxvY19vZmZsb2FkX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTEwNjQtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTA2NTppbnQgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTA2Ni17XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTk0LVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjExOTU6aW50IHRsc19zZXRfZGV2aWNlX29mZmxvYWRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTk2LXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTEyNzAtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTI3MTp2b2lkIHRsc19kZXZpY2Vfb2ZmbG9hZF9jbGVhbnVwX3J4KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMjcyLXtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jPTQzND1FWFBPUlRfU1lNQk9MX0dQTCh0bHNfZW5jcnlwdF9za2IpO1xcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTQzNS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYzo0MzY6aW50IHRsc19zd19mYWxsYmFja19pbml0KHN0cnVjdCBzb2NrICpzayxcXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy00MzctXFx0XFx0XFx0IHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMzk9aW50IHdhaXRfb25fcGVuZGluZ193cml0ZXIoc3RydWN0IHNvY2sgKnNrLCBsb25nICp0aW1lbylcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xNjctXFxubmV0L3Rscy90bHNfbWFpbi5jOjE2ODppbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX21haW4uYy0xNjktXFx0XFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9MjI2PXN0YXRpYyBpbnQgdGxzX2hhbmRsZV9vcGVuX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0yMzUtXFxubmV0L3Rscy90bHNfbWFpbi5jOjIzNjppbnQgdGxzX3Byb2Nlc3NfY21zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvdGxzL3Rsc19tYWluLmMtMjM3LVxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqcmVjb3JkX3R5cGUpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjY3LVxcbm5ldC90bHMvdGxzX21haW4uYzoyNjg6aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxubmV0L3Rscy90bHNfbWFpbi5jLTI2OS1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTI4MC1cXG5uZXQvdGxzL3Rsc19tYWluLmM6MjgxOnZvaWQgdGxzX2ZyZWVfcGFydGlhbF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG5uZXQvdGxzL3Rsc19tYWluLmMtMjgyLXtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0yOTI9c3RhdGljIHZvaWQgdGxzX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0zMjItICovXFxubmV0L3Rscy90bHNfbWFpbi5jOjMyMzp2b2lkIHRsc19jdHhfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX21haW4uYy0zMjQte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTE0PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdGxzX3N0cnBfd3E7XFxubmV0L3Rscy90bHNfc3RycC5jLTE1LVxcbm5ldC90bHMvdGxzX3N0cnAuYzoxNjp2b2lkIHRsc19zdHJwX2Fib3J0X3N0cnAoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGludCBlcnIpXFxubmV0L3Rscy90bHNfc3RycC5jLTE3LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz04NT1zdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N0cnBfbXNnX2RldGFjaChzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xMTktICovXFxubmV0L3Rscy90bHNfc3RycC5jOjEyMDppbnQgdGxzX3N0cnBfbXNnX2NvdyhzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKmN0eClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTIxLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYy0xNDQtICovXFxubmV0L3Rscy90bHNfc3RycC5jOjE0NTppbnQgdGxzX3N0cnBfbXNnX2hvbGQoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmX2hlYWQgKmRzdClcXG5uZXQvdGxzL3Rsc19zdHJwLmMtMTQ2LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N0cnAuYz01MTM9c3RhdGljIGludCB0bHNfc3RycF9yZWFkX3NvY2soc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTU2LSAqL1xcbm5ldC90bHMvdGxzX3N0cnAuYzo1NTc6dm9pZCB0bHNfc3RycF9jaGVja19yY3Yoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnAsIGJvb2wgYW5ub3VuY2UpXFxubmV0L3Rscy90bHNfc3RycC5jLTU1OC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNTY4LS8qIExvd2VyIHNvY2sgbG9jayBoZWxkICovXFxubmV0L3Rscy90bHNfc3RycC5jOjU2OTp2b2lkIHRsc19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTU3MC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM9NTg2PXN0YXRpYyB2b2lkIHRsc19zdHJwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTYwMC0gKi9cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjAxOnZvaWQgdGxzX3N0cnBfbXNnX2NvbnN1bWUoc3RydWN0IHRsc19zdHJwYXJzZXIgKnN0cnApXFxubmV0L3Rscy90bHNfc3RycC5jLTYwMi17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjE0LVxcbm5ldC90bHMvdGxzX3N0cnAuYzo2MTU6dm9pZCB0bHNfc3RycF9zdG9wKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbm5ldC90bHMvdGxzX3N0cnAuYy02MTYte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jLTYxOS1cXG5uZXQvdGxzL3Rsc19zdHJwLmM6NjIwOmludCB0bHNfc3RycF9pbml0KHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3Rscy90bHNfc3RycC5jLTYyMS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjM3LSAqL1xcbm5ldC90bHMvdGxzX3N0cnAuYzo2Mzg6dm9pZCB0bHNfc3RycF9kb25lKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwKVxcbm5ldC90bHMvdGxzX3N0cnAuYy02Mzkte1xcbi0tXFxubmV0L3Rscy90bHNfc3RycC5jPTY1Mj1pbnQgX19pbml0IHRsc19zdHJwX2Rldl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdHJwLmMtNjYwLVxcbm5ldC90bHMvdGxzX3N0cnAuYzo2NjE6dm9pZCB0bHNfc3RycF9kZXZfZXhpdCh2b2lkKVxcbm5ldC90bHMvdGxzX3N0cnAuYy02NjIte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0zOTY9c3RhdGljIHZvaWQgdGxzX2ZyZWVfb3Blbl9yZWMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy00MDctXFxubmV0L3Rscy90bHNfc3cuYzo0MDg6aW50IHRsc190eF9yZWNvcmRzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbm5ldC90bHMvdGxzX3N3LmMtNDA5LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9NzY2PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0xMDA3LVxcbm5ldC90bHMvdGxzX3N3LmM6MTAwODppbnQgdGxzX3N3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC90bHMvdGxzX3N3LmMtMTAwOS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTEwMzAtICovXFxubmV0L3Rscy90bHNfc3cuYzoxMDMxOnZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvdGxzL3Rsc19zdy5jLTEwMzIte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0xODAwPXN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTE4MDUtXFxubmV0L3Rscy90bHNfc3cuYzoxODA2OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfc3cuYy0xODA3LVxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTk5OT1zc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMDcyLVxcbm5ldC90bHMvdGxzX3N3LmM6MjA3MzppbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbm5ldC90bHMvdGxzX3N3LmMtMjA3NC1cXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMTc1PWJvb2wgdGxzX3N3X3NvY2tfaXNfcmVhZGFibGUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMTgzLVxcbm5ldC90bHMvdGxzX3N3LmM6MjE4NDppbnQgdGxzX3J4X21zZ19zaXplKHN0cnVjdCB0bHNfc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC90bHMvdGxzX3N3LmMtMjE4NS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIyNDYtICovXFxubmV0L3Rscy90bHNfc3cuYzoyMjQ3OnZvaWQgdGxzX3J4X21zZ19tYXliZV9hbm5vdW5jZShzdHJ1Y3QgdGxzX3N0cnBhcnNlciAqc3RycClcXG5uZXQvdGxzL3Rsc19zdy5jLTIyNDgte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0yMjU5PXN0YXRpYyB2b2lkIHRsc19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjI3Mi1cXG5uZXQvdGxzL3Rsc19zdy5jOjIyNzM6dm9pZCB0bHNfc3dfY2FuY2VsX3dvcmtfdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjI3NC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIyODEtXFxubmV0L3Rscy90bHNfc3cuYzoyMjgyOnZvaWQgdGxzX3N3X3JlbGVhc2VfcmVzb3VyY2VzX3R4KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvdGxzL3Rsc19zdy5jLTIyODMte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMzE1LVxcbm5ldC90bHMvdGxzX3N3LmM6MjMxNjp2b2lkIHRsc19zd19mcmVlX2N0eF90eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yMzE3LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjMyMi1cXG5uZXQvdGxzL3Rsc19zdy5jOjIzMjM6dm9pZCB0bHNfc3dfcmVsZWFzZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX3N3LmMtMjMyNC17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIzNDMtXFxubmV0L3Rscy90bHNfc3cuYzoyMzQ0OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9kb25lKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG5uZXQvdGxzL3Rsc19zdy5jLTIzNDUte1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yMzUwLVxcbm5ldC90bHMvdGxzX3N3LmM6MjM1MTp2b2lkIHRsc19zd19mcmVlX2N0eF9yeChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yMzUyLXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjM1Ny1cXG5uZXQvdGxzL3Rsc19zdy5jOjIzNTg6dm9pZCB0bHNfc3dfZnJlZV9yZXNvdXJjZXNfcngoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC90bHMvdGxzX3N3LmMtMjM1OS17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTI0MDQ9c3RhdGljIGJvb2wgdGxzX2lzX3R4X3JlYWR5KHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yNDE0LVxcbm5ldC90bHMvdGxzX3N3LmM6MjQxNTp2b2lkIHRsc19zd193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTI0MjQtXFxubmV0L3Rscy90bHNfc3cuYzoyNDI1OnZvaWQgdGxzX3N3X3N0cnBhcnNlcl9hcm0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yNDI2LXtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjQzNC1cXG5uZXQvdGxzL3Rsc19zdy5jOjI0MzU6dm9pZCB0bHNfdXBkYXRlX3J4X3pjX2NhcGFibGUoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjQzNi17XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTI1MTY9c3RhdGljIHZvaWQgdGxzX2ZpbmlzaF9rZXlfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0yNTI0LVxcbm5ldC90bHMvdGxzX3N3LmM6MjUyNTppbnQgdGxzX3NldF9zd19vZmZsb2FkKHN0cnVjdCBzb2NrICpzaywgaW50IHR4LFxcbm5ldC90bHMvdGxzX3N3LmMtMjUyNi1cXHRcXHQgICAgICAgc3RydWN0IHRsc19jcnlwdG9faW5mbyAqbmV3X2NyeXB0b19pbmZvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo1MDoxNC40NjU1NTUwMzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0MDY4NjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRMUyBTZXRzb2Nrb3B0IEZ1bmN0aW9uIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYCBpcyB0cmlnZ2VyZWQgYnkgYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRvX3Rsc19zZXRzb2Nrb3B0YCBhbmQgdWx0aW1hdGVseSwgYHRsc19zZXRzb2Nrb3B0YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBgdGxzX3NldHNvY2tvcHRgIGlzIHJlZ2lzdGVyZWQgaW4gYHN0cnVjdCBwcm90b2AgYXMgYC5zZXRzb2Nrb3B0YCwgd2hpY2ggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBub24tc3RhdGljIGVudHJ5IHBvaW50cywgcGVyaGFwcyByZWxhdGVkIHRvIG9mZmxvYWRpbmcgZnVuY3Rpb25zLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGB0bHNfc2V0X3N3X29mZmxvYWRgIG9yIGB0bHNfZGV2aWNlX3NlbmRtc2dgLlxuXG5Gb2xsb3dpbmcgdGhlIGluc3RydWN0aW9uIG9uIEZvY3VzU3ltYm9scywgSSBuZWVkIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cywgbm90IGludGVybmFsIHN0YXRpYyBoZWxwZXJzIHRoYXQgbWlnaHQgYmUgaW5saW5lZC4gSSdsbCBjaGVjayBpZiBgdGxzX3NldHNvY2tvcHRgIGlzIHN0YXRpYyBvciBpbmxpbmVkLiBMb29raW5nIGF0IGBuZXQvdGxzL3Rsc19tYWluLmNgIGxpbmUgOTA5LCBpdCdzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgdGxzX3NldHNvY2tvcHQoLi4uKWAuIEhvd2V2ZXIsIGJlY2F1c2UgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGBwcm90W1RMU19CQVNFXVtUTFNfQkFTRV0uc2V0c29ja29wdCA9IHRsc19zZXRzb2Nrb3B0O2ApLCBpdCBsaWtlbHkgKndvbid0KiBiZSBjb21wbGV0ZWx5IGlubGluZWQgYXdheSBieSB0aGUgY29tcGlsZXIgYW5kIGl0IHdpbGwgaGF2ZSBhIHN5bWJvbCBpbiB0aGUgb2JqZWN0IGZpbGUsIHVubGVzcyBhZ2dyZXNzaXZlIExUTyBvciBzdGF0aWMgc3ltYm9sIHN0cmlwcGluZyBpcyBhcHBsaWVkLiBHb29kIHRvIGtub3cuIEFuZCwgYXMgc3VzcGVjdGVkLCBgdGxzX3NldF9zd19vZmZsb2FkYCBhbmQgYHRsc19zZXRfZGV2aWNlX29mZmxvYWRgIGFyZSB0aGVyZSB0byBjb25maWd1cmUgVExTIFRYL1JYIG9mZmxvYWQuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gYENPTkZJR19UTFNgIGFuZCBgQ09ORklHX1RMU19ERVZJQ0VgIGFyZSBjbGVhcmx5IHRoZSBrZXkgaGVyZS4gTGV0J3MgY2hlY2sgYG5ldC90bHMvS2NvbmZpZ2AuIGBUTFNgIGRlcGVuZHMgb24gYElORVRgLCBgQ1JZUFRPYCwgYW5kIHNvbWUgb3RoZXIgY3J5cHRvIGNvbXBvbmVudHMuIGBUTFNfREVWSUNFYCBmdXJ0aGVyIGRlcGVuZHMgb24gYFRMU2AsIGFuZCBzZWxlY3RzIGFkZGl0aW9uYWwgZmVhdHVyZXMgbGlrZSBgU0tCX0RFQ1JZUFRFRGAgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBgSU5FVGAgaXMgc3RyYWlnaHRmb3J3YXJkIG5ldHdvcmtpbmcuIFNvLCBjbGVhcmx5IGBUTFNgIGFuZCBgVExTX0RFVklDRWAgYXJlIGVzc2VudGlhbCwgYXMgYHRsc190eF9yZWNvcmRfaXNfb3BlbmAgaGFuZGxlcyBib3RoIGBUTFNfU1dgIGFuZCBgVExTX0hXYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGB0bHNfb2ZmbG9hZF9jdHhfdHhgIGRlcGVuZHMgb24gYENPTkZJR19UTFNfREVWSUNFYCB0byBjb25maXJtIHRoZSBvZmZsb2FkIHBhdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbnRlcmFjdCBhbmQgaG93IHRvIHByb3Blcmx5IGZ1enogYXJvdW5kIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MjAuMjA2MjQ1MzEzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5ODQ2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX29mZmxvYWRfY3R4X3R4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTU4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfZnJlZV9jdHgoc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MC1cXHRpZiAoY3R4LVxcdTAwM2V0eF9jb25mID09IFRMU19IVylcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo2MTpcXHRcXHRrZnJlZSh0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjItXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz04OD1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3F1ZXVlX2N0eF9kZXN0cnVjdGlvbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTEwOS1cXHRpZiAoYXN5bmNfY2xlYW51cCkge1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjExMDpcXHRcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xMTEtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xNjI9c3RhdGljIHZvaWQgdGxzX3RjcF9jbGVhbl9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2tlZF9zZXEpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzItXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTczOlxcdGN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0xNzQtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0xOTc9dm9pZCB0bHNfZGV2aWNlX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTE5OS1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjAwOlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjAxLVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjctXFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyODpcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyOS1cXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0yOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfZW5jX3NrYihzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zMDAte1xcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jOjMwMTpcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqY3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTMwMi1cXHRpbnQgdGNwX3BheWxvYWRfb2Zmc2V0ID0gc2tiX3RjcF9hbGxfaGVhZGVycyhza2IpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM9MzYxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N3X2ZhbGxiYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTM2NC1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM6MzY1OlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzY2LVxcdGludCBwYXlsb2FkX2xlbiA9IHNrYi1cXHUwMDNlbGVuIC0gdGNwX3BheWxvYWRfb2Zmc2V0O1xcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTgzOT1zdGF0aWMgYm9vbCB0bHNfdHhfcmVjb3JkX2lzX29wZW4oc3RydWN0IHRsc19jb250ZXh0ICpjdHgpXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtODQ0LVxcdGNhc2UgVExTX0hXOlxcbm5ldC90bHMvdGxzX21haW4uYzo4NDU6XFx0XFx0cmV0dXJuICEhdGxzX29mZmxvYWRfY3R4X3R4KGN0eCktXFx1MDAzZW9wZW5fcmVjb3JkO1xcbm5ldC90bHMvdGxzX21haW4uYy04NDYtXFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MjAuMzE4MjM2MjIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjE0ODMwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBEZWZpbml0aW9uIG9mIGB0bHNfb2ZmbG9hZF9jdHhfdHhgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG9yaWdpbiBhbmQgcHVycG9zZSBvZiBgdGxzX29mZmxvYWRfY3R4X3R4YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIHRoaXMgdmFyaWFibGUsIHN0cnVjdCwgb3Igd2hhdGV2ZXIgaXQgaXMsIGdldHMgaXRzIHNoYXBlIGFuZCBkZWZpbml0aW9uLiBUaGUgY29udGV4dCBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gVExTIG9mZmxvYWRpbmcsIHdoaWNoIG1lYW5zIGl0IGxpa2VseSBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBoYW5kbGluZyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgb3V0c2lkZSBvZiB0aGUgbWFpbiBDUFUsIHBlcmhhcHMgb24gYSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChOSUMpIG9yIGEgZGVkaWNhdGVkIHNlY3VyaXR5IHByb2Nlc3Nvci5cblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdHlwaWNhbCBwbGFjZXMgdGhpcyB3b3VsZCBiZSBkZWZpbmVkOiBoZWFkZXIgZmlsZXMsIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIFRMUyBsaWJyYXJ5IGl0c2VsZiwgZHJpdmVyIGNvZGUgaWYgaXQncyBOSUMtc3BlY2lmaWMsIG9yIHBvdGVudGlhbGx5IGluIHNvbWUgZ2VuZXJpYyBvZmZsb2FkIGZyYW1ld29yay4gSXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgc28gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB0ZWxsIHdoYXQgaXQgaXMsIGFuZCBsaWtlbHkgd2hhdCBpdCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjI0Ljg3OTcyMjcyOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDgzMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19vZmZsb2FkX2N0eF90eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90bHMuaD0zOTU9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqXFxuaW5jbHVkZS9uZXQvdGxzLmg6Mzk2OnRsc19vZmZsb2FkX2N0eF90eChjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxuaW5jbHVkZS9uZXQvdGxzLmgtMzk3LXtcXG4tLVxcbmluY2x1ZGUvbmV0L3Rscy5oPTQzMz1zdGF0aWMgaW5saW5lIHZvaWQgKl9fdGxzX2RyaXZlcl9jdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4LFxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmgtNDM2LVxcdGlmIChkaXJlY3Rpb24gPT0gVExTX09GRkxPQURfQ1RYX0RJUl9UWClcXG5pbmNsdWRlL25ldC90bHMuaDo0Mzc6XFx0XFx0cmV0dXJuIHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KS1cXHUwMDNlZHJpdmVyX3N0YXRlO1xcbmluY2x1ZGUvbmV0L3Rscy5oLTQzOC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjI1LjM2OTIxMjQ3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc0MDcwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMUyBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGBpbmNsdWRlL25ldC90bHMuaGAgaGVhZGVyLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgMzk1LiBJJ20gbGlrZWx5IGRlYnVnZ2luZyBzb21ldGhpbmcgcmVsYXRlZCB0byBUTFMsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZS4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBwcm9ibGVtIG9yIGZlYXR1cmUgbGllcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlLiBJIGV4cGVjdCB0aGF0IGxpbmUgMzk1IGhvbGRzIGEgY3J1Y2lhbCBkZWZpbml0aW9uIG9yIGEgcmVsZXZhbnQgZnVuY3Rpb24gY2FsbCByZWxhdGVkIHRvIFRMUyBoYW5kbGluZyBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIEkgbmVlZCB0byB6b29tIGluIG9uIGl0IG5vdy4gTGV0J3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo1MDoyNy45NDMyODU2MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L3Rscy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqKXRsc19jdHgtXFx1MDAzZXByaXZfY3R4X3J4O1xcbiAzODc6XFx0fVxcbiAzODg6XFx0XFxuIDM4OTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdGxzX3N3X2N0eF90eChcXG4gMzkwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzkxOlxcdHtcXG4gMzkyOlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICopdGxzX2N0eC1cXHUwMDNlcHJpdl9jdHhfdHg7XFxuIDM5MzpcXHR9XFxuIDM5NDpcXHRcXG4gMzk1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxcbiAzOTY6XFx0dGxzX29mZmxvYWRfY3R4X3R4KGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzk3OlxcdHtcXG4gMzk4OlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKil0bHNfY3R4LVxcdTAwM2Vwcml2X2N0eF90eDtcXG4gMzk5OlxcdH1cXG4gNDAwOlxcdFxcbiA0MDE6XFx0c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3R4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcXG4gNDA2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDA3OlxcdFxcbiA0MDg6XFx0XFx0Y3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiA0MDk6XFx0XFx0aWYgKCFjdHgpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxMTpcXHRcXHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF9yeChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjI3Ljk0MzQwMjU2MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODE5ODM0MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRMUyBTb2NrZXQgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgYnV0IGl0J3MgY3J1Y2lhbCBmb3IgdGhlIHN0YWJpbGl0eSBvZiBvdXIgVExTIGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhhcmR3YXJlIG9mZmxvYWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gIGluIGB0bHNfbWFpbi5jYCBpcyB0aGUgdGFyZ2V0LCB3aGVyZSB0aGV5J3JlIGFkZGluZyBhIGNhbGwgdG8gYHRsc190eF9yZWNvcmRfaXNfb3BlbihjdHgpYC4gU21hcnQuIFRoaXMgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGBUTFNfSFdgIGNvbnRleHRzLiBBcHBhcmVudGx5LCB3aXRob3V0IHRoaXMgY2hlY2ssIHdlIHdlcmUgcnVubmluZyB0aGUgcmlzayBvZiBpbmNvcnJlY3RseSBpbnRlcnByZXRpbmcgYHByaXZfY3R4X3R4YCBhcyBhIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAuIFRoaXMgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHdoZW4gc2V0dGluZyBgVExTX1RYX01BWF9QQVlMT0FEX0xFTmAgdGhyb3VnaCBgc2V0c29ja29wdGAgd2hpbGUgdHJhbnNtaXNzaW9uIHJlY29yZHMgYXJlIG9wZW4uXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgY29kZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIHNvY2tldCBzeXNjYWxscy4gVGhhdCBtYWtlcyBpdCBjcml0aWNhbCB3ZSBnZXQgdGhpcyByaWdodC4gSXQgdG91Y2hlcyBvbiBgc2V0c29ja29wdGAgd2hpY2ggaXMgYSBicmVhZCBhbmQgYnV0dGVyIGludGVyZmFjZSBmb3IgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24uXG5cbkkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTm93LCBsZXQgbWUgc2VlIHdoaWNoIG90aGVyIHN5bWJvbHMgYXJlIGludm9sdmVkIGhlcmUuIEZyb20gdGhlIHRleHQsIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gZm9jdXMgb246IGB0bHNfc2V0c29ja29wdGAsIGB0bHNfc2V0X3N3X29mZmxvYWRgLCBgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZGAsIGB0bHNfdHhfcmVjb3Jkc2AsIGFuZCBgdGxzX3N3X3NlbmRtc2dgLlxuXG5MZXQncyBjYWxsIHRoaXMgc2V0IG9mIGluZm9ybWF0aW9uIGBzZXQtcmVzdWx0c2AuIEkgdGhpbmsgSSdtIHJlYWR5IHRvIGRpZyBkZWVwZXIgYW5kIHRlc3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5MzAsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MzEuNzYzMjQwMTExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NDA1ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc2V0c29ja29wdFwiLFxuICAgIFwidGxzX3NldF9zd19vZmZsb2FkXCIsXG4gICAgXCJ0bHNfc2V0X2RldmljZV9vZmZsb2FkXCIsXG4gICAgXCJ0bHNfdHhfcmVjb3Jkc1wiLFxuICAgIFwidGxzX3N3X3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiBjYXN0IGN0eC1cXHUwMDNlcHJpdl9jdHhfdHggdG8gc3RydWN0IHRsc19zd19jb250ZXh0X3R4IHdpdGhvdXQgY2hlY2tpbmcgY3R4LVxcdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc2V0c29ja29wdFwiLFxuICAgIFwidGxzX3NldF9zd19vZmZsb2FkXCIsXG4gICAgXCJ0bHNfc2V0X2RldmljZV9vZmZsb2FkXCIsXG4gICAgXCJ0bHNfdHhfcmVjb3Jkc1wiLFxuICAgIFwidGxzX3N3X3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbiBjYXN0IGN0eC1cXHUwMDNlcHJpdl9jdHhfdHggdG8gc3RydWN0IHRsc19zd19jb250ZXh0X3R4IHdpdGhvdXQgY2hlY2tpbmcgY3R4LVxcdTAwM2V0eF9jb25mLCB3aGljaCBjYXVzZWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gdHhfY29uZiB3YXMgVExTX0hXLiBJdCBhZGRzIHRsc190eF9yZWNvcmRfaXNfb3BlbigpIHRvIHByb3Blcmx5IGNoZWNrIG9wZW4gcmVjb3JkcyBiYXNlZCBvbiB3aGV0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIFRMUyBpcyBjb25maWd1cmVkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgVExTIHNldHNvY2tvcHQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlciBzcGFjZSBzb2NrZXQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTA6MzEuOTgxNjU0Mjk3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ5ODA1OTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjMxLjk4MjQ3OTM0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUwNDk3MjI4NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVxcdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cXHUwMDNldHhfY29uZmAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0NTZmNTk2OGQ2NjNhYjJmNDJhMjczZWJmZTUyN2ZiNjE3NzYyZjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMzo0OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uZTRmMjg4YzFmYTM0NiAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX21haW4uY1xuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5AQCAtODMzLDE1ICs4MzMsMjkgQEAgc3RhdGljIGludCBkb190bHNfc2V0c29ja29wdF9ub19wYWQoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbisvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xuKyAqIHNheSB3aGljaCBvcGVuIHJlY29yZCB0byBsb29rIGF0LlxuKyAqL1xuK3N0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcbit7XG4rXHRzd2l0Y2ggKGN0eC1cdTAwM2V0eF9jb25mKSB7XG4rXHRjYXNlIFRMU19TVzpcbitcdFx0cmV0dXJuICEhdGxzX3N3X2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjO1xuK1x0Y2FzZSBUTFNfSFc6XG4rXHRcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVx1MDAzZW9wZW5fcmVjb3JkO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4ge1xuIFx0c3RydWN0IHRsc19jb250ZXh0ICpjdHggPSB0bHNfZ2V0X2N0eChzayk7XG4tXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKnN3X2N0eCA9IHRsc19zd19jdHhfdHgoY3R4KTtcbiBcdHUxNiB2YWx1ZTtcbiBcdGJvb2wgdGxzXzEzID0gY3R4LVx1MDAzZXByb3RfaW5mby52ZXJzaW9uID09IFRMU18xXzNfVkVSU0lPTjtcbiBcbi1cdGlmIChzd19jdHggXHUwMDI2XHUwMDI2IHN3X2N0eC1cdTAwM2VvcGVuX3JlYylcbitcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUwOjMxLjk4MjQ4MTEyN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTc4NDg1NTI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBFdmFsdWF0aW9uIC0gQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGFuZCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCBuZWVkcyBLTVNBTiB0ZXN0aW5nLiBNeSBndXQgZmVlbGluZyBpcyB0byBhbHdheXMgbGVhbiB0b3dhcmRzIHRoZSBcImJldHRlciBzYWZlIHRoYW4gc29ycnlcIiBhcHByb2FjaCwgYnV0IEkgbmVlZCB0byBiZSBtZXRob2RpY2FsLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpc24ndCBhYm91dCBsb29raW5nIGZvciBtYWx3YXJlIG9yIGV4cGxvaXQgcGF5bG9hZHMuIEl0J3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgdGFzaywgYSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGV2YWx1YXRpb24uIEVzc2VudGlhbGx5LCBJJ20gY2hlY2tpbmcgaWYgdGhpcyBjb2RlIGNoYW5nZSBjb3VsZCBpbnRyb2R1Y2UgaXNzdWVzIHRoYXQgS01TQU4gbWlnaHQgY2F0Y2gsIGFzIG9wcG9zZWQgdG8gS0FTQU4uIEl0J3MgYSBiZW5pZ24gdGFzaywgZm9ydHVuYXRlbHkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBUaGUgY2hhbmdlIGxvb2tzIHJlbGF0aXZlbHkgY29udGFpbmVkIOKAkyBpdCdzIHJlcGxhY2luZyBhIGNoZWNrIHdpdGggYSBmdW5jdGlvbiBjYWxsLCBgdGxzX3R4X3JlY29yZF9pc19vcGVuYC4gRnJvbSBhIGJyaWVmIGdsYW5jZSwgaXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGEgVExTIHJlY29yZCBpcyBcIm9wZW5cIiBiZWZvcmUgYWxsb3dpbmcgYSBgc2V0c29ja29wdGAgY2FsbC4gVGhlIG9sZCBjaGVjayAoYHN3X2N0eCBcdTAwMjZcdTAwMjYgc3dfY3R4LVx1MDAzZW9wZW5fcmVjYCkgd2FzIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZSBUTFMgY29udGV4dC4gVGhlIG5ldyBmdW5jdGlvbiwgYHRsc190eF9yZWNvcmRfaXNfb3BlbmAsIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBib3RoIHNvZnR3YXJlIChgVExTX1NXYCkgYW5kIGhhcmR3YXJlIChgVExTX0hXYCkgY29udGV4dHMuXG5cbkkgc3VzcGVjdCB0aGlzIGNoYW5nZSBpcyByZWZhY3RvcmluZyB0aGUgY29kZSB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYyBhbmQgaGFuZGxlIGJvdGggc29mdHdhcmUgYW5kIGhhcmR3YXJlIG9mZmxvYWQgY29udGV4dHMuIFRoZSBmdW5jdGlvbiBpcyBjaGVja2luZyBjb250ZXh0IG1lbWJlcnMsIGJ1dCBpbiBkaWZmZXJlbnQgc3RydWN0dXJlcy5cblxuSSdtIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gdW5kZXJzdGFuZCB0aGUgYHRsc19jb250ZXh0YCBzdHJ1Y3QsIGB0bHNfc3dfY3R4X3R4YCBhbmQgYHRsc19vZmZsb2FkX2N0eF90eGAsIGFuZCBob3cgYHR4X2NvbmZgIGlzIHVzZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG9wZW5fcmVjYCBhbmQgYG9wZW5fcmVjb3JkYCBpbiB0aGUgY29udGV4dCBvZiBUTFMgY29ubmVjdGlvbiBzdGF0ZS4gRnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCBpdCdzIGFib3V0IGNoZWNraW5nIHdoZXRoZXIgdGhlIFRYIHBhdGggaGFzIGFuIG9wZW4gcmVjb3JkLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgVFggcmVjb3JkIGlzIG9wZW4sIEkgYW0gZ29pbmcgdG8gZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uICoqTmVlZHNLTVNBTjogdHJ1ZS4qKiBJIHdpbGwgY29uZmlybSB0aGlzIGxhdGVyIHdpdGggdG9vbHMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGF0YSByYWNlcyBoZXJlLlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMzo1MTowMS43NjczNDAxOThaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjA6XFx0XFx0cmMgPSBjaGVja196ZXJvZWRfc29ja3B0cihvcHR2YWwsIHNpemVvZih2YWwpLCBvcHRsZW4gLSBzaXplb2YodmFsKSk7XFxuIDgyMTpcXHRcXHRpZiAocmMgXFx1MDAzYyAxKVxcbiA4MjI6XFx0XFx0XFx0cmV0dXJuIHJjID09IDAgPyAtRUlOVkFMIDogcmM7XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDgyNTpcXHRcXHRyYyA9IC1FSU5WQUw7XFxuIDgyNjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VyeF9jb25mID09IFRMU19TVyB8fCBjdHgtXFx1MDAzZXJ4X2NvbmYgPT0gVExTX0hXKSB7XFxuIDgyNzpcXHRcXHRcXHRjdHgtXFx1MDAzZXJ4X25vX3BhZCA9IHZhbDtcXG4gODI4OlxcdFxcdFxcdHRsc191cGRhdGVfcnhfemNfY2FwYWJsZShjdHgpO1xcbiA4Mjk6XFx0XFx0XFx0cmMgPSAwO1xcbiA4MzA6XFx0XFx0fVxcbiA4MzE6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gODMyOlxcdFxcbiA4MzM6XFx0XFx0cmV0dXJuIHJjO1xcbiA4MzQ6XFx0fVxcbiA4MzU6XFx0XFxuIDgzNjpcXHQvKiBwcml2X2N0eF90eCBob2xkcyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgb24gZWFjaCBUWCBwYXRoLCBzbyB0eF9jb25mIGhhcyB0b1xcbiA4Mzc6XFx0ICogc2F5IHdoaWNoIG9wZW4gcmVjb3JkIHRvIGxvb2sgYXQuXFxuIDgzODpcXHQgKi9cXG4gODM5OlxcdHN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4gODQwOlxcdHtcXG4gODQxOlxcdFxcdHN3aXRjaCAoY3R4LVxcdTAwM2V0eF9jb25mKSB7XFxuIDg0MjpcXHRcXHRjYXNlIFRMU19TVzpcXG4gODQzOlxcdFxcdFxcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KS1cXHUwMDNlb3Blbl9yZWM7XFxuIDg0NDpcXHRcXHRjYXNlIFRMU19IVzpcXG4gODQ1OlxcdFxcdFxcdHJldHVybiAhIXRsc19vZmZsb2FkX2N0eF90eChjdHgpLVxcdTAwM2VvcGVuX3JlY29yZDtcXG4gODQ2OlxcdFxcdGRlZmF1bHQ6XFxuIDg0NzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDg0ODpcXHRcXHR9XFxuIDg0OTpcXHR9XFxuIDg1MDpcXHRcXG4gODUxOlxcdHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW4oc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiA4NTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIDg1MzpcXHR7XFxuIDg1NDpcXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gODU1OlxcdFxcdHUxNiB2YWx1ZTtcXG4gODU2OlxcdFxcdGJvb2wgdGxzXzEzID0gY3R4LVxcdTAwM2Vwcm90X2luZm8udmVyc2lvbiA9PSBUTFNfMV8zX1ZFUlNJT047XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdGlmICh0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KSlcXG4gODU5OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChzb2NrcHRyX2lzX251bGwob3B0dmFsKSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHZhbHVlKSlcXG4gODYyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNnZhbHVlLCBvcHR2YWwsIHNpemVvZih2YWx1ZSkpKVxcbiA4NjU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDg2NjpcXHRcXG4gODY3OlxcdFxcdGlmICh2YWx1ZSBcXHUwMDNjIFRMU19NSU5fUkVDT1JEX1NJWkVfTElNIC0gKHRsc18xMyA/IDEgOiAwKSB8fFxcbiA4Njg6XFx0XFx0ICAgIHZhbHVlIFxcdTAwM2UgVExTX01BWF9QQVlMT0FEX1NJWkUpXFxuIDg2OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODcwOlxcdFxcbiA4NzE6XFx0XFx0Y3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gPSB2YWx1ZTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0dXJuIDA7XFxuIDg3NDpcXHR9XFxuIDg3NTpcXHRcXG4gODc2OlxcdHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gODc3OlxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4gODc4OlxcdHtcXG4gODc5OlxcdFxcdGludCByYyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjAxLjc2NzUxMjk3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjM0NTE3Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHR3byBjb250ZXh0IHR5cGVzOiBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHRyYW5zbWlzc2lvbiAodHgpIHNpZGUgb2YgYSBUTFMgY29ubmVjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgVExTIGNvbnRleHQgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIG91dGJvdW5kIGRhdGEgZmxvdy4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGEga2V5IGRpc3RpbmN0aW9uOiBcInN3XCIgcHJvYmFibHkgaW5kaWNhdGVzIGEgc29mdHdhcmUtYmFzZWQgVExTIGltcGxlbWVudGF0aW9uLCB3aGlsZSBcIm9mZmxvYWRcIiBoaW50cyBhdCBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIG1heWJlIGEgZGVkaWNhdGVkIGNyeXB0byBlbmdpbmUgb3IgYSBOSUMgd2l0aCBUTFMgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29udGV4dCBpcyBzdHJ1Y3R1cmVkIGZvciBlYWNoIG9mIHRoZW0uXG5cbkknbSBhc3N1bWluZyB0aGlzIGNvbnRleHQgaG9sZHMgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB0aGUgVExTIGhhbmRzaGFrZSAoY2xpZW50L3NlcnZlciBoZWxsbywga2V5IGV4Y2hhbmdlKSwgc2Vzc2lvbiBrZXlzLCBhbmQgYW55IHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIChzZXF1ZW5jZSBudW1iZXJzLCBldGMuKSBkdXJpbmcgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gbG9vayBkZWVwZXIuIFRoZSBkaWZmZXJlbmNlIGluIGNvbnRleHQgc3RydWN0dXJlIGJldHdlZW4gc29mdHdhcmUgYW5kIG9mZmxvYWRlZCBhcHByb2FjaGVzIGNvdWxkIGJlIHNpZ25pZmljYW50LiBTb2Z0d2FyZSBjb250ZXh0IGxpa2VseSBpbnZvbHZlcyBtb3JlIGZsZXhpYmxlIGRhdGEgc3RydWN0dXJlcyB0byBoYW5kbGUgZGl2ZXJzZSBUTFMgY2lwaGVyIHN1aXRlcyBhbmQgcHJvdG9jb2wgdmVyc2lvbnMsIGFuZCBtYXkgaW5jbHVkZSBwb2ludGVycyB0byBidWZmZXJzIGZvciBwbGFpbnRleHQgYW5kIGNpcGhlcnRleHQuIFRoZSBvZmZsb2FkZWQgb25lIGNvdWxkIGJlIG9wdGltaXplZCB3aXRoIHRoZSBoYXJkd2FyZeKAmXMgY2FwYWJpbGl0aWVzLCBwZXJoYXBzIGNvbnRhaW5pbmcgYSBzbWFsbGVyLCBoYXJkd2FyZS1zcGVjaWZpYyBzZXQgb2Ygc2Vzc2lvbiBrZXlzIG9yIHBvaW50ZXJzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkuIEhvdyBpcyB0aGUgcHJpdmF0ZSBrZXkgaGFuZGxlZCBpbiBlYWNoIGNvbnRleHQ/IElzIHRoZSBvZmZsb2FkIGNvbnRleHQgc2VjdXJlIGVub3VnaCB0byBhdm9pZCBzZW5zaXRpdmUga2V5IG1hdGVyaWFsIGV2ZXIgbGVhdmluZyB0aGUgZGVkaWNhdGVkIGhhcmR3YXJlPyBBbHNvLCBJJ20gY3VyaW91cyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0LiBBcmUgdGhlcmUgYXJjaGl0ZWN0dXJhbCB0cmFkZS1vZmZzIGluIHRoZXNlIHR3byBtb2RlcyBvZiBvcGVyYXRpb24/IEFuZCwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBlcnJvciBoYW5kbGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcHBsaWNhdGlvbi1sYXllciBpcyBhZmZlY3RlZC4gRG9lcyB0aGUgQVBJIGRpZmZlciBzaWduaWZpY2FudGx5IGJldHdlZW4gdGhlIHNvZnR3YXJlIGFuZCBvZmZsb2FkIG1vZGVzP1xuXG5VbHRpbWF0ZWx5LCBteSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZGVzaWduIG9mIHRoZXNlIGNvbnRleHRzIGFmZmVjdHMgdGhlIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IHRoZSBkZXZlbG9wZXIgd291bGQgaW50ZXJhY3Qgd2l0aCB0aGUgZGlmZmVyZW50IGNvbnRleHRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjb250ZXh0cyB0aWUgaW50byB0aGUgb3ZlcmFsbCBUTFMgYXJjaGl0ZWN0dXJlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb25zIHBvc3NpYmxlLCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgdXNlIGNhc2UgYW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MDYuMDAyMDM0MTUyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTExMjc0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N3X2N0eF90eHx0bHNfb2ZmbG9hZF9jdHhfdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmM9NTg9c3RhdGljIHZvaWQgdGxzX2RldmljZV9mcmVlX2N0eChzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTYwLVxcdGlmIChjdHgtXFx1MDAzZXR4X2NvbmYgPT0gVExTX0hXKVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjYxOlxcdFxcdGtmcmVlKHRsc19vZmZsb2FkX2N0eF90eChjdHgpKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02Mi1cXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTg4PXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfcXVldWVfY3R4X2Rlc3RydWN0aW9uKHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTA5LVxcdGlmIChhc3luY19jbGVhbnVwKSB7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MTEwOlxcdFxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCA9IHRsc19vZmZsb2FkX2N0eF90eChjdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTExMS1cXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTE2Mj1zdGF0aWMgdm9pZCB0bHNfdGNwX2NsZWFuX2Fja2VkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFja2VkX3NlcSlcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTE3Mi1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoxNzM6XFx0Y3R4ID0gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTE3NC1cXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTE5Nz12b2lkIHRsc19kZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMTk5LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyMDA6XFx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yMDEtXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyNy1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NDI4OlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDI5LVxcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZDtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jPTI5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRsc19lbmNfc2tiKHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZV9mYWxsYmFjay5jLTMwMC17XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmM6MzAxOlxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzAyLVxcdGludCB0Y3BfcGF5bG9hZF9vZmZzZXQgPSBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYz0zNjE9c3RhdGljIHN0cnVjdCBza19idWZmICp0bHNfc3dfZmFsbGJhY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMtMzY0LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYzozNjU6XFx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmN0eCA9IHRsc19vZmZsb2FkX2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19kZXZpY2VfZmFsbGJhY2suYy0zNjYtXFx0aW50IHBheWxvYWRfbGVuID0gc2tiLVxcdTAwM2VsZW4gLSB0Y3BfcGF5bG9hZF9vZmZzZXQ7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9ODM5PXN0YXRpYyBib29sIHRsc190eF9yZWNvcmRfaXNfb3BlbihzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eClcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy04NDItXFx0Y2FzZSBUTFNfU1c6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg0MzpcXHRcXHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCktXFx1MDAzZW9wZW5fcmVjO1xcbm5ldC90bHMvdGxzX21haW4uYy04NDQtXFx0Y2FzZSBUTFNfSFc6XFxubmV0L3Rscy90bHNfbWFpbi5jOjg0NTpcXHRcXHRyZXR1cm4gISF0bHNfb2ZmbG9hZF9jdHhfdHgoY3R4KS1cXHUwMDNlb3Blbl9yZWNvcmQ7XFxubmV0L3Rscy90bHNfbWFpbi5jLTg0Ni1cXHRkZWZhdWx0Olxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0zMDg9c3RhdGljIHZvaWQgdGxzX3RyaW1fYm90aF9tc2dzKHN0cnVjdCBzb2NrICpzaywgaW50IHRhcmdldF9zaXplKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0zMTEtXFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcXHUwMDI2dGxzX2N0eC1cXHUwMDNlcHJvdF9pbmZvO1xcbm5ldC90bHMvdGxzX3N3LmM6MzEyOlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTMxMy1cXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVxcdTAwM2VvcGVuX3JlYztcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MzIxPXN0YXRpYyBpbnQgdGxzX2FsbG9jX2VuY3J5cHRlZF9tc2coc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuKVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYy0zMjMtXFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbm5ldC90bHMvdGxzX3N3LmM6MzI0OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTMyNS1cXHRzdHJ1Y3QgdGxzX3JlYyAqcmVjID0gY3R4LVxcdTAwM2VvcGVuX3JlYztcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MzMxPXN0YXRpYyBpbnQgdGxzX2Nsb25lX3BsYWludGV4dF9tc2coc3RydWN0IHNvY2sgKnNrLCBpbnQgcmVxdWlyZWQpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTMzNC1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfc3cuYzozMzU6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMzM2LVxcdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXFx1MDAzZW9wZW5fcmVjO1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0zNTU9c3RhdGljIHN0cnVjdCB0bHNfcmVjICp0bHNfZ2V0X3JlYyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTM1OC1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfc3cuYzozNTk6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMzYwLVxcdHN0cnVjdCBza19tc2cgKm1zZ19wbCwgKm1zZ19lbjtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9Mzk2PXN0YXRpYyB2b2lkIHRsc19mcmVlX29wZW5fcmVjKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMzk4LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19zdy5jOjM5OTpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy00MDAtXFx0c3RydWN0IHRsc19yZWMgKnJlYyA9IGN0eC1cXHUwMDNlb3Blbl9yZWM7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTQwOD1pbnQgdGxzX3R4X3JlY29yZHMoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTQxMC1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfc3cuYzo0MTE6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtNDEyLVxcdHN0cnVjdCB0bHNfcmVjICpyZWMsICp0bXA7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTQ2Nz1zdGF0aWMgdm9pZCB0bHNfZW5jcnlwdF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnIpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTQ4NC1cXHRwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG5uZXQvdGxzL3Rsc19zdy5jOjQ4NTpcXHRjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtNDg2LVxcbi0tXFxubmV0L3Rscy90bHNfc3cuYz02MTc9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MsXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTYyMS1cXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2Vwcm90X2luZm87XFxubmV0L3Rscy90bHNfc3cuYzo2MjI6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtNjIzLVxcdHN0cnVjdCB0bHNfcmVjICpyZWMgPSBjdHgtXFx1MDAzZW9wZW5fcmVjO1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz03MTU9c3RhdGljIGludCB0bHNfc3dfcHVzaF9wZW5kaW5nX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtNzE3LVxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG5uZXQvdGxzL3Rsc19zdy5jOjcxODpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy03MTktXFx0c3RydWN0IHRsc19yZWMgKnJlYyA9IGN0eC1cXHUwMDNlb3Blbl9yZWM7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTc2Nj1zdGF0aWMgaW50IHRsc19zd19zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtNzcxLVxcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG5uZXQvdGxzL3Rsc19zdy5jOjc3MjpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy03NzMtXFx0Ym9vbCBhc3luY19jYXBhYmxlID0gY3R4LVxcdTAwM2Vhc3luY19jYXBhYmxlO1xcbi0tXFxubmV0L3Rscy90bHNfc3cuYz0xMDMxPXZvaWQgdGxzX3N3X3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMTAzNC1cXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxubmV0L3Rscy90bHNfc3cuYzoxMDM1OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTEwMzYtXFx0c3RydWN0IHRsc19yZWMgKnJlYztcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjI3Mz12b2lkIHRsc19zd19jYW5jZWxfd29ya190eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxubmV0L3Rscy90bHNfc3cuYy0yMjc0LXtcXG5uZXQvdGxzL3Rsc19zdy5jOjIyNzU6XFx0c3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpjdHggPSB0bHNfc3dfY3R4X3R4KHRsc19jdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMjI3Ni1cXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjI4Mj12b2lkIHRsc19zd19yZWxlYXNlX3Jlc291cmNlc190eChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTIyODQtXFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbm5ldC90bHMvdGxzX3N3LmM6MjI4NTpcXHRzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmN0eCA9IHRsc19zd19jdHhfdHgodGxzX2N0eCk7XFxubmV0L3Rscy90bHNfc3cuYy0yMjg2LVxcdHN0cnVjdCB0bHNfcmVjICpyZWMsICp0bXA7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTIzMTY9dm9pZCB0bHNfc3dfZnJlZV9jdHhfdHgoc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjMxNy17XFxubmV0L3Rscy90bHNfc3cuYzoyMzE4OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqY3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTIzMTktXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTIzNzE9c3RhdGljIHZvaWQgdHhfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjM4Mi1cXG5uZXQvdGxzL3Rsc19zdy5jOjIzODM6XFx0Y3R4ID0gdGxzX3N3X2N0eF90eCh0bHNfY3R4KTtcXG5uZXQvdGxzL3Rsc19zdy5jLTIzODQtXFx0aWYgKHRlc3RfYml0KEJJVF9UWF9DTE9TSU5HLCBcXHUwMDI2Y3R4LVxcdTAwM2V0eF9iaXRtYXNrKSlcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MjQxNT12b2lkIHRsc19zd193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KVxcbm5ldC90bHMvdGxzX3N3LmMtMjQxNi17XFxubmV0L3Rscy90bHNfc3cuYzoyNDE3OlxcdHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdHhfY3R4ID0gdGxzX3N3X2N0eF90eChjdHgpO1xcbm5ldC90bHMvdGxzX3N3LmMtMjQxOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MDYuMTEzMTY3MjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY1NDUyMzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkV4YW1pbmluZyBUTFMgQ29udGV4dCBUcmFuc21pc3Npb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgVExTIGNvbnRleHQgdHJhbnNtaXNzaW9uLiBNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gYm90aCBgdGxzX3N3X2N0eF90eGAgYW5kIGB0bHNfb2ZmbG9hZF9jdHhfdHhgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIG91dHB1dHMgaXMgY3JpdGljYWwuXG5cblRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgaW5jbHVkZS9uZXQvdGxzLmhgIGhlYWRlciBmaWxlLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3IgYm90aCBmdW5jdGlvbnMuIEJ5IGV4YW1pbmluZyB0aGVpciBzaWduYXR1cmVzLCByZXR1cm4gdHlwZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgaGVhZGVyLCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBncmFzcCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gdGhleSBhcmUgY29tbXVuaWNhdGluZyBiYWNrIHRvIHRoZSBjYWxsZXIgYW5kIGhvdyBJIHNob3VsZCBpbnRlcnByZXQgdGhlaXIgcmV0dXJuZWQgdmFsdWVzIHdpdGhpbiB0aGUgc3lzdGVtJ3MgY29udGV4dC4gVGhpcyBzaG91bGQgaGVscCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjA4Ljc2NzY5NDg2OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMzMjQ3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX3N3X2N0eF90eHx0bHNfb2ZmbG9hZF9jdHhfdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvdGxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGxzLmg9MzgzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICp0bHNfc3dfY3R4X3J4KFxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmgtMzg4LVxcbmluY2x1ZGUvbmV0L3Rscy5oOjM4OTpzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdGxzX3N3X2N0eF90eChcXG5pbmNsdWRlL25ldC90bHMuaC0zOTAtXFx0XFx0Y29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmg9Mzk1PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxcbmluY2x1ZGUvbmV0L3Rscy5oOjM5Njp0bHNfb2ZmbG9hZF9jdHhfdHgoY29uc3Qgc3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4KVxcbmluY2x1ZGUvbmV0L3Rscy5oLTM5Ny17XFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaD00MDE9c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3R4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3Rscy5oLTQxMC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuaW5jbHVkZS9uZXQvdGxzLmg6NDExOlxcdHJldHVybiAhIXRsc19zd19jdHhfdHgoY3R4KTtcXG5pbmNsdWRlL25ldC90bHMuaC00MTItfVxcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmg9NDMzPXN0YXRpYyBpbmxpbmUgdm9pZCAqX190bHNfZHJpdmVyX2N0eChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXFxuLS1cXG5pbmNsdWRlL25ldC90bHMuaC00MzYtXFx0aWYgKGRpcmVjdGlvbiA9PSBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYKVxcbmluY2x1ZGUvbmV0L3Rscy5oOjQzNzpcXHRcXHRyZXR1cm4gdGxzX29mZmxvYWRfY3R4X3R4KHRsc19jdHgpLVxcdTAwM2Vkcml2ZXJfc3RhdGU7XFxuaW5jbHVkZS9uZXQvdGxzLmgtNDM4LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MDguODMxMDI2Mzk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MjEzMzY3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMUyBIZWFkZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBUTFMgaGVhZGVyIGRlZmluaXRpb24sIHNwZWNpZmljYWxseSwgbGluZXMgMzgwIHRvIDQxMCB3aXRoaW4gYGluY2x1ZGUvbmV0L3Rscy5oYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBzdHJ1Y3R1cmVzIG9yIGVudW1zIGluIHRoZXJlLiBEZXBlbmRpbmcgb24gd2hhdCB0aG9zZSBsaW5lcyBjb250YWluLCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kLCBsaWtlbHkgYXQgYSBsb3cgbGV2ZWwsIGhvdyB0aGUgVExTIGNvbm5lY3Rpb24gaXMgc3RydWN0dXJlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyLCBvciBiZSBhYmxlIHRvIGluZmVyLCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIEJhc2VkIG9uIHRoZSBmaWxlIGxvY2F0aW9uLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrIGltcGxlbWVudGF0aW9uIG9mIFRMUy4gSSBhbnRpY2lwYXRlIGVuY291bnRlcmluZyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtYXAgaG93IHRoZSBUTFMgcmVjb3JkcyBhcmUgcGFyc2VkIG9yIHRoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgdXNlZCBhcmUgc3RydWN0dXJlZC4gUGVyaGFwcyBJJ2xsIGZpbmQgc29tZSBkZWJ1ZyBzeW1ib2xzIHRoYXQgSSBjYW4gdXNlIHRvIGluc3BlY3QgaW4gZnVydGhlciBkZXRhaWwuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjEwLjc1MjM3MzA1N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvdGxzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdHJldHVybiAoX19mb3JjZSB2b2lkICopaWNzay1cXHUwMDNlaWNza191bHBfZGF0YTtcXG4gMzgxOlxcdH1cXG4gMzgyOlxcdFxcbiAzODM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcnggKnRsc19zd19jdHhfcngoXFxuIDM4NDpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRyZXR1cm4gKHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqKXRsc19jdHgtXFx1MDAzZXByaXZfY3R4X3J4O1xcbiAzODc6XFx0fVxcbiAzODg6XFx0XFxuIDM4OTpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqdGxzX3N3X2N0eF90eChcXG4gMzkwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzkxOlxcdHtcXG4gMzkyOlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICopdGxzX2N0eC1cXHUwMDNlcHJpdl9jdHhfdHg7XFxuIDM5MzpcXHR9XFxuIDM5NDpcXHRcXG4gMzk1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKlxcbiAzOTY6XFx0dGxzX29mZmxvYWRfY3R4X3R4KGNvbnN0IHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4gMzk3OlxcdHtcXG4gMzk4OlxcdFxcdHJldHVybiAoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKil0bHNfY3R4LVxcdTAwM2Vwcml2X2N0eF90eDtcXG4gMzk5OlxcdH1cXG4gNDAwOlxcdFxcbiA0MDE6XFx0c3RhdGljIGlubGluZSBib29sIHRsc19zd19oYXNfY3R4X3R4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gNDAyOlxcdHtcXG4gNDAzOlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4O1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRpZiAoIXNrX2lzX2luZXQoc2spIHx8ICFpbmV0X3Rlc3RfYml0KElTX0lDU0ssIHNrKSlcXG4gNDA2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDA3OlxcdFxcbiA0MDg6XFx0XFx0Y3R4ID0gdGxzX2dldF9jdHgoc2spO1xcbiA0MDk6XFx0XFx0aWYgKCFjdHgpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQxMTpcXHRcXHRyZXR1cm4gISF0bHNfc3dfY3R4X3R4KGN0eCk7XFxuIDQxMjpcXHR9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB0bHNfc3dfaGFzX2N0eF9yeChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuIDQxNTpcXHR7XFxuIDQxNjpcXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eDtcXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0aWYgKCFza19pc19pbmV0KHNrKSB8fCAhaW5ldF90ZXN0X2JpdChJU19JQ1NLLCBzaykpXFxuIDQxOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAzOjUxOjEwLjc1MjQ4MjMyN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTcyNzE5NzU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggYW5kIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGlzc3VlIHdhcyBpbiBgZG9fdGxzX3NldHNvY2tvcHRfdHhfcGF5bG9hZF9sZW5gLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSB0eXBlIGNvbmZ1c2lvbiB3aGVyZSBgcHJpdl9jdHhfdHhgIHdhcyBiZWluZyB1bmNvbmRpdGlvbmFsbHkgY2FzdCB0byBgc3RydWN0IHRsc19zd19jb250ZXh0X3R4ICpgIGV2ZW4gd2hlbiBgY3R4LVx1MDAzZXR4X2NvbmZgIHdhcyBzZXQgdG8gYFRMU19IV2AsIG1lYW5pbmcgaXQgc2hvdWxkIGhhdmUgYmVlbiBhIGBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eGAuIFRoaXMgbGVkIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGJlY2F1c2UgYG9wZW5fcmVjYCdzIG9mZnNldCBpcyBkaWZmZXJlbnQgaW4gdGhlIHR3byBzdHJ1Y3RzLCBvciBwb3RlbnRpYWxseSBmYWlsaW5nIHRvIGNoZWNrIHRoZSBoYXJkd2FyZSBvcGVuIHJlY29yZC4gVGhlIGZpeCBpbnRyb2R1Y2VzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oY3R4KWAgdG8gY29ycmVjdGx5IGNoZWNrIHRoZSBvcGVuIHJlY29yZCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBjb250ZXh0IGlzIHNvZnR3YXJlIChgVExTX1NXYCkgb3IgaGFyZHdhcmUgKGBUTFNfSFdgKS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgZml4IGludHJvZHVjZSBvciBleHBvc2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIHRodXMgd2FycmFudGluZyBhIGBOZWVkc0tNU0FOYCB0YWc/IEkgZG9uJ3QgdGhpbmsgc28uIExldCdzIHdhbGsgdGhyb3VnaCB0aGUgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZToqKiBOb3BlLiBUaGlzIGlzIGBzZXRzb2Nrb3B0YCwgcmVjZWl2aW5nIGRhdGEgZnJvbSB1c2Vyc3BhY2UsIG5vdCBzZW5kaW5nIGl0LlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSBkZXBlbmRlbmNlOioqIGBjdHgtXHUwMDNldHhfY29uZmAgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIFRMUyBjb25maWd1cmF0aW9uLCBhbmQgYG9wZW5fcmVjYC9gb3Blbl9yZWNvcmRgIGFyZSBwb2ludGVycyBpbml0aWFsaXplZCBkdXJpbmcgY29udGV4dC9yZWNvcmQgYWxsb2NhdGlvbi4gVGhlIGxvZ2ljIGJyYW5jaGVzIGNvcnJlY3RseSBiYXNlZCBvbiB0aGUgaW5pdGlhbGl6ZWQgYGN0eC1cdTAwM2V0eF9jb25mYCB2YWx1ZS5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gbmV3IGFsbG9jYXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgdG8gaW5pdGlhbGl6YXRpb25zIGFyZSBoYXBwZW5pbmcgaGVyZS5cbjQuICAqKkJvdW5kcy9MZW5ndGggY2hlY2tzOioqIE5vLCB0aGlzIGZpeCBkb2Vzbid0IGFmZmVjdCBhbnkgYm91bmRzIG9yIGxlbmd0aHMsIG9ubHkgdGhlIGNvcnJlY3QgdHlwZSBjaGVjayBiZWZvcmUgcGVybWl0dGluZyBhIHBheWxvYWQgbGVuZ3RoIGNoYW5nZS4gSXQgY29ycmVjdHMgdHlwZSBjb25mdXNpb24gYW5kIG1lbWJlciBhY2Nlc3MgaXNzdWVzLlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIGJ1ZyB3YXMgYSB0eXBlIGNvbmZ1c2lvbiBhbmQgbG9naWNhbCBlcnJvcuKAlGEgY2xhc3NpYyBLQVNBTi9VQlNBTiBvciBzdGFuZGFyZCBidWcgZGV0ZWN0aW9uIGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgbGF0dGVyLCB3aGlsZSBLQVNBTiBhbmQgdGhlIHVzdWFsIHN1aXRlIG9mIHRvb2xzIGNvdmVyIHRoZSBidWcgdGhpcyBwYXRjaCBjb3JyZWN0cy4gVGhlIG5ldyBoZWxwZXIgZnVuY3Rpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgcmVtYWluIGBmYWxzZWAuIExldCdzIGNvbmZpcm0gdGhhdCByZWFzb25pbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdHlwZSBjb25mdXNpb24sIHdoaWNoIGlzbid0IEtNU0FOJ3MgZG9tYWluLiBUaGUgcGF0Y2ggY2xhcmlmaWVzIHRoZSBsb2dpYyBhbmQgZml4ZXMgdGhlIHR5cGUgaXNzdWUuIFRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgS01TQU4tc3BlY2lmaWMgcHJvYmxlbXMgYW5kIGRvZXNuJ3QgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueSBrZXJuZWwtdG8tdXNlciBzcGFjZSBsZWFrcy4gQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODcsIk91dHB1dFRva2VucyI6MjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDM6NTE6MjIuNDc5NjgzNzcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cGUgY29uZnVzaW9uIGlzc3VlIGluIGBkb190bHNfc2V0c29ja29wdF90eF9wYXlsb2FkX2xlbigpYCB3aGVyZSBgY3R4LVxcdTAwM2Vwcml2X2N0eF90eGAgd2FzIHVuY29uZGl0aW9uYWxseSBjYXN0IHRvIGBzdHJ1Y3QgdGxzX3N3X2NvbnRleHRfdHggKmAgYW5kIGNoZWNrZWQgZm9yIGBvcGVuX3JlY2AsIGV2ZW4gd2hlbiB0aGUgY29ubmVjdGlvbiB3YXMgY29uZmlndXJlZCBmb3IgSFcgb2ZmbG9hZCAoYFRMU19IV2AsIHdoZXJlIGBwcml2X2N0eF90eGAgaG9sZHMgYHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4YCkuIFRoZSBmaXggaW50cm9kdWNlcyBgdGxzX3R4X3JlY29yZF9pc19vcGVuKClgIHRvIHByb3Blcmx5IGluc3BlY3QgdGhlIGFwcHJvcHJpYXRlIG9wZW4gcmVjb3JkIHBvaW50ZXIgYmFzZWQgb24gYGN0eC1cXHUwMDNldHhfY29uZmAuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGtlcm5lbC10by11c2VyIGNvcHkgYnVmZmVycyBvciBpbmZvLWxlYWsgcGF0aHMsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgaW5pdGlhbGl6YXRpb24gb3IgbGVuZ3RoIHRyYWNraW5nIGluIGEgd2F5IHRoYXQgcmlza3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIHJlbGF0ZWQgdG8gaW52YWxpZCBzdHJ1Y3QgY2FzdGluZy9hY2Nlc3NlcyBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9VQlNBTiwgbm90IEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdHlwZSBjb25mdXNpb24gaXNzdWUgaW4gYGRvX3Rsc19zZXRzb2Nrb3B0X3R4X3BheWxvYWRfbGVuKClgIHdoZXJlIGBjdHgtXFx1MDAzZXByaXZfY3R4X3R4YCB3YXMgdW5jb25kaXRpb25hbGx5IGNhc3QgdG8gYHN0cnVjdCB0bHNfc3dfY29udGV4dF90eCAqYCBhbmQgY2hlY2tlZCBmb3IgYG9wZW5fcmVjYCwgZXZlbiB3aGVuIHRoZSBjb25uZWN0aW9uIHdhcyBjb25maWd1cmVkIGZvciBIVyBvZmZsb2FkIChgVExTX0hXYCwgd2hlcmUgYHByaXZfY3R4X3R4YCBob2xkcyBgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHhgKS4gVGhlIGZpeCBpbnRyb2R1Y2VzIGB0bHNfdHhfcmVjb3JkX2lzX29wZW4oKWAgdG8gcHJvcGVybHkgaW5zcGVjdCB0aGUgYXBwcm9wcmlhdGUgb3BlbiByZWNvcmQgcG9pbnRlciBiYXNlZCBvbiBgY3R4LVxcdTAwM2V0eF9jb25mYC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkga2VybmVsLXRvLXVzZXIgY29weSBidWZmZXJzIG9yIGluZm8tbGVhayBwYXRocywgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBvciBsZW5ndGggdHJhY2tpbmcgaW4gYSB3YXkgdGhhdCByaXNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IG1lbW9yeSBzYWZldHkgY29uY2VybnMgcmVsYXRlZCB0byBpbnZhbGlkIHN0cnVjdCBjYXN0aW5nL2FjY2Vzc2VzIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOL1VCU0FOLCBub3QgS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgrml8[1] Phase: Succeeded StartedAt: 2026-08-31 03:51:36 +0000 UTC FinishedAt: 2026-08-31 03:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 03:51:36 +0000 UTC FinishedAt: 2026-08-31 03:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2] Phase: Succeeded StartedAt: 2026-08-31 03:51:36 +0000 UTC FinishedAt: 2026-08-31 07:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 03:51:39 +0000 UTC FinishedAt: 2026-08-31 07:35:24 +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":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 03:51:39 +0000 UTC FinishedAt: 2026-08-31 03:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 03:51:39 +0000 UTC FinishedAt: 2026-08-31 03:51:44 +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":["TLS","TLS_DEVICE"],"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-workflowgrml8/series-workflowgrml8-convert-artifact-1678140953/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 03:52:06 +0000 UTC FinishedAt: 2026-08-31 04:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 03:52:06 +0000 UTC FinishedAt: 2026-08-31 04:12:28 +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:*0a4dc0c1-83da-4faf-90e3-d4bd8ccb6776,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-workflowgrml8/series-workflowgrml8-convert-artifact-1678140953/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": "df62a59b-5967-47df-8c5f-6950ddbd0d6c", "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-workflowgrml8/series-workflowgrml8-build-action-1560250807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 03:52:06 +0000 UTC FinishedAt: 2026-08-31 04:11:53 +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:*0a4dc0c1-83da-4faf-90e3-d4bd8ccb6776,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-workflowgrml8/series-workflowgrml8-convert-artifact-1678140953/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": "df62a59b-5967-47df-8c5f-6950ddbd0d6c", "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-workflowgrml8/series-workflowgrml8-build-action-1560250807/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:12:28 +0000 UTC FinishedAt: 2026-08-31 04:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:12:28 +0000 UTC FinishedAt: 2026-08-31 04:12:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:12:28 +0000 UTC FinishedAt: 2026-08-31 04:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:12:28 +0000 UTC FinishedAt: 2026-08-31 04:12:44 +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":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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-workflowgrml8/series-workflowgrml8-convert-artifact-3271284716/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:12:51 +0000 UTC FinishedAt: 2026-08-31 04:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:12:51 +0000 UTC FinishedAt: 2026-08-31 04:14:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df62a59b-5967-47df-8c5f-6950ddbd0d6c,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-workflowgrml8/series-workflowgrml8-build-action-1560250807/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-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:14:36 +0000 UTC FinishedAt: 2026-08-31 04:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:14:36 +0000 UTC FinishedAt: 2026-08-31 04:14:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:14:36 +0000 UTC FinishedAt: 2026-08-31 04:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:14:36 +0000 UTC FinishedAt: 2026-08-31 04:30:35 +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:*0a4dc0c1-83da-4faf-90e3-d4bd8ccb6776,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-workflowgrml8/series-workflowgrml8-convert-artifact-3271284716/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": "45af50b2-fc6e-41f7-a6fe-d8a5bea70f1d", "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-workflowgrml8/series-workflowgrml8-build-action-3515002504/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:14:36 +0000 UTC FinishedAt: 2026-08-31 04:30:25 +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:*0a4dc0c1-83da-4faf-90e3-d4bd8ccb6776,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-workflowgrml8/series-workflowgrml8-convert-artifact-3271284716/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": "45af50b2-fc6e-41f7-a6fe-d8a5bea70f1d", "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-workflowgrml8/series-workflowgrml8-build-action-3515002504/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:30:35 +0000 UTC FinishedAt: 2026-08-31 04:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:30:35 +0000 UTC FinishedAt: 2026-08-31 04:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:30:35 +0000 UTC FinishedAt: 2026-08-31 04:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:30:35 +0000 UTC FinishedAt: 2026-08-31 04:32:13 +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:*45af50b2-fc6e-41f7-a6fe-d8a5bea70f1d,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-workflowgrml8/series-workflowgrml8-build-action-3515002504/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-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:23 +0000 UTC FinishedAt: 2026-08-31 07:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:23 +0000 UTC FinishedAt: 2026-08-31 07:35:24 +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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"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:*df62a59b-5967-47df-8c5f-6950ddbd0d6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45af50b2-fc6e-41f7-a6fe-d8a5bea70f1d,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-workflowgrml8/series-workflowgrml8-build-action-1560250807/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-workflowgrml8/series-workflowgrml8-build-action-3515002504/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:23 +0000 UTC FinishedAt: 2026-08-31 04:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:23 +0000 UTC FinishedAt: 2026-08-31 04:32:27 +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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"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-workflowgrml8/series-workflowgrml8-convert-artifact-3209741781/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:23 +0000 UTC FinishedAt: 2026-08-31 04:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:23 +0000 UTC FinishedAt: 2026-08-31 04:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:23 +0000 UTC FinishedAt: 2026-08-31 04:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:33 +0000 UTC FinishedAt: 2026-08-31 07:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrml8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"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":["tls_setsockopt","tls_set_sw_offload","tls_set_device_offload","tls_tx_records","tls_sw_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"b430516a-1cf9-48cd-ab10-7269384a5a44","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 04:32:33 +0000 UTC FinishedAt: 2026-08-31 07:35:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df62a59b-5967-47df-8c5f-6950ddbd0d6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45af50b2-fc6e-41f7-a6fe-d8a5bea70f1d,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-workflowgrml8/series-workflowgrml8-build-action-1560250807/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-workflowgrml8/series-workflowgrml8-build-action-3515002504/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-workflowgrml8/series-workflowgrml8-convert-artifact-3209741781/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,}