Name: series-workflow42flp Phase: Succeeded StartedAt: 2026-08-22 09:30:59 +0000 UTC FinishedAt: 2026-08-22 13:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[0] Phase: Succeeded StartedAt: 2026-08-22 09:30:59 +0000 UTC FinishedAt: 2026-08-22 10:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 09:30:59 +0000 UTC FinishedAt: 2026-08-22 10:01:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_tx_error", "skb_zerocopy", "ovs_dp_process_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgbGVuZ3Rocywgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjBkOTQ4ZGIyZDI4NGVkOGIxOWQzYWZjOTkxNDNiY2RkMzU4NDAxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDEwOjAwOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbiAgKlxuICAqXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cbiAgKlx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cbiYjNDM7ICpcbiYjNDM7ICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbiYjNDM7ICpcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cbiAgKi9cbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChza2IpIHtcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiAhc2tiX2Nsb25lZChza2IpKSB7XG4gXHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFx0XHRza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTtcbiBcdH1cbkBAIC0zOTE0LDcgJiM0MzszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4gXHRcdGlmIChqIFx1MDAzZSAwKVxuIFx0XHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5pbmRleCBmMmQ1YjVhYjM4ZGVlLi4yZmM5ZWY2YzMyMWZmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5AQCAtMjg1LDYgJiM0MzsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbiBcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNCw4ICYjNDM7NjA1LDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXHUwMDNlcG9ydGlkKTtcbiBcdHVzZXJfc2tiID0gTlVMTDtcbiBvdXQ6XG4tXHRpZiAoZXJyKVxuLVx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdGNvbnN1bWVfc2tiKHVzZXJfc2tiKTtcbiBcdGNvbnN1bWVfc2tiKG5za2IpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjBkOTQ4ZGIyZDI4NGVkOGIxOWQzYWZjOTkxNDNiY2RkMzU4NDAxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjAwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBkNDM4MmI2OGQ1NmUwLi5iOTU0MTMyOWYxYTcyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMTQxNywxMCAmIzQzOzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7CiAgKgogICoJUmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuCiAgKglza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLgomIzQzOyAqCiYjNDM7ICoJRG9lcyBub3RoaW5nIGZvciBhIGNsb25lZCBza2I6IHRoZSB6ZXJvY29weSBzdGF0ZSBsaXZlcyBpbgomIzQzOyAqCXNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS4KICAqLwogdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2tiKSB7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyAhc2tiX2Nsb25lZChza2IpKSB7CiAJCXNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpOwogCQlza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTsKIAl9CkBAIC0zOTE0LDcgJiM0MzszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCXNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7CiAKIAlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHsKLQkJc2tiX3R4X2Vycm9yKGZyb20pOwogCQlpZiAoaiAmZ3Q7IDApCiAJCQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBmMmQ1YjVhYjM4ZGVlLi4yZmM5ZWY2YzMyMWZmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMjg1LDYgJiM0MzsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSkKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTYwNCw4ICYjNDM7NjA1LDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJZXJyID0gZ2VubG1zZ191bmljYXN0KG92c19kcF9nZXRfbmV0KGRwKSwgdXNlcl9za2IsIHVwY2FsbF9pbmZvLSZndDtwb3J0aWQpOwogCXVzZXJfc2tiID0gTlVMTDsKIG91dDoKLQlpZiAoZXJyKQotCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAljb25zdW1lX3NrYih1c2VyX3NrYik7CiAJY29uc3VtZV9za2IobnNrYik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBTS0IgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIbW0sIHRoaXMgaXMgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBhcmVhcy4mIzM0OyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gaG93IGBza2JfdHhfZXJyb3JgIGlzIHVzZWQgYW5kIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBob3cgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGVuIGl0JiMzOTtzIGNhbGxlZCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCAoYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCkuCgpUaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGEgbmV3IGAhc2tiX2Nsb25lZChza2IpYCBjaGVjayBpcyBiZWluZyBhZGRlZCB3aXRoaW4gYHNrYl90eF9lcnJvcmAgaXRzZWxmLiBBbHNvLCB0aGV5JiMzOTtyZSByZW1vdmluZyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgZnJvbSBgc2tiX3plcm9jb3B5YCBidXQgdGhlbiBhZGRpbmcgaXQgd2l0aGluIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGgmIzM5O3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdGhlbiByZW1vdmluZyBpdCBmcm9tIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiB0aGUgc2FtZSBmaWxlLgoKTXkgZmlyc3QgcmVmbGV4IGlzIHRvIHRoaW5rLCAmIzM0O1doeSB0aGVzZSBjaGFuZ2VzPyYjMzQ7LiBgc2tiX3R4X2Vycm9yYCwgYmVpbmcgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBuZWVkcyBjYXJlZnVsIHNjcnV0aW55LiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYmVpbmcgcGFydCBvZiBPcGVuIHZTd2l0Y2gsIGluZGljYXRlcyB0aGlzIHBhdGNoIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciBPcGVuIHZTd2l0Y2ggb3BlcmF0aW9uLiBUaGlzIGlzIGxpa2VseSBhbiBlcnJvciByZWNvdmVyeSBvciBoYW5kbGluZyBpc3N1ZSB0aGF0IHJlcXVpcmVzIHRoZSBkYXRhcGF0aCB0byBiZSBjaGFuZ2VkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zIGJldHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSYjMzk7cmUgcmVhY2hhYmxlIGFuZCBob3cgdGhleSYjMzk7cmUgY29uZmlndXJlZC4gVGltZSB0byBnbyBkaWcgdGhyb3VnaCB0aGUgY29kZWJhc2UuIEkga25vdyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGFuZCB0aGF0IHRoZSBgQ09ORklHX09QRU5WU1dJVENIYCBjb25maWcgb3B0aW9uIGxpa2VseSBjb250cm9scyBpdHMgaW5jbHVzaW9uLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhpbmcuCgpJJiMzOTttIHRoaW5raW5nIEkgbmVlZCBhIGRldGFpbGVkIHRyYWNlIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGlzc3VlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb24gb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgd2lsbCBuZWVkIHRvIHVzZSBhIGdyZXBwZXIgdG8gbG9vayBmb3IgdGhlIHVzZXMgYW5kIGxvY2F0aW9ucyBvZiB0aGVzZSBjYWxscy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfdHhfZXJyb3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0My1cdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo0NDQ6XHRza2JfdHhfZXJyb3Ioc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYy00NDUtXHRrZnJlZV9za2JfbGlzdChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExNjItXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuZHJpdmVycy9uZXQvdHVuLmM6MTE2MzpcdHNrYl90eF9lcnJvcihza2IpO1xuZHJpdmVycy9uZXQvdHVuLmMtMTE2NC1cdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzM4PXZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzM5OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE0MTI9RVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQxNC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MTU6ICpcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3Jcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTYtICpcdEBza2I6IGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCBhbiBlcnJvclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjMtICovXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMwLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xubmV0L2NvcmUvc2tidWZmLmMtMTQzMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcxMj1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MTAtXHRpZiAoIXNrYikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MTE6XHRcdHNrYl90eF9lcnJvcihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MTItXHRcdGdvdG8gbmxtc2dfZmFpbHVyZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxOS1cdGlmICghbmxoKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgyMDpcdFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgyMS1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzAtbmxhX3B1dF9mYWlsdXJlOlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzE6XHRza2JfdHhfZXJyb3IoZW50c2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTcyLVx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4Ny1cdFx0ZGVmYXVsdDpcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4ODpcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTI1PWludCBza2JfbWV0YV9pbnZhbGlkX2N0eCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1MzU6U0VDKFwmIzM0O2ZlbnRyeS9za2JfdHhfZXJyb3JcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTM2LV9fZmFpbHVyZSBfX21zZyhcJiMzNDttdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1Mzc9aW50IEJQRl9QUk9HKHNrYl9pbnZhbGlkX2N0eF9mZW50cnksIHZvaWQgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTU0NzpTRUMoXCYjMzQ7ZmV4aXQvc2tiX3R4X2Vycm9yXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTU0OC1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7bXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHNrYl90eF9lcnJvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYHNrYl90eF9lcnJvcmAgYW5kIGl0cyBhcHBsaWNhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGJvdGggYGRhdGFwYXRoLmNgIGluIE9wZW4gdlN3aXRjaCBhbmQgY29yZSBza2J1ZmYgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIGNlcnRhaW5seSwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb21tb24gbmV0d29yayBvcGVyYXRpb25zLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgYWNyb3NzIE9wZW4gdlN3aXRjaCwgdGhlIFRVTiBkcml2ZXIsIE9wZW5WUE4sIGFuZCBOZXRmaWx0ZXIgdGVsbHMgbWUgdGhpcyBpcyBhIHdlbGwtdHJhdmVsZWQgcGllY2Ugb2YgY29kZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGAhc2tiX2Nsb25lZChza2IpYCBjaGVjayB3aXRoaW4gYHNrYl90eF9lcnJvcmAgaXRzZWxmLiBUaGF0IG1ha2VzIGltbWVkaWF0ZSBzZW5zZTsgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggY2xvbmVkIHNrYnVmZnMuIE5vdyBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBuZWNlc3NhcnkuIFdoYXQmIzM5O3MgdGhlIHNwZWNpZmljIHNjZW5hcmlvIHRoYXQgdGhpcyBndWFyZHMgYWdhaW5zdD8gVGhlbiBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxsIGZyb20gYHNrYl96ZXJvY29weWAsIGluIGBza2J1ZmYuY2AuIEFuZCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcC4gQW5kIGxhc3RseSwgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIHRlbGxzIG1lIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YSBwYXRoIGlzIGV4cGxpY2l0bHkgaW52b2x2ZWQgaW4gdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBza2JfemVyb2NvcHlgIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTktXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1MDogKiB3aGljaCBjYWxscyB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlLlxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTUzLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTgtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEwLVx0XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdDtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMi1cdFx0XHRpZiAoeGVudmlmX2hhbmRsZV9mcmFnX2xpc3QocXVldWUsIHNrYikpIHtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cdFx0XHRcdFx0XHQgICBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSB0byBjb25zb2xpZGF0ZSBmcmFnX2xpc3QhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2Olx0XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTctXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzMy1cdFx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3Mi1cdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykge1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfc2VudCYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTEyODM9c3RhdGljIHZvaWQgeGVudmlmX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyOTQ6dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI5NTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyOTYtXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTgxNT1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODE2LVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3My1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODc0Olx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3NS1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTE1OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUyLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTM6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxubmV0L2NvcmUvc2tidWZmLmM6MTk2NTpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY2LVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjg9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4MzE9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMy0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODM0OiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODM1LSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzctICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODQwPXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg0MTpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTctfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LVxubmV0L2NvcmUvc2tidWZmLmMtMzg2MC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODYyLSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjktICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NzEtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc5PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg4MDpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODgxLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVx0fVxubmV0L2NvcmUvc2tidWZmLmM6MzkyNDpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTI1LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDUtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzk0NjpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzk0Ny1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjQ0PXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjUyOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjUzLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDEzLVxubmV0L2NvcmUvc2tidWZmLmM6NTAxNDpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDE1LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMjA6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAyMS1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2OS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyNzA6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNzEtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzMzktXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ1MT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cdFx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxODM0Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzNS1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc3Ni1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3Nzc6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzgtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2MC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTYxOlx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2Mi1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTI9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAxLVx0aWYgKGRwLVx1MDAzZXVzZXJfZmVhdHVyZXMgXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMjpcdFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAzLVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OC1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg5Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5MC1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTUtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTY6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTctXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTg4PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDMyLVxubmV0L3hkcC94c2suYzoxMDMzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDM0LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTExNi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTExNzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTExMTgtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGhvbmVzIGluIG9uIHNvbWUga2V5IGFyZWFzLiBJdCYjMzk7cyB0b3VjaGluZyBgc2tiX3R4X2Vycm9yYCwgd2hpY2ggSSBrbm93IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBzZWVpbmcgaXQgbGlua2VkIHdpdGggYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAod2hpY2gsIGFzIEkgcmVjYWxsLCB1dGlsaXplcyBgc2tiX3plcm9jb3B5YCksIGFuZCB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXRzZWxmLCBteSBpbnRlcm5hbCBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBUaGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgYXJlIGluIGJvdGggY29yZSBuZXR3b3JraW5nIChgbmV0L2NvcmUvc2tidWZmLmNgKSBhbmQgT3BlbiB2U3dpdGNoIChgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgKSBmdXJ0aGVyIHN1Z2dlc3RzIHBvdGVudGlhbCBpbnRlcnBsYXkgYW5kIHZ1bG5lcmFiaWxpdGllcy4KCkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAg4oCTIHRob3NlIGFyZSB0aGUgY2xlYXIgdGFyZ2V0cy4gSG1tLCB3YWl0IGEgbWludXRlLCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4uLiBBaCwgeWVzLCBpdCAqaXMqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCBoYXMgbGltaXRlZCBzY29wZSBhbmQgaXNuJiMzOTt0IGRpcmVjdGx5IGV4cG9zZWQgZXh0ZXJuYWxseS4gT2theSwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBhcyBtdWNoLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgcGF0aHMgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIEJ1dCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpcyBub3Qgc3RhdGljLCBpdCYjMzk7cyBwdWJsaWMgKG9yIGF0IGxlYXN0IGV4dGVybmFsbHkgYWNjZXNzaWJsZSksIHdoaWNoIGlzIGdyZWF0LiBBbmQsIG9mIGNvdXJzZSwgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGFyZSBib3RoIGV4cG9ydGVkLCBzbyB0aGV5JiMzOTtyZSBlYXNpbHkgYWNjZXNzaWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODM9c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTE3LVx0XHRcdGNsb25lLVx1MDAzZXJlY2lyY19pZCA9IHJlY2lyY19pZDtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTUxODpcdFx0XHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1MTktXHRcdH1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NDk9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTY3LVx0XHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1Njg6XHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwga2V5KTtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2OS1cdH0gd2hpbGUgKCFhY3Rpb25fZmlmb19pc19lbXB0eShmaWZvKSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ2LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMTg9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF92cG9ydF9nZW5sX2ZhbWlseTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMxOS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMyMDp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMjEtdm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jPTQyMj1pbnQgb3ZzX3Zwb3J0X3JlY2VpdmUoc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy00NDctXHR9XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo0NDg6XHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBcdTAwMjZrZXkpO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ5LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIE9WUyBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBzb21lIG9mIHRoZSBrZXkgZnVuY3Rpb25zLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIEludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzcGVjaWZpYyBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFNpbWlsYXJseSwgSSBzZWUgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdHJhY2luZyBleGVjdXRpb24gcGF0aHMuCgpOb3csIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc28gY3J1Y2lhbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgaGF2ZSBiZWVuIGVuYWJsZWQuIEkgcmVhbGl6ZSBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgd2hpY2ggd291bGQgbWVhbiB0aGF0IE9wZW4gdlN3aXRjaCByZWxhdGVkIGNoYW5nZXMgaGF2ZSBiZWVuIGVuYWJsZWQuCgpUbyBjb25maXJtIHRoYXQgT3BlbiB2U3dpdGNoIGNoYW5nZXMgaGF2ZSBiZWVuIGVuYWJsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlLiBJdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgZGVmaW5lZCB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIHBpZWNlLiBNeSBpbml0aWFsIHRob3VnaHQgdGhhdCBgT1BFTlZTV0lUQ0hgIHdhcyByZXF1aXJlZCB0byB1c2UgdGhlIG9wZW52c3dpdGNoIHBhcnQgb2YgdGhpcyBjb2RlIGxvb2tzIHRvIGJlIGluY29tcGxldGUuIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKQSBxdWljayBzY2FuIHNob3dzIHRoZXNlIGFyZSAqYWxzbyogdXNlZCBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY2AuIEFoIGhhISBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBTaW5jZSBib3RoIGZ1bmN0aW9ucyBzaG93IHVwIGluIHRoZSBzYW1lIHBsYWNlIHR3aWNlIEkgc2hvdWxkIGV4YW1pbmUgYG5mbmV0bGlua19xdWV1ZWAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBuZm5ldGxpbmtfcXVldWVgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9gLiBIb3BlZnVsbHksIHRoYXQgd2lsbCByZXZlYWwgdGhlIGZ1bGwgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTcKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIHdpdGggU0tCcyAoc29ja2V0IGJ1ZmZlcikgYW5kIG9wZW52c3dpdGNoLiBUaGUgcGxhbiBpcyB0byBhZGQgYE9QRU5WU1dJVENIYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4KCkZpcnN0LCBJIGNvbmZpcm1lZCB0aGF0IGBza2JfdHhfZXJyb3JgIGlzIHJlYWNoZWQsIHNwZWNpZmljYWxseSBmcm9tIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIHdoZW4gYG92c19mbG93X3RibF9sb29rdXBfc3RhdHNgIHJldHVybnMgTlVMTCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgY2FzZS4gSSBhbHNvIGNvbmZpcm1lZCBgc2tiX3plcm9jb3B5YCBpcyBjYWxsZWQgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgd2l0aGluIGBkYXRhcGF0aC5jYCBhbmQgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCB3aXRoaW4gYG5mbmV0bGlua19xdWV1ZS5jYC4KClRoZSBnaXN0IG9mIHRoZSBwYXRjaCBpcyBhYm91dCBtb3ZpbmcgdGhlIGBza2JfdHhfZXJyb3JgIGNhbGwuIEl0IHJlbW92ZXMgYSBjYWxsIHRvIGBza2JfdHhfZXJyb3IoZnJvbSlgIGZyb20gd2l0aGluIGBza2JfemVyb2NvcHlgIGFuZCBhZGRzIGl0IHRvIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBJdCBhbHNvIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGNoZWNrIGAhc2tiX2Nsb25lZChza2IpYC4gU28sIHRoZSBgc2tiX3R4X2Vycm9yYCBub3cgb25seSBvY2N1cnMgd2hlbiBgc2tiYCBpcyBub3QgY2xvbmVkLCB3aGljaCBpcyBhIHNlbnNpYmxlIGFkZGl0aW9uLgoKVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSByZWFjaCBhbmQgcG90ZW50aWFsIGltcGFjdC4KCkkgcmV2aWV3ZWQgdGhlIGNvZGUgY2hhbmdlczoKCiogICBUaGUgYHNrYl90eF9lcnJvcmAgY2hhbmdlOiBBZGRlZCBhIGNoZWNrIGZvciBgIXNrYl9jbG9uZWQoc2tiKWAuCgoqICAgVGhlIGBza2JfemVyb2NvcHlgIGNoYW5nZTogUmVtb3ZlZCB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2hlbiBhbiBlcnJvciBvY2N1cnMgd2l0aCBvcnBoYW4gZnJhZ21lbnRzLgoKKiAgIFRoZSBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBjaGFuZ2U6IE5vdyBpbmNsdWRlcyB0aGUgYHNrYl90eF9lcnJvcmAgY2FsbCBpbiB0aGUgZGVmYXVsdCBjYXNlLgoKKiAgIFRoZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgY2hhbmdlOiBSZW1vdmVkIGEgY2FsbCB0byBgc2tiX3R4X2Vycm9yYCBpbiB0aGUgYG91dGAgbGFiZWwuCgpgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBleGNsdWRlIGl0IGFzIGEgZm9jdXMgc3ltYm9sLiBUaGUgbW9yZSBzaWduaWZpY2FudCBzeW1ib2xzIHdpbGwgYmUgYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEkmIzM5O2xsIGNvbnNpZGVyIHRoZXNlIGFzIHRoZSBrZXkgcG9pbnRzIHRvIHRlc3Qgd2hlbiBmdXp6aW5nLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yKClgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc29ja2V0IGJ1ZmZlcnMgKGBza19idWZmYCksIGFzIHRoZSBzdGF0ZSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzIHZpYSBgc2tiX3NoaW5mbygpYC4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsIHNpdGVzIG9mIGBza2JfdHhfZXJyb3IoKWAgaW4gYHNrYl96ZXJvY29weSgpYCwgYG92c19kcF9wcm9jZXNzX3BhY2tldCgpYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KClgIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIGNsZWFudXAgZm9yIHplcm9jb3B5IG9wZXJhdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB6ZXJvY29weSBzdGF0ZSwgd2hpY2ggaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCByZXNvdXJjZSBmcmVlaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGludmFsaWQgZnJlZSBlcnJvcnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikgYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBsZW5ndGhzLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZWxldmFudCBidWcgY2xhc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjBkOTQ4ZGIyZDI4NGVkOGIxOWQzYWZjOTkxNDNiY2RkMzU4NDAxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjAwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBkNDM4MmI2OGQ1NmUwLi5iOTU0MTMyOWYxYTcyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMTQxNywxMCAmIzQzOzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7CiAgKgogICoJUmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuCiAgKglza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLgomIzQzOyAqCiYjNDM7ICoJRG9lcyBub3RoaW5nIGZvciBhIGNsb25lZCBza2I6IHRoZSB6ZXJvY29weSBzdGF0ZSBsaXZlcyBpbgomIzQzOyAqCXNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS4KICAqLwogdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2tiKSB7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyAhc2tiX2Nsb25lZChza2IpKSB7CiAJCXNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpOwogCQlza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTsKIAl9CkBAIC0zOTE0LDcgJiM0MzszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCXNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7CiAKIAlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHsKLQkJc2tiX3R4X2Vycm9yKGZyb20pOwogCQlpZiAoaiAmZ3Q7IDApCiAJCQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBmMmQ1YjVhYjM4ZGVlLi4yZmM5ZWY2YzMyMWZmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMjg1LDYgJiM0MzsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSkKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTYwNCw4ICYjNDM7NjA1LDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJZXJyID0gZ2VubG1zZ191bmljYXN0KG92c19kcF9nZXRfbmV0KGRwKSwgdXNlcl9za2IsIHVwY2FsbF9pbmZvLSZndDtwb3J0aWQpOwogCXVzZXJfc2tiID0gTlVMTDsKIG91dDoKLQlpZiAoZXJyKQotCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAljb25zdW1lX3NrYih1c2VyX3NrYik7CiAJY29uc3VtZV9za2IobnNrYik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTkKCQkJCQkJCW91dHB1dDogMjc2CgkJCQkJCQl0aG91Z2h0czogMTAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogYHNrYl90eF9lcnJvcmAgYW5kIFplcm9jb3B5IFN0YXRlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYHNrYl90eF9lcnJvcmAgYW5kIGl0cyB1c2FnZSBhY3Jvc3MgYHNrYnVmZi5jYCBhbmQgYGRhdGFwYXRoLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5OiBhcmUgd2UgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzPyBXaXRoIHRoZSBjaGFuZ2VzIGludm9sdmluZyB6ZXJvY29weSBzdGF0ZSwgbXkgcmFkYXIgaXMgdXAgZm9yIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG9yIG1lbW9yeSBsZWFrcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHByaW1hcmlseSBhYm91dCBob3cgd2UgaGFuZGxlIGNsb25lZCBTS0JzLiBUaGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaW4gYHNrYl90eF9lcnJvcmAgaXMgdGhlIGFkZGl0aW9uIG9mIGAhc2tiX2Nsb25lZChza2IpYCwgd2hpY2ggbWVhbnMgd2UgKndvbiYjMzk7dCogY2xlYXIgdGhlIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgYnVmZmVycy4gIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGlzIHNoYXJlZCBieSBjbG9uZXMuIFRoZSBwYXRjaCB0aGVuIHByb2NlZWRzIHRvIGNsZWFuIHVwIGEgY2FsbCBzaXRlIHRvIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHkoKWAuIEkmIzM5O20gc2VlaW5nIHRoYXQgd2UgYXJlIGFkZGluZyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgaW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCB3ZSYjMzk7dmUgcmVtb3ZlZCBhIHNpbWlsYXIgY2FsbCBmcm9tIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4KCk5vdywgaWYgdGhlcmUgd2VyZSBhIHJlYWwgcHJvYmxlbSBoZXJlLCBpdCB3b3VsZCBtb3N0IGxpa2VseSBzaG93IHVwIGFzIGEgbWVtb3J5IGxlYWssIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBkb3VibGUtZnJlZSwgZ2l2ZW4gdGhhdCB3ZSBhcmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB6ZXJvY29weSByZXNvdXJjZXMuICBCdXQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWsgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSB0aHJvdWdoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGl0IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LgoKUmV2aWV3aW5nIHRoZSBjb2RlIGNoYW5nZXMgaW4gZGV0YWlsOgoqICAgSW4gYHNrYl90eF9lcnJvcmAsIGl0JiMzOTtzIGp1c3QgdGhpcyBuZXcgY29uZGl0aW9uYWw6IGBpZiAoc2tiICZhbXA7JmFtcDsgIXNrYl9jbG9uZWQoc2tiKSlgLiBCYXNpY2FsbHksIHByZXZlbnRpbmcgdGhlIGNsZWFyaW5nIG9mIHplcm9jb3B5IHN0YXRlIG9uIGNsb25lZCBTS0JzLgoqICAgSW4gYHNrYl96ZXJvY29weWAsIHdlJiMzOTtyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yYCB3aGVuIGBza2Jfb3JwaGFuX2ZyYWdzYCBmYWlscy4KKiAgIEluIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCB3ZSYjMzk7cmUgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgb24gZXJyb3IuCiogICBJbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIHdlJiMzOTtyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yKHNrYilgIG9uIGVycm9yLgoKTm9uZSBvZiB0aGlzIHNjcmVhbXMgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2suIEl0JiMzOTtzIGFsbCBhYm91dCByZXNvdXJjZSBjbGVhbnVwIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudC4gQSBidWcgaGVyZSAqd291bGQqIGJlIGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSwgd2hpY2ggS0FTQU4sIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMgd291bGQgYWxtb3N0IGNlcnRhaW5seSBmbGFnLgoKU28sIEkgZG9uJiMzOTt0IHRoaW5rIHdlIG5lZWQgS01TQU4gZm9yIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYW5kIGZvY3VzIHNvbGVseSBvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgd2l0aCBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBhbHRlcmF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhIHdheSB0aGF0IHJpc2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBjYW4gcmVseSBvbiBLQVNBTiBmb3IgdGhlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY2hlY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgbGVuZ3Rocywgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgbGVuZ3Rocywgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjI2LjI1Mjk1OTEyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzc5NjQyMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBza2JfdHhfZXJyb3IoKWAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBzb2NrZXQgYnVmZmVycyAoYHNrX2J1ZmZgKSwgYXMgdGhlIHN0YXRlIGlzIHNoYXJlZCBhbW9uZyBjbG9uZXMgdmlhIGBza2Jfc2hpbmZvKClgLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrYl90eF9lcnJvcigpYCBpbiBgc2tiX3plcm9jb3B5KClgLCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KClgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoKWAgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cCBmb3IgemVyb2NvcHkgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBsZW5ndGhzLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZWxldmFudCBidWcgY2xhc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGBza2JfdHhfZXJyb3JgIHRvIG5vdCBwcm9jZXNzIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDoyNi4yNTI5NjQ2MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDM5NDIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYwZDk0OGRiMmQyODRlZDhiMTlkM2FmYzk5MTQzYmNkZDM1ODQwMWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTA6MDA6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xcbiAgKlxcbiAgKlxcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxcbiAgKlxcdHNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuXFxuKyAqXFxuKyAqXFx0RG9lcyBub3RoaW5nIGZvciBhIGNsb25lZCBza2I6IHRoZSB6ZXJvY29weSBzdGF0ZSBsaXZlcyBpblxcbisgKlxcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cXG4gICovXFxuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKHNrYikge1xcbitcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2ICFza2JfY2xvbmVkKHNrYikpIHtcXG4gXFx0XFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuIFxcdFxcdHNrYl96Y29weV9jbGVhcihza2IsIHRydWUpO1xcbiBcXHR9XFxuQEAgLTM5MTQsNyArMzkxNyw2IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG4gXFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XFxuLVxcdFxcdHNrYl90eF9lcnJvcihmcm9tKTtcXG4gXFx0XFx0aWYgKGogXFx1MDAzZSAwKVxcbiBcXHRcXHRcXHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVxcdTAwM2VoZWFkKSk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggZjJkNWI1YWIzOGRlZS4uMmZjOWVmNmMzMjFmZiAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI4NSw2ICsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNjA0LDggKzYwNSw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXFx1MDAzZXBvcnRpZCk7XFxuIFxcdHVzZXJfc2tiID0gTlVMTDtcXG4gb3V0Olxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG4gXFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xcbiBcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjI2LjY1NDI2ODkzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MDQ5MjU4NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJ3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYwZDk0OGRiMmQyODRlZDhiMTlkM2FmYzk5MTQzYmNkZDM1ODQwMWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDowMDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkxNCw3ICszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4tXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbiBcdFx0aWYgKGogXHUwMDNlIDApXG4gXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGYyZDViNWFiMzhkZWUuLjJmYzllZjZjMzIxZmYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNCw4ICs2MDUsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDoyNi42NTQyNzA1NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODA1NzUzOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFNLQiBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIbW0sIHRoaXMgaXMgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBhcmVhcy5cIiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBob3cgYHNrYl90eF9lcnJvcmAgaXMgdXNlZCBhbmQgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGhvdyBpdCdzIGNhbGxlZCBhbmQgd2hlbiBpdCdzIGNhbGxlZCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCAoYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCkuXG5cblRoZSBrZXkgY2hhbmdlcyBqdW1wIG91dDogYSBuZXcgYCFza2JfY2xvbmVkKHNrYilgIGNoZWNrIGlzIGJlaW5nIGFkZGVkIHdpdGhpbiBgc2tiX3R4X2Vycm9yYCBpdHNlbGYuIEFsc28sIHRoZXkncmUgcmVtb3ZpbmcgYSBjYWxsIHRvIGBza2JfdHhfZXJyb3JgIGZyb20gYHNrYl96ZXJvY29weWAgYnV0IHRoZW4gYWRkaW5nIGl0IHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoJ3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0aGVuIHJlbW92aW5nIGl0IGZyb20gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIHRoZSBzYW1lIGZpbGUuXG5cbk15IGZpcnN0IHJlZmxleCBpcyB0byB0aGluaywgXCJXaHkgdGhlc2UgY2hhbmdlcz9cIi4gYHNrYl90eF9lcnJvcmAsIGJlaW5nIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBtZWFucyBhbnkgY2hhbmdlIGhlcmUgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGJlaW5nIHBhcnQgb2YgT3BlbiB2U3dpdGNoLCBpbmRpY2F0ZXMgdGhpcyBwYXRjaCBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3IgT3BlbiB2U3dpdGNoIG9wZXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYW4gZXJyb3IgcmVjb3Zlcnkgb3IgaGFuZGxpbmcgaXNzdWUgdGhhdCByZXF1aXJlcyB0aGUgZGF0YXBhdGggdG8gYmUgY2hhbmdlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zIGJldHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSdyZSByZWFjaGFibGUgYW5kIGhvdyB0aGV5J3JlIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIGNvZGViYXNlLiBJIGtub3cgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCBhbmQgdGhhdCB0aGUgYENPTkZJR19PUEVOVlNXSVRDSGAgY29uZmlnIG9wdGlvbiBsaWtlbHkgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gVGhpcyBtZWFucyBpdCdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhpbmcuXG5cbkknbSB0aGlua2luZyBJIG5lZWQgYSBkZXRhaWxlZCB0cmFjZSB0byBzZWUgaWYgdGhpcyBpcyBhbiBpc3N1ZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHdpbGwgbmVlZCB0byB1c2UgYSBncmVwcGVyIHRvIGxvb2sgZm9yIHRoZSB1c2VzIGFuZCBsb2NhdGlvbnMgb2YgdGhlc2UgY2FsbHMuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDozMy40NjAwMjc4MzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNDU2NTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfdHhfZXJyb3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQzLVxcdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjQ0NDpcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQ1LVxcdGtmcmVlX3NrYl9saXN0KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMDU5PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNjItXFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMTYzOlxcdHNrYl90eF9lcnJvcihza2IpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExNjQtXFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzOD12b2lkIHNrYl9kdW1wKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZ1bGxfcGt0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzk6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTQtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MTQxNTogKlxcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3JcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE2LSAqXFx0QHNrYjogYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIGFuIGVycm9yXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MjQ6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzAtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcxMj1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxMC1cXHRpZiAoIXNrYikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODExOlxcdFxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODEyLVxcdFxcdGdvdG8gbmxtc2dfZmFpbHVyZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE5LVxcdGlmICghbmxoKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MjA6XFx0XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MjEtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk3MC1ubGFfcHV0X2ZhaWx1cmU6XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzE6XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzItXFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODctXFx0XFx0ZGVmYXVsdDpcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyODg6XFx0XFx0XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg5LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUyNT1pbnQgc2tiX21ldGFfaW52YWxpZF9jdHgodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTM1OlNFQyhcXFwiZmVudHJ5L3NrYl90eF9lcnJvclxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNi1fX2ZhaWx1cmUgX19tc2coXFxcIm11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTM3PWludCBCUEZfUFJPRyhza2JfaW52YWxpZF9jdHhfZmVudHJ5LCB2b2lkICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1NDc6U0VDKFxcXCJmZXhpdC9za2JfdHhfZXJyb3JcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1NDgtX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjM1LjM5NDU5OTMxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjQxODMyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBza2JfdHhfZXJyb3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYHNrYl90eF9lcnJvcmAgYW5kIGl0cyBhcHBsaWNhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGJvdGggYGRhdGFwYXRoLmNgIGluIE9wZW4gdlN3aXRjaCBhbmQgY29yZSBza2J1ZmYgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIGNlcnRhaW5seSwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb21tb24gbmV0d29yayBvcGVyYXRpb25zLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGFjcm9zcyBPcGVuIHZTd2l0Y2gsIHRoZSBUVU4gZHJpdmVyLCBPcGVuVlBOLCBhbmQgTmV0ZmlsdGVyIHRlbGxzIG1lIHRoaXMgaXMgYSB3ZWxsLXRyYXZlbGVkIHBpZWNlIG9mIGNvZGUuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGAhc2tiX2Nsb25lZChza2IpYCBjaGVjayB3aXRoaW4gYHNrYl90eF9lcnJvcmAgaXRzZWxmLiBUaGF0IG1ha2VzIGltbWVkaWF0ZSBzZW5zZTsgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggY2xvbmVkIHNrYnVmZnMuIE5vdyBJJ20ga2VlbiB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeS4gV2hhdCdzIHRoZSBzcGVjaWZpYyBzY2VuYXJpbyB0aGF0IHRoaXMgZ3VhcmRzIGFnYWluc3Q/IFRoZW4gaXQgbG9va3MgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxsIGZyb20gYHNrYl96ZXJvY29weWAsIGluIGBza2J1ZmYuY2AuIEFuZCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBBbmQgbGFzdGx5LCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCB3aGljaCB0ZWxscyBtZSB0aGUgT3BlbiB2U3dpdGNoIGRhdGEgcGF0aCBpcyBleHBsaWNpdGx5IGludm9sdmVkIGluIHRoaXMgY2hhbmdlLiBMZXQncyBkZWx2ZSBpbnRvIGBza2JfemVyb2NvcHlgIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDA6NDEuNTU4Nzg2MzUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzAyNDMwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTUtXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxNy1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTA6ICogd2hpY2ggY2FsbHMgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZS5cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01MS0gKi9cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01My1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTU4LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjU5OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTE3Mj1zdGF0aWMgaW50IHhlbnZpZl90eF9zdWJtaXQoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ19saXN0O1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTItXFx0XFx0XFx0aWYgKHhlbnZpZl9oYW5kbGVfZnJhZ19saXN0KHF1ZXVlLCBza2IpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiTm90IGVub3VnaCBtZW1vcnkgdG8gY29uc29saWRhdGUgZnJhZ19saXN0IVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMTY6XFx0XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjE3LVxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMzMtXFx0XFx0XFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XFx0XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjM1LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzItXFx0XFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcpIHtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTI3MzpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXFx0XFx0XFx0cXVldWUtXFx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X3NlbnQrKztcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYz0xMjgzPXN0YXRpYyB2b2lkIHhlbnZpZl96ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXFx0XFx0cXVldWUtXFx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwrKztcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTMxNTpcXHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTMxNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk0OnVuc2lnbmVkIGludCBza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk1OmludCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyOTYtXFx0XFx0IGludCBsZW4sIGludCBobGVuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE4MTU9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3JlYWxsb2MpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTYtXFxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMTgxOC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xODczLVxcdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cXHUwMDNlZWUuZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9aRVJPQ09QWSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4NzQ6XFx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NzUtXFx0XFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMz1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxNTppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTE2LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk1Mi19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTYzPUVYUE9SVF9TWU1CT0xfR1BMKF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NjU6c3RhdGljIGludCBza2JfemVyb2NvcHlfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm5za2IsIHN0cnVjdCBza19idWZmICpvcmlnLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI4PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XFx0XFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuLCBza2IsIGdmcF9tYXNrKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXFx0XFx0XFx0a2ZyZWVfc2tiKG4pO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzgzMT1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzMtIC8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzQ6ICpcXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNS0gKlxcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM3LSAqXFx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICd0bycgc2tiIHBhc3NlZFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Mzg6ICpcXHRpbnRvIHNrYl96ZXJvY29weSgpLlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXFxubmV0L2NvcmUvc2tidWZmLmM9Mzg0MD11bnNpZ25lZCBpbnRcXG5uZXQvY29yZS9za2J1ZmYuYzozODQxOnNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny19XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxubmV0L2NvcmUvc2tidWZmLmMtMzg1OS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODYwLS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcXHRza2JfemVyb2NvcHkgLSBaZXJvIGNvcHkgc2tiIHRvIHNrYlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjItICpcXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg2OS0gKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcXHRUaGUgYGhsZW5gIGFzIGNhbGN1bGF0ZWQgYnkgc2tiX3plcm9jb3B5X2hlYWRsZW4oKSBzcGVjaWZpZXMgdGhlXFxubmV0L2NvcmUvc2tidWZmLmMtMzg3MS0gKlxcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzk9aW50XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg4MDpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMzg4MS17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTI0OlxcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzkyNS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM5NDY6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQ3LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDI0ND12b2lkIHNrYl9zcGxpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSwgY29uc3QgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0c2tiX3NoaW5mbyhza2IxKS1cXHUwMDNlZmxhZ3MgfD0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IHpjX2ZsYWdzO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjQyNTI6XFx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDI1My1cXHRpZiAobGVuIFxcdTAwM2MgcG9zKVxcdC8qIFNwbGl0IGxpbmUgaXMgaW5zaWRlIGhlYWRlci4gKi9cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTMtXFxubmV0L2NvcmUvc2tidWZmLmM6NTAxNDpcXHRcXHRpZiAoc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGZyYWdfc2tiLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9za2J1ZmYuYy01MDE1LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxOS1cXHRcXHRcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzo1MDIwOlxcdFxcdFxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobnNrYiwgbGlzdF9za2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNTAyMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjktXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjcwOlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI3MS1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMzM5LVxcbm5ldC9pcHY0L3RjcC5jOjEzNDA6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBiaW5kaW5nKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDUxPXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzNDpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODM1LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MTI9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzYtXFx0XFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXFx1MDAzZWNvcHlfcmFuZ2UpKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjc3NzpcXHRcXHRobGVuID0gc2tiX3plcm9jb3B5X2hlYWRsZW4oZW50c2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc3OC1cXHRcXHRobGVuID0gbWluX3QodW5zaWduZWQgaW50LCBobGVuLCBkYXRhX2xlbik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2MC1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk2MTpcXHRcXHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjItXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTI9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MDEtXFx0aWYgKGRwLVxcdTAwM2V1c2VyX2ZlYXR1cmVzIFxcdTAwMjYgT1ZTX0RQX0ZfVU5BTElHTkVEKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMjpcXHRcXHRobGVuID0gbWluKHNrYl96ZXJvY29weV9oZWFkbGVuKHNrYiksIGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAzLVxcdGVsc2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OC1cXHQvKiBPbmx5IHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIGhlYWRlciwgcGFja2V0IGRhdGEgaXMgYWRkZWRcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1ODk6XFx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTAtXFx0aWYgKCEobmxhID0gbmxhX3Jlc2VydmUodXNlcl9za2IsIE9WU19QQUNLRVRfQVRUUl9QQUNLRVQsIDApKSkge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTk1LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjU5NjpcXHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTk3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQveGRwL3hzay5jPTk4OD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDMyLVxcbm5ldC94ZHAveHNrLmM6MTAzMzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMTE2LVxcdGlmIChkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xcbm5ldC94ZHAveHNrLmM6MTExNzpcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHhzLCBkZXNjKTtcXG5uZXQveGRwL3hzay5jLTExMTgtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjQzLjQyOTAzNTIwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNzAxODAwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiBzb21lIGtleSBhcmVhcy4gSXQncyB0b3VjaGluZyBgc2tiX3R4X2Vycm9yYCwgd2hpY2ggSSBrbm93IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBzZWVpbmcgaXQgbGlua2VkIHdpdGggYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAod2hpY2gsIGFzIEkgcmVjYWxsLCB1dGlsaXplcyBgc2tiX3plcm9jb3B5YCksIGFuZCB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXRzZWxmLCBteSBpbnRlcm5hbCBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBUaGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgYXJlIGluIGJvdGggY29yZSBuZXR3b3JraW5nIChgbmV0L2NvcmUvc2tidWZmLmNgKSBhbmQgT3BlbiB2U3dpdGNoIChgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgKSBmdXJ0aGVyIHN1Z2dlc3RzIHBvdGVudGlhbCBpbnRlcnBsYXkgYW5kIHZ1bG5lcmFiaWxpdGllcy5cblxuSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCDigJMgdGhvc2UgYXJlIHRoZSBjbGVhciB0YXJnZXRzLiBIbW0sIHdhaXQgYSBtaW51dGUsIEkganVzdCBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLi4uIEFoLCB5ZXMsIGl0ICppcyogYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0IGhhcyBsaW1pdGVkIHNjb3BlIGFuZCBpc24ndCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHkuIE9rYXksIHNvIHRoYXQgY2hhbmdlcyB0aGluZ3MgYSBiaXQuIEkgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBhcyBtdWNoLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGluZyBwYXRocyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gQnV0IGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGlzIG5vdCBzdGF0aWMsIGl0J3MgcHVibGljIChvciBhdCBsZWFzdCBleHRlcm5hbGx5IGFjY2Vzc2libGUpLCB3aGljaCBpcyBncmVhdC4gQW5kLCBvZiBjb3Vyc2UsIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgYm90aCBleHBvcnRlZCwgc28gdGhleSdyZSBlYXNpbHkgYWNjZXNzaWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDU0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjUxLjc5OTIxODI0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMDY4NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODM9c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1MTctXFx0XFx0XFx0Y2xvbmUtXFx1MDAzZXJlY2lyY19pZCA9IHJlY2lyY19pZDtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTg6XFx0XFx0XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUxOS1cXHRcXHR9XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NDk9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1NjctXFx0XFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTU2ODpcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2OS1cXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMTg9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF92cG9ydF9nZW5sX2ZhbWlseTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg6MzIwOnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMjEtdm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDIyPWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ3LVxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo0NDg6XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXFx1MDAyNmtleSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ5LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDo1My41MDEyOTI2MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTIzMjc1MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE9WUyBQYWNrZXQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgc29tZSBvZiB0aGUga2V5IGZ1bmN0aW9ucy4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSBpdCdzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzcGVjaWZpYyBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gU2ltaWxhcmx5LCBJIHNlZSBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgYXJlIGFsc28gbm9uLXN0YXRpYy4gR290dGEga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIGV4ZWN1dGlvbiBwYXRocy5cblxuTm93LCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgYXJlIHNvIGNydWNpYWwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGZlYXR1cmVzIGhhdmUgYmVlbiBlbmFibGVkLiBJIHJlYWxpemUgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgT1BFTlZTV0lUQ0hgIGlzIGFjdHVhbGx5IGRlZmluZWQsIHdoaWNoIHdvdWxkIG1lYW4gdGhhdCBPcGVuIHZTd2l0Y2ggcmVsYXRlZCBjaGFuZ2VzIGhhdmUgYmVlbiBlbmFibGVkLlxuXG5UbyBjb25maXJtIHRoYXQgT3BlbiB2U3dpdGNoIGNoYW5nZXMgaGF2ZSBiZWVuIGVuYWJsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcxMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjAxLjAyNDU3MDE3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTI2MjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDE6MDIuNzk5ODQ3MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1Mzc0NDExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlLiBJdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgZGVmaW5lZCB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgc28gdGhhdCdzIG5vdCB0aGUgY3JpdGljYWwgcGllY2UuIE15IGluaXRpYWwgdGhvdWdodCB0aGF0IGBPUEVOVlNXSVRDSGAgd2FzIHJlcXVpcmVkIHRvIHVzZSB0aGUgb3BlbnZzd2l0Y2ggcGFydCBvZiB0aGlzIGNvZGUgbG9va3MgdG8gYmUgaW5jb21wbGV0ZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cbkEgcXVpY2sgc2NhbiBzaG93cyB0aGVzZSBhcmUgKmFsc28qIHVzZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgLiBBaCBoYSEgVGhhdCdzIGludGVyZXN0aW5nLiBTaW5jZSBib3RoIGZ1bmN0aW9ucyBzaG93IHVwIGluIHRoZSBzYW1lIHBsYWNlIHR3aWNlIEkgc2hvdWxkIGV4YW1pbmUgYG5mbmV0bGlua19xdWV1ZWAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYG5mbmV0bGlua19xdWV1ZWAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2AuIEhvcGVmdWxseSwgdGhhdCB3aWxsIHJldmVhbCB0aGUgZnVsbCBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDE6MTIuMzUzNTk0NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY1MTIxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDE6MTQuMTAwMTE3NDI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NTIyMzg4OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIHdpdGggU0tCcyAoc29ja2V0IGJ1ZmZlcikgYW5kIG9wZW52c3dpdGNoLiBUaGUgcGxhbiBpcyB0byBhZGQgYE9QRU5WU1dJVENIYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC5cblxuRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYHNrYl90eF9lcnJvcmAgaXMgcmVhY2hlZCwgc3BlY2lmaWNhbGx5IGZyb20gYG92c19kcF9wcm9jZXNzX3BhY2tldGAgd2hlbiBgb3ZzX2Zsb3dfdGJsX2xvb2t1cF9zdGF0c2AgcmV0dXJucyBOVUxMLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBjYXNlLiBJIGFsc28gY29uZmlybWVkIGBza2JfemVyb2NvcHlgIGlzIGNhbGxlZCBmcm9tIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCB3aXRoaW4gYGRhdGFwYXRoLmNgIGFuZCBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgIHdpdGhpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgLlxuXG5UaGUgZ2lzdCBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgbW92aW5nIHRoZSBgc2tiX3R4X2Vycm9yYCBjYWxsLiBJdCByZW1vdmVzIGEgY2FsbCB0byBgc2tiX3R4X2Vycm9yKGZyb20pYCBmcm9tIHdpdGhpbiBgc2tiX3plcm9jb3B5YCBhbmQgYWRkcyBpdCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gSXQgYWxzbyBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCB0byBjaGVjayBgIXNrYl9jbG9uZWQoc2tiKWAuIFNvLCB0aGUgYHNrYl90eF9lcnJvcmAgbm93IG9ubHkgb2NjdXJzIHdoZW4gYHNrYmAgaXMgbm90IGNsb25lZCwgd2hpY2ggaXMgYSBzZW5zaWJsZSBhZGRpdGlvbi5cblxuVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSByZWFjaCBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuSSByZXZpZXdlZCB0aGUgY29kZSBjaGFuZ2VzOlxuXG4qICAgVGhlIGBza2JfdHhfZXJyb3JgIGNoYW5nZTogQWRkZWQgYSBjaGVjayBmb3IgYCFza2JfY2xvbmVkKHNrYilgLlxuXG4qICAgVGhlIGBza2JfemVyb2NvcHlgIGNoYW5nZTogUmVtb3ZlZCB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2hlbiBhbiBlcnJvciBvY2N1cnMgd2l0aCBvcnBoYW4gZnJhZ21lbnRzLlxuXG4qICAgVGhlIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGNoYW5nZTogTm93IGluY2x1ZGVzIHRoZSBgc2tiX3R4X2Vycm9yYCBjYWxsIGluIHRoZSBkZWZhdWx0IGNhc2UuXG5cbiogICBUaGUgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGNoYW5nZTogUmVtb3ZlZCBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgaW4gdGhlIGBvdXRgIGxhYmVsLlxuXG5gcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljLCBzbyBJJ2xsIGV4Y2x1ZGUgaXQgYXMgYSBmb2N1cyBzeW1ib2wuIFRoZSBtb3JlIHNpZ25pZmljYW50IHN5bWJvbHMgd2lsbCBiZSBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gSSdsbCBjb25zaWRlciB0aGVzZSBhcyB0aGUga2V5IHBvaW50cyB0byB0ZXN0IHdoZW4gZnV6emluZy5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTcsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjMyLjYyMjUwOTQwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDE0MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl90eF9lcnJvclwiLFxuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGBza2JfdHhfZXJyb3JgIHRvIG5vdCBwcm9jZXNzIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJ3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjMyLjcwMzUzMjg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyOTA1MDgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjMyLjcwNDE0OTAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1OTI4NDMwNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB6ZXJvY29weSBzdGF0ZSwgd2hpY2ggaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCByZXNvdXJjZSBmcmVlaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGludmFsaWQgZnJlZSBlcnJvcnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikgYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIGxlbmd0aHMsIG9yIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlbGV2YW50IGJ1ZyBjbGFzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYwZDk0OGRiMmQyODRlZDhiMTlkM2FmYzk5MTQzYmNkZDM1ODQwMWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDowMDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkxNCw3ICszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4tXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbiBcdFx0aWYgKGogXHUwMDNlIDApXG4gXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGYyZDViNWFiMzhkZWUuLjJmYzllZjZjMzIxZmYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNCw4ICs2MDUsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMTozMi43MDQxNTA1MTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5Mjg0MDQ2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IGBza2JfdHhfZXJyb3JgIGFuZCBaZXJvY29weSBTdGF0ZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIG1vZGlmeWluZyBgc2tiX3R4X2Vycm9yYCBhbmQgaXRzIHVzYWdlIGFjcm9zcyBgc2tidWZmLmNgIGFuZCBgZGF0YXBhdGguY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHk6IGFyZSB3ZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3M/IFdpdGggdGhlIGNoYW5nZXMgaW52b2x2aW5nIHplcm9jb3B5IHN0YXRlLCBteSByYWRhciBpcyB1cCBmb3IgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgbWVtb3J5IGxlYWtzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBwcmltYXJpbHkgYWJvdXQgaG93IHdlIGhhbmRsZSBjbG9uZWQgU0tCcy4gVGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGluIGBza2JfdHhfZXJyb3JgIGlzIHRoZSBhZGRpdGlvbiBvZiBgIXNrYl9jbG9uZWQoc2tiKWAsIHdoaWNoIG1lYW5zIHdlICp3b24ndCogY2xlYXIgdGhlIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgYnVmZmVycy4gIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGlzIHNoYXJlZCBieSBjbG9uZXMuIFRoZSBwYXRjaCB0aGVuIHByb2NlZWRzIHRvIGNsZWFuIHVwIGEgY2FsbCBzaXRlIHRvIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHkoKWAuIEknbSBzZWVpbmcgdGhhdCB3ZSBhcmUgYWRkaW5nIGEgY2FsbCB0byBgc2tiX3R4X2Vycm9yYCBpbiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYW5kIHdlJ3ZlIHJlbW92ZWQgYSBzaW1pbGFyIGNhbGwgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuXG5cbk5vdywgaWYgdGhlcmUgd2VyZSBhIHJlYWwgcHJvYmxlbSBoZXJlLCBpdCB3b3VsZCBtb3N0IGxpa2VseSBzaG93IHVwIGFzIGEgbWVtb3J5IGxlYWssIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBkb3VibGUtZnJlZSwgZ2l2ZW4gdGhhdCB3ZSBhcmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB6ZXJvY29weSByZXNvdXJjZXMuICBCdXQsIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlIHRocm91Z2ggdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaXQgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuXG5cblJldmlld2luZyB0aGUgY29kZSBjaGFuZ2VzIGluIGRldGFpbDpcbiogICBJbiBgc2tiX3R4X2Vycm9yYCwgaXQncyBqdXN0IHRoaXMgbmV3IGNvbmRpdGlvbmFsOiBgaWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSlgLiBCYXNpY2FsbHksIHByZXZlbnRpbmcgdGhlIGNsZWFyaW5nIG9mIHplcm9jb3B5IHN0YXRlIG9uIGNsb25lZCBTS0JzLlxuKiAgIEluIGBza2JfemVyb2NvcHlgLCB3ZSdyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yYCB3aGVuIGBza2Jfb3JwaGFuX2ZyYWdzYCBmYWlscy5cbiogICBJbiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgd2UncmUgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgb24gZXJyb3IuXG4qICAgSW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLCB3ZSdyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yKHNrYilgIG9uIGVycm9yLlxuXG5Ob25lIG9mIHRoaXMgc2NyZWFtcyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlzay4gSXQncyBhbGwgYWJvdXQgcmVzb3VyY2UgY2xlYW51cCBhbmQgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEEgYnVnIGhlcmUgKndvdWxkKiBiZSBhIG1lbW9yeSBsZWFrIG9yIGEgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUsIHdoaWNoIEtBU0FOLCBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIHdvdWxkIGFsbW9zdCBjZXJ0YWlubHkgZmxhZy5cblxuU28sIEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCBLTVNBTiBmb3IgdGhpcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZm9jdXMgc29sZWx5IG9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aXRoIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyYXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgcmlza3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlIGNhbiByZWx5IG9uIEtBU0FOIGZvciB0aGUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBjaGVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTksIk91dHB1dFRva2VucyI6Mjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjQ4LjYzMjU1ODM0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBza2JfdHhfZXJyb3IoKWAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBzb2NrZXQgYnVmZmVycyAoYHNrX2J1ZmZgKSwgYXMgdGhlIHN0YXRlIGlzIHNoYXJlZCBhbW9uZyBjbG9uZXMgdmlhIGBza2Jfc2hpbmZvKClgLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrYl90eF9lcnJvcigpYCBpbiBgc2tiX3plcm9jb3B5KClgLCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KClgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoKWAgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cCBmb3IgemVyb2NvcHkgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBsZW5ndGhzLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZWxldmFudCBidWcgY2xhc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB6ZXJvY29weSBzdGF0ZSwgd2hpY2ggaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCByZXNvdXJjZSBmcmVlaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGludmFsaWQgZnJlZSBlcnJvcnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikgYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIGxlbmd0aHMsIG9yIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlbGV2YW50IGJ1ZyBjbGFzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 09:30:59 +0000 UTC FinishedAt: 2026-08-22 10:01:50 +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": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_tx_error", "skb_zerocopy", "ovs_dp_process_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgbGVuZ3Rocywgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjBkOTQ4ZGIyZDI4NGVkOGIxOWQzYWZjOTkxNDNiY2RkMzU4NDAxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDEwOjAwOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbiAgKlxuICAqXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cbiAgKlx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cbiYjNDM7ICpcbiYjNDM7ICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbiYjNDM7ICpcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cbiAgKi9cbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChza2IpIHtcbiYjNDM7XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiAhc2tiX2Nsb25lZChza2IpKSB7XG4gXHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFx0XHRza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTtcbiBcdH1cbkBAIC0zOTE0LDcgJiM0MzszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTtcbiBcbiBcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4gXHRcdGlmIChqIFx1MDAzZSAwKVxuIFx0XHRcdHB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGZyb20tXHUwMDNlaGVhZCkpO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5pbmRleCBmMmQ1YjVhYjM4ZGVlLi4yZmM5ZWY2YzMyMWZmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5AQCAtMjg1LDYgJiM0MzsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbiBcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNCw4ICYjNDM7NjA1LDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXHUwMDNlcG9ydGlkKTtcbiBcdHVzZXJfc2tiID0gTlVMTDtcbiBvdXQ6XG4tXHRpZiAoZXJyKVxuLVx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdGNvbnN1bWVfc2tiKHVzZXJfc2tiKTtcbiBcdGNvbnN1bWVfc2tiKG5za2IpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjBkOTQ4ZGIyZDI4NGVkOGIxOWQzYWZjOTkxNDNiY2RkMzU4NDAxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjAwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBkNDM4MmI2OGQ1NmUwLi5iOTU0MTMyOWYxYTcyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMTQxNywxMCAmIzQzOzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7CiAgKgogICoJUmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuCiAgKglza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLgomIzQzOyAqCiYjNDM7ICoJRG9lcyBub3RoaW5nIGZvciBhIGNsb25lZCBza2I6IHRoZSB6ZXJvY29weSBzdGF0ZSBsaXZlcyBpbgomIzQzOyAqCXNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS4KICAqLwogdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2tiKSB7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyAhc2tiX2Nsb25lZChza2IpKSB7CiAJCXNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpOwogCQlza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTsKIAl9CkBAIC0zOTE0LDcgJiM0MzszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCXNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7CiAKIAlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHsKLQkJc2tiX3R4X2Vycm9yKGZyb20pOwogCQlpZiAoaiAmZ3Q7IDApCiAJCQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBmMmQ1YjVhYjM4ZGVlLi4yZmM5ZWY2YzMyMWZmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMjg1LDYgJiM0MzsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSkKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTYwNCw4ICYjNDM7NjA1LDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJZXJyID0gZ2VubG1zZ191bmljYXN0KG92c19kcF9nZXRfbmV0KGRwKSwgdXNlcl9za2IsIHVwY2FsbF9pbmZvLSZndDtwb3J0aWQpOwogCXVzZXJfc2tiID0gTlVMTDsKIG91dDoKLQlpZiAoZXJyKQotCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAljb25zdW1lX3NrYih1c2VyX3NrYik7CiAJY29uc3VtZV9za2IobnNrYik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBTS0IgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIbW0sIHRoaXMgaXMgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBhcmVhcy4mIzM0OyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gaG93IGBza2JfdHhfZXJyb3JgIGlzIHVzZWQgYW5kIGhhbmRsZWQsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBob3cgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGVuIGl0JiMzOTtzIGNhbGxlZCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCAoYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCkuCgpUaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGEgbmV3IGAhc2tiX2Nsb25lZChza2IpYCBjaGVjayBpcyBiZWluZyBhZGRlZCB3aXRoaW4gYHNrYl90eF9lcnJvcmAgaXRzZWxmLiBBbHNvLCB0aGV5JiMzOTtyZSByZW1vdmluZyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgZnJvbSBgc2tiX3plcm9jb3B5YCBidXQgdGhlbiBhZGRpbmcgaXQgd2l0aGluIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGgmIzM5O3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdGhlbiByZW1vdmluZyBpdCBmcm9tIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiB0aGUgc2FtZSBmaWxlLgoKTXkgZmlyc3QgcmVmbGV4IGlzIHRvIHRoaW5rLCAmIzM0O1doeSB0aGVzZSBjaGFuZ2VzPyYjMzQ7LiBgc2tiX3R4X2Vycm9yYCwgYmVpbmcgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIG1lYW5zIGFueSBjaGFuZ2UgaGVyZSBuZWVkcyBjYXJlZnVsIHNjcnV0aW55LiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYmVpbmcgcGFydCBvZiBPcGVuIHZTd2l0Y2gsIGluZGljYXRlcyB0aGlzIHBhdGNoIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciBPcGVuIHZTd2l0Y2ggb3BlcmF0aW9uLiBUaGlzIGlzIGxpa2VseSBhbiBlcnJvciByZWNvdmVyeSBvciBoYW5kbGluZyBpc3N1ZSB0aGF0IHJlcXVpcmVzIHRoZSBkYXRhcGF0aCB0byBiZSBjaGFuZ2VkLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zIGJldHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSYjMzk7cmUgcmVhY2hhYmxlIGFuZCBob3cgdGhleSYjMzk7cmUgY29uZmlndXJlZC4gVGltZSB0byBnbyBkaWcgdGhyb3VnaCB0aGUgY29kZWJhc2UuIEkga25vdyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpcyBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGFuZCB0aGF0IHRoZSBgQ09ORklHX09QRU5WU1dJVENIYCBjb25maWcgb3B0aW9uIGxpa2VseSBjb250cm9scyBpdHMgaW5jbHVzaW9uLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhpbmcuCgpJJiMzOTttIHRoaW5raW5nIEkgbmVlZCBhIGRldGFpbGVkIHRyYWNlIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGlzc3VlIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb24gb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgd2lsbCBuZWVkIHRvIHVzZSBhIGdyZXBwZXIgdG8gbG9vayBmb3IgdGhlIHVzZXMgYW5kIGxvY2F0aW9ucyBvZiB0aGVzZSBjYWxscy4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfdHhfZXJyb3ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0My1cdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo0NDQ6XHRza2JfdHhfZXJyb3Ioc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYy00NDUtXHRrZnJlZV9za2JfbGlzdChza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExNjItXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuZHJpdmVycy9uZXQvdHVuLmM6MTE2MzpcdHNrYl90eF9lcnJvcihza2IpO1xuZHJpdmVycy9uZXQvdHVuLmMtMTE2NC1cdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzM4PXZvaWQgc2tiX2R1bXAoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZnVsbF9wa3QpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzM5OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE0MTI9RVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQxNC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MTU6ICpcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3Jcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTYtICpcdEBza2I6IGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCBhbiBlcnJvclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjMtICovXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMwLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xubmV0L2NvcmUvc2tidWZmLmMtMTQzMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcxMj1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MTAtXHRpZiAoIXNrYikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MTE6XHRcdHNrYl90eF9lcnJvcihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MTItXHRcdGdvdG8gbmxtc2dfZmFpbHVyZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxOS1cdGlmICghbmxoKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgyMDpcdFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgyMS1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzAtbmxhX3B1dF9mYWlsdXJlOlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzE6XHRza2JfdHhfZXJyb3IoZW50c2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTcyLVx0a2ZyZWVfc2tiKHNrYik7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4Ny1cdFx0ZGVmYXVsdDpcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4ODpcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTI1PWludCBza2JfbWV0YV9pbnZhbGlkX2N0eCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1MzU6U0VDKFwmIzM0O2ZlbnRyeS9za2JfdHhfZXJyb3JcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTM2LV9fZmFpbHVyZSBfX21zZyhcJiMzNDttdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1Mzc9aW50IEJQRl9QUk9HKHNrYl9pbnZhbGlkX2N0eF9mZW50cnksIHZvaWQgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTU0NzpTRUMoXCYjMzQ7ZmV4aXQvc2tiX3R4X2Vycm9yXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTU0OC1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7bXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcJiMzNDspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwNQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHNrYl90eF9lcnJvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYHNrYl90eF9lcnJvcmAgYW5kIGl0cyBhcHBsaWNhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGJvdGggYGRhdGFwYXRoLmNgIGluIE9wZW4gdlN3aXRjaCBhbmQgY29yZSBza2J1ZmYgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIGNlcnRhaW5seSwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb21tb24gbmV0d29yayBvcGVyYXRpb25zLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIHVzZWQgYWNyb3NzIE9wZW4gdlN3aXRjaCwgdGhlIFRVTiBkcml2ZXIsIE9wZW5WUE4sIGFuZCBOZXRmaWx0ZXIgdGVsbHMgbWUgdGhpcyBpcyBhIHdlbGwtdHJhdmVsZWQgcGllY2Ugb2YgY29kZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGAhc2tiX2Nsb25lZChza2IpYCBjaGVjayB3aXRoaW4gYHNrYl90eF9lcnJvcmAgaXRzZWxmLiBUaGF0IG1ha2VzIGltbWVkaWF0ZSBzZW5zZTsgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggY2xvbmVkIHNrYnVmZnMuIE5vdyBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBuZWNlc3NhcnkuIFdoYXQmIzM5O3MgdGhlIHNwZWNpZmljIHNjZW5hcmlvIHRoYXQgdGhpcyBndWFyZHMgYWdhaW5zdD8gVGhlbiBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlbW92aW5nIHRoZSBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxsIGZyb20gYHNrYl96ZXJvY29weWAsIGluIGBza2J1ZmYuY2AuIEFuZCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcC4gQW5kIGxhc3RseSwgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIHRlbGxzIG1lIHRoZSBPcGVuIHZTd2l0Y2ggZGF0YSBwYXRoIGlzIGV4cGxpY2l0bHkgaW52b2x2ZWQgaW4gdGhpcyBjaGFuZ2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIGBza2JfemVyb2NvcHlgIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3plcm9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE1LVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTktXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1MDogKiB3aGljaCBjYWxscyB4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlLlxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTEtICovXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTUzLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNTgtXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1OTp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfY29tcGxldGUoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTExNzI9c3RhdGljIGludCB4ZW52aWZfdHhfc3VibWl0KHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlKVxuLS1cbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjEwLVx0XHRcdHN0cnVjdCBza19idWZmICpuc2tiID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdDtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlx0XHRcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMi1cdFx0XHRpZiAoeGVudmlmX2hhbmRsZV9mcmFnX2xpc3QocXVldWUsIHNrYikpIHtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cdFx0XHRcdFx0XHQgICBcJiMzNDtOb3QgZW5vdWdoIG1lbW9yeSB0byBjb25zb2xpZGF0ZSBmcmFnX2xpc3QhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjE2Olx0XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTctXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzMy1cdFx0XHRpZiAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnKVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XHRcdFx0XHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIzNS1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTI3Mi1cdFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2VkZXN0cnVjdG9yX2FyZykge1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyNzM6XHRcdFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfemVyb2NvcHlfc2VudCYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jPTEyODM9c3RhdGljIHZvaWQgeGVudmlmX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXHRcdHF1ZXVlLVx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwmIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEzMTU6XHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMzE2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVx0XHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzctXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzktXHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyOTQ6dW5zaWduZWQgaW50IHNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI5NTppbnQgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyOTYtXHRcdCBpbnQgbGVuLCBpbnQgaGxlbik7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTgxNT1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfcmVhbGxvYyk7XG5uZXQvY29yZS9za2J1ZmYuYy0xODE2LVxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0xODE4LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTg3My1cdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cdTAwM2VlZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX1pFUk9DT1BZIHx8XG5uZXQvY29yZS9za2J1ZmYuYzoxODc0Olx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xubmV0L2NvcmUvc2tidWZmLmMtMTg3NS1cdFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTE1OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTUyLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjE5NTM6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTk2Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3NrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxubmV0L2NvcmUvc2tidWZmLmM6MTk2NTpzdGF0aWMgaW50IHNrYl96ZXJvY29weV9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKm9yaWcsXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY2LVx0XHRcdCAgICAgIGdmcF90IGdmcF9tYXNrKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjg9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3Moc2tiLCBnZnBfbWFzaykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XHRcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobiwgc2tiLCBnZnBfbWFzaykpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4MzE9RVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzgzMy0gLyoqXG5uZXQvY29yZS9za2J1ZmYuYzozODM0OiAqXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXG5uZXQvY29yZS9za2J1ZmYuYy0zODM1LSAqXHRAZnJvbTogc291cmNlIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzctICpcdENhbGN1bGF0ZXMgdGhlIGFtb3VudCBvZiBsaW5lYXIgaGVhZHJvb20gbmVlZGVkIGluIHRoZSAmIzM5O3RvJiMzOTsgc2tiIHBhc3NlZFxubmV0L2NvcmUvc2tidWZmLmM6MzgzODogKlx0aW50byBza2JfemVyb2NvcHkoKS5cbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXG5uZXQvY29yZS9za2J1ZmYuYz0zODQwPXVuc2lnbmVkIGludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg0MTpza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTctfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LVxubmV0L2NvcmUvc2tidWZmLmMtMzg2MC0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcdHNrYl96ZXJvY29weSAtIFplcm8gY29weSBza2IgdG8gc2tiXG5uZXQvY29yZS9za2J1ZmYuYy0zODYyLSAqXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjktICpcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcdFRoZSBgaGxlbmAgYXMgY2FsY3VsYXRlZCBieSBza2JfemVyb2NvcHlfaGVhZGxlbigpIHNwZWNpZmllcyB0aGVcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NzEtICpcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODc5PWludFxubmV0L2NvcmUvc2tidWZmLmM6Mzg4MDpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG5uZXQvY29yZS9za2J1ZmYuYy0zODgxLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVx0fVxubmV0L2NvcmUvc2tidWZmLmM6MzkyNDpcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0zOTI1LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDUtfVxubmV0L2NvcmUvc2tidWZmLmM6Mzk0NjpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzk0Ny1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00MjQ0PXZvaWQgc2tiX3NwbGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IxLCBjb25zdCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXHRza2Jfc2hpbmZvKHNrYjEpLVx1MDAzZWZsYWdzIHw9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgemNfZmxhZ3M7XG5uZXQvY29yZS9za2J1ZmYuYzo0MjUyOlx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XG5uZXQvY29yZS9za2J1ZmYuYy00MjUzLVx0aWYgKGxlbiBcdTAwM2MgcG9zKVx0LyogU3BsaXQgbGluZSBpcyBpbnNpZGUgaGVhZGVyLiAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MDEzLVxubmV0L2NvcmUvc2tidWZmLmM6NTAxNDpcdFx0aWYgKHNrYl96ZXJvY29weV9jbG9uZShuc2tiLCBmcmFnX3NrYiwgR0ZQX0FUT01JQykpXG5uZXQvY29yZS9za2J1ZmYuYy01MDE1LVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTktXHRcdFx0XHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMjA6XHRcdFx0XHQgICAgc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGxpc3Rfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNTAyMS1cdFx0XHRcdFx0XHQgICAgICAgR0ZQX0FUT01JQykpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI2OS1cdFx0fSBlbHNlIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEyNzA6XHRcdFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNzEtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTEzMzktXG5uZXQvaXB2NC90Y3AuYzoxMzQwOlx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzaywgc2tiLCBtc2csIGNvcHksIHVhcmcsXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVx0XHRcdFx0XHRcdCAgICAgICBiaW5kaW5nKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ1MT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cdFx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxODM0Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzNS1cdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc3Ni1cdFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXHUwMDNlY29weV9yYW5nZSkpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo3Nzc6XHRcdGhsZW4gPSBza2JfemVyb2NvcHlfaGVhZGxlbihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzgtXHRcdGhsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGhsZW4sIGRhdGFfbGVuKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2MC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTYxOlx0XHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2Mi1cdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTI9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAxLVx0aWYgKGRwLVx1MDAzZXVzZXJfZmVhdHVyZXMgXHUwMDI2IE9WU19EUF9GX1VOQUxJR05FRClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMjpcdFx0aGxlbiA9IG1pbihza2JfemVyb2NvcHlfaGVhZGxlbihza2IpLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAzLVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OC1cdC8qIE9ubHkgcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgaGVhZGVyLCBwYWNrZXQgZGF0YSBpcyBhZGRlZFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NTg5Olx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU5MC1cdGlmICghKG5sYSA9IG5sYV9yZXNlcnZlKHVzZXJfc2tiLCBPVlNfUEFDS0VUX0FUVFJfUEFDS0VULCAwKSkpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTUtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1OTY6XHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTctXHRpZiAoZXJyKVxuLS1cbm5ldC94ZHAveHNrLmM9OTg4PXN0YXRpYyBpbnQgeHNrX3NrYl9tZXRhZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpidWZmZXIsXG4tLVxubmV0L3hkcC94c2suYy0xMDMyLVxubmV0L3hkcC94c2suYzoxMDMzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYl96ZXJvY29weShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy0xMDM0LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG4tLVxubmV0L3hkcC94c2suYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTExNi1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTExNzpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTExMTgtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NTQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIGhvbmVzIGluIG9uIHNvbWUga2V5IGFyZWFzLiBJdCYjMzk7cyB0b3VjaGluZyBgc2tiX3R4X2Vycm9yYCwgd2hpY2ggSSBrbm93IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBzZWVpbmcgaXQgbGlua2VkIHdpdGggYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAod2hpY2gsIGFzIEkgcmVjYWxsLCB1dGlsaXplcyBgc2tiX3plcm9jb3B5YCksIGFuZCB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXRzZWxmLCBteSBpbnRlcm5hbCBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBUaGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgYXJlIGluIGJvdGggY29yZSBuZXR3b3JraW5nIChgbmV0L2NvcmUvc2tidWZmLmNgKSBhbmQgT3BlbiB2U3dpdGNoIChgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgKSBmdXJ0aGVyIHN1Z2dlc3RzIHBvdGVudGlhbCBpbnRlcnBsYXkgYW5kIHZ1bG5lcmFiaWxpdGllcy4KCkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAg4oCTIHRob3NlIGFyZSB0aGUgY2xlYXIgdGFyZ2V0cy4gSG1tLCB3YWl0IGEgbWludXRlLCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4uLiBBaCwgeWVzLCBpdCAqaXMqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCBoYXMgbGltaXRlZCBzY29wZSBhbmQgaXNuJiMzOTt0IGRpcmVjdGx5IGV4cG9zZWQgZXh0ZXJuYWxseS4gT2theSwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBhcyBtdWNoLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgcGF0aHMgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIEJ1dCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpcyBub3Qgc3RhdGljLCBpdCYjMzk7cyBwdWJsaWMgKG9yIGF0IGxlYXN0IGV4dGVybmFsbHkgYWNjZXNzaWJsZSksIHdoaWNoIGlzIGdyZWF0LiBBbmQsIG9mIGNvdXJzZSwgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGFyZSBib3RoIGV4cG9ydGVkLCBzbyB0aGV5JiMzOTtyZSBlYXNpbHkgYWNjZXNzaWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODM9c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTE3LVx0XHRcdGNsb25lLVx1MDAzZXJlY2lyY19pZCA9IHJlY2lyY19pZDtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTUxODpcdFx0XHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBjbG9uZSk7XG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1MTktXHRcdH1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NDk9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXG4tLVxubmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYy0xNTY3LVx0XHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1Njg6XHRcdFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwga2V5KTtcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2OS1cdH0gd2hpbGUgKCFhY3Rpb25fZmlmb19pc19lbXB0eShmaWZvKSk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrLiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjQ2LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMTg9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF92cG9ydF9nZW5sX2ZhbWlseTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oLTMxOS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5oOjMyMDp2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMjEtdm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jPTQyMj1pbnQgb3ZzX3Zwb3J0X3JlY2VpdmUoc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYy00NDctXHR9XG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo0NDg6XHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBcdTAwMjZrZXkpO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ5LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIE9WUyBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjb2RlIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBzb21lIG9mIHRoZSBrZXkgZnVuY3Rpb25zLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBpcyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIEludGVyZXN0aW5nLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzcGVjaWZpYyBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFNpbWlsYXJseSwgSSBzZWUgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemVyb2NvcHlgIGFyZSBhbHNvIG5vbi1zdGF0aWMuIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdHJhY2luZyBleGVjdXRpb24gcGF0aHMuCgpOb3csIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgc28gY3J1Y2lhbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZmVhdHVyZXMgaGF2ZSBiZWVuIGVuYWJsZWQuIEkgcmVhbGl6ZSBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgd2hpY2ggd291bGQgbWVhbiB0aGF0IE9wZW4gdlN3aXRjaCByZWxhdGVkIGNoYW5nZXMgaGF2ZSBiZWVuIGVuYWJsZWQuCgpUbyBjb25maXJtIHRoYXQgT3BlbiB2U3dpdGNoIGNoYW5nZXMgaGF2ZSBiZWVuIGVuYWJsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPUEVOVlNXSVRDSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01LVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlLiBJdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgZGVmaW5lZCB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIHBpZWNlLiBNeSBpbml0aWFsIHRob3VnaHQgdGhhdCBgT1BFTlZTV0lUQ0hgIHdhcyByZXF1aXJlZCB0byB1c2UgdGhlIG9wZW52c3dpdGNoIHBhcnQgb2YgdGhpcyBjb2RlIGxvb2tzIHRvIGJlIGluY29tcGxldGUuIEkgbmVlZCB0byBkaWcgZGVlcGVyLgoKQSBxdWljayBzY2FuIHNob3dzIHRoZXNlIGFyZSAqYWxzbyogdXNlZCBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY2AuIEFoIGhhISBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBTaW5jZSBib3RoIGZ1bmN0aW9ucyBzaG93IHVwIGluIHRoZSBzYW1lIHBsYWNlIHR3aWNlIEkgc2hvdWxkIGV4YW1pbmUgYG5mbmV0bGlua19xdWV1ZWAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBuZm5ldGxpbmtfcXVldWVgIHdpdGhpbiBgbmV0L25ldGZpbHRlci9gLiBIb3BlZnVsbHksIHRoYXQgd2lsbCByZXZlYWwgdGhlIGZ1bGwgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTcKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIHdpdGggU0tCcyAoc29ja2V0IGJ1ZmZlcikgYW5kIG9wZW52c3dpdGNoLiBUaGUgcGxhbiBpcyB0byBhZGQgYE9QRU5WU1dJVENIYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4KCkZpcnN0LCBJIGNvbmZpcm1lZCB0aGF0IGBza2JfdHhfZXJyb3JgIGlzIHJlYWNoZWQsIHNwZWNpZmljYWxseSBmcm9tIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIHdoZW4gYG92c19mbG93X3RibF9sb29rdXBfc3RhdHNgIHJldHVybnMgTlVMTCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgY2FzZS4gSSBhbHNvIGNvbmZpcm1lZCBgc2tiX3plcm9jb3B5YCBpcyBjYWxsZWQgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgd2l0aGluIGBkYXRhcGF0aC5jYCBhbmQgYG5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlYCB3aXRoaW4gYG5mbmV0bGlua19xdWV1ZS5jYC4KClRoZSBnaXN0IG9mIHRoZSBwYXRjaCBpcyBhYm91dCBtb3ZpbmcgdGhlIGBza2JfdHhfZXJyb3JgIGNhbGwuIEl0IHJlbW92ZXMgYSBjYWxsIHRvIGBza2JfdHhfZXJyb3IoZnJvbSlgIGZyb20gd2l0aGluIGBza2JfemVyb2NvcHlgIGFuZCBhZGRzIGl0IHRvIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBJdCBhbHNvIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIHRvIGNoZWNrIGAhc2tiX2Nsb25lZChza2IpYC4gU28sIHRoZSBgc2tiX3R4X2Vycm9yYCBub3cgb25seSBvY2N1cnMgd2hlbiBgc2tiYCBpcyBub3QgY2xvbmVkLCB3aGljaCBpcyBhIHNlbnNpYmxlIGFkZGl0aW9uLgoKVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSByZWFjaCBhbmQgcG90ZW50aWFsIGltcGFjdC4KCkkgcmV2aWV3ZWQgdGhlIGNvZGUgY2hhbmdlczoKCiogICBUaGUgYHNrYl90eF9lcnJvcmAgY2hhbmdlOiBBZGRlZCBhIGNoZWNrIGZvciBgIXNrYl9jbG9uZWQoc2tiKWAuCgoqICAgVGhlIGBza2JfemVyb2NvcHlgIGNoYW5nZTogUmVtb3ZlZCB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2hlbiBhbiBlcnJvciBvY2N1cnMgd2l0aCBvcnBoYW4gZnJhZ21lbnRzLgoKKiAgIFRoZSBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBjaGFuZ2U6IE5vdyBpbmNsdWRlcyB0aGUgYHNrYl90eF9lcnJvcmAgY2FsbCBpbiB0aGUgZGVmYXVsdCBjYXNlLgoKKiAgIFRoZSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgY2hhbmdlOiBSZW1vdmVkIGEgY2FsbCB0byBgc2tiX3R4X2Vycm9yYCBpbiB0aGUgYG91dGAgbGFiZWwuCgpgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljLCBzbyBJJiMzOTtsbCBleGNsdWRlIGl0IGFzIGEgZm9jdXMgc3ltYm9sLiBUaGUgbW9yZSBzaWduaWZpY2FudCBzeW1ib2xzIHdpbGwgYmUgYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEkmIzM5O2xsIGNvbnNpZGVyIHRoZXNlIGFzIHRoZSBrZXkgcG9pbnRzIHRvIHRlc3Qgd2hlbiBmdXp6aW5nLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICAgJiMzNDtza2JfemVyb2NvcHkmIzM0OywKICAgICYjMzQ7b3ZzX2RwX3Byb2Nlc3NfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yKClgIHRvIGF2b2lkIGNsZWFyaW5nIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgc29ja2V0IGJ1ZmZlcnMgKGBza19idWZmYCksIGFzIHRoZSBzdGF0ZSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzIHZpYSBgc2tiX3NoaW5mbygpYC4gSXQgYWxzbyBhZGp1c3RzIHRoZSBjYWxsIHNpdGVzIG9mIGBza2JfdHhfZXJyb3IoKWAgaW4gYHNrYl96ZXJvY29weSgpYCwgYG92c19kcF9wcm9jZXNzX3BhY2tldCgpYCwgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KClgIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc291cmNlIGNsZWFudXAgZm9yIHplcm9jb3B5IG9wZXJhdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB6ZXJvY29weSBzdGF0ZSwgd2hpY2ggaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCByZXNvdXJjZSBmcmVlaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGludmFsaWQgZnJlZSBlcnJvcnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikgYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBsZW5ndGhzLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZWxldmFudCBidWcgY2xhc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjBkOTQ4ZGIyZDI4NGVkOGIxOWQzYWZjOTkxNDNiY2RkMzU4NDAxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEwOjAwOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBkNDM4MmI2OGQ1NmUwLi5iOTU0MTMyOWYxYTcyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMTQxNywxMCAmIzQzOzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7CiAgKgogICoJUmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuCiAgKglza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLgomIzQzOyAqCiYjNDM7ICoJRG9lcyBub3RoaW5nIGZvciBhIGNsb25lZCBza2I6IHRoZSB6ZXJvY29weSBzdGF0ZSBsaXZlcyBpbgomIzQzOyAqCXNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS4KICAqLwogdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2tiKSB7CiYjNDM7CWlmIChza2IgJmFtcDsmYW1wOyAhc2tiX2Nsb25lZChza2IpKSB7CiAJCXNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpOwogCQlza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKTsKIAl9CkBAIC0zOTE0LDcgJiM0MzszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCXNrYl9sZW5fYWRkKHRvLCBsZW4gJiM0MzsgcGxlbik7CiAKIAlpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHsKLQkJc2tiX3R4X2Vycm9yKGZyb20pOwogCQlpZiAoaiAmZ3Q7IDApCiAJCQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLSZndDtoZWFkKSk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBmMmQ1YjVhYjM4ZGVlLi4yZmM5ZWY2YzMyMWZmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtMjg1LDYgJiM0MzsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSkKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKJiM0MzsJCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTYwNCw4ICYjNDM7NjA1LDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJZXJyID0gZ2VubG1zZ191bmljYXN0KG92c19kcF9nZXRfbmV0KGRwKSwgdXNlcl9za2IsIHVwY2FsbF9pbmZvLSZndDtwb3J0aWQpOwogCXVzZXJfc2tiID0gTlVMTDsKIG91dDoKLQlpZiAoZXJyKQotCQlza2JfdHhfZXJyb3Ioc2tiKTsKIAljb25zdW1lX3NrYih1c2VyX3NrYik7CiAJY29uc3VtZV9za2IobnNrYik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTkKCQkJCQkJCW91dHB1dDogMjc2CgkJCQkJCQl0aG91Z2h0czogMTAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogYHNrYl90eF9lcnJvcmAgYW5kIFplcm9jb3B5IFN0YXRlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYHNrYl90eF9lcnJvcmAgYW5kIGl0cyB1c2FnZSBhY3Jvc3MgYHNrYnVmZi5jYCBhbmQgYGRhdGFwYXRoLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5OiBhcmUgd2UgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzPyBXaXRoIHRoZSBjaGFuZ2VzIGludm9sdmluZyB6ZXJvY29weSBzdGF0ZSwgbXkgcmFkYXIgaXMgdXAgZm9yIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG9yIG1lbW9yeSBsZWFrcyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHByaW1hcmlseSBhYm91dCBob3cgd2UgaGFuZGxlIGNsb25lZCBTS0JzLiBUaGUgcHJpbWFyeSBtb2RpZmljYXRpb24gaW4gYHNrYl90eF9lcnJvcmAgaXMgdGhlIGFkZGl0aW9uIG9mIGAhc2tiX2Nsb25lZChza2IpYCwgd2hpY2ggbWVhbnMgd2UgKndvbiYjMzk7dCogY2xlYXIgdGhlIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgYnVmZmVycy4gIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGlzIHNoYXJlZCBieSBjbG9uZXMuIFRoZSBwYXRjaCB0aGVuIHByb2NlZWRzIHRvIGNsZWFuIHVwIGEgY2FsbCBzaXRlIHRvIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHkoKWAuIEkmIzM5O20gc2VlaW5nIHRoYXQgd2UgYXJlIGFkZGluZyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgaW4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCB3ZSYjMzk7dmUgcmVtb3ZlZCBhIHNpbWlsYXIgY2FsbCBmcm9tIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YC4KCk5vdywgaWYgdGhlcmUgd2VyZSBhIHJlYWwgcHJvYmxlbSBoZXJlLCBpdCB3b3VsZCBtb3N0IGxpa2VseSBzaG93IHVwIGFzIGEgbWVtb3J5IGxlYWssIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBkb3VibGUtZnJlZSwgZ2l2ZW4gdGhhdCB3ZSBhcmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB6ZXJvY29weSByZXNvdXJjZXMuICBCdXQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWsgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSB0aHJvdWdoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIGl0IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LgoKUmV2aWV3aW5nIHRoZSBjb2RlIGNoYW5nZXMgaW4gZGV0YWlsOgoqICAgSW4gYHNrYl90eF9lcnJvcmAsIGl0JiMzOTtzIGp1c3QgdGhpcyBuZXcgY29uZGl0aW9uYWw6IGBpZiAoc2tiICZhbXA7JmFtcDsgIXNrYl9jbG9uZWQoc2tiKSlgLiBCYXNpY2FsbHksIHByZXZlbnRpbmcgdGhlIGNsZWFyaW5nIG9mIHplcm9jb3B5IHN0YXRlIG9uIGNsb25lZCBTS0JzLgoqICAgSW4gYHNrYl96ZXJvY29weWAsIHdlJiMzOTtyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yYCB3aGVuIGBza2Jfb3JwaGFuX2ZyYWdzYCBmYWlscy4KKiAgIEluIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCB3ZSYjMzk7cmUgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgb24gZXJyb3IuCiogICBJbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAsIHdlJiMzOTtyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yKHNrYilgIG9uIGVycm9yLgoKTm9uZSBvZiB0aGlzIHNjcmVhbXMgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2suIEl0JiMzOTtzIGFsbCBhYm91dCByZXNvdXJjZSBjbGVhbnVwIGFuZCByZWZlcmVuY2UgbWFuYWdlbWVudC4gQSBidWcgaGVyZSAqd291bGQqIGJlIGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSwgd2hpY2ggS0FTQU4sIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMgd291bGQgYWxtb3N0IGNlcnRhaW5seSBmbGFnLgoKU28sIEkgZG9uJiMzOTt0IHRoaW5rIHdlIG5lZWQgS01TQU4gZm9yIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQgYW5kIGZvY3VzIHNvbGVseSBvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgd2l0aCBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBhbHRlcmF0aW9uIG9mIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhIHdheSB0aGF0IHJpc2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBXZSBjYW4gcmVseSBvbiBLQVNBTiBmb3IgdGhlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgY2hlY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgbGVuZ3Rocywgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgbGVuZ3Rocywgb3IgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChpbmZvLWxlYWtzKSBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBLQVNBTiBpcyBmdWxseSBjYXBhYmxlIG9mIGRldGVjdGluZyB0aGUgcmVsZXZhbnQgYnVnIGNsYXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjI2LjI1Mjk1OTEyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzc5NjQyMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBza2JfdHhfZXJyb3IoKWAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBzb2NrZXQgYnVmZmVycyAoYHNrX2J1ZmZgKSwgYXMgdGhlIHN0YXRlIGlzIHNoYXJlZCBhbW9uZyBjbG9uZXMgdmlhIGBza2Jfc2hpbmZvKClgLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrYl90eF9lcnJvcigpYCBpbiBgc2tiX3plcm9jb3B5KClgLCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KClgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoKWAgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cCBmb3IgemVyb2NvcHkgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBsZW5ndGhzLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZWxldmFudCBidWcgY2xhc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGBza2JfdHhfZXJyb3JgIHRvIG5vdCBwcm9jZXNzIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDoyNi4yNTI5NjQ2MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMDM5NDIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYwZDk0OGRiMmQyODRlZDhiMTlkM2FmYzk5MTQzYmNkZDM1ODQwMWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTA6MDA6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xcbiAgKlxcbiAgKlxcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxcbiAgKlxcdHNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuXFxuKyAqXFxuKyAqXFx0RG9lcyBub3RoaW5nIGZvciBhIGNsb25lZCBza2I6IHRoZSB6ZXJvY29weSBzdGF0ZSBsaXZlcyBpblxcbisgKlxcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cXG4gICovXFxuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKHNrYikge1xcbitcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2ICFza2JfY2xvbmVkKHNrYikpIHtcXG4gXFx0XFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuIFxcdFxcdHNrYl96Y29weV9jbGVhcihza2IsIHRydWUpO1xcbiBcXHR9XFxuQEAgLTM5MTQsNyArMzkxNyw2IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG4gXFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XFxuLVxcdFxcdHNrYl90eF9lcnJvcihmcm9tKTtcXG4gXFx0XFx0aWYgKGogXFx1MDAzZSAwKVxcbiBcXHRcXHRcXHRwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShmcm9tLVxcdTAwM2VoZWFkKSk7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggZjJkNWI1YWIzOGRlZS4uMmZjOWVmNmMzMjFmZiAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI4NSw2ICsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNjA0LDggKzYwNSw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXFx1MDAzZXBvcnRpZCk7XFxuIFxcdHVzZXJfc2tiID0gTlVMTDtcXG4gb3V0Olxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG4gXFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xcbiBcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjI2LjY1NDI2ODkzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MDQ5MjU4NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJ3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYwZDk0OGRiMmQyODRlZDhiMTlkM2FmYzk5MTQzYmNkZDM1ODQwMWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDowMDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkxNCw3ICszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4tXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbiBcdFx0aWYgKGogXHUwMDNlIDApXG4gXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGYyZDViNWFiMzhkZWUuLjJmYzllZjZjMzIxZmYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNCw4ICs2MDUsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDoyNi42NTQyNzA1NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODA1NzUzOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFNLQiBFcnJvciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIbW0sIHRoaXMgaXMgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBhcmVhcy5cIiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBob3cgYHNrYl90eF9lcnJvcmAgaXMgdXNlZCBhbmQgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGhvdyBpdCdzIGNhbGxlZCBhbmQgd2hlbiBpdCdzIGNhbGxlZCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCAoYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCkuXG5cblRoZSBrZXkgY2hhbmdlcyBqdW1wIG91dDogYSBuZXcgYCFza2JfY2xvbmVkKHNrYilgIGNoZWNrIGlzIGJlaW5nIGFkZGVkIHdpdGhpbiBgc2tiX3R4X2Vycm9yYCBpdHNlbGYuIEFsc28sIHRoZXkncmUgcmVtb3ZpbmcgYSBjYWxsIHRvIGBza2JfdHhfZXJyb3JgIGZyb20gYHNrYl96ZXJvY29weWAgYnV0IHRoZW4gYWRkaW5nIGl0IHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoJ3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0aGVuIHJlbW92aW5nIGl0IGZyb20gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGluIHRoZSBzYW1lIGZpbGUuXG5cbk15IGZpcnN0IHJlZmxleCBpcyB0byB0aGluaywgXCJXaHkgdGhlc2UgY2hhbmdlcz9cIi4gYHNrYl90eF9lcnJvcmAsIGJlaW5nIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBtZWFucyBhbnkgY2hhbmdlIGhlcmUgbmVlZHMgY2FyZWZ1bCBzY3J1dGlueS4gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGJlaW5nIHBhcnQgb2YgT3BlbiB2U3dpdGNoLCBpbmRpY2F0ZXMgdGhpcyBwYXRjaCBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3IgT3BlbiB2U3dpdGNoIG9wZXJhdGlvbi4gVGhpcyBpcyBsaWtlbHkgYW4gZXJyb3IgcmVjb3Zlcnkgb3IgaGFuZGxpbmcgaXNzdWUgdGhhdCByZXF1aXJlcyB0aGUgZGF0YXBhdGggdG8gYmUgY2hhbmdlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zIGJldHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSdyZSByZWFjaGFibGUgYW5kIGhvdyB0aGV5J3JlIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZ28gZGlnIHRocm91Z2ggdGhlIGNvZGViYXNlLiBJIGtub3cgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgaW4gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCBhbmQgdGhhdCB0aGUgYENPTkZJR19PUEVOVlNXSVRDSGAgY29uZmlnIG9wdGlvbiBsaWtlbHkgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gVGhpcyBtZWFucyBpdCdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhpbmcuXG5cbkknbSB0aGlua2luZyBJIG5lZWQgYSBkZXRhaWxlZCB0cmFjZSB0byBzZWUgaWYgdGhpcyBpcyBhbiBpc3N1ZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHdpbGwgbmVlZCB0byB1c2UgYSBncmVwcGVyIHRvIGxvb2sgZm9yIHRoZSB1c2VzIGFuZCBsb2NhdGlvbnMgb2YgdGhlc2UgY2FsbHMuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDozMy40NjAwMjc4MzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNDU2NTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfdHhfZXJyb3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvb3Zwbi9pby5jPTM1Nj1uZXRkZXZfdHhfdCBvdnBuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQzLVxcdG92cG5fZGV2X2RzdGF0c190eF9kcm9wcGVkKG92cG4tXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjQ0NDpcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQ1LVxcdGtmcmVlX3NrYl9saXN0KHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMDU5PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTExNjItXFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMTYzOlxcdHNrYl90eF9lcnJvcihza2IpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExNjQtXFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzOD12b2lkIHNrYl9kdW1wKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZ1bGxfcGt0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzk6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzQwLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MTQtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MTQxNTogKlxcdHNrYl90eF9lcnJvciAtIHJlcG9ydCBhbiBza19idWZmIHhtaXQgZXJyb3JcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE2LSAqXFx0QHNrYjogYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIGFuIGVycm9yXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MjQ6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDI1LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzAtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MzE6RVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTcxMj1uZnFubF9idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnFubF9pbnN0YW5jZSAqcXVldWUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxMC1cXHRpZiAoIXNrYikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODExOlxcdFxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODEyLVxcdFxcdGdvdG8gbmxtc2dfZmFpbHVyZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE5LVxcdGlmICghbmxoKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MjA6XFx0XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MjEtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk3MC1ubGFfcHV0X2ZhaWx1cmU6XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo5NzE6XFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NzItXFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODctXFx0XFx0ZGVmYXVsdDpcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyODg6XFx0XFx0XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg5LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUyNT1pbnQgc2tiX21ldGFfaW52YWxpZF9jdHgodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTM1OlNFQyhcXFwiZmVudHJ5L3NrYl90eF9lcnJvclxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTUzNi1fX2ZhaWx1cmUgX19tc2coXFxcIm11c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYz0xNTM3PWludCBCUEZfUFJPRyhza2JfaW52YWxpZF9jdHhfZmVudHJ5LCB2b2lkICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jOjE1NDc6U0VDKFxcXCJmZXhpdC9za2JfdHhfZXJyb3JcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1NDgtX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjM1LjM5NDU5OTMxNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNjQxODMyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBza2JfdHhfZXJyb3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHplcm9pbmcgaW4gb24gYHNrYl90eF9lcnJvcmAgYW5kIGl0cyBhcHBsaWNhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGJvdGggYGRhdGFwYXRoLmNgIGluIE9wZW4gdlN3aXRjaCBhbmQgY29yZSBza2J1ZmYgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIGNlcnRhaW5seSwgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb21tb24gbmV0d29yayBvcGVyYXRpb25zLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9ydGVkIGFuZCB1c2VkIGFjcm9zcyBPcGVuIHZTd2l0Y2gsIHRoZSBUVU4gZHJpdmVyLCBPcGVuVlBOLCBhbmQgTmV0ZmlsdGVyIHRlbGxzIG1lIHRoaXMgaXMgYSB3ZWxsLXRyYXZlbGVkIHBpZWNlIG9mIGNvZGUuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGAhc2tiX2Nsb25lZChza2IpYCBjaGVjayB3aXRoaW4gYHNrYl90eF9lcnJvcmAgaXRzZWxmLiBUaGF0IG1ha2VzIGltbWVkaWF0ZSBzZW5zZTsgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggY2xvbmVkIHNrYnVmZnMuIE5vdyBJJ20ga2VlbiB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeS4gV2hhdCdzIHRoZSBzcGVjaWZpYyBzY2VuYXJpbyB0aGF0IHRoaXMgZ3VhcmRzIGFnYWluc3Q/IFRoZW4gaXQgbG9va3MgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxsIGZyb20gYHNrYl96ZXJvY29weWAsIGluIGBza2J1ZmYuY2AuIEFuZCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBBbmQgbGFzdGx5LCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLCB3aGljaCB0ZWxscyBtZSB0aGUgT3BlbiB2U3dpdGNoIGRhdGEgcGF0aCBpcyBleHBsaWNpdGx5IGludm9sdmVkIGluIHRoaXMgY2hhbmdlLiBMZXQncyBkZWx2ZSBpbnRvIGBza2JfemVyb2NvcHlgIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDA6NDEuNTU4Nzg2MzUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzAyNDMwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oPTQxMz1leHRlcm4gc3RydWN0IGRlbnRyeSAqeGVuX25ldGJhY2tfZGJnX3Jvb3Q7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9jb21tb24uaC00MTUtXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE2OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLFxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oLTQxNy1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmg6NDE4OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSk7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgtNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMtNDktICogY291bnRlciBiZWNhdXNlIGNvcmUgZHJpdmVyIGNhbGxzIGludG8geGVudmlmX3plcm9jb3B5X2NhbGxiYWNrXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmM6NTA6ICogd2hpY2ggY2FsbHMgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZS5cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01MS0gKi9cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYzo1Mjp2b2lkIHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy01My1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jLTU4LVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jOjU5OnZvaWQgeGVudmlmX3NrYl96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSlcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYy02MC17XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM9MTE3Mj1zdGF0aWMgaW50IHhlbnZpZl90eF9zdWJtaXQoc3RydWN0IHhlbnZpZl9xdWV1ZSAqcXVldWUpXFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxMC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ19saXN0O1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYzoxMjExOlxcdFxcdFxcdHhlbnZpZl9za2JfemVyb2NvcHlfcHJlcGFyZShxdWV1ZSwgbnNrYik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMTItXFx0XFx0XFx0aWYgKHhlbnZpZl9oYW5kbGVfZnJhZ19saXN0KHF1ZXVlLCBza2IpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTIxNS1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiTm90IGVub3VnaCBtZW1vcnkgdG8gY29uc29saWRhdGUgZnJhZ19saXN0IVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMTY6XFx0XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjE3LVxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyMzMtXFx0XFx0XFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcpXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jOjEyMzQ6XFx0XFx0XFx0XFx0eGVudmlmX3NrYl96ZXJvY29weV9wcmVwYXJlKHF1ZXVlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYy0xMjM1LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzItXFx0XFx0aWYgKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmcpIHtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTI3MzpcXHRcXHRcXHR4ZW52aWZfc2tiX3plcm9jb3B5X3ByZXBhcmUocXVldWUsIHNrYik7XFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEyNzQtXFx0XFx0XFx0cXVldWUtXFx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X3NlbnQrKztcXG4tLVxcbmRyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYz0xMjgzPXN0YXRpYyB2b2lkIHhlbnZpZl96ZXJvY29weV9jYWxsYmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jLTEzMTQtXFx0XFx0cXVldWUtXFx1MDAzZXN0YXRzLnR4X3plcm9jb3B5X2ZhaWwrKztcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmM6MTMxNTpcXHR4ZW52aWZfc2tiX3plcm9jb3B5X2NvbXBsZXRlKHF1ZXVlKTtcXG5kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMtMTMxNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3Njg9aW50IHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3MTpzdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Mi1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3Ny1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3Nzg6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc5LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPXZvaWQgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk0OnVuc2lnbmVkIGludCBza2JfemVyb2NvcHlfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjk1OmludCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyOTYtXFx0XFx0IGludCBsZW4sIGludCBobGVuKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE4MTU9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3JlYWxsb2MpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4MTYtXFxubmV0L2NvcmUvc2tidWZmLmM6MTgxNzpzdGF0aWMgYm9vbCBza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbG8sIHUxNiBsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMTgxOC17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xODM3PXN0YXRpYyB2b2lkIF9fbXNnX3plcm9jb3B5X2NhbGxiYWNrKHN0cnVjdCB1YnVmX2luZm9fbXNnemMgKnVhcmcpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xODczLVxcdGlmICghdGFpbCB8fCBTS0JfRVhUX0VSUih0YWlsKS1cXHUwMDNlZWUuZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9aRVJPQ09QWSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjE4NzQ6XFx0ICAgICFza2JfemVyb2NvcHlfbm90aWZ5X2V4dGVuZCh0YWlsLCBsbywgbGVuKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE4NzUtXFx0XFx0X19za2JfcXVldWVfdGFpbChxLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTkxMz1FWFBPUlRfU1lNQk9MX0dQTChtc2dfemVyb2NvcHlfdWJ1Zl9vcHMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXFxubmV0L2NvcmUvc2tidWZmLmM6MTkxNTppbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTE2LVxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk1Mi19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTYzPUVYUE9SVF9TWU1CT0xfR1BMKF9fc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTY0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5NjU6c3RhdGljIGludCBza2JfemVyb2NvcHlfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm5za2IsIHN0cnVjdCBza19idWZmICpvcmlnLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI4PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjI1Mi1cXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhza2IsIGdmcF9tYXNrKSB8fFxcbm5ldC9jb3JlL3NrYnVmZi5jOjIyNTM6XFx0XFx0ICAgIHNrYl96ZXJvY29weV9jbG9uZShuLCBza2IsIGdmcF9tYXNrKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIyNTQtXFx0XFx0XFx0a2ZyZWVfc2tiKG4pO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MzgzMT1FWFBPUlRfU1lNQk9MKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzMtIC8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4MzQ6ICpcXHRza2JfemVyb2NvcHlfaGVhZGxlbiAtIENhbGN1bGF0ZSBoZWFkcm9vbSBuZWVkZWQgZm9yIHNrYl96ZXJvY29weSgpXFxubmV0L2NvcmUvc2tidWZmLmMtMzgzNS0gKlxcdEBmcm9tOiBzb3VyY2UgYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODM3LSAqXFx0Q2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIGxpbmVhciBoZWFkcm9vbSBuZWVkZWQgaW4gdGhlICd0bycgc2tiIHBhc3NlZFxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Mzg6ICpcXHRpbnRvIHNrYl96ZXJvY29weSgpLlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MzktICovXFxubmV0L2NvcmUvc2tidWZmLmM9Mzg0MD11bnNpZ25lZCBpbnRcXG5uZXQvY29yZS9za2J1ZmYuYzozODQxOnNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NDIte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny19XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxubmV0L2NvcmUvc2tidWZmLmMtMzg1OS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zODYwLS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NjE6ICpcXHRza2JfemVyb2NvcHkgLSBaZXJvIGNvcHkgc2tiIHRvIHNrYlxcbm5ldC9jb3JlL3NrYnVmZi5jLTM4NjItICpcXHRAdG86IGRlc3RpbmF0aW9uIGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg2OS0gKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjM4NzA6ICpcXHRUaGUgYGhsZW5gIGFzIGNhbGN1bGF0ZWQgYnkgc2tiX3plcm9jb3B5X2hlYWRsZW4oKSBzcGVjaWZpZXMgdGhlXFxubmV0L2NvcmUvc2tidWZmLmMtMzg3MS0gKlxcdGhlYWRyb29tIGluIHRoZSBgdG9gIGJ1ZmZlci5cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzk9aW50XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg4MDpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMzg4MS17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0zOTIzLVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzozOTI0OlxcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmMtMzkyNS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM5NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjM5NDY6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3plcm9jb3B5KTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zOTQ3LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDI0ND12b2lkIHNrYl9zcGxpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSwgY29uc3QgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQyNTEtXFx0c2tiX3NoaW5mbyhza2IxKS1cXHUwMDNlZmxhZ3MgfD0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IHpjX2ZsYWdzO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjQyNTI6XFx0c2tiX3plcm9jb3B5X2Nsb25lKHNrYjEsIHNrYiwgMCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDI1My1cXHRpZiAobGVuIFxcdTAwM2MgcG9zKVxcdC8qIFNwbGl0IGxpbmUgaXMgaW5zaWRlIGhlYWRlci4gKi9cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMTMtXFxubmV0L2NvcmUvc2tidWZmLmM6NTAxNDpcXHRcXHRpZiAoc2tiX3plcm9jb3B5X2Nsb25lKG5za2IsIGZyYWdfc2tiLCBHRlBfQVRPTUlDKSlcXG5uZXQvY29yZS9za2J1ZmYuYy01MDE1LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTAxOS1cXHRcXHRcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhsaXN0X3NrYiwgR0ZQX0FUT01JQykgfHxcXG5uZXQvY29yZS9za2J1ZmYuYzo1MDIwOlxcdFxcdFxcdFxcdCAgICBza2JfemVyb2NvcHlfY2xvbmUobnNrYiwgbGlzdF9za2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNTAyMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgR0ZQX0FUT01JQykpXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz05NTM9c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjktXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjcwOlxcdFxcdFxcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI3MS1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMzM5LVxcbm5ldC9pcHY0L3RjcC5jOjEzNDA6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHNrLCBza2IsIG1zZywgY29weSwgdWFyZyxcXG5uZXQvaXB2NC90Y3AuYy0xMzQxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBiaW5kaW5nKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDUxPXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXFx0XFx0fSBlbHNlIHtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzNDpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODM1LVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MTI9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03NzYtXFx0XFx0ZGF0YV9sZW4gPSBuZnFubF9nZXRfZGF0YV9sZW4oZW50c2tiLCBSRUFEX09OQ0UocXVldWUtXFx1MDAzZWNvcHlfcmFuZ2UpKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjc3NzpcXHRcXHRobGVuID0gc2tiX3plcm9jb3B5X2hlYWRsZW4oZW50c2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTc3OC1cXHRcXHRobGVuID0gbWluX3QodW5zaWduZWQgaW50LCBobGVuLCBkYXRhX2xlbik7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2MC1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk2MTpcXHRcXHRpZiAoc2tiX3plcm9jb3B5KHNrYiwgZW50c2tiLCBkYXRhX2xlbiwgaGxlbikpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjItXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz00NTI9c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01MDEtXFx0aWYgKGRwLVxcdTAwM2V1c2VyX2ZlYXR1cmVzIFxcdTAwMjYgT1ZTX0RQX0ZfVU5BTElHTkVEKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjUwMjpcXHRcXHRobGVuID0gbWluKHNrYl96ZXJvY29weV9oZWFkbGVuKHNrYiksIGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTAzLVxcdGVsc2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTU4OC1cXHQvKiBPbmx5IHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIGhlYWRlciwgcGFja2V0IGRhdGEgaXMgYWRkZWRcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo1ODk6XFx0ICogaW4gc2tiX3plcm9jb3B5KCkgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy01OTAtXFx0aWYgKCEobmxhID0gbmxhX3Jlc2VydmUodXNlcl9za2IsIE9WU19QQUNLRVRfQVRUUl9QQUNLRVQsIDApKSkge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTk1LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjU5NjpcXHRlcnIgPSBza2JfemVyb2NvcHkodXNlcl9za2IsIHNrYiwgc2tiX2xlbiwgaGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNTk3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQveGRwL3hzay5jPTk4OD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDMyLVxcbm5ldC94ZHAveHNrLmM6MTAzMzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMTE2LVxcdGlmIChkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xcbm5ldC94ZHAveHNrLmM6MTExNzpcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHhzLCBkZXNjKTtcXG5uZXQveGRwL3hzay5jLTExMTgtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjQzLjQyOTAzNTIwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNzAxODAwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiBzb21lIGtleSBhcmVhcy4gSXQncyB0b3VjaGluZyBgc2tiX3R4X2Vycm9yYCwgd2hpY2ggSSBrbm93IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGFuZCBzZWVpbmcgaXQgbGlua2VkIHdpdGggYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCAod2hpY2gsIGFzIEkgcmVjYWxsLCB1dGlsaXplcyBgc2tiX3plcm9jb3B5YCksIGFuZCB0aGUgYHNrYl96ZXJvY29weWAgZnVuY3Rpb24gaXRzZWxmLCBteSBpbnRlcm5hbCBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBUaGlzIGlzIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZXMgYXJlIGluIGJvdGggY29yZSBuZXR3b3JraW5nIChgbmV0L2NvcmUvc2tidWZmLmNgKSBhbmQgT3BlbiB2U3dpdGNoIChgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgKSBmdXJ0aGVyIHN1Z2dlc3RzIHBvdGVudGlhbCBpbnRlcnBsYXkgYW5kIHZ1bG5lcmFiaWxpdGllcy5cblxuSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCDigJMgdGhvc2UgYXJlIHRoZSBjbGVhciB0YXJnZXRzLiBIbW0sIHdhaXQgYSBtaW51dGUsIEkganVzdCBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLi4uIEFoLCB5ZXMsIGl0ICppcyogYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0IGhhcyBsaW1pdGVkIHNjb3BlIGFuZCBpc24ndCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHkuIE9rYXksIHNvIHRoYXQgY2hhbmdlcyB0aGluZ3MgYSBiaXQuIEkgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBhcyBtdWNoLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGluZyBwYXRocyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gQnV0IGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGlzIG5vdCBzdGF0aWMsIGl0J3MgcHVibGljIChvciBhdCBsZWFzdCBleHRlcm5hbGx5IGFjY2Vzc2libGUpLCB3aGljaCBpcyBncmVhdC4gQW5kLCBvZiBjb3Vyc2UsIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgYm90aCBleHBvcnRlZCwgc28gdGhleSdyZSBlYXNpbHkgYWNjZXNzaWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDU0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAwOjUxLjc5OTIxODI0NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMDY4NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE0ODM9c3RhdGljIGludCBjbG9uZV9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1MTctXFx0XFx0XFx0Y2xvbmUtXFx1MDAzZXJlY2lyY19pZCA9IHJlY2lyY19pZDtcXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jOjE1MTg6XFx0XFx0XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgY2xvbmUpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTUxOS1cXHRcXHR9XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jPTE1NDk9c3RhdGljIHZvaWQgcHJvY2Vzc19kZWZlcnJlZF9hY3Rpb25zKHN0cnVjdCBkYXRhcGF0aCAqZHApXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jLTE1NjctXFx0XFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmM6MTU2ODpcXHRcXHRcXHRvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc2tiLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMtMTU2OS1cXHR9IHdoaWxlICghYWN0aW9uX2ZpZm9faXNfZW1wdHkoZmlmbykpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaD0zMTg9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF92cG9ydF9nZW5sX2ZhbWlseTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMTktXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmg6MzIwOnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguaC0zMjEtdm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICopO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDIyPWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ3LVxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYzo0NDg6XFx0b3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHNrYiwgXFx1MDAyNmtleSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ5LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMDo1My41MDEyOTI2MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTIzMjc1MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE9WUyBQYWNrZXQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY29kZSByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgc29tZSBvZiB0aGUga2V5IGZ1bmN0aW9ucy4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCB0ZWxscyBtZSBpdCdzIGxpa2VseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBzcGVjaWZpYyBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gU2ltaWxhcmx5LCBJIHNlZSBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgYXJlIGFsc28gbm9uLXN0YXRpYy4gR290dGEga2VlcCB0aGF0IGluIG1pbmQgd2hlbiB0cmFjaW5nIGV4ZWN1dGlvbiBwYXRocy5cblxuTm93LCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBmdW5jdGlvbnMgYXJlIHNvIGNydWNpYWwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIGZlYXR1cmVzIGhhdmUgYmVlbiBlbmFibGVkLiBJIHJlYWxpemUgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgT1BFTlZTV0lUQ0hgIGlzIGFjdHVhbGx5IGRlZmluZWQsIHdoaWNoIHdvdWxkIG1lYW4gdGhhdCBPcGVuIHZTd2l0Y2ggcmVsYXRlZCBjaGFuZ2VzIGhhdmUgYmVlbiBlbmFibGVkLlxuXG5UbyBjb25maXJtIHRoYXQgT3BlbiB2U3dpdGNoIGNoYW5nZXMgaGF2ZSBiZWVuIGVuYWJsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcxMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjAxLjAyNDU3MDE3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTI2MjQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDE6MDIuNzk5ODQ3MDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1Mzc0NDExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlLiBJdCBsb29rcyBsaWtlIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBhcmUgZGVmaW5lZCB3aXRoaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhhdCBmaWxlIGlzIGFsd2F5cyBjb21waWxlZCwgc28gdGhhdCdzIG5vdCB0aGUgY3JpdGljYWwgcGllY2UuIE15IGluaXRpYWwgdGhvdWdodCB0aGF0IGBPUEVOVlNXSVRDSGAgd2FzIHJlcXVpcmVkIHRvIHVzZSB0aGUgb3BlbnZzd2l0Y2ggcGFydCBvZiB0aGlzIGNvZGUgbG9va3MgdG8gYmUgaW5jb21wbGV0ZS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuXG5cbkEgcXVpY2sgc2NhbiBzaG93cyB0aGVzZSBhcmUgKmFsc28qIHVzZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNgLiBBaCBoYSEgVGhhdCdzIGludGVyZXN0aW5nLiBTaW5jZSBib3RoIGZ1bmN0aW9ucyBzaG93IHVwIGluIHRoZSBzYW1lIHBsYWNlIHR3aWNlIEkgc2hvdWxkIGV4YW1pbmUgYG5mbmV0bGlua19xdWV1ZWAuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYG5mbmV0bGlua19xdWV1ZWAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2AuIEhvcGVmdWxseSwgdGhhdCB3aWxsIHJldmVhbCB0aGUgZnVsbCBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDE6MTIuMzUzNTk0NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY1MTIxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTA6MDE6MTQuMTAwMTE3NDI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NTIyMzg4OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIHdpdGggU0tCcyAoc29ja2V0IGJ1ZmZlcikgYW5kIG9wZW52c3dpdGNoLiBUaGUgcGxhbiBpcyB0byBhZGQgYE9QRU5WU1dJVENIYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC5cblxuRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYHNrYl90eF9lcnJvcmAgaXMgcmVhY2hlZCwgc3BlY2lmaWNhbGx5IGZyb20gYG92c19kcF9wcm9jZXNzX3BhY2tldGAgd2hlbiBgb3ZzX2Zsb3dfdGJsX2xvb2t1cF9zdGF0c2AgcmV0dXJucyBOVUxMLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBjYXNlLiBJIGFsc28gY29uZmlybWVkIGBza2JfemVyb2NvcHlgIGlzIGNhbGxlZCBmcm9tIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCB3aXRoaW4gYGRhdGFwYXRoLmNgIGFuZCBgbmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2VgIHdpdGhpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgLlxuXG5UaGUgZ2lzdCBvZiB0aGUgcGF0Y2ggaXMgYWJvdXQgbW92aW5nIHRoZSBgc2tiX3R4X2Vycm9yYCBjYWxsLiBJdCByZW1vdmVzIGEgY2FsbCB0byBgc2tiX3R4X2Vycm9yKGZyb20pYCBmcm9tIHdpdGhpbiBgc2tiX3plcm9jb3B5YCBhbmQgYWRkcyBpdCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gSXQgYWxzbyBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCB0byBjaGVjayBgIXNrYl9jbG9uZWQoc2tiKWAuIFNvLCB0aGUgYHNrYl90eF9lcnJvcmAgbm93IG9ubHkgb2NjdXJzIHdoZW4gYHNrYmAgaXMgbm90IGNsb25lZCwgd2hpY2ggaXMgYSBzZW5zaWJsZSBhZGRpdGlvbi5cblxuVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG9wZW52c3dpdGNoIGxvZ2ljLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIGJhc2VkIG9uIHRoZSByZWFjaCBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuSSByZXZpZXdlZCB0aGUgY29kZSBjaGFuZ2VzOlxuXG4qICAgVGhlIGBza2JfdHhfZXJyb3JgIGNoYW5nZTogQWRkZWQgYSBjaGVjayBmb3IgYCFza2JfY2xvbmVkKHNrYilgLlxuXG4qICAgVGhlIGBza2JfemVyb2NvcHlgIGNoYW5nZTogUmVtb3ZlZCB0aGUgZGlyZWN0IGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2hlbiBhbiBlcnJvciBvY2N1cnMgd2l0aCBvcnBoYW4gZnJhZ21lbnRzLlxuXG4qICAgVGhlIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGNoYW5nZTogTm93IGluY2x1ZGVzIHRoZSBgc2tiX3R4X2Vycm9yYCBjYWxsIGluIHRoZSBkZWZhdWx0IGNhc2UuXG5cbiogICBUaGUgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGNoYW5nZTogUmVtb3ZlZCBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgaW4gdGhlIGBvdXRgIGxhYmVsLlxuXG5gcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgaXMgc3RhdGljLCBzbyBJJ2xsIGV4Y2x1ZGUgaXQgYXMgYSBmb2N1cyBzeW1ib2wuIFRoZSBtb3JlIHNpZ25pZmljYW50IHN5bWJvbHMgd2lsbCBiZSBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gSSdsbCBjb25zaWRlciB0aGVzZSBhcyB0aGUga2V5IHBvaW50cyB0byB0ZXN0IHdoZW4gZnV6emluZy5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTcsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjMyLjYyMjUwOTQwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDE0MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl90eF9lcnJvclwiLFxuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGBza2JfdHhfZXJyb3JgIHRvIG5vdCBwcm9jZXNzIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIE9wZW4gdlN3aXRjaCBjb2RlIHBhdGhzLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYHNrYl90eF9lcnJvcmAgdG8gbm90IHByb2Nlc3MgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJ3MgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIGNvZGUgcGF0aHMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjMyLjcwMzUzMjg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyOTA1MDgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjMyLjcwNDE0OTAzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1OTI4NDMwNzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB6ZXJvY29weSBzdGF0ZSwgd2hpY2ggaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCByZXNvdXJjZSBmcmVlaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGludmFsaWQgZnJlZSBlcnJvcnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikgYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIGxlbmd0aHMsIG9yIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlbGV2YW50IGJ1ZyBjbGFzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYwZDk0OGRiMmQyODRlZDhiMTlkM2FmYzk5MTQzYmNkZDM1ODQwMWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMDowMDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGQ0MzgyYjY4ZDU2ZTAuLmI5NTQxMzI5ZjFhNzIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkxNCw3ICszOTE3LDYgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuIFx0c2tiX2xlbl9hZGQodG8sIGxlbiArIHBsZW4pO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4tXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbiBcdFx0aWYgKGogXHUwMDNlIDApXG4gXHRcdFx0cHV0X3BhZ2UodmlydF90b19oZWFkX3BhZ2UoZnJvbS1cdTAwM2VoZWFkKSk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGYyZDViNWFiMzhkZWUuLjJmYzllZjZjMzIxZmYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwNCw4ICs2MDUsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMDowMTozMi43MDQxNTA1MTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU5Mjg0MDQ2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IGBza2JfdHhfZXJyb3JgIGFuZCBaZXJvY29weSBTdGF0ZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIG1vZGlmeWluZyBgc2tiX3R4X2Vycm9yYCBhbmQgaXRzIHVzYWdlIGFjcm9zcyBgc2tidWZmLmNgIGFuZCBgZGF0YXBhdGguY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHk6IGFyZSB3ZSBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3M/IFdpdGggdGhlIGNoYW5nZXMgaW52b2x2aW5nIHplcm9jb3B5IHN0YXRlLCBteSByYWRhciBpcyB1cCBmb3IgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgbWVtb3J5IGxlYWtzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyBwcmltYXJpbHkgYWJvdXQgaG93IHdlIGhhbmRsZSBjbG9uZWQgU0tCcy4gVGhlIHByaW1hcnkgbW9kaWZpY2F0aW9uIGluIGBza2JfdHhfZXJyb3JgIGlzIHRoZSBhZGRpdGlvbiBvZiBgIXNrYl9jbG9uZWQoc2tiKWAsIHdoaWNoIG1lYW5zIHdlICp3b24ndCogY2xlYXIgdGhlIHplcm9jb3B5IHN0YXRlIGZvciBjbG9uZWQgYnVmZmVycy4gIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoYXQgdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluIGBza2Jfc2hpbmZvKClgIHdoaWNoIGlzIHNoYXJlZCBieSBjbG9uZXMuIFRoZSBwYXRjaCB0aGVuIHByb2NlZWRzIHRvIGNsZWFuIHVwIGEgY2FsbCBzaXRlIHRvIGBza2JfdHhfZXJyb3JgIGluIGBza2JfemVyb2NvcHkoKWAuIEknbSBzZWVpbmcgdGhhdCB3ZSBhcmUgYWRkaW5nIGEgY2FsbCB0byBgc2tiX3R4X2Vycm9yYCBpbiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgYW5kIHdlJ3ZlIHJlbW92ZWQgYSBzaW1pbGFyIGNhbGwgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuXG5cbk5vdywgaWYgdGhlcmUgd2VyZSBhIHJlYWwgcHJvYmxlbSBoZXJlLCBpdCB3b3VsZCBtb3N0IGxpa2VseSBzaG93IHVwIGFzIGEgbWVtb3J5IGxlYWssIGEgdXNlLWFmdGVyLWZyZWUgb3IgYSBkb3VibGUtZnJlZSwgZ2l2ZW4gdGhhdCB3ZSBhcmUgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiB6ZXJvY29weSByZXNvdXJjZXMuICBCdXQsIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlIHRocm91Z2ggdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgaXQgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuXG5cblJldmlld2luZyB0aGUgY29kZSBjaGFuZ2VzIGluIGRldGFpbDpcbiogICBJbiBgc2tiX3R4X2Vycm9yYCwgaXQncyBqdXN0IHRoaXMgbmV3IGNvbmRpdGlvbmFsOiBgaWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSlgLiBCYXNpY2FsbHksIHByZXZlbnRpbmcgdGhlIGNsZWFyaW5nIG9mIHplcm9jb3B5IHN0YXRlIG9uIGNsb25lZCBTS0JzLlxuKiAgIEluIGBza2JfemVyb2NvcHlgLCB3ZSdyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yYCB3aGVuIGBza2Jfb3JwaGFuX2ZyYWdzYCBmYWlscy5cbiogICBJbiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCwgd2UncmUgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgb24gZXJyb3IuXG4qICAgSW4gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLCB3ZSdyZSByZW1vdmluZyBgc2tiX3R4X2Vycm9yKHNrYilgIG9uIGVycm9yLlxuXG5Ob25lIG9mIHRoaXMgc2NyZWFtcyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlzay4gSXQncyBhbGwgYWJvdXQgcmVzb3VyY2UgY2xlYW51cCBhbmQgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEEgYnVnIGhlcmUgKndvdWxkKiBiZSBhIG1lbW9yeSBsZWFrIG9yIGEgdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUsIHdoaWNoIEtBU0FOLCBhbmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzIHdvdWxkIGFsbW9zdCBjZXJ0YWlubHkgZmxhZy5cblxuU28sIEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCBLTVNBTiBmb3IgdGhpcy4gVGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZm9jdXMgc29sZWx5IG9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3aXRoIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsdGVyYXRpb24gb2YgbWVtb3J5IGluaXRpYWxpemF0aW9uIGluIGEgd2F5IHRoYXQgcmlza3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlIGNhbiByZWx5IG9uIEtBU0FOIGZvciB0aGUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBjaGVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTksIk91dHB1dFRva2VucyI6Mjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEwOjAxOjQ4LjYzMjU1ODM0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBza2JfdHhfZXJyb3IoKWAgdG8gYXZvaWQgY2xlYXJpbmcgemVyb2NvcHkgc3RhdGUgZm9yIGNsb25lZCBzb2NrZXQgYnVmZmVycyAoYHNrX2J1ZmZgKSwgYXMgdGhlIHN0YXRlIGlzIHNoYXJlZCBhbW9uZyBjbG9uZXMgdmlhIGBza2Jfc2hpbmZvKClgLiBJdCBhbHNvIGFkanVzdHMgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrYl90eF9lcnJvcigpYCBpbiBgc2tiX3plcm9jb3B5KClgLCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KClgLCBhbmQgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoKWAgdG8gZW5zdXJlIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cCBmb3IgemVyb2NvcHkgb3BlcmF0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgemVyb2NvcHkgc3RhdGUsIHdoaWNoIGludm9sdmVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVzb3VyY2UgZnJlZWluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBtb2RpZmljYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBpbnZhbGlkIGZyZWUgZXJyb3JzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gKEtlcm5lbEFkZHJlc3NTYW5pdGl6ZXIpIGFuZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBsZW5ndGhzLCBvciBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGluZm8tbGVha3MpIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIEtBU0FOIGlzIGZ1bGx5IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHRoZSByZWxldmFudCBidWcgY2xhc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcigpYCB0byBhdm9pZCBjbGVhcmluZyB6ZXJvY29weSBzdGF0ZSBmb3IgY2xvbmVkIHNvY2tldCBidWZmZXJzIChgc2tfYnVmZmApLCBhcyB0aGUgc3RhdGUgaXMgc2hhcmVkIGFtb25nIGNsb25lcyB2aWEgYHNrYl9zaGluZm8oKWAuIEl0IGFsc28gYWRqdXN0cyB0aGUgY2FsbCBzaXRlcyBvZiBgc2tiX3R4X2Vycm9yKClgIGluIGBza2JfemVyb2NvcHkoKWAsIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoKWAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldCgpYCB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwIGZvciB6ZXJvY29weSBvcGVyYXRpb25zLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB6ZXJvY29weSBzdGF0ZSwgd2hpY2ggaW52b2x2ZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCByZXNvdXJjZSBmcmVlaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIG1vZGlmaWNhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIGludmFsaWQgZnJlZSBlcnJvcnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiAoS2VybmVsQWRkcmVzc1Nhbml0aXplcikgYW5kIG1lbW9yeSBsZWFrIGRldGVjdG9ycy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIGxlbmd0aHMsIG9yIGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoaW5mby1sZWFrcykgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgS0FTQU4gaXMgZnVsbHkgY2FwYWJsZSBvZiBkZXRlY3RpbmcgdGhlIHJlbGV2YW50IGJ1ZyBjbGFzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[1] Phase: Succeeded StartedAt: 2026-08-22 10:01:59 +0000 UTC FinishedAt: 2026-08-22 10:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 10:01:59 +0000 UTC FinishedAt: 2026-08-22 10:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2] Phase: Succeeded StartedAt: 2026-08-22 10:01:59 +0000 UTC FinishedAt: 2026-08-22 13:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:01:59 +0000 UTC FinishedAt: 2026-08-22 13:44:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:01:59 +0000 UTC FinishedAt: 2026-08-22 10:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:01:59 +0000 UTC FinishedAt: 2026-08-22 10:02:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-workflow42flp/series-workflow42flp-convert-artifact-597964565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:02:10 +0000 UTC FinishedAt: 2026-08-22 10:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:02:10 +0000 UTC FinishedAt: 2026-08-22 10:20:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ea373573-9d44-48ea-aabf-e026114682b0,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-workflow42flp/series-workflow42flp-convert-artifact-597964565/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": "b8db462a-4350-4081-bdce-e7047caae793", "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-workflow42flp/series-workflow42flp-build-action-1550094203/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:02:10 +0000 UTC FinishedAt: 2026-08-22 10:19:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ea373573-9d44-48ea-aabf-e026114682b0,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-workflow42flp/series-workflow42flp-convert-artifact-597964565/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": "b8db462a-4350-4081-bdce-e7047caae793", "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-workflow42flp/series-workflow42flp-build-action-1550094203/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:20:07 +0000 UTC FinishedAt: 2026-08-22 10:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:20:07 +0000 UTC FinishedAt: 2026-08-22 10:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:20:07 +0000 UTC FinishedAt: 2026-08-22 10:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:20:07 +0000 UTC FinishedAt: 2026-08-22 10:20:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-workflow42flp/series-workflow42flp-convert-artifact-4062342640/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:20:17 +0000 UTC FinishedAt: 2026-08-22 10:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:20:17 +0000 UTC FinishedAt: 2026-08-22 10:22:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8db462a-4350-4081-bdce-e7047caae793,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-workflow42flp/series-workflow42flp-build-action-1550094203/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-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:22:30 +0000 UTC FinishedAt: 2026-08-22 10:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:22:30 +0000 UTC FinishedAt: 2026-08-22 10:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:22:30 +0000 UTC FinishedAt: 2026-08-22 10:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:22:30 +0000 UTC FinishedAt: 2026-08-22 10:39:06 +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:*ea373573-9d44-48ea-aabf-e026114682b0,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-workflow42flp/series-workflow42flp-convert-artifact-4062342640/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": "4c0cde44-64ad-41ab-94cd-e2a9dfe4adab", "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-workflow42flp/series-workflow42flp-build-action-2192363244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:22:30 +0000 UTC FinishedAt: 2026-08-22 10:38:56 +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:*ea373573-9d44-48ea-aabf-e026114682b0,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-workflow42flp/series-workflow42flp-convert-artifact-4062342640/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": "4c0cde44-64ad-41ab-94cd-e2a9dfe4adab", "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-workflow42flp/series-workflow42flp-build-action-2192363244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:39:06 +0000 UTC FinishedAt: 2026-08-22 10:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:39:06 +0000 UTC FinishedAt: 2026-08-22 10:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:39:06 +0000 UTC FinishedAt: 2026-08-22 10:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:39:06 +0000 UTC FinishedAt: 2026-08-22 10:41:18 +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:*4c0cde44-64ad-41ab-94cd-e2a9dfe4adab,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-workflow42flp/series-workflow42flp-build-action-2192363244/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-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:28 +0000 UTC FinishedAt: 2026-08-22 13:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:28 +0000 UTC FinishedAt: 2026-08-22 13:44:37 +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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"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:*b8db462a-4350-4081-bdce-e7047caae793,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c0cde44-64ad-41ab-94cd-e2a9dfe4adab,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-workflow42flp/series-workflow42flp-build-action-1550094203/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-workflow42flp/series-workflow42flp-build-action-2192363244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:28 +0000 UTC FinishedAt: 2026-08-22 10:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:28 +0000 UTC FinishedAt: 2026-08-22 10:41:32 +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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"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-workflow42flp/series-workflow42flp-convert-artifact-602252393/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:28 +0000 UTC FinishedAt: 2026-08-22 10:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:28 +0000 UTC FinishedAt: 2026-08-22 10:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:28 +0000 UTC FinishedAt: 2026-08-22 10:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:38 +0000 UTC FinishedAt: 2026-08-22 13:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42flp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"0a9798e7-d3d4-41b9-a4c4-d82cd3ddb3b0","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-22 10:41:38 +0000 UTC FinishedAt: 2026-08-22 13:44:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b8db462a-4350-4081-bdce-e7047caae793,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c0cde44-64ad-41ab-94cd-e2a9dfe4adab,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-workflow42flp/series-workflow42flp-build-action-1550094203/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-workflow42flp/series-workflow42flp-build-action-2192363244/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-workflow42flp/series-workflow42flp-convert-artifact-602252393/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,}