Name: series-workflowkpmf5 Phase: Succeeded StartedAt: 2026-08-31 09:28:16 +0000 UTC FinishedAt: 2026-08-31 13:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[0] Phase: Succeeded StartedAt: 2026-08-31 09:28:16 +0000 UTC FinishedAt: 2026-08-31 09:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 09:28:16 +0000 UTC FinishedAt: 2026-08-31 09:45:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "NET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "NET_CORE" ], "series_id": "7e288732-133e-40e3-9296-fd5881e571c8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_enslave", "bond_release", "bond_opt_tryset_rtnl", "bond_create", "bond_change_active_slave", "bond_peer_notify_work_rearm" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7LAogICAgJiMzNDtib25kX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Ym9uZF9vcHRfdHJ5c2V0X3J0bmwmIzM0OywKICAgICYjMzQ7Ym9uZF9jcmVhdGUmIzM0OywKICAgICYjMzQ7Ym9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGFzc2lnbm1lbnQgYGRlbHRhX2luX3RpY2tzID0gMTtgIHByaW9yIHRvIGJyYW5jaGluZyB0byBgcmVfYXJtYCB3aGVuIGBydG5sX3RyeWxvY2soKWAgZmFpbHMgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oKWAuIFxuXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgdmFyaWFibGUgYGRlbHRhX2luX3RpY2tzYCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gKGBkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGI5MjBkODEyZTU2MzQyZmY1N2YxZGExZWMzYTg4NDJjMTY0NTRhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5pbmRleCBlZjllYjBjNTNjNjYxLi5jMjNjZjE4YTk5NmFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuQEAgLTM4NzEsMTAgJiM0MzszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKFJFQURfT05DRShib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7XG4tXHRcdGlmICghcnRubF90cnlsb2NrKCkpIHtcbi1cdFx0XHRkZWx0YV9pbl90aWNrcyA9IDE7XG4mIzQzO1x0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxuIFx0XHRcdGdvdG8gcmVfYXJtO1xuLVx0XHR9XG4gXG4gXHRcdGlmIChib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZilcbiBcdFx0XHRib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoYm9uZCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtib25kX29wdF90cnlzZXRfcnRubCYjMzQ7LAogICAgJiMzNDtib25kX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGI5MjBkODEyZTU2MzQyZmY1N2YxZGExZWMzYTg4NDJjMTY0NTRhYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggZWY5ZWIwYzUzYzY2MS4uYzIzY2YxOGE5OTZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0zODcxLDEwICYjNDM7Mzg3MSw4IEBAIHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoUkVBRF9PTkNFKGJvbmQtJmd0O3NlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7Ci0JCWlmICghcnRubF90cnlsb2NrKCkpIHsKLQkJCWRlbHRhX2luX3RpY2tzID0gMTsKJiM0MzsJCWlmICghcnRubF90cnlsb2NrKCkpCiAJCQlnb3RvIHJlX2FybTsKLQkJfQogCiAJCWlmIChib25kLSZndDtzZW5kX3BlZXJfbm90aWYpCiAJCQlib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoYm9uZCwgdHJ1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgY2hhbmdlOgoKKipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIEFSUCBNb25pdG9yaW5nIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHdpdGhpbiB0aGUgYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaGFzIHRvIGRvIHdpdGggQWN0aXZlLUJhY2t1cCBtb2RlIGFuZCBob3cgaXQgaGFuZGxlcyBBUlAgbW9uaXRvcmluZywgd2hpY2ggaXMgYSBrZXkgY29tcG9uZW50IG9mIHRoYXQgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCB0aGlzIEFSUCBtb25pdG9yaW5nIGlzIGRvaW5nIGluIHRoZSBvcmlnaW5hbCBjb2RlIHRvIGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIHBhdGNoLgoKTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYW5kIGZvY3VzIG9uIHRoZSBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgZnVuY3Rpb24uIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY2FsbCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gVW5kZXJzdGFuZGluZyB0aGUgQVJQIG1vbml0b3JpbmcgbG9naWMgaXMgY3J1Y2lhbCDigJMgdGhpbmdzIGxpa2UgaG93IGl0IHNlbmRzIEFSUCByZXF1ZXN0cywgaG93IGl0IGludGVycHJldHMgdGhlIHJlc3BvbnNlcyAob3IgbGFjayB0aGVyZW9mKSwgYW5kIGhvdyBpdCB0cmlnZ2VycyBhIGZhaWxvdmVyIGFyZSBhbGwgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQuIEkgbmVlZCB0byBzZWUgd2hhdCBhc3BlY3RzIG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBhY3RpdmUtYmFja3VwIGJlaGF2aW9yIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODUwOlx0XHRpZiAoIWJvbmRfaGFzX3NsYXZlcyhib25kKSlcbjM4NTE6XHRcdFx0Z290byByZV9hcm07XG4zODUyOlx0XG4zODUzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4zODU0Olx0XG4zODU1Olx0XHRpZiAoYm9uZF9hYl9hcnBfaW5zcGVjdChib25kKSkge1xuMzg1NjpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjM4NTc6XHRcbjM4NTg6XHRcdFx0LyogUmFjZSBhdm9pZGFuY2Ugd2l0aCBib25kX2Nsb3NlIGZsdXNoIG9mIHdvcmtxdWV1ZSAqL1xuMzg1OTpcdFx0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7XG4zODYwOlx0XHRcdFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xuMzg2MTpcdFx0XHRcdGdvdG8gcmVfYXJtO1xuMzg2MjpcdFx0XHR9XG4zODYzOlx0XG4zODY0Olx0XHRcdGJvbmRfYWJfYXJwX2NvbW1pdChib25kKTtcbjM4NjU6XHRcbjM4NjY6XHRcdFx0cnRubF91bmxvY2soKTtcbjM4Njc6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzg2ODpcdFx0fVxuMzg2OTpcdFxuMzg3MDpcdFx0c2hvdWxkX25vdGlmeV9ydG5sID0gYm9uZF9hYl9hcnBfcHJvYmUoYm9uZCk7XG4zODcxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjM4NzI6XHRcbjM4NzM6XHRcdGlmIChSRUFEX09OQ0UoYm9uZC1cdTAwM2VzZW5kX3BlZXJfbm90aWYpIHx8IHNob3VsZF9ub3RpZnlfcnRubCkge1xuMzg3NDpcdFx0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxuMzg3NTpcdFx0XHRcdGdvdG8gcmVfYXJtO1xuMzg3NjpcdFxuMzg3NzpcdFx0XHRpZiAoYm9uZC1cdTAwM2VzZW5kX3BlZXJfbm90aWYpXG4zODc4Olx0XHRcdFx0Ym9uZF9wZWVyX25vdGlmeV9tYXlfZXZlbnRzKGJvbmQsIHRydWUpO1xuMzg3OTpcdFxuMzg4MDpcdFx0XHRpZiAoc2hvdWxkX25vdGlmeV9ydG5sKSB7XG4zODgxOlx0XHRcdFx0Ym9uZF9zbGF2ZV9zdGF0ZV9ub3RpZnkoYm9uZCk7XG4zODgyOlx0XHRcdFx0Ym9uZF9zbGF2ZV9saW5rX25vdGlmeShib25kKTtcbjM4ODM6XHRcdFx0fVxuMzg4NDpcdFxuMzg4NTpcdFx0XHRydG5sX3VubG9jaygpO1xuMzg4NjpcdFx0fVxuMzg4NzpcdFxuMzg4ODpcdHJlX2FybTpcbjM4ODk6XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpXG4zODkwOlx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhib25kLVx1MDAzZXdxLCBcdTAwMjZib25kLVx1MDAzZWFycF93b3JrLCBkZWx0YV9pbl90aWNrcyk7XG4zODkxOlx0fVxuMzg5MjpcdFxuMzg5MzpcdHN0YXRpYyB2b2lkIGJvbmRfYXJwX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuMzg5NDpcdHtcbjM4OTU6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLFxuMzg5NjpcdFx0XHRcdFx0XHQgICAgYXJwX3dvcmsud29yayk7XG4zODk3Olx0XG4zODk4Olx0XHRpZiAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApXG4zODk5Olx0XHRcdGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oYm9uZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiBmaXJzdCBwZXJzb24sIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGhpcyBpcyByZWxhdGVkIHRvIHRyb3VibGVzaG9vdGluZyBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmA6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBCZWZvcmUgTGluZSAzODUwKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93ICpiZWZvcmUqIGxpbmUgMzg1MCBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAuIFRoYXQgbGluZSBpcyBvYnZpb3VzbHkgYSBzaWduaWZpY2FudCBicmVha3BvaW50LCBvciBwb3NzaWJseSB0aGUgbG9jYXRpb24gb2YgYW4gYW5vbWFseSBhcyBhbiBpbml0aWFsIGludmVzdGlnYXRpb24gc3RlcC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yICpsZWFkaW5nIHVwKiB0byB0aGF0IHBvaW50LiBJJiMzOTttIHRoaW5raW5nOiB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIG9yIG1vZGlmaWVkLCBhbmQgYXJlIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQ/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMgZHVyaW5nIHRoYXQgZXhlY3V0aW9uIHBlcmlvZCB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCBjb3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIGxlYWRpbmcgdXAgdG8gdGhhdCBsaW5lLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25kaXRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBzY2FubmluZyB0aGUgY29kZSwgcXVpY2tseSwgZm9yIG9idmlvdXMgaW5kaWNhdG9yczogbG9vcHMsIGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBhc3NpZ25tZW50cyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50LCBhbmQgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gZGlmZmVyZW50IGJyYW5jaGVzIG9mIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG9idmlvdXMgcmVkIGZsYWdzLCBzdWNoIGFzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdW51c3VhbCBvcGVyYXRpb25zIG9uIHNoYXJlZCByZXNvdXJjZXMuIEtub3dpbmcgdGhpcyB0b29sJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbi1yZWxhdGVkIGVsZW1lbnRzIHRvbywgbGlrZSB3aGF0IHNldHRpbmdzIGFyZSBsb2FkZWQgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgY29kZSBmbG93LiBUaGlzIGluaXRpYWwgcGFzcyB3aWxsIGJlIG1vcmUgb2YgYSByZWNvbm5haXNzYW5jZSBtaXNzaW9uLCBqdXN0IHRyeWluZyB0byBnZXQgYSBmZWVsIGZvciB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIHJlYWxseSBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MzA6XHRcdG5ld19zbGF2ZS1cdTAwM2VsYXN0X2xpbmtfdXAgPSBqaWZmaWVzO1xuMzgzMTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGJvbmQtXHUwMDNlY3VycmVudF9hcnBfc2xhdmUsIG5ld19zbGF2ZSk7XG4zODMyOlx0XG4zODMzOlx0Y2hlY2tfc3RhdGU6XG4zODM0Olx0XHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuMzgzNTpcdFx0XHRpZiAoc2xhdmUtXHUwMDNlc2hvdWxkX25vdGlmeSB8fCBzbGF2ZS1cdTAwM2VzaG91bGRfbm90aWZ5X2xpbmspIHtcbjM4MzY6XHRcdFx0XHRzaG91bGRfbm90aWZ5X3J0bmwgPSBCT05EX1NMQVZFX05PVElGWV9OT1c7XG4zODM3Olx0XHRcdFx0YnJlYWs7XG4zODM4Olx0XHRcdH1cbjM4Mzk6XHRcdH1cbjM4NDA6XHRcdHJldHVybiBzaG91bGRfbm90aWZ5X3J0bmw7XG4zODQxOlx0fVxuMzg0MjpcdFxuMzg0MzpcdHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4zODQ0Olx0e1xuMzg0NTpcdFx0Ym9vbCBzaG91bGRfbm90aWZ5X3J0bmw7XG4zODQ2Olx0XHRpbnQgZGVsdGFfaW5fdGlja3M7XG4zODQ3Olx0XG4zODQ4Olx0XHRkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKTtcbjM4NDk6XHRcbjM4NTA6XHRcdGlmICghYm9uZF9oYXNfc2xhdmVzKGJvbmQpKVxuMzg1MTpcdFx0XHRnb3RvIHJlX2FybTtcbjM4NTI6XHRcbjM4NTM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjM4NTQ6XHRcbjM4NTU6XHRcdGlmIChib25kX2FiX2FycF9pbnNwZWN0KGJvbmQpKSB7XG4zODU2Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMzg1NzpcdFxuMzg1ODpcdFx0XHQvKiBSYWNlIGF2b2lkYW5jZSB3aXRoIGJvbmRfY2xvc2UgZmx1c2ggb2Ygd29ya3F1ZXVlICovXG4zODU5Olx0XHRcdGlmICghcnRubF90cnlsb2NrKCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgdGhlIHJlbW92YWwgb2YgYGRlbHRhX2luX3RpY2tzID0gMWAuIEkgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGdpdCBsb2cgYXJvdW5kIHRoaXMgc2VjdGlvbiB0byBncmFzcCB0aGUgY29udGV4dC4KCkkgc2VlIHRoYXQgYGRlbHRhX2luX3RpY2tzYCB3YXMgb3JpZ2luYWxseSBpbml0aWFsaXplZCB0byBgbXNlY3NfdG9famlmZmllcyhib25kLSZndDtwYXJhbXMuYXJwX2ludGVydmFsKWAuIFRoZW4sIGluIHRoZSBzZWNvbmQgYHJ0bmxfdHJ5bG9jaygpYCBjYWxsLCB0aGUgbGluZSBzZXR0aW5nIGBkZWx0YV9pbl90aWNrcyA9IDFgIHdhcyByZW1vdmVkLiBUaGF0JiMzOTtzIHRoZSBrZXk6IHdoeSB3YXMgdGhpcyByZW1vdmVkPwoKTG9va2luZyBhdCB0aGUgY29kZSBibG9ja3MsIEkgc2VlIHRoYXQgaWYgYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiB0aGUgZmlyc3QgYmxvY2ssIGBkZWx0YV9pbl90aWNrc2AgZ2V0cyBzZXQgdG8gMS4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBhdm9pZGFuY2UgbWVjaGFuaXNtLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUgZmx1c2ggaW4gYGJvbmRfY2xvc2VgLiBIb3dldmVyLCBpbiB0aGUgc2Vjb25kIGJsb2NrLCB0aGUgYXNzaWdubWVudCBpcyBnb25lISBJZiBgcnRubF90cnlsb2NrKClgIGZhaWxzLCBzaG91bGRuJiMzOTt0IHdlIHN0aWxsIGltbWVkaWF0ZWx5IHJlLWFybSBpbiB0aGUgc2Vjb25kIGJsb2NrPyBOb3csIGBkZWx0YV9pbl90aWNrc2AgY291bGQgcmV0YWluIGl0cyBwcmV2aW91cyB2YWx1ZSAoYG1zZWNzX3RvX2ppZmZpZXMoLi4uKWApIG9yIDEsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaXJzdCBibG9jayB3YXMgc3VjY2Vzc2Z1bC4KCklzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGJvbmRpbmcgZHJpdmVyIGlzIGEgc3RhbmRhcmQgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgYWNjZXNzaWJsZSB2aWEgbmV0bGluay9ydG5sLiBJdCYjMzk7cyBhIHB1cmUgc29mdHdhcmUgZHJpdmVyLCBzbyB5ZXMsIGl0IGlzIGZ1enphYmxlIGluIFFFTVUgb3IgR0NFLgoKSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBvciBub24tZnVuY3Rpb25hbCBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIGBydG5sX3RyeWxvY2soKWAgZmFpbGVkIGluIHRoZSBzZWNvbmQgYmxvY2ssIHNldHRpbmcgYGRlbHRhX2luX3RpY2tzYCB0byAxIGVuc3VyZWQgaW1tZWRpYXRlIHJlLWFybWluZyBvZiB0aGUgZGVsYXllZCB3b3JrIHRvIHJldHJ5IHRoZSBgcnRubF9sb2NrYCBhbmQgc2VuZCBwZWVyL2xpbmsgbm90aWZpY2F0aW9ucy4gUmVtb3ZpbmcgdGhpcyBtaWdodCBpbnRyb2R1Y2UgYSBkZWxheSBkZXRlcm1pbmVkIGJ5IHRoZSBvcmlnaW5hbCBhcnBfaW50ZXJ2YWwsIHJhdGhlciB0aGFuIGEgbW9yZSBpbW1lZGlhdGUgcmV0cnkuCgpTbywgKndoeSogd2FzIGBkZWx0YV9pbl90aWNrcyA9IDFgIHJlbW92ZWQ/IEkgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBvciBjb21taXQgaGlzdG9yeSBmb3IgYm9uZGluZyBhcnAgbW9uIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gTXkgdGhvdWdodCBpcyBgZ2l0IGxvZyAtbiA1IGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIG9yIHVzZSBncmVwcGVyIGlmIG5lZWRlZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvci4gTGV0JiMzOTtzIGNoZWNrIHRoZSBLY29uZmlnIGZvciBCT05ESU5HIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCT05ESU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIEJvbmRpbmcgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHVzdWFsIHN1c3BlY3RzLiBNeSBndXQgc2F5cyB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmdgIGRpcmVjdG9yeSBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGJvbmRpbmcgZHJpdmVyIGNvZGUsIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzLiBJZiBpdCYjMzk7cyBub3QgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzZWFyY2ggYW5kIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL25ldGAgbW9yZSBnZW5lcmFsbHkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlKHMpLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCB3cml0dGVuIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBJJiMzOTttIHJlc2VhcmNoaW5nIG9yIGEgZ2VuZXJhbCBhcmVhIHRoYXQgcmVxdWlyZXMgb3B0aW1pemF0aW9uLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYXliZSBzb21lIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlIG9yIG90aGVyIHByZXJlcXVpc2l0ZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gdXNlIGFueSBvZiB0aGVcbiAgMzc6XHRcdCAgbmV0d29ya2luZyBjb3JlIGRyaXZlcnMgKGkuZS4gVkxBTiwgYnJpZGdpbmcsIGJvbmRpbmcsIGV0Yy4pXG4gIDM4Olx0XG4gIDM5Olx0aWYgTkVUX0NPUkVcbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBUaGlzIGlzIGVzc2VudGlhbGx5IGEgYml0LWJ1Y2tldCBkZXZpY2UgKGkuZS4gdHJhZmZpYyB5b3Ugc2VuZCB0b1xuICA2MzpcdFx0ICB0aGlzIGRldmljZSBpcyBjb25zaWduZWQgaW50byBvYmxpdmlvbikgd2l0aCBhIGNvbmZpZ3VyYWJsZSBJUFxuICA2NDpcdFx0ICBhZGRyZXNzLiBJdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gb3JkZXIgdG8gbWFrZSB5b3VyIGN1cnJlbnRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQ3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIHN5bWJvbHMgdGhhdCBtaWdodCBzd2F5IG15IGRlY2lzaW9uLiBJIHNob3VsZCBjaGVjayBmb3IgdGhpbmdzIGxpa2UgYE5FVF9DT1JFYCwgYEJPTkRJTkdgLCBhbmQgYElORVRgIHRvIGVuc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBjcml0ZXJpYS4gV2UgbmVlZCB0byBydWxlIG91dDogRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGRlY29yYXRpdmUgc3R1ZmYgbGlrZSBsb2dnaW5nLCBub24tZnVuY3Rpb25hbCBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemF0aW9uLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgY29kZSByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0ZWFyZG93biBjYWxsYmFja3MuCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGF0JiMzOTtzIHNxdWFyZWx5IGluIHRoZSBjb3JlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKSwgYW5kIGl0JiMzOTtzIGZpZGRsaW5nIHdpdGggdGhlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nIGludGVydmFsIHdoZW4gYHJ0bmxfdHJ5bG9jaygpYCBmYWlscy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/CgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gSXQgY2hhbmdlcyB0aGUgdGltaW5nIGFuZCBleGVjdXRpb24gbG9naWMgb2YgdGhlIEFSUCBtb25pdG9yaW5nIHdvcmtxdWV1ZSB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBDcnVjaWFsbHksIGJvbmRpbmcgaXMgYSAqc29mdHdhcmUqIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBjb3JlIG5ldHdvcmtpbmcuIEkgY2FuIGVhc2lseSBpbnN0YW50aWF0ZSBpdCB3aXRoIHJ0bmwvbmV0bGluaywgYW5kIGl0JiMzOTtzICpmdWxseSogcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRS4gVGhlcmVmb3JlLCB0aGlzIG9uZSBsb29rcyBwcm9taXNpbmcsIHNvIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgYXBwcm9wcmlhdGUgc3ltYm9scy4gSSBuZWVkIHRvIGZpbmQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBsZXQmIzM5O3MgY2FsbCB0aGVtICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYm9uZGluZyBBUlAgbW9uaXRvcmluZywgb3IgcGVyaGFwcyBib25kaW5nIG5ldGxpbmsvcnRubCBpbnRlcmFjdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHRoaW5ncyBsaWtlIGBib25kX2FycF9tb25pdG9yYCwgYW5kIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCwgYGJvbmRfb3B0aW9ucy5jYCwgb3IgYGJvbmRfbmV0bGluay5jYC4gSSB3aWxsIHJ1biBhIGdyZXAgZm9yIHRob3NlIGZ1bmN0aW9ucyBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4gSSBtaWdodCBhbHNvIHRyeSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGJvbmRpbmcgQVJQIG1vbml0b3IgaXMgc2V0IHVwIGFuZCB0cmlnZ2VyZWQuIFRoaXMgd2lsbCBsZWFkIG1lIHRvIGFwcHJvcHJpYXRlIHRlc3QgY2FzZXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfYXJwX21vbml0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mzg0Mz1zdGF0aWMgdm9pZCBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzg5Mi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6Mzg5MzpzdGF0aWMgdm9pZCBib25kX2FycF9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzg5NC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzE4PXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyNy1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmJvbmQtXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MzI4Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Ym9uZC1cdTAwM2VhcnBfd29yaywgYm9uZF9hcnBfbW9uaXRvcik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMjktXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZib25kLVx1MDAzZWFkX3dvcmssIGJvbmRfM2FkX3N0YXRlX21hY2hpbmVfaGFuZGxlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyBBUlAgTW9uaXRvcmluZyBhbmQgQm9uZGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IEFSUCBtb25pdG9yaW5nIGludGVyYWN0cyB3aXRoIGJvbmRpbmcuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMgdGhhdCAqY29uZmlndXJlKiBhbmQgKmVuYWJsZSogaXQgd2l0aGluIHRoZSBib25kaW5nIGNvbnRleHQuIFRoaW5ncyBsaWtlIHRoZSBgYXJwX2ludGVydmFsYCDigJMgd2hhdCYjMzk7cyB0aGUgZnJlcXVlbmN5PyBBbmQgdGhhdCBgYXJwX2lwX3RhcmdldGAgLSB3aGljaCBJUCBhZGRyZXNzIGFyZSB3ZSB1c2luZyB0byBwcm9iZT8gSSYjMzk7bSB0cnlpbmcgdG8gaWRlbnRpZnkgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGRlZmluZWQuIEJleW9uZCBqdXN0IHRoZSBzZXR0aW5ncyB0aGVtc2VsdmVzLCBJIHdhbnQgdG8gdHJhY2UgaG93IHRoZXNlIHNldHRpbmdzICp0aWUqIGludG8gdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbiBwcm9jZXNzIGluIGdlbmVyYWwsIGFuZCB3aGF0IG1hbmFnZXMgdGhlIGJvbmRpbmcgcHJvY2VzcyBpdHNlbGYuIEJhc2ljYWxseSwgaG93IGFuZCB3aGVyZSBhcmUgd2UgcmVnaXN0ZXJpbmcgYW5kIG1hbmFnaW5nIGJvbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBvcmNoZXN0cmF0ZXMgYWxsIG9mIHRoaXMsIGhvdyBpdCYjMzk7cyBzZXQgdXAgYW5kIGFkbWluaXN0ZXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHBpY3R1cmU6ICB0aGUgY29uZmlndXJhdGlvbiBwb2ludHMgYW5kIHRoZSBvdmVyYWxsIG1hbmFnZW1lbnQgd29ya2Zsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfb3B0X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDU4Mz1zdGF0aWMgaW50IGJvbmRfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ2NDctXHRjYXNlIFNJT0NCT05EQ0hBTkdFQUNUSVZFOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0NjQ4Olx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgc2xhdmVfZGV2LVx1MDAzZW5hbWUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQ5LVx0XHRyZXMgPSBfX2JvbmRfb3B0X3NldF9ub3RpZnkoYm9uZCwgQk9ORF9PUFRfQUNUSVZFX1NMQVZFLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4NT1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMDEtXHRpZiAobW9kZSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MTAyOlx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgbW9kZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMDMtXHRcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9NT0RFKSwgXHUwMDI2bmV3dmFsKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMTctXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYxMTg6XHRcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHhtaXRfaGFzaF9wb2xpY3kpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTE5LVx0XHRcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9YTUlUX0hBU0gpLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEzNC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjEzNTpcdFx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgbGFjcF9yYXRlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEzNi1cdFx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfTEFDUF9SQVRFKSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxNDctXHRpZiAoYWRfc2VsZWN0KSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYxNDg6XHRcdGJvbmRfb3B0X2luaXRzdHIoXHUwMDI2bmV3dmFsLCBhZF9zZWxlY3QpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTQ5LVx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfQURfU0VMRUNUKSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYyMjQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYyMjU6XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgcGFja2V0c19wZXJfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MjI2LVx0aWYgKCFib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfUEFDS0VUU19QRVJfU0xBVkUpLCBcdTAwMjZuZXd2YWwpKSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzA2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzA3Olx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgYXJwX3ZhbGlkYXRlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjMwOC1cdFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX0FSUF9WQUxJREFURSksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzIwLVx0aWYgKGFycF9hbGxfdGFyZ2V0cykge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzIxOlx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgYXJwX2FsbF90YXJnZXRzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjMyMi1cdFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX0FSUF9BTExfVEFSR0VUUyksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzYyLVx0aWYgKHByaW1hcnkgXHUwMDI2XHUwMDI2IHByaW1hcnlfcmVzZWxlY3QpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjM2MzpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHByaW1hcnlfcmVzZWxlY3QpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzY0LVx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfUFJJTUFSWV9SRVNFTEVDVCksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02Mzc2LVx0aWYgKGZhaWxfb3Zlcl9tYWMpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjM3NzpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIGZhaWxfb3Zlcl9tYWMpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02Mzc4LVx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfRkFJTF9PVkVSX01BQyksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzkxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzkyOlx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIFwmIzM0O2RlZmF1bHRcJiMzNDspO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzkzLVx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDA5LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDEwOlx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIFwmIzM0O2RlZmF1bHRcJiMzNDspO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDExLVx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX1RMQl9EWU5BTUlDX0xCKSwgXHUwMDI2bmV3dmFsKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTE2Nz1zdGF0aWMgaW50IGJvbmRfc2xhdmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xODUtXHRcdFx0IHNsYXZlX2Rldi1cdTAwM2VuYW1lLCBxdWV1ZV9pZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjE4NjpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHF1ZXVlX2lkX3N0cik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTE4Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUVVFVUVfSUQsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTIxNj1zdGF0aWMgaW50IGJvbmRfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yMzAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjIzMTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIG1vZGUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yMzItXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01PREUsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI0OC1cdFx0fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNDk6XHRcdGJvbmRfb3B0X2luaXRzdHIoXHUwMDI2bmV3dmFsLCBhY3RpdmVfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNTAtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FDVElWRV9TTEFWRSwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjU3LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNTg6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBtaWltb24pO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNTktXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JSU1PTiwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjY2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNjc6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCB1cGRlbGF5KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjY4LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9VUERFTEFZLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNzUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjI3NjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGRvd25kZWxheSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI3Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfRE9XTkRFTEFZLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yODQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjI4NTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGRlbGF5KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjg2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9QRUVSX05PVElGX0RFTEFZLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMDYtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjMwNzpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFycF9pbnRlcnZhbCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMwOC1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX0lOVEVSVkFMLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMjUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjMyNjpcdFx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgKF9fZm9yY2UgdTY0KXRhcmdldCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMyNy1cdFx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BUlBfVEFSR0VUUyxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM1NS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzU2Olx0XHRcdGJvbmRfb3B0X2luaXRleHRyYShcdTAwMjZuZXd2YWwsIFx1MDAyNmFkZHI2LCBzaXplb2YoYWRkcjYpKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzU3LVx0XHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX05TX1RBUkdFVFMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zNzktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjM4MDpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFycF92YWxpZGF0ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM4MS1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX1ZBTElEQVRFLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zODktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjM5MDpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFycF9hbGxfdGFyZ2V0cyk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM5MS1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX0FMTF9UQVJHRVRTLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MDQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQwNTpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHByaW1hcnkpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MDYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1BSSU1BUlksIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQxNC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDE1Olx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgcHJpbWFyeV9yZXNlbGVjdCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQxNi1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUFJJTUFSWV9SRVNFTEVDVCwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDI0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0MjU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBmYWlsX292ZXJfbWFjKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDI2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9GQUlMX09WRVJfTUFDLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MzQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQzNTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIHhtaXRfaGFzaF9wb2xpY3kpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MzYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1hNSVRfSEFTSCwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDQ0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NDU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCByZXNlbmRfaWdtcCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ0Ni1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUkVTRU5EX0lHTVAsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ1NC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDU1Olx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgbnVtX3BlZXJfbm90aWYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NTYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX05VTV9QRUVSX05PVElGLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NjQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ2NTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFsbF9zbGF2ZXNfYWN0aXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDY2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BTExfU0xBVkVTX0FDVElWRSwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDc0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NzU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBtaW5fbGlua3MpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NzYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JTkxJTktTLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00ODQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ4NTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGxwX2ludGVydmFsKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDg2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9MUF9JTlRFUlZBTCwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDk0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0OTU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBwYWNrZXRzX3Blcl9zbGF2ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ5Ni1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUEFDS0VUU19QRVJfU0xBVkUsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUwNC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTA1Olx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgbGFjcF9hY3RpdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MDYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfQUNUSVZFLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MTUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUxNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGxhY3BfcmF0ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUxNy1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTEFDUF9SQVRFLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MjUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUyNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFkX3NlbGVjdCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUyNy1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQURfU0VMRUNULCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MzUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUzNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFjdG9yX3N5c19wcmlvKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTM3LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BRF9BQ1RPUl9TWVNfUFJJTywgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTQ1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NDY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBwb3J0X2tleSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU0Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQURfVVNFUl9QT1JUX0tFWSwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTU1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NTY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01NTctXHRcdFx0XHQgbmxhX2dldF91NjQoZGF0YVtJRkxBX0JPTkRfQURfQUNUT1JfU1lTVEVNXSkpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTY1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NjY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBkeW5hbWljX2xiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTY3LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9UTEJfRFlOQU1JQ19MQiwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTc1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NzY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBtaXNzZWRfbWF4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTc3LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9NSVNTRURfTUFYLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01ODUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU4NjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGNvdXBsZWRfY29udHJvbCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU4Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQ09VUExFRF9DT05UUk9MLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01OTUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU5NjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGJyb2FkY2FzdF9uZWlnaCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU5Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQlJPQURDQVNUX05FSUdILCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy02MDUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjYwNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGZhbGxiYWNrX21vZGUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy02MDctXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfU1RSSUNULCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz04Njg9aW50IGJvbmRfb3B0X3RyeXNldF9ydG5sKHN0cnVjdCBib25kaW5nICpib25kLCB1bnNpZ25lZCBpbnQgb3B0aW9uLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy04NzQtXHRcdHJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6ODc1Olx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZvcHR2YWwsIGJ1Zik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg3Ni1cdHJldCA9IF9fYm9uZF9vcHRfc2V0X25vdGlmeShib25kLCBvcHRpb24sIFx1MDAyNm9wdHZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyBCb25kaW5nIE1vZHVsZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBib25kaW5nIG1vZHVsZSYjMzk7cyBjb3JlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzdGFydCBieSBleGFtaW5pbmcgYGJvbmRfbWFpbi5jYCwgYGJvbmRfb3B0aW9ucy5jYCwgYW5kIGBib25kX25ldGxpbmsuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBlbnRyeSBwb2ludHMgb3IgY3JpdGljYWwgY29tcG9uZW50cy4KCkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIGZ1bmN0aW9ucyBsaWtlIGBib25kX2NoYW5nZWxpbmtgLCBgYm9uZF9uZXdsaW5rYCwgYGJvbmRfY3JlYXRlYCwgYW5kIGFsc28gdGhlIG9wdGlvbi1yZWxhdGVkIGZ1bmN0aW9ucyBgYm9uZF9vcHRfdHJ5c2V0X3J0bmxgLCBgYm9uZF9kb19pb2N0bGAsIGFzIHdlbGwgYXMgYF9fYm9uZF9vcHRfc2V0X25vdGlmeWAgYW5kIGBfX2JvbmRfb3B0X3NldGAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBpbiB0aGUgYm9uZGluZyBsaWZlY3ljbGUuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2Agbm93LCBzZWVraW5nIG91dCBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBib25kaW5nIGluaXRpYWxpemF0aW9uLCBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wgKEFSUCkgbW9uaXRvcmluZywgYW5kIHRoZSB3b3JrIHF1ZXVlIHN5c3RlbS4gVGhlc2UgYXJlYXMgYXJlIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBiZWhhdmlvciBvZiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGFpbSBpcyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgYm9uZF98XmludCBib25kXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTIyMTQ9c3RhdGljIHZvaWQgYWRfbWFya2VyX3Jlc3BvbnNlX3JlY2VpdmVkKHN0cnVjdCBib25kX21hcmtlciAqbWFya2VyLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjM2LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjIyMzc6dm9pZCBib25kXzNhZF9pbml0aWF0ZV9hZ2dfc2VsZWN0aW9uKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgdGltZW91dClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjM4LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI0Ny0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyMjQ4OnZvaWQgYm9uZF8zYWRfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjQ5LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI3MS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyMjcyOnZvaWQgYm9uZF8zYWRfYmluZF9zbGF2ZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTIyNzMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMzI1LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjIzMjY6dm9pZCBib25kXzNhZF91bmJpbmRfc2xhdmUoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMzI3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjQ4OC0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyNDg5OnZvaWQgYm9uZF8zYWRfdXBkYXRlX2FkX2FjdG9yX3NldHRpbmdzKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI0OTAte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0yNTIwPXN0YXRpYyBib29sIGJvbmRfYWdnX3RpbWVyX2FkdmFuY2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI1NDgtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjU0OTp2b2lkIGJvbmRfM2FkX3N0YXRlX21hY2hpbmVfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjU1MC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTI3MTA9c3RhdGljIHZvaWQgYWRfdXBkYXRlX2FjdG9yX2tleXMoc3RydWN0IHBvcnQgKnBvcnQsIGJvb2wgcmVzZXQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI3NTMtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjc1NDp2b2lkIGJvbmRfM2FkX2FkYXB0ZXJfc3BlZWRfZHVwbGV4X2NoYW5nZWQoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNzU1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc4MC0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyNzgxOnZvaWQgYm9uZF8zYWRfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBzbGF2ZSAqc2xhdmUsIGNoYXIgbGluaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNzgyLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjgzOC0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyODM5OmludCBib25kXzNhZF9zZXRfY2FycmllcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yODQwLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9Mjg4MT1pbnQgX19ib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvKGNvbnN0IHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTEzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5MTQ6aW50IGJvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8oY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBhZF9pbmZvICphZF9pbmZvKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MTUte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTI0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5MjU6aW50IGJvbmRfM2FkX2xhY3BkdV9yZWN2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MjYtXHRcdFx0IHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5NTYtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjk1Nzp2b2lkIGJvbmRfM2FkX3VwZGF0ZV9sYWNwX3JhdGUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjk1OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5ODEtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjk4Mjp2b2lkIGJvbmRfM2FkX3VwZGF0ZV9sYWNwX2FjdGl2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTgzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9MzAwMT1zaXplX3QgYm9uZF8zYWRfc3RhdHNfc2l6ZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDEzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMTQ6aW50IGJvbmRfM2FkX3N0YXRzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRfM2FkX3N0YXRzICpzdGF0cylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDE1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTI4ND1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzA1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzMDY6aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzA3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMyNy1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTIzPW5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzI6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzNS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjM2OmludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjY1LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE2NjY6dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2Ny17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2NzktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY4MDp2b2lkIGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgY2hhciBsaW5rKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTg6dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTcxOS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3ODYtLyogQ2FsbGVkIHdpdGggUlROTCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3ODc6aW50IGJvbmRfYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHZvaWQgKmFkZHIpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTc4OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE4MzEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTgzMjp2b2lkIGJvbmRfYWxiX2NsZWFyX3ZsYW4oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIHNob3J0IHZsYW5faWQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzMy17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz01ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9uZF9kZWJ1Z19ybGJfaGFzaCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTU1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo1Njp2b2lkIGJvbmRfZGVidWdfcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTU3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTY0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo2NTp2b2lkIGJvbmRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjYte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjcwOnZvaWQgYm9uZF9kZWJ1Z19yZXJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy03MS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz03OT12b2lkIF9faW5pdCBib25kX2NyZWF0ZV9kZWJ1Z2ZzKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy04Ni1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6ODc6dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy04OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05NS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6OTY6dm9pZCBib25kX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05Ny17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05OS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTAwOnZvaWQgYm9uZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMDEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTAzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMDQ6dm9pZCBib25kX2RlYnVnX3JlcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTEwNS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz0xMDg9dm9pZCBfX2luaXQgYm9uZF9jcmVhdGVfZGVidWdmcyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTExLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMTI6dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMTMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NzM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybWRldl9vcHMgYm9uZF94ZnJtZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc1NS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NzU2OmludCBib25kX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy03NTcte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTE3Nj1zdGF0aWMgYm9vbCBib25kX3Nob3VsZF9ub3RpZnlfcGVlcnMoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjA4LS8qIFVzZSB0aGlzIHRvIHVwZGF0ZSBzZW5kX3BlZXJfbm90aWYgd2hlbiBSVE5MIG1heSBiZSBoZWxkIGluIG90aGVyIHBsYWNlcy4gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTIwOTp2b2lkIGJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgbG9uZyBkZWxheSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTIxMC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMjM4PXN0YXRpYyB2b2lkIGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgYm9vbCBmb3JjZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyNjUtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyNjY6dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI2Ny17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzY5LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzcwOnZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzcxLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4MDU9c3RhdGljIHZvaWQgYm9uZF9uZXRkZXZfbm90aWZ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpfd29yaylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4MjEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE4MjI6dm9pZCBib25kX3F1ZXVlX3NsYXZlX2V2ZW50KHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4MjMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTgyNi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTgyNzp2b2lkIGJvbmRfbG93ZXJfc3RhdGVfY2hhbmdlZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODI4LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4NTY9c3RhdGljIHZvaWQgYm9uZF9ldGhlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODY0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODY1OnZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg2Ni17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg3LS8qIGVuc2xhdmUgZGV2aWNlIFx1MDAzY3NsYXZlXHUwMDNlIHRvIGJvbmQgZGV2aWNlIFx1MDAzY21hc3Rlclx1MDAzZSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODg4OmludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg5LVx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNjA1LS8qIEEgd3JhcHBlciB1c2VkIGJlY2F1c2Ugb2YgbmRvX2RlbF9saW5rICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjI2MDY6aW50IGJvbmRfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI2MDcte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzM3ND1zdGF0aWMgaW50IGJvbmRfbmFfcmN2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyMi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyMzppbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0MjQtXHRcdCAgICAgIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzAzPXN0YXRpYyB1MzIgYm9uZF94bWl0X2hhc2hfeGRwKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMTctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMTg6dm9pZCBib25kX3dvcmtfaW5pdF9hbGwoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMTkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMzMy1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDMzNDp2b2lkIGJvbmRfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzM1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUwNTg9c3RhdGljIG5ldGRldl90eF90IGJvbmRfeG1pdF9hY3RpdmViYWNrdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNzQtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNzU6dm9pZCBib25kX3NsYXZlX2Fycl93b3JrX3JlYXJtKHN0cnVjdCBib25kaW5nICpib25kLCB1bnNpZ25lZCBsb25nIGRlbGF5KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDc2LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUxNDU9c3RhdGljIHZvaWQgYm9uZF9yZXNldF9zbGF2ZV9hcnIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MTU3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MTU4OmludCBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2tpcHNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MTU5LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5ODI9c3RhdGljIHZvaWQgYm9uZF9kZXN0cnVjdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5OTEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU5OTI6dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk5My17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02NTA4PXVuc2lnbmVkIGludCBib25kX2dldF9udW1fdHhfcXVldWVzKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTE3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NTE4OmludCBib25kX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY1MTkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9MTAwOD1pbnQgX19pbml0IGJvbmRfbmV0bGlua19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xMDEyLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoxMDEzOnZvaWQgYm9uZF9uZXRsaW5rX2Zpbmkodm9pZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMTAxNC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz04NDQ9aW50IF9fYm9uZF9vcHRfc2V0X25vdGlmeShzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg2Ny0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6ODY4OmludCBib25kX29wdF90cnlzZXRfcnRubChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgaW50IG9wdGlvbiwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy04Njkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9MTIxMz1zdGF0aWMgaW50IGJvbmRfb3B0aW9uX2FycF9pcF90YXJnZXRfcmVtKHN0cnVjdCBib25kaW5nICpib25kLCBfX2JlMzIgdGFyZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTI1MS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTI1Mjp2b2lkIGJvbmRfb3B0aW9uX2FycF9pcF90YXJnZXRzX2NsZWFyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjUzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTEzMTE9c3RhdGljIHZvaWQgc2xhdmVfc2V0X25zX21hZGRycyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgYm9vbCBhZGQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzM0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxMzM1OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfYWRkKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzM2LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzNDEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjEzNDI6dm9pZCBib25kX3NsYXZlX25zX21hZGRyc19kZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzNDMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9MTM4OD1zdGF0aWMgdm9pZCBfYm9uZF9vcHRpb25zX25zX2lwNl90YXJnZXRfc2V0KHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgc2xvdCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE0MDQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjE0MDU6dm9pZCBib25kX29wdGlvbl9uc19pcDZfdGFyZ2V0c19jbGVhcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTQwNi17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xNDUzPXN0YXRpYyB2b2lkIHNsYXZlX3NldF9uc19tYWRkcnMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUsIGJvb2wgYWRkKSB7fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxNDU1OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfYWRkKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKSB7fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxNDU3OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfZGVsKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKSB7fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU4LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz0yODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMjkwLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjI5MTp2b2lkIGJvbmRfY3JlYXRlX3Byb2NfZW50cnkoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMjkyLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMzA2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjMwNzp2b2lkIGJvbmRfcmVtb3ZlX3Byb2NfZW50cnkoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMzA4LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYz04NTI9dm9pZCBfX25ldF9leGl0IGJvbmRfZGVzdHJveV9zeXNmcyhzdHJ1Y3QgYm9uZF9uZXQgKmJuKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jLTg1OS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jOjg2MDp2b2lkIGJvbmRfcHJlcGFyZV9zeXNmc19ncm91cChzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jLTg2MS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmM9MTMzPWNvbnN0IHN0cnVjdCBzeXNmc19vcHMgc2xhdmVfc3lzZnNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTEzNi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jOjEzNzppbnQgYm9uZF9zeXNmc19zbGF2ZV9hZGQoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTEzOC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmMtMTQxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmM6MTQyOnZvaWQgYm9uZF9zeXNmc19zbGF2ZV9kZWwoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTE0My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQm9uZCBOZXRsaW5rIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdGhlIGJvbmQgZHJpdmVyIHNwZWNpZmljYWxseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byBob3cgdGhlIGBib25kYCBkcml2ZXIgaGFuZGxlcyBOZXRsaW5rIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIHByb2JhYmx5IGRlYnVnZ2luZyBvciBleHRlbmRpbmcgaXRzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoZSBOZXRsaW5rIGxldmVsLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYHJ0bmxfbGlua19vcHNgIHdpdGhpbiBgYm9uZF9uZXRsaW5rLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBlbnRyeXBvaW50cyBmb3IgbGluayBjb25maWd1cmF0aW9uIHZpYSBOZXRsaW5rIGFyZSBkZWZpbmVkLiBDaGVja2luZyB0aGVyZSB3aWxsIHF1aWNrbHkgc2hvdyBtZSB3aGljaCBOZXRsaW5rIG1lc3NhZ2VzIHRoZSBib25kIGRyaXZlciByZWdpc3RlcnMgZm9yIGFuZCBwcm9jZXNzZXMsIHJldmVhbGluZyB0aGUgbWV0aG9kcyBmb3IgYWRkaW5nLCBkZWxldGluZywgYW5kIGNvbmZpZ3VyaW5nIGJvbmRlZCBpbnRlcmZhY2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBib25kIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgTmV0bGluayBpbmZyYXN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2xpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTY1MTg9aW50IGJvbmRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY1MzMtXHRkZXZfbmV0X3NldChib25kX2RldiwgbmV0KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjUzNDpcdGJvbmRfZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgPSBcdTAwMjZib25kX2xpbmtfb3BzO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTM1LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9OTMzPXN0YXRpYyBpbnQgYm9uZF9maWxsX2xpbmt4c3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTk4NC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6OTg1OnN0cnVjdCBydG5sX2xpbmtfb3BzIGJvbmRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtOTg2LVx0LmtpbmRcdFx0XHQ9IFwmIzM0O2JvbmRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTg4CgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gQm9uZGluZyBTeW1ib2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoaXMgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGJvbmRpbmcgbW9kdWxlLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgc28gSSYjMzk7bSBtYWtpbmcgc3VyZSBJJiMzOTt2ZSBnb3QgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzOiBgYm9uZF9lbnNsYXZlYCwgYGJvbmRfcmVsZWFzZWAsIGBib25kX29wdF90cnlzZXRfcnRubGAsIGBfX2JvbmRfb3B0X3NldF9ub3RpZnlgLCBgYm9uZF9jcmVhdGVgLCBgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlYCwgYGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZWAsIGFuZCBgYm9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtYC4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIEkgYmVsaWV2ZSB0aGUgbGlzdCBpcyBleGhhdXN0aXZlLgoKTm93LCBsZXQmIzM5O3MgdGFja2xlIHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJIHJlbWVtYmVyIHRoYXQgYEJPTkRJTkdgIGlzIGNvbnRpbmdlbnQgdXBvbiBgSU5FVGAgYW5kIHRoZW4sIGNydWNpYWxseSwgZWl0aGVyIGBUTFNgIG9yLCBpZiBgVExTYCBpcyBleHBsaWNpdGx5IGRpc2FibGVkIChpLmUuLCBgVExTX0RFVklDRT1uYCkuIFRob3NlIGFyZSB0aGUgZ2F0ZWtlZXBlcnMuIE9rYXksIHRoaXMgdGVsbHMgbWUgdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYEJPTkRJTkdgLCBgSU5FVGAsIGFuZCwgb2YgY291cnNlLCBgTkVUX0NPUkVgIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGlzLiBBbHdheXMgbmVlZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoZSBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGZpbmFsIGNoZWNrIG92ZXIgZXZlcnl0aGluZyB0byBjb25maXJtIHRoZXJlIGFyZSBubyBob2xlcyBpbiBteSB0aGlua2luZy4gT25jZSBJJiMzOTttIHNhdGlzZmllZCwgSSYjMzk7bGwgaW52b2tlIGBzZXQtcmVzdWx0c2AuIFJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtib25kX29wdF90cnlzZXRfcnRubCYjMzQ7LAogICAgJiMzNDtib25kX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JvbmRfb3B0X3RyeXNldF9ydG5sJiMzNDssCiAgICAmIzM0O2JvbmRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZSYjMzQ7LAogICAgJiMzNDtib25kX3BlZXJfbm90aWZ5X3dvcmtfcmVhcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlbGF5ZWQgd29yayByZS1hcm1pbmcgYmVoYXZpb3IgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIgKGBDT05GSUdfQk9ORElOR2ApLiBXaGVuIGZhaWxpbmcgdG8gYWNxdWlyZSBSVE5MIGxvY2sgZHVyaW5nIHNsYXZlIG5vdGlmaWNhdGlvbiAvIHBlZXIgbm90aWZpY2F0aW9uIGluIGFjdGl2ZS1iYWNrdXAgQVJQIG1vbml0b3JpbmcsIGl0IG5vIGxvbmdlciBmb3JjaWJseSByZXNldHMgYGRlbHRhX2luX3RpY2tzYCB0byAxLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZyBvZiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgcGVyaW9kaWMgQVJQIG1vbml0b3IsIHdoaWNoIGlzIGEgc29mdHdhcmUgbmV0d29yayBpbnRlcmZhY2UgcmVhZGlseSBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcblxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeSwgbm9yIGRvZXMgaXQgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIGRhdGEsIGV0Yy4pLlxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YjkyMGQ4MTJlNTYzNDJmZjU3ZjFkYTFlYzNhODg0MmMxNjQ1NGFiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDk6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBlZjllYjBjNTNjNjYxLi5jMjNjZjE4YTk5NmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTM4NzEsMTAgJiM0MzszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChSRUFEX09OQ0UoYm9uZC0mZ3Q7c2VuZF9wZWVyX25vdGlmKSB8fCBzaG91bGRfbm90aWZ5X3J0bmwpIHsKLQkJaWYgKCFydG5sX3RyeWxvY2soKSkgewotCQkJZGVsdGFfaW5fdGlja3MgPSAxOwomIzQzOwkJaWYgKCFydG5sX3RyeWxvY2soKSkKIAkJCWdvdG8gcmVfYXJtOwotCQl9CiAKIAkJaWYgKGJvbmQtJmd0O3NlbmRfcGVlcl9ub3RpZikKIAkJCWJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJvbmRpbmcgRHJpdmVyIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgY2hhbmdlZCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBNeSBpbml0aWFsIHN0ZXAgaXMgZ29pbmcgdG8gYmUgYSBjYXJlZnVsIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYsIG9mIGNvdXJzZS4gVGhhdCYjMzk7cyBteSBnby10byBhcHByb2FjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCkdpdmVuIHRoZSBsaW5lIG51bWJlciByZWZlcmVuY2UsIEkmIzM5O2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgdG9vbCB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM4NzEuIEkgd2FudCB0byBzZWUgdGhlIGFkamFjZW50IGxpbmVzIG9mIGNvZGU7IHRoYXQgc3Vycm91bmRpbmcgY29udGV4dCBpcyBjcnVjaWFsLiBHZXR0aW5nIHRoZSBiaWcgcGljdHVyZSBvZiBob3cgdGhlIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGlzIHZpdGFsLiBPbmx5IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgY2FuIEkgdHJ1bHkgYXNzZXNzIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzg0MDpcdFx0cmV0dXJuIHNob3VsZF9ub3RpZnlfcnRubDtcbjM4NDE6XHR9XG4zODQyOlx0XG4zODQzOlx0c3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbjM4NDQ6XHR7XG4zODQ1Olx0XHRib29sIHNob3VsZF9ub3RpZnlfcnRubDtcbjM4NDY6XHRcdGludCBkZWx0YV9pbl90aWNrcztcbjM4NDc6XHRcbjM4NDg6XHRcdGRlbHRhX2luX3RpY2tzID0gbXNlY3NfdG9famlmZmllcyhib25kLVx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpO1xuMzg0OTpcdFxuMzg1MDpcdFx0aWYgKCFib25kX2hhc19zbGF2ZXMoYm9uZCkpXG4zODUxOlx0XHRcdGdvdG8gcmVfYXJtO1xuMzg1MjpcdFxuMzg1MzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzg1NDpcdFxuMzg1NTpcdFx0aWYgKGJvbmRfYWJfYXJwX2luc3BlY3QoYm9uZCkpIHtcbjM4NTY6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zODU3Olx0XG4zODU4Olx0XHRcdC8qIFJhY2UgYXZvaWRhbmNlIHdpdGggYm9uZF9jbG9zZSBmbHVzaCBvZiB3b3JrcXVldWUgKi9cbjM4NTk6XHRcdFx0aWYgKCFydG5sX3RyeWxvY2soKSkge1xuMzg2MDpcdFx0XHRcdGRlbHRhX2luX3RpY2tzID0gMTtcbjM4NjE6XHRcdFx0XHRnb3RvIHJlX2FybTtcbjM4NjI6XHRcdFx0fVxuMzg2MzpcdFxuMzg2NDpcdFx0XHRib25kX2FiX2FycF9jb21taXQoYm9uZCk7XG4zODY1Olx0XG4zODY2Olx0XHRcdHJ0bmxfdW5sb2NrKCk7XG4zODY3Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjM4Njg6XHRcdH1cbjM4Njk6XHRcbjM4NzA6XHRcdHNob3VsZF9ub3RpZnlfcnRubCA9IGJvbmRfYWJfYXJwX3Byb2JlKGJvbmQpO1xuMzg3MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zODcyOlx0XG4zODczOlx0XHRpZiAoUkVBRF9PTkNFKGJvbmQtXHUwMDNlc2VuZF9wZWVyX25vdGlmKSB8fCBzaG91bGRfbm90aWZ5X3J0bmwpIHtcbjM4NzQ6XHRcdFx0aWYgKCFydG5sX3RyeWxvY2soKSlcbjM4NzU6XHRcdFx0XHRnb3RvIHJlX2FybTtcbjM4NzY6XHRcbjM4Nzc6XHRcdFx0aWYgKGJvbmQtXHUwMDNlc2VuZF9wZWVyX25vdGlmKVxuMzg3ODpcdFx0XHRcdGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTtcbjM4Nzk6XHRcbjM4ODA6XHRcdFx0aWYgKHNob3VsZF9ub3RpZnlfcnRubCkge1xuMzg4MTpcdFx0XHRcdGJvbmRfc2xhdmVfc3RhdGVfbm90aWZ5KGJvbmQpO1xuMzg4MjpcdFx0XHRcdGJvbmRfc2xhdmVfbGlua19ub3RpZnkoYm9uZCk7XG4zODgzOlx0XHRcdH1cbjM4ODQ6XHRcbjM4ODU6XHRcdFx0cnRubF91bmxvY2soKTtcbjM4ODY6XHRcdH1cbjM4ODc6XHRcbjM4ODg6XHRyZV9hcm06XG4zODg5Olx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKVxuMzg5MDpcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoYm9uZC1cdTAwM2V3cSwgXHUwMDI2Ym9uZC1cdTAwM2VhcnBfd29yaywgZGVsdGFfaW5fdGlja3MpO1xuMzg5MTpcdH1cbjM4OTI6XHRcbjM4OTM6XHRzdGF0aWMgdm9pZCBib25kX2FycF9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjM4OTQ6XHR7XG4zODk1Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZyxcbjM4OTY6XHRcdFx0XHRcdFx0ICAgIGFycF93b3JrLndvcmspO1xuMzg5NzpcdFxuMzg5ODpcdFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUNUSVZFQkFDS1VQKVxuMzg5OTpcdFx0XHRib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKGJvbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjEwCgkJCQkJCQlvdXRwdXQ6IDI1MwoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJvbmRpbmcgQVJQIE1vbml0b3JpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBgZGVsdGFfaW5fdGlja3MgPSAxYCBiZWZvcmUganVtcGluZyB0byBgcmVfYXJtYCBpZiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIHRoZSBzZWNvbmQgdHJ5bG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSByaXNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjbGFzc2ljIGdvdGNoYS4KCkltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBkZWx0YV9pbl90aWNrc2AgaXMgaW5pdGlhbGl6ZWQgYXQgbGluZSAzODQ4LCB1c2luZyBgbXNlY3NfdG9famlmZmllcyhib25kLSZndDtwYXJhbXMuYXJwX2ludGVydmFsKWAuIFNvLCB0aGF0JiMzOTtzIGdvb2QuIEl0JiMzOTtzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIHBvdGVudGlhbCBqdW1wLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgYXJlIGJlaW5nIG1lc3NlZCB3aXRoLCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBvciBmaWVsZHMgYmVpbmcgcmVhZC4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byB0aW1pbmcgYW5kIHJlc2NoZWR1bGluZyB3aXRoaW4gdGhlIGJvbmRpbmcgQVJQIG1vbml0b3JpbmcgbG9naWMuCgpOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBBcmUgdGhlcmUgKmFueSogb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW55d2hlcmUgaW4gdGhpcyBwYXRjaD8gQWZ0ZXIgYSBxdWljayBzY2FuLCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgdGhlcmUgYXJlLiBObyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IGJ1ZmZlcnMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBCUEYgYnVmZmVycyBhcmUgdG91Y2hlZC4gVGhlcmUgYXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHMgdGhhdCBqdW1wIG91dC4gQWdhaW4sIGBkZWx0YV9pbl90aWNrc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSBvZiBjb25jZXJuLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGRhdGEgZXhwb3N1cmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiBvciBjb25jdXJyZW5jeSB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQsIG9yIGV2ZW4gdW5uZWNlc3Nhcnkgc2luY2UgdGhpcyBpcyBhIHB1cmUgbG9naWMgZml4LiBObyBuZWVkIHRvIGdvIGRlZXBlciBsb29raW5nIGZvciBtZW1vcnkgY29ycnVwdGlvbiBhcyBpdCYjMzk7cyBub3QgcG9zc2libGUgaW4gdGhpcyBzY2VuYXJpby4KCkkmIzM5O20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAgYW5kIGZvbGxvdyB3aXRoIGEgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IGNvbnRyYXN0cyBLQVNBTiBhbmQgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGFzc2lnbm1lbnQgYGRlbHRhX2luX3RpY2tzID0gMTtgIHByaW9yIHRvIGJyYW5jaGluZyB0byBgcmVfYXJtYCB3aGVuIGBydG5sX3RyeWxvY2soKWAgZmFpbHMgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oKWAuIFxuXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgdmFyaWFibGUgYGRlbHRhX2luX3RpY2tzYCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gKGBkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcblxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeSwgbm9yIGRvZXMgaXQgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIGRhdGEsIGV0Yy4pLlxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0Mjo0NS4wMjMyNTQ4MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0MTQ5MzkzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIixcbiAgICBcImJvbmRfcmVsZWFzZVwiLFxuICAgIFwiYm9uZF9vcHRfdHJ5c2V0X3J0bmxcIixcbiAgICBcImJvbmRfY3JlYXRlXCIsXG4gICAgXCJib25kX2NoYW5nZV9hY3RpdmVfc2xhdmVcIixcbiAgICBcImJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYXNzaWdubWVudCBgZGVsdGFfaW5fdGlja3MgPSAxO2AgcHJpb3IgdG8gYnJhbmNoaW5nIHRvIGByZV9hcm1gIHdoZW4gYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbigpYC4gXFxuXFxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxcbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB2YXJpYWJsZSBgZGVsdGFfaW5fdGlja3NgIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiAoYGRlbHRhX2luX3RpY2tzID0gbXNlY3NfdG9famlmZmllcyhib25kLVxcdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXFxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlbGF5ZWQgd29yayByZS1hcm1pbmcgYmVoYXZpb3IgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIgKGBDT05GSUdfQk9ORElOR2ApLiBXaGVuIGZhaWxpbmcgdG8gYWNxdWlyZSBSVE5MIGxvY2sgZHVyaW5nIHNsYXZlIG5vdGlmaWNhdGlvbiAvIHBlZXIgbm90aWZpY2F0aW9uIGluIGFjdGl2ZS1iYWNrdXAgQVJQIG1vbml0b3JpbmcsIGl0IG5vIGxvbmdlciBmb3JjaWJseSByZXNldHMgYGRlbHRhX2luX3RpY2tzYCB0byAxLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZyBvZiB0aGUgYm9uZGluZyBkcml2ZXIncyBwZXJpb2RpYyBBUlAgbW9uaXRvciwgd2hpY2ggaXMgYSBzb2Z0d2FyZSBuZXR3b3JrIGludGVyZmFjZSByZWFkaWx5IGV4ZXJjaXNhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDI6NDUuMDIzMjcwMzY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTA0NjA1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YjkyMGQ4MTJlNTYzNDJmZjU3ZjFkYTFlYzNhODg0MmMxNjQ1NGFiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuaW5kZXggZWY5ZWIwYzUzYzY2MS4uYzIzY2YxOGE5OTZhYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xcbkBAIC0zODcxLDEwICszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRpZiAoUkVBRF9PTkNFKGJvbmQtXFx1MDAzZXNlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7XFxuLVxcdFxcdGlmICghcnRubF90cnlsb2NrKCkpIHtcXG4tXFx0XFx0XFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xcbitcXHRcXHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxcbiBcXHRcXHRcXHRnb3RvIHJlX2FybTtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGJvbmQtXFx1MDAzZXNlbmRfcGVlcl9ub3RpZilcXG4gXFx0XFx0XFx0Ym9uZF9wZWVyX25vdGlmeV9tYXlfZXZlbnRzKGJvbmQsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0Mjo0NS40MTQ0MzAxODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2MDUyOTY1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9lbnNsYXZlXCIsXG4gICAgXCJib25kX3JlbGVhc2VcIixcbiAgICBcImJvbmRfb3B0X3RyeXNldF9ydG5sXCIsXG4gICAgXCJib25kX2NyZWF0ZVwiLFxuICAgIFwiYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlXCIsXG4gICAgXCJib25kX3BlZXJfbm90aWZ5X3dvcmtfcmVhcm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVsYXllZCB3b3JrIHJlLWFybWluZyBiZWhhdmlvciBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgd2l0aGluIHRoZSBib25kaW5nIGRyaXZlciAoYENPTkZJR19CT05ESU5HYCkuIFdoZW4gZmFpbGluZyB0byBhY3F1aXJlIFJUTkwgbG9jayBkdXJpbmcgc2xhdmUgbm90aWZpY2F0aW9uIC8gcGVlciBub3RpZmljYXRpb24gaW4gYWN0aXZlLWJhY2t1cCBBUlAgbW9uaXRvcmluZywgaXQgbm8gbG9uZ2VyIGZvcmNpYmx5IHJlc2V0cyBgZGVsdGFfaW5fdGlja3NgIHRvIDEuIFRoaXMgYWZmZWN0cyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIG9mIHRoZSBib25kaW5nIGRyaXZlcidzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YjkyMGQ4MTJlNTYzNDJmZjU3ZjFkYTFlYzNhODg0MmMxNjQ1NGFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDk6NDI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuaW5kZXggZWY5ZWIwYzUzYzY2MS4uYzIzY2YxOGE5OTZhYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbkBAIC0zODcxLDEwICszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKFJFQURfT05DRShib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7XG4tXHRcdGlmICghcnRubF90cnlsb2NrKCkpIHtcbi1cdFx0XHRkZWx0YV9pbl90aWNrcyA9IDE7XG4rXHRcdGlmICghcnRubF90cnlsb2NrKCkpXG4gXHRcdFx0Z290byByZV9hcm07XG4tXHRcdH1cbiBcbiBcdFx0aWYgKGJvbmQtXHUwMDNlc2VuZF9wZWVyX25vdGlmKVxuIFx0XHRcdGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQyOjQ1LjQxNDQzMTc5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MTQ2MTc0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIGNoYW5nZTpcblxuKipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIEFSUCBNb25pdG9yaW5nIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBtb2RpZmljYXRpb24gaXMgZm9jdXNlZCBvbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2Agd2l0aGluIHRoZSBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBoYXMgdG8gZG8gd2l0aCBBY3RpdmUtQmFja3VwIG1vZGUgYW5kIGhvdyBpdCBoYW5kbGVzIEFSUCBtb25pdG9yaW5nLCB3aGljaCBpcyBhIGtleSBjb21wb25lbnQgb2YgdGhhdCBzZXR1cC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhpcyBBUlAgbW9uaXRvcmluZyBpcyBkb2luZyBpbiB0aGUgb3JpZ2luYWwgY29kZSB0byBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBwYXRjaC5cblxuTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYW5kIGZvY3VzIG9uIHRoZSBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgZnVuY3Rpb24uIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjYWxsIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBBUlAgbW9uaXRvcmluZyBsb2dpYyBpcyBjcnVjaWFsIOKAkyB0aGluZ3MgbGlrZSBob3cgaXQgc2VuZHMgQVJQIHJlcXVlc3RzLCBob3cgaXQgaW50ZXJwcmV0cyB0aGUgcmVzcG9uc2VzIChvciBsYWNrIHRoZXJlb2YpLCBhbmQgaG93IGl0IHRyaWdnZXJzIGEgZmFpbG92ZXIgYXJlIGFsbCBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLiBJIG5lZWQgdG8gc2VlIHdoYXQgYXNwZWN0cyBvZiB0aGUgYm9uZGluZyBkcml2ZXIncyBhY3RpdmUtYmFja3VwIGJlaGF2aW9yIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQyOjU5LjU2MDYwNzgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4NTA6XFx0XFx0aWYgKCFib25kX2hhc19zbGF2ZXMoYm9uZCkpXFxuMzg1MTpcXHRcXHRcXHRnb3RvIHJlX2FybTtcXG4zODUyOlxcdFxcbjM4NTM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjM4NTQ6XFx0XFxuMzg1NTpcXHRcXHRpZiAoYm9uZF9hYl9hcnBfaW5zcGVjdChib25kKSkge1xcbjM4NTY6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzg1NzpcXHRcXG4zODU4OlxcdFxcdFxcdC8qIFJhY2UgYXZvaWRhbmNlIHdpdGggYm9uZF9jbG9zZSBmbHVzaCBvZiB3b3JrcXVldWUgKi9cXG4zODU5OlxcdFxcdFxcdGlmICghcnRubF90cnlsb2NrKCkpIHtcXG4zODYwOlxcdFxcdFxcdFxcdGRlbHRhX2luX3RpY2tzID0gMTtcXG4zODYxOlxcdFxcdFxcdFxcdGdvdG8gcmVfYXJtO1xcbjM4NjI6XFx0XFx0XFx0fVxcbjM4NjM6XFx0XFxuMzg2NDpcXHRcXHRcXHRib25kX2FiX2FycF9jb21taXQoYm9uZCk7XFxuMzg2NTpcXHRcXG4zODY2OlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuMzg2NzpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMzg2ODpcXHRcXHR9XFxuMzg2OTpcXHRcXG4zODcwOlxcdFxcdHNob3VsZF9ub3RpZnlfcnRubCA9IGJvbmRfYWJfYXJwX3Byb2JlKGJvbmQpO1xcbjM4NzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzg3MjpcXHRcXG4zODczOlxcdFxcdGlmIChSRUFEX09OQ0UoYm9uZC1cXHUwMDNlc2VuZF9wZWVyX25vdGlmKSB8fCBzaG91bGRfbm90aWZ5X3J0bmwpIHtcXG4zODc0OlxcdFxcdFxcdGlmICghcnRubF90cnlsb2NrKCkpXFxuMzg3NTpcXHRcXHRcXHRcXHRnb3RvIHJlX2FybTtcXG4zODc2OlxcdFxcbjM4Nzc6XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXNlbmRfcGVlcl9ub3RpZilcXG4zODc4OlxcdFxcdFxcdFxcdGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTtcXG4zODc5OlxcdFxcbjM4ODA6XFx0XFx0XFx0aWYgKHNob3VsZF9ub3RpZnlfcnRubCkge1xcbjM4ODE6XFx0XFx0XFx0XFx0Ym9uZF9zbGF2ZV9zdGF0ZV9ub3RpZnkoYm9uZCk7XFxuMzg4MjpcXHRcXHRcXHRcXHRib25kX3NsYXZlX2xpbmtfbm90aWZ5KGJvbmQpO1xcbjM4ODM6XFx0XFx0XFx0fVxcbjM4ODQ6XFx0XFxuMzg4NTpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjM4ODY6XFx0XFx0fVxcbjM4ODc6XFx0XFxuMzg4ODpcXHRyZV9hcm06XFxuMzg4OTpcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClcXG4zODkwOlxcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhib25kLVxcdTAwM2V3cSwgXFx1MDAyNmJvbmQtXFx1MDAzZWFycF93b3JrLCBkZWx0YV9pbl90aWNrcyk7XFxuMzg5MTpcXHR9XFxuMzg5MjpcXHRcXG4zODkzOlxcdHN0YXRpYyB2b2lkIGJvbmRfYXJwX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjM4OTQ6XFx0e1xcbjM4OTU6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXFxuMzg5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgYXJwX3dvcmsud29yayk7XFxuMzg5NzpcXHRcXG4zODk4OlxcdFxcdGlmIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FDVElWRUJBQ0tVUClcXG4zODk5OlxcdFxcdFxcdGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oYm9uZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQyOjU5LjU2MDgzMDg4OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4OTY2MjMzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiBmaXJzdCBwZXJzb24sIGtlZXBpbmcgaW4gbWluZCBJJ20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIHJlbGF0ZWQgdG8gdHJvdWJsZXNob290aW5nIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYDpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogQmVmb3JlIExpbmUgMzg1MCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgKmJlZm9yZSogbGluZSAzODUwIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYC4gVGhhdCBsaW5lIGlzIG9idmlvdXNseSBhIHNpZ25pZmljYW50IGJyZWFrcG9pbnQsIG9yIHBvc3NpYmx5IHRoZSBsb2NhdGlvbiBvZiBhbiBhbm9tYWx5IGFzIGFuIGluaXRpYWwgaW52ZXN0aWdhdGlvbiBzdGVwLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvZGUncyBiZWhhdmlvciAqbGVhZGluZyB1cCogdG8gdGhhdCBwb2ludC4gSSdtIHRoaW5raW5nOiB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIG9yIG1vZGlmaWVkLCBhbmQgYXJlIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQ/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMgZHVyaW5nIHRoYXQgZXhlY3V0aW9uIHBlcmlvZCB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCBjb3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIGxlYWRpbmcgdXAgdG8gdGhhdCBsaW5lLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25kaXRpb25zPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHNjYW5uaW5nIHRoZSBjb2RlLCBxdWlja2x5LCBmb3Igb2J2aW91cyBpbmRpY2F0b3JzOiBsb29wcywgZnVuY3Rpb24gY2FsbHMsIHZhcmlhYmxlIGFzc2lnbm1lbnRzIHRoYXQgc2VlbSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQsIGFuZCBjb25kaXRpb25zIHRoYXQgbWlnaHQgbGVhZCB0byBkaWZmZXJlbnQgYnJhbmNoZXMgb2YgY29kZS4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvYnZpb3VzIHJlZCBmbGFncywgc3VjaCBhcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVudXN1YWwgb3BlcmF0aW9ucyBvbiBzaGFyZWQgcmVzb3VyY2VzLiBLbm93aW5nIHRoaXMgdG9vbCdzIGFyY2hpdGVjdHVyZSwgSSdsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uLXJlbGF0ZWQgZWxlbWVudHMgdG9vLCBsaWtlIHdoYXQgc2V0dGluZ3MgYXJlIGxvYWRlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBjb2RlIGZsb3cuIFRoaXMgaW5pdGlhbCBwYXNzIHdpbGwgYmUgbW9yZSBvZiBhIHJlY29ubmFpc3NhbmNlIG1pc3Npb24sIGp1c3QgdHJ5aW5nIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgcmVhbGx5IGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0MzowNi40NTc0NTcwNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODMwOlxcdFxcdG5ld19zbGF2ZS1cXHUwMDNlbGFzdF9saW5rX3VwID0gamlmZmllcztcXG4zODMxOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihib25kLVxcdTAwM2VjdXJyZW50X2FycF9zbGF2ZSwgbmV3X3NsYXZlKTtcXG4zODMyOlxcdFxcbjM4MzM6XFx0Y2hlY2tfc3RhdGU6XFxuMzgzNDpcXHRcXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xcbjM4MzU6XFx0XFx0XFx0aWYgKHNsYXZlLVxcdTAwM2VzaG91bGRfbm90aWZ5IHx8IHNsYXZlLVxcdTAwM2VzaG91bGRfbm90aWZ5X2xpbmspIHtcXG4zODM2OlxcdFxcdFxcdFxcdHNob3VsZF9ub3RpZnlfcnRubCA9IEJPTkRfU0xBVkVfTk9USUZZX05PVztcXG4zODM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM4Mzg6XFx0XFx0XFx0fVxcbjM4Mzk6XFx0XFx0fVxcbjM4NDA6XFx0XFx0cmV0dXJuIHNob3VsZF9ub3RpZnlfcnRubDtcXG4zODQxOlxcdH1cXG4zODQyOlxcdFxcbjM4NDM6XFx0c3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4zODQ0OlxcdHtcXG4zODQ1OlxcdFxcdGJvb2wgc2hvdWxkX25vdGlmeV9ydG5sO1xcbjM4NDY6XFx0XFx0aW50IGRlbHRhX2luX3RpY2tzO1xcbjM4NDc6XFx0XFxuMzg0ODpcXHRcXHRkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbCk7XFxuMzg0OTpcXHRcXG4zODUwOlxcdFxcdGlmICghYm9uZF9oYXNfc2xhdmVzKGJvbmQpKVxcbjM4NTE6XFx0XFx0XFx0Z290byByZV9hcm07XFxuMzg1MjpcXHRcXG4zODUzOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zODU0OlxcdFxcbjM4NTU6XFx0XFx0aWYgKGJvbmRfYWJfYXJwX2luc3BlY3QoYm9uZCkpIHtcXG4zODU2OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjM4NTc6XFx0XFxuMzg1ODpcXHRcXHRcXHQvKiBSYWNlIGF2b2lkYW5jZSB3aXRoIGJvbmRfY2xvc2UgZmx1c2ggb2Ygd29ya3F1ZXVlICovXFxuMzg1OTpcXHRcXHRcXHRpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQzOjA2LjQ1NzY3NDY0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTE5Mzc1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIFwid2h5XCIgYmVoaW5kIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHRoZSByZW1vdmFsIG9mIGBkZWx0YV9pbl90aWNrcyA9IDFgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgaGlzdG9yeSBvciBnaXQgbG9nIGFyb3VuZCB0aGlzIHNlY3Rpb24gdG8gZ3Jhc3AgdGhlIGNvbnRleHQuXG5cbkkgc2VlIHRoYXQgYGRlbHRhX2luX3RpY2tzYCB3YXMgb3JpZ2luYWxseSBpbml0aWFsaXplZCB0byBgbXNlY3NfdG9famlmZmllcyhib25kLVx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpYC4gVGhlbiwgaW4gdGhlIHNlY29uZCBgcnRubF90cnlsb2NrKClgIGNhbGwsIHRoZSBsaW5lIHNldHRpbmcgYGRlbHRhX2luX3RpY2tzID0gMWAgd2FzIHJlbW92ZWQuIFRoYXQncyB0aGUga2V5OiB3aHkgd2FzIHRoaXMgcmVtb3ZlZD9cblxuTG9va2luZyBhdCB0aGUgY29kZSBibG9ja3MsIEkgc2VlIHRoYXQgaWYgYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiB0aGUgZmlyc3QgYmxvY2ssIGBkZWx0YV9pbl90aWNrc2AgZ2V0cyBzZXQgdG8gMS4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBhdm9pZGFuY2UgbWVjaGFuaXNtLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUgZmx1c2ggaW4gYGJvbmRfY2xvc2VgLiBIb3dldmVyLCBpbiB0aGUgc2Vjb25kIGJsb2NrLCB0aGUgYXNzaWdubWVudCBpcyBnb25lISBJZiBgcnRubF90cnlsb2NrKClgIGZhaWxzLCBzaG91bGRuJ3Qgd2Ugc3RpbGwgaW1tZWRpYXRlbHkgcmUtYXJtIGluIHRoZSBzZWNvbmQgYmxvY2s/IE5vdywgYGRlbHRhX2luX3RpY2tzYCBjb3VsZCByZXRhaW4gaXRzIHByZXZpb3VzIHZhbHVlIChgbXNlY3NfdG9famlmZmllcyguLi4pYCkgb3IgMSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpcnN0IGJsb2NrIHdhcyBzdWNjZXNzZnVsLlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBib25kaW5nIGRyaXZlciBpcyBhIHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvcnRubC4gSXQncyBhIHB1cmUgc29mdHdhcmUgZHJpdmVyLCBzbyB5ZXMsIGl0IGlzIGZ1enphYmxlIGluIFFFTVUgb3IgR0NFLlxuXG5JIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG9yIG5vbi1mdW5jdGlvbmFsIGNoYW5nZS4gUHJldmlvdXNseSwgaWYgYHJ0bmxfdHJ5bG9jaygpYCBmYWlsZWQgaW4gdGhlIHNlY29uZCBibG9jaywgc2V0dGluZyBgZGVsdGFfaW5fdGlja3NgIHRvIDEgZW5zdXJlZCBpbW1lZGlhdGUgcmUtYXJtaW5nIG9mIHRoZSBkZWxheWVkIHdvcmsgdG8gcmV0cnkgdGhlIGBydG5sX2xvY2tgIGFuZCBzZW5kIHBlZXIvbGluayBub3RpZmljYXRpb25zLiBSZW1vdmluZyB0aGlzIG1pZ2h0IGludHJvZHVjZSBhIGRlbGF5IGRldGVybWluZWQgYnkgdGhlIG9yaWdpbmFsIGFycF9pbnRlcnZhbCwgcmF0aGVyIHRoYW4gYSBtb3JlIGltbWVkaWF0ZSByZXRyeS5cblxuU28sICp3aHkqIHdhcyBgZGVsdGFfaW5fdGlja3MgPSAxYCByZW1vdmVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBsb2cgb3IgY29tbWl0IGhpc3RvcnkgZm9yIGJvbmRpbmcgYXJwIG1vbiB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUuIE15IHRob3VnaHQgaXMgYGdpdCBsb2cgLW4gNSBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBvciB1c2UgZ3JlcHBlciBpZiBuZWVkZWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIExldCdzIGNoZWNrIHRoZSBLY29uZmlnIGZvciBCT05ESU5HIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQzOjMxLjU3NzA1MTc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDQ4NDg3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJPTkRJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6MzEuODIxNTQ3MTUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjcyMDQ2MzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBCb25kaW5nIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHVzdWFsIHN1c3BlY3RzLiBNeSBndXQgc2F5cyB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmdgIGRpcmVjdG9yeSBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBib25kaW5nIGRyaXZlciBjb2RlLCBhbmQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBmaWxlcy4gSWYgaXQncyBub3QgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzZWFyY2ggYW5kIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL25ldGAgbW9yZSBnZW5lcmFsbHkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykuIExldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0MzozOC41NDIwMTIzMDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTk3NDcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk9ORElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6MzguNzAxOTkzMTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMzA5MzA2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2Vzcywgd3JpdHRlbiBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgb3B0aW9ucywgcGVyaGFwcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZHJpdmVyIEknbSByZXNlYXJjaGluZyBvciBhIGdlbmVyYWwgYXJlYSB0aGF0IHJlcXVpcmVzIG9wdGltaXphdGlvbi4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGFudGljaXBhdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYXliZSBzb21lIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlIG9yIG90aGVyIHByZXJlcXVpc2l0ZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQzOjQ0LjAzMjkyNjE4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIkR1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cXG4gIDYzOlxcdFxcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcXG4gIDY0OlxcdFxcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6NDQuMDMzMDExMDk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNDIyOTYwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBzeW1ib2xzIHRoYXQgbWlnaHQgc3dheSBteSBkZWNpc2lvbi4gSSBzaG91bGQgY2hlY2sgZm9yIHRoaW5ncyBsaWtlIGBORVRfQ09SRWAsIGBCT05ESU5HYCwgYW5kIGBJTkVUYCB0byBlbnN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgY29udGV4dC5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgY3JpdGVyaWEuIFdlIG5lZWQgdG8gcnVsZSBvdXQ6IERvY3VtZW50YXRpb24vS2NvbmZpZyBjaGFuZ2VzLCBkZWNvcmF0aXZlIHN0dWZmIGxpa2UgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXphdGlvbiwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyIGNvZGUgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzLlxuXG5SaWdodCwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGF0J3Mgc3F1YXJlbHkgaW4gdGhlIGNvcmUgYm9uZGluZyBkcml2ZXIgKGBDT05GSUdfQk9ORElOR2ApLCBhbmQgaXQncyBmaWRkbGluZyB3aXRoIHRoZSB3b3JrcXVldWUgc2NoZWR1bGluZyBpbnRlcnZhbCB3aGVuIGBydG5sX3RyeWxvY2soKWAgZmFpbHMuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5MZXQncyBicmVhayBpdCBkb3duLiBJdCBjaGFuZ2VzIHRoZSB0aW1pbmcgYW5kIGV4ZWN1dGlvbiBsb2dpYyBvZiB0aGUgQVJQIG1vbml0b3Jpbmcgd29ya3F1ZXVlIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIENydWNpYWxseSwgYm9uZGluZyBpcyBhICpzb2Z0d2FyZSogdmlydHVhbCBuZXR3b3JrIGRldmljZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIGNvcmUgbmV0d29ya2luZy4gSSBjYW4gZWFzaWx5IGluc3RhbnRpYXRlIGl0IHdpdGggcnRubC9uZXRsaW5rLCBhbmQgaXQncyAqZnVsbHkqIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBvbmUgbG9va3MgcHJvbWlzaW5nLCBzbyBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBpZGVudGlmeSBhcHByb3ByaWF0ZSBzeW1ib2xzLiBJIG5lZWQgdG8gZmluZCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIGxldCdzIGNhbGwgdGhlbSBcIkZvY3VzU3ltYm9sc1wiIOKAkyB0aGF0IGFyZSByZWxhdGVkIHRvIGJvbmRpbmcgQVJQIG1vbml0b3JpbmcsIG9yIHBlcmhhcHMgYm9uZGluZyBuZXRsaW5rL3J0bmwgaW50ZXJhY3Rpb25zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGluZ3MgbGlrZSBgYm9uZF9hcnBfbW9uaXRvcmAsIGFuZCBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AsIGBib25kX29wdGlvbnMuY2AsIG9yIGBib25kX25ldGxpbmsuY2AuIEkgd2lsbCBydW4gYSBncmVwIGZvciB0aG9zZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEkgbWlnaHQgYWxzbyB0cnkgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBib25kaW5nIEFSUCBtb25pdG9yIGlzIHNldCB1cCBhbmQgdHJpZ2dlcmVkLiBUaGlzIHdpbGwgbGVhZCBtZSB0byBhcHByb3ByaWF0ZSB0ZXN0IGNhc2VzIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6NTMuMzc1MzA5ODgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0MTIxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hcnBfbW9uaXRvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mzg0Mz1zdGF0aWMgdm9pZCBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zODkyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6Mzg5MzpzdGF0aWMgdm9pZCBib25kX2FycF9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM4OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzE4PXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI3LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZib25kLVxcdTAwM2VtaWlfd29yaywgYm9uZF9taWlfbW9uaXRvcik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MzI4OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZib25kLVxcdTAwM2VhcnBfd29yaywgYm9uZF9hcnBfbW9uaXRvcik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI5LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZib25kLVxcdTAwM2VhZF93b3JrLCBib25kXzNhZF9zdGF0ZV9tYWNoaW5lX2hhbmRsZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0Mzo1My41MTM3MjYwODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2NTIyNzQ3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQXNzZXNzaW5nIEFSUCBNb25pdG9yaW5nIGFuZCBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IEFSUCBtb25pdG9yaW5nIGludGVyYWN0cyB3aXRoIGJvbmRpbmcuIEknbSB0aGlua2luZyBhYm91dCB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyB0aGF0ICpjb25maWd1cmUqIGFuZCAqZW5hYmxlKiBpdCB3aXRoaW4gdGhlIGJvbmRpbmcgY29udGV4dC4gVGhpbmdzIGxpa2UgdGhlIGBhcnBfaW50ZXJ2YWxgIOKAkyB3aGF0J3MgdGhlIGZyZXF1ZW5jeT8gQW5kIHRoYXQgYGFycF9pcF90YXJnZXRgIC0gd2hpY2ggSVAgYWRkcmVzcyBhcmUgd2UgdXNpbmcgdG8gcHJvYmU/IEknbSB0cnlpbmcgdG8gaWRlbnRpZnkgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGRlZmluZWQuIEJleW9uZCBqdXN0IHRoZSBzZXR0aW5ncyB0aGVtc2VsdmVzLCBJIHdhbnQgdG8gdHJhY2UgaG93IHRoZXNlIHNldHRpbmdzICp0aWUqIGludG8gdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbiBwcm9jZXNzIGluIGdlbmVyYWwsIGFuZCB3aGF0IG1hbmFnZXMgdGhlIGJvbmRpbmcgcHJvY2VzcyBpdHNlbGYuIEJhc2ljYWxseSwgaG93IGFuZCB3aGVyZSBhcmUgd2UgcmVnaXN0ZXJpbmcgYW5kIG1hbmFnaW5nIGJvbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBvcmNoZXN0cmF0ZXMgYWxsIG9mIHRoaXMsIGhvdyBpdCdzIHNldCB1cCBhbmQgYWRtaW5pc3RlcmVkLiBJJ20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlOiAgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRzIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IHdvcmtmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDQ6MDguMTY2MDAzODgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQwMTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX29wdF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NTgzPXN0YXRpYyBpbnQgYm9uZF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQ3LVxcdGNhc2UgU0lPQ0JPTkRDSEFOR0VBQ1RJVkU6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0NjQ4OlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgc2xhdmVfZGV2LVxcdTAwM2VuYW1lKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ2NDktXFx0XFx0cmVzID0gX19ib25kX29wdF9zZXRfbm90aWZ5KGJvbmQsIEJPTkRfT1BUX0FDVElWRV9TTEFWRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4NT1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEwMS1cXHRpZiAobW9kZSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjEwMjpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIG1vZGUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEwMy1cXHRcXHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfTU9ERSksIFxcdTAwMjZuZXd2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTE3LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MTE4OlxcdFxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgeG1pdF9oYXNoX3BvbGljeSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTE5LVxcdFxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9YTUlUX0hBU0gpLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTM0LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MTM1OlxcdFxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgbGFjcF9yYXRlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMzYtXFx0XFx0XFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX0xBQ1BfUkFURSksXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxNDctXFx0aWYgKGFkX3NlbGVjdCkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjE0ODpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIGFkX3NlbGVjdCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTQ5LVxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9BRF9TRUxFQ1QpLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MjI0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjIyNTpcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIHBhY2tldHNfcGVyX3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYyMjYtXFx0aWYgKCFib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfUEFDS0VUU19QRVJfU0xBVkUpLCBcXHUwMDI2bmV3dmFsKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzA2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjMwNzpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIGFycF92YWxpZGF0ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzA4LVxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9BUlBfVkFMSURBVEUpLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzIwLVxcdGlmIChhcnBfYWxsX3RhcmdldHMpIHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYzMjE6XFx0XFx0Ym9uZF9vcHRfaW5pdHN0cihcXHUwMDI2bmV3dmFsLCBhcnBfYWxsX3RhcmdldHMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjMyMi1cXHRcXHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfQVJQX0FMTF9UQVJHRVRTKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjM2Mi1cXHRpZiAocHJpbWFyeSBcXHUwMDI2XFx1MDAyNiBwcmltYXJ5X3Jlc2VsZWN0KSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzYzOlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgcHJpbWFyeV9yZXNlbGVjdCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzY0LVxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9QUklNQVJZX1JFU0VMRUNUKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjM3Ni1cXHRpZiAoZmFpbF9vdmVyX21hYykge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjM3NzpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIGZhaWxfb3Zlcl9tYWMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjM3OC1cXHRcXHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfRkFJTF9PVkVSX01BQyksXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYzOTEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzkyOlxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgXFxcImRlZmF1bHRcXFwiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYzOTMtXFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0MDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDEwOlxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgXFxcImRlZmF1bHRcXFwiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0MTEtXFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX1RMQl9EWU5BTUlDX0xCKSwgXFx1MDAyNm5ld3ZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTE2Nz1zdGF0aWMgaW50IGJvbmRfc2xhdmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTE4NS1cXHRcXHRcXHQgc2xhdmVfZGV2LVxcdTAwM2VuYW1lLCBxdWV1ZV9pZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoxODY6XFx0XFx0Ym9uZF9vcHRfaW5pdHN0cihcXHUwMDI2bmV3dmFsLCBxdWV1ZV9pZF9zdHIpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMTg3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1FVRVVFX0lELCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz0yMTY9c3RhdGljIGludCBib25kX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yMzAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyMzE6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBtb2RlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTIzMi1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9NT0RFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNDgtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MjQ5OlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgYWN0aXZlX3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI1MC1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BQ1RJVkVfU0xBVkUsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjI1ODpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIG1paW1vbik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNTktXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTUlJTU9OLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNjYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNjc6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCB1cGRlbGF5KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI2OC1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9VUERFTEFZLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNzUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNzY6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBkb3duZGVsYXkpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjc3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0RPV05ERUxBWSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjg0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6Mjg1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZGVsYXkpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjg2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1BFRVJfTk9USUZfREVMQVksIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMwNi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjMwNzpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGFycF9pbnRlcnZhbCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMDgtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX0lOVEVSVkFMLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMjUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozMjY6XFx0XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCAoX19mb3JjZSB1NjQpdGFyZ2V0KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMyNy1cXHRcXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BUlBfVEFSR0VUUyxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzU1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzU2OlxcdFxcdFxcdGJvbmRfb3B0X2luaXRleHRyYShcXHUwMDI2bmV3dmFsLCBcXHUwMDI2YWRkcjYsIHNpemVvZihhZGRyNikpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzU3LVxcdFxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX05TX1RBUkdFVFMsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM3OS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjM4MDpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGFycF92YWxpZGF0ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zODEtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX1ZBTElEQVRFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zODktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozOTA6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBhcnBfYWxsX3RhcmdldHMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzkxLVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FSUF9BTExfVEFSR0VUUywgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDA0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDA1OlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgcHJpbWFyeSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MDYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUFJJTUFSWSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDE0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDE1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgcHJpbWFyeV9yZXNlbGVjdCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MTYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUFJJTUFSWV9SRVNFTEVDVCwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDI0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDI1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZmFpbF9vdmVyX21hYyk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MjYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfRkFJTF9PVkVSX01BQywgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDM0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDM1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgeG1pdF9oYXNoX3BvbGljeSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MzYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfWE1JVF9IQVNILCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NDQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NDU6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCByZXNlbmRfaWdtcCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NDYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUkVTRU5EX0lHTVAsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ1NC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ1NTpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIG51bV9wZWVyX25vdGlmKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ1Ni1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9OVU1fUEVFUl9OT1RJRiwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDY0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDY1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgYWxsX3NsYXZlc19hY3RpdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDY2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FMTF9TTEFWRVNfQUNUSVZFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NzQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NzU6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBtaW5fbGlua3MpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDc2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JTkxJTktTLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00ODQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0ODU6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBscF9pbnRlcnZhbCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00ODYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTFBfSU5URVJWQUwsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ5NC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ5NTpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIHBhY2tldHNfcGVyX3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ5Ni1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9QQUNLRVRTX1BFUl9TTEFWRSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTA0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTA1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgbGFjcF9hY3RpdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTA2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfQUNUSVZFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1MTY6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBsYWNwX3JhdGUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTE3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfUkFURSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTI1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTI2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgYWRfc2VsZWN0KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUyNy1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BRF9TRUxFQ1QsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUzNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUzNjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGFjdG9yX3N5c19wcmlvKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUzNy1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BRF9BQ1RPUl9TWVNfUFJJTywgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTQ1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTQ2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgcG9ydF9rZXkpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTQ3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FEX1VTRVJfUE9SVF9LRVksIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU1NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU1NjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01NTctXFx0XFx0XFx0XFx0IG5sYV9nZXRfdTY0KGRhdGFbSUZMQV9CT05EX0FEX0FDVE9SX1NZU1RFTV0pKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTY1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTY2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZHluYW1pY19sYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01NjctXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfVExCX0RZTkFNSUNfTEIsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU3NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU3NjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIG1pc3NlZF9tYXgpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTc3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JU1NFRF9NQVgsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU4NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU4NjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGNvdXBsZWRfY29udHJvbCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01ODctXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQ09VUExFRF9DT05UUk9MLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01OTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1OTY6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBicm9hZGNhc3RfbmVpZ2gpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTk3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0JST0FEQ0FTVF9ORUlHSCwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNjA1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NjA2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZmFsbGJhY2tfbW9kZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy02MDctXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTEFDUF9TVFJJQ1QsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTg2OD1pbnQgYm9uZF9vcHRfdHJ5c2V0X3J0bmwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIGludCBvcHRpb24sIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtODc0LVxcdFxcdHJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjg3NTpcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZvcHR2YWwsIGJ1Zik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy04NzYtXFx0cmV0ID0gX19ib25kX29wdF9zZXRfbm90aWZ5KGJvbmQsIG9wdGlvbiwgXFx1MDAyNm9wdHZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjA4LjIxMjQwODkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MjQ2OTE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmV2aWV3aW5nIEJvbmRpbmcgTW9kdWxlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBib25kaW5nIG1vZHVsZSdzIGNvcmUgZmlsZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgYm9uZF9tYWluLmNgLCBgYm9uZF9vcHRpb25zLmNgLCBhbmQgYGJvbmRfbmV0bGluay5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgYmUgZW50cnkgcG9pbnRzIG9yIGNyaXRpY2FsIGNvbXBvbmVudHMuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIGZ1bmN0aW9ucyBsaWtlIGBib25kX2NoYW5nZWxpbmtgLCBgYm9uZF9uZXdsaW5rYCwgYGJvbmRfY3JlYXRlYCwgYW5kIGFsc28gdGhlIG9wdGlvbi1yZWxhdGVkIGZ1bmN0aW9ucyBgYm9uZF9vcHRfdHJ5c2V0X3J0bmxgLCBgYm9uZF9kb19pb2N0bGAsIGFzIHdlbGwgYXMgYF9fYm9uZF9vcHRfc2V0X25vdGlmeWAgYW5kIGBfX2JvbmRfb3B0X3NldGAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIGluIHRoZSBib25kaW5nIGxpZmVjeWNsZS5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGdvIGRlZXBlci4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBub3csIHNlZWtpbmcgb3V0IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIGJvbmRpbmcgaW5pdGlhbGl6YXRpb24sIEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbCAoQVJQKSBtb25pdG9yaW5nLCBhbmQgdGhlIHdvcmsgcXVldWUgc3lzdGVtLiBUaGVzZSBhcmVhcyBhcmUgY3J1Y2lhbCB0byB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGJlaGF2aW9yIG9mIHRoZSBib25kaW5nIGRyaXZlci4gTXkgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoxMS4xMzcxMDM1MTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODk2MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGJvbmRffF5pbnQgYm9uZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9MjIxND1zdGF0aWMgdm9pZCBhZF9tYXJrZXJfcmVzcG9uc2VfcmVjZWl2ZWQoc3RydWN0IGJvbmRfbWFya2VyICptYXJrZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjIzNi0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjIzNzp2b2lkIGJvbmRfM2FkX2luaXRpYXRlX2FnZ19zZWxlY3Rpb24oc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCB0aW1lb3V0KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjQ3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyMjQ4OnZvaWQgYm9uZF8zYWRfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI3MS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjI3Mjp2b2lkIGJvbmRfM2FkX2JpbmRfc2xhdmUoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI3My17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjMyNS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjMyNjp2b2lkIGJvbmRfM2FkX3VuYmluZF9zbGF2ZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMzI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNDg4LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyNDg5OnZvaWQgYm9uZF8zYWRfdXBkYXRlX2FkX2FjdG9yX3NldHRpbmdzKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNDkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0yNTIwPXN0YXRpYyBib29sIGJvbmRfYWdnX3RpbWVyX2FkdmFuY2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjU0OC0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjU0OTp2b2lkIGJvbmRfM2FkX3N0YXRlX21hY2hpbmVfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI1NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTI3MTA9c3RhdGljIHZvaWQgYWRfdXBkYXRlX2FjdG9yX2tleXMoc3RydWN0IHBvcnQgKnBvcnQsIGJvb2wgcmVzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc1My0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjc1NDp2b2lkIGJvbmRfM2FkX2FkYXB0ZXJfc3BlZWRfZHVwbGV4X2NoYW5nZWQoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc4MC0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjc4MTp2b2lkIGJvbmRfM2FkX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI3ODIte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI4MzgtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI4Mzk6aW50IGJvbmRfM2FkX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yODQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0yODgxPWludCBfX2JvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8oY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjkxMy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjkxNDppbnQgYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IGFkX2luZm8gKmFkX2luZm8pXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5MjU6aW50IGJvbmRfM2FkX2xhY3BkdV9yZWN2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTI2LVxcdFxcdFxcdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5NTYtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5NTc6dm9pZCBib25kXzNhZF91cGRhdGVfbGFjcF9yYXRlKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTgxLSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyOTgyOnZvaWQgYm9uZF8zYWRfdXBkYXRlX2xhY3BfYWN0aXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0zMDAxPXNpemVfdCBib25kXzNhZF9zdGF0c19zaXplKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAxMy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAxNDppbnQgYm9uZF8zYWRfc3RhdHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZF8zYWRfc3RhdHMgKnN0YXRzKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMjg0PXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMwNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMwNjppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTIzPW5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzI6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzNS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTYzNjppbnQgYm9uZF9hbGJfaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2NS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY2Njp2b2lkIGJvbmRfYWxiX2RlaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY3OS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY4MDp2b2lkIGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgY2hhciBsaW5rKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNzE4OnZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzg2LS8qIENhbGxlZCB3aXRoIFJUTkwgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTc4NzppbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTc4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzMS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTgzMjp2b2lkIGJvbmRfYWxiX2NsZWFyX3ZsYW4oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIHNob3J0IHZsYW5faWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE4MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz01ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9uZF9kZWJ1Z19ybGJfaGFzaCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy01NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjU2OnZvaWQgYm9uZF9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo2NTp2b2lkIGJvbmRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo3MDp2b2lkIGJvbmRfZGVidWdfcmVyZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9Nzk9dm9pZCBfX2luaXQgYm9uZF9jcmVhdGVfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy04Ni1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjg3OnZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtOTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo5Njp2b2lkIGJvbmRfZGVidWdfcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTk5LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTAwOnZvaWQgYm9uZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTAzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTA0OnZvaWQgYm9uZF9kZWJ1Z19yZXJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9MTA4PXZvaWQgX19pbml0IGJvbmRfY3JlYXRlX2RlYnVnZnModm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTExLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTEyOnZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTExMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTczOD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1kZXZfb3BzIGJvbmRfeGZybWRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc1NS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjc1NjppbnQgYm9uZF9zZXRfY2FycmllcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTExNzY9c3RhdGljIGJvb2wgYm9uZF9zaG91bGRfbm90aWZ5X3BlZXJzKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjA4LS8qIFVzZSB0aGlzIHRvIHVwZGF0ZSBzZW5kX3BlZXJfbm90aWYgd2hlbiBSVE5MIG1heSBiZSBoZWxkIGluIG90aGVyIHBsYWNlcy4gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyMDk6dm9pZCBib25kX3BlZXJfbm90aWZ5X3dvcmtfcmVhcm0oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIGxvbmcgZGVsYXkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTIzOD1zdGF0aWMgdm9pZCBib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGJvb2wgZm9yY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyNjUtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMjY2OnZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM2OS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEzNzA6dm9pZCBib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTgwNT1zdGF0aWMgdm9pZCBib25kX25ldGRldl9ub3RpZnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODIxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTgyMjp2b2lkIGJvbmRfcXVldWVfc2xhdmVfZXZlbnQoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODI2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTgyNzp2b2lkIGJvbmRfbG93ZXJfc3RhdGVfY2hhbmdlZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4NTY9c3RhdGljIHZvaWQgYm9uZF9ldGhlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4NjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODY1OnZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg3LS8qIGVuc2xhdmUgZGV2aWNlIFxcdTAwM2NzbGF2ZVxcdTAwM2UgdG8gYm9uZCBkZXZpY2UgXFx1MDAzY21hc3RlclxcdTAwM2UgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE4ODg6aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg5LVxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTI0MjU9c3RhdGljIGludCBfX2JvbmRfcmVsZWFzZV9vbmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNjA1LS8qIEEgd3JhcHBlciB1c2VkIGJlY2F1c2Ugb2YgbmRvX2RlbF9saW5rICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNjA2OmludCBib25kX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjYwNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMzNzQ9c3RhdGljIGludCBib25kX25hX3Jjdihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyMi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0MjM6aW50IGJvbmRfcmN2X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyNC1cXHRcXHQgICAgICBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzAzPXN0YXRpYyB1MzIgYm9uZF94bWl0X2hhc2hfeGRwKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMxNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMTg6dm9pZCBib25kX3dvcmtfaW5pdF9hbGwoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMzMy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMzQ6dm9pZCBib25kX3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01MDU4PXN0YXRpYyBuZXRkZXZfdHhfdCBib25kX3htaXRfYWN0aXZlYmFja3VwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNzQtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDc1OnZvaWQgYm9uZF9zbGF2ZV9hcnJfd29ya19yZWFybShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgbG9uZyBkZWxheSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNzYte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01MTQ1PXN0YXRpYyB2b2lkIGJvbmRfcmVzZXRfc2xhdmVfYXJyKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MTU3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTE1ODppbnQgYm9uZF91cGRhdGVfc2xhdmVfYXJyKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNraXBzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUxNTkte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTgyPXN0YXRpYyB2b2lkIGJvbmRfZGVzdHJ1Y3RvcihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5OTEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTkyOnZvaWQgYm9uZF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjUwOD11bnNpZ25lZCBpbnQgYm9uZF9nZXRfbnVtX3R4X3F1ZXVlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTE3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjUxODppbnQgYm9uZF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjUxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTEwMDg9aW50IF9faW5pdCBib25kX25ldGxpbmtfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xMDEyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MTAxMzp2b2lkIGJvbmRfbmV0bGlua19maW5pKHZvaWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xMDE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9ODQ0PWludCBfX2JvbmRfb3B0X3NldF9ub3RpZnkoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg2Ny0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjg2ODppbnQgYm9uZF9vcHRfdHJ5c2V0X3J0bmwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIGludCBvcHRpb24sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTEyMTM9c3RhdGljIGludCBib25kX29wdGlvbl9hcnBfaXBfdGFyZ2V0X3JlbShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgX19iZTMyIHRhcmdldClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTI1MS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjEyNTI6dm9pZCBib25kX29wdGlvbl9hcnBfaXBfdGFyZ2V0c19jbGVhcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyNTMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMzExPXN0YXRpYyB2b2lkIHNsYXZlX3NldF9uc19tYWRkcnMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUsIGJvb2wgYWRkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzM0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTMzNTp2b2lkIGJvbmRfc2xhdmVfbnNfbWFkZHJzX2FkZChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzQxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTM0Mjp2b2lkIGJvbmRfc2xhdmVfbnNfbWFkZHJzX2RlbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzNDMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMzg4PXN0YXRpYyB2b2lkIF9ib25kX29wdGlvbnNfbnNfaXA2X3RhcmdldF9zZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBzbG90LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDA0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTQwNTp2b2lkIGJvbmRfb3B0aW9uX25zX2lwNl90YXJnZXRzX2NsZWFyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTQwNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTE0NTM9c3RhdGljIHZvaWQgc2xhdmVfc2V0X25zX21hZGRycyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgYm9vbCBhZGQpIHt9XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTQ1NTp2b2lkIGJvbmRfc2xhdmVfbnNfbWFkZHJzX2FkZChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSkge31cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE0NTYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxNDU3OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfZGVsKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKSB7fVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTQ1OC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz0yODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0yOTAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjI5MTp2b2lkIGJvbmRfY3JlYXRlX3Byb2NfZW50cnkoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTI5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMzA2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYzozMDc6dm9pZCBib25kX3JlbW92ZV9wcm9jX2VudHJ5KHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0zMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmM9ODUyPXZvaWQgX19uZXRfZXhpdCBib25kX2Rlc3Ryb3lfc3lzZnMoc3RydWN0IGJvbmRfbmV0ICpibilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jLTg1OS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYzo4NjA6dm9pZCBib25kX3ByZXBhcmVfc3lzZnNfZ3JvdXAoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMtODYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jPTEzMz1jb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHNsYXZlX3N5c2ZzX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTEzNi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnNfc2xhdmUuYzoxMzc6aW50IGJvbmRfc3lzZnNfc2xhdmVfYWRkKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmMtMTM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTE0MS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnNfc2xhdmUuYzoxNDI6dm9pZCBib25kX3N5c2ZzX3NsYXZlX2RlbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTE0My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjExLjE4MzAwNjA4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDA0NTY4MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJvbmQgTmV0bGluayBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbmV0d29yayBpbnRlcmZhY2VzIGFuZCB0aGUgYm9uZCBkcml2ZXIgc3BlY2lmaWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGhvdyB0aGUgYGJvbmRgIGRyaXZlciBoYW5kbGVzIE5ldGxpbmsgb3BlcmF0aW9ucywgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBwcm9iYWJseSBkZWJ1Z2dpbmcgb3IgZXh0ZW5kaW5nIGl0cyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoZSBOZXRsaW5rIGxldmVsLiBUbyBkbyB0aGF0LCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgcnRubF9saW5rX29wc2Agd2l0aGluIGBib25kX25ldGxpbmsuY2AuIFRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgZW50cnlwb2ludHMgZm9yIGxpbmsgY29uZmlndXJhdGlvbiB2aWEgTmV0bGluayBhcmUgZGVmaW5lZC4gQ2hlY2tpbmcgdGhlcmUgd2lsbCBxdWlja2x5IHNob3cgbWUgd2hpY2ggTmV0bGluayBtZXNzYWdlcyB0aGUgYm9uZCBkcml2ZXIgcmVnaXN0ZXJzIGZvciBhbmQgcHJvY2Vzc2VzLCByZXZlYWxpbmcgdGhlIG1ldGhvZHMgZm9yIGFkZGluZywgZGVsZXRpbmcsIGFuZCBjb25maWd1cmluZyBib25kZWQgaW50ZXJmYWNlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgYm9uZCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgTmV0bGluayBpbmZyYXN0cnVjdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njc5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDQ6MTcuMTg3NTc2MTkzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0MjM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2xpbmtfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02NTE4PWludCBib25kX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY1MzMtXFx0ZGV2X25ldF9zZXQoYm9uZF9kZXYsIG5ldCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NTM0OlxcdGJvbmRfZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID0gXFx1MDAyNmJvbmRfbGlua19vcHM7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTM1LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz05MzM9c3RhdGljIGludCBib25kX2ZpbGxfbGlua3hzdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy05ODQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo5ODU6c3RydWN0IHJ0bmxfbGlua19vcHMgYm9uZF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtOTg2LVxcdC5raW5kXFx0XFx0XFx0PSBcXFwiYm9uZFxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjE3LjIzMjkyMzIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTIwMjI5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEJvbmRpbmcgU3ltYm9sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBgRm9jdXNTeW1ib2xzYCBsaXN0IGZvciB0aGUgYm9uZGluZyBtb2R1bGUuIEkgbmVlZCB0byBiZSBwcmVjaXNlLCBzbyBJJ20gbWFraW5nIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzOiBgYm9uZF9lbnNsYXZlYCwgYGJvbmRfcmVsZWFzZWAsIGBib25kX29wdF90cnlzZXRfcnRubGAsIGBfX2JvbmRfb3B0X3NldF9ub3RpZnlgLCBgYm9uZF9jcmVhdGVgLCBgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlYCwgYGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZWAsIGFuZCBgYm9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtYC4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIEkgYmVsaWV2ZSB0aGUgbGlzdCBpcyBleGhhdXN0aXZlLlxuXG5Ob3csIGxldCdzIHRhY2tsZSB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSSByZW1lbWJlciB0aGF0IGBCT05ESU5HYCBpcyBjb250aW5nZW50IHVwb24gYElORVRgIGFuZCB0aGVuLCBjcnVjaWFsbHksIGVpdGhlciBgVExTYCBvciwgaWYgYFRMU2AgaXMgZXhwbGljaXRseSBkaXNhYmxlZCAoaS5lLiwgYFRMU19ERVZJQ0U9bmApLiBUaG9zZSBhcmUgdGhlIGdhdGVrZWVwZXJzLiBPa2F5LCB0aGlzIHRlbGxzIG1lIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBCT05ESU5HYCwgYElORVRgLCBhbmQsIG9mIGNvdXJzZSwgYE5FVF9DT1JFYCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGlzLiBBbHdheXMgbmVlZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoZSBkZXBlbmRlbmNpZXMuXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIEknbSBnb2luZyB0byBydW4gYSBmaW5hbCBjaGVjayBvdmVyIGV2ZXJ5dGhpbmcgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gaG9sZXMgaW4gbXkgdGhpbmtpbmcuIE9uY2UgSSdtIHNhdGlzZmllZCwgSSdsbCBpbnZva2UgYHNldC1yZXN1bHRzYC4gUmVhZHkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg4LCJPdXRwdXRUb2tlbnMiOjIwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoyMS4zODQ5NDgxODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ0MzAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIixcbiAgICBcImJvbmRfcmVsZWFzZVwiLFxuICAgIFwiYm9uZF9vcHRfdHJ5c2V0X3J0bmxcIixcbiAgICBcImJvbmRfY3JlYXRlXCIsXG4gICAgXCJib25kX2NoYW5nZV9hY3RpdmVfc2xhdmVcIixcbiAgICBcImJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgcGVyaW9kaWMgQVJQIG1vbml0b3IsIHdoaWNoIGlzIGEgc29mdHdhcmUgbmV0d29yayBpbnRlcmZhY2UgcmVhZGlseSBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIixcbiAgICBcImJvbmRfcmVsZWFzZVwiLFxuICAgIFwiYm9uZF9vcHRfdHJ5c2V0X3J0bmxcIixcbiAgICBcImJvbmRfY3JlYXRlXCIsXG4gICAgXCJib25kX2NoYW5nZV9hY3RpdmVfc2xhdmVcIixcbiAgICBcImJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgcGVyaW9kaWMgQVJQIG1vbml0b3IsIHdoaWNoIGlzIGEgc29mdHdhcmUgbmV0d29yayBpbnRlcmZhY2UgcmVhZGlseSBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjIxLjQ2NzQwMDk4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NzA3NjczMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoyMS40NjgwMzgzMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODk3MDEyNTM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYXNzaWdubWVudCBgZGVsdGFfaW5fdGlja3MgPSAxO2AgcHJpb3IgdG8gYnJhbmNoaW5nIHRvIGByZV9hcm1gIHdoZW4gYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbigpYC4gXFxuXFxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxcbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB2YXJpYWJsZSBgZGVsdGFfaW5fdGlja3NgIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiAoYGRlbHRhX2luX3RpY2tzID0gbXNlY3NfdG9famlmZmllcyhib25kLVxcdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXFxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGI5MjBkODEyZTU2MzQyZmY1N2YxZGExZWMzYTg4NDJjMTY0NTRhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IGVmOWViMGM1M2M2NjEuLmMyM2NmMThhOTk2YWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMzg3MSwxMCArMzg3MSw4IEBAIHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmIChSRUFEX09OQ0UoYm9uZC1cdTAwM2VzZW5kX3BlZXJfbm90aWYpIHx8IHNob3VsZF9ub3RpZnlfcnRubCkge1xuLVx0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7XG4tXHRcdFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xuK1x0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxuIFx0XHRcdGdvdG8gcmVfYXJtO1xuLVx0XHR9XG4gXG4gXHRcdGlmIChib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZilcbiBcdFx0XHRib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoYm9uZCwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoyMS40NjgwMzk0MzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk2ODgyMDQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJvbmRpbmcgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgY2hhbmdlZCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBNeSBpbml0aWFsIHN0ZXAgaXMgZ29pbmcgdG8gYmUgYSBjYXJlZnVsIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYsIG9mIGNvdXJzZS4gVGhhdCdzIG15IGdvLXRvIGFwcHJvYWNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgaW50ZW50IGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5HaXZlbiB0aGUgbGluZSBudW1iZXIgcmVmZXJlbmNlLCBJJ2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgdG9vbCB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM4NzEuIEkgd2FudCB0byBzZWUgdGhlIGFkamFjZW50IGxpbmVzIG9mIGNvZGU7IHRoYXQgc3Vycm91bmRpbmcgY29udGV4dCBpcyBjcnVjaWFsLiBHZXR0aW5nIHRoZSBiaWcgcGljdHVyZSBvZiBob3cgdGhlIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGlzIHZpdGFsLiBPbmx5IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgY2FuIEkgdHJ1bHkgYXNzZXNzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjMwLjQzNjg2MzUxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODQwOlxcdFxcdHJldHVybiBzaG91bGRfbm90aWZ5X3J0bmw7XFxuMzg0MTpcXHR9XFxuMzg0MjpcXHRcXG4zODQzOlxcdHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuMzg0NDpcXHR7XFxuMzg0NTpcXHRcXHRib29sIHNob3VsZF9ub3RpZnlfcnRubDtcXG4zODQ2OlxcdFxcdGludCBkZWx0YV9pbl90aWNrcztcXG4zODQ3OlxcdFxcbjM4NDg6XFx0XFx0ZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXFx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpO1xcbjM4NDk6XFx0XFxuMzg1MDpcXHRcXHRpZiAoIWJvbmRfaGFzX3NsYXZlcyhib25kKSlcXG4zODUxOlxcdFxcdFxcdGdvdG8gcmVfYXJtO1xcbjM4NTI6XFx0XFxuMzg1MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMzg1NDpcXHRcXG4zODU1OlxcdFxcdGlmIChib25kX2FiX2FycF9pbnNwZWN0KGJvbmQpKSB7XFxuMzg1NjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zODU3OlxcdFxcbjM4NTg6XFx0XFx0XFx0LyogUmFjZSBhdm9pZGFuY2Ugd2l0aCBib25kX2Nsb3NlIGZsdXNoIG9mIHdvcmtxdWV1ZSAqL1xcbjM4NTk6XFx0XFx0XFx0aWYgKCFydG5sX3RyeWxvY2soKSkge1xcbjM4NjA6XFx0XFx0XFx0XFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xcbjM4NjE6XFx0XFx0XFx0XFx0Z290byByZV9hcm07XFxuMzg2MjpcXHRcXHRcXHR9XFxuMzg2MzpcXHRcXG4zODY0OlxcdFxcdFxcdGJvbmRfYWJfYXJwX2NvbW1pdChib25kKTtcXG4zODY1OlxcdFxcbjM4NjY6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4zODY3OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zODY4OlxcdFxcdH1cXG4zODY5OlxcdFxcbjM4NzA6XFx0XFx0c2hvdWxkX25vdGlmeV9ydG5sID0gYm9uZF9hYl9hcnBfcHJvYmUoYm9uZCk7XFxuMzg3MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zODcyOlxcdFxcbjM4NzM6XFx0XFx0aWYgKFJFQURfT05DRShib25kLVxcdTAwM2VzZW5kX3BlZXJfbm90aWYpIHx8IHNob3VsZF9ub3RpZnlfcnRubCkge1xcbjM4NzQ6XFx0XFx0XFx0aWYgKCFydG5sX3RyeWxvY2soKSlcXG4zODc1OlxcdFxcdFxcdFxcdGdvdG8gcmVfYXJtO1xcbjM4NzY6XFx0XFxuMzg3NzpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlc2VuZF9wZWVyX25vdGlmKVxcbjM4Nzg6XFx0XFx0XFx0XFx0Ym9uZF9wZWVyX25vdGlmeV9tYXlfZXZlbnRzKGJvbmQsIHRydWUpO1xcbjM4Nzk6XFx0XFxuMzg4MDpcXHRcXHRcXHRpZiAoc2hvdWxkX25vdGlmeV9ydG5sKSB7XFxuMzg4MTpcXHRcXHRcXHRcXHRib25kX3NsYXZlX3N0YXRlX25vdGlmeShib25kKTtcXG4zODgyOlxcdFxcdFxcdFxcdGJvbmRfc2xhdmVfbGlua19ub3RpZnkoYm9uZCk7XFxuMzg4MzpcXHRcXHRcXHR9XFxuMzg4NDpcXHRcXG4zODg1OlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuMzg4NjpcXHRcXHR9XFxuMzg4NzpcXHRcXG4zODg4OlxcdHJlX2FybTpcXG4zODg5OlxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKVxcbjM4OTA6XFx0XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKGJvbmQtXFx1MDAzZXdxLCBcXHUwMDI2Ym9uZC1cXHUwMDNlYXJwX3dvcmssIGRlbHRhX2luX3RpY2tzKTtcXG4zODkxOlxcdH1cXG4zODkyOlxcdFxcbjM4OTM6XFx0c3RhdGljIHZvaWQgYm9uZF9hcnBfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMzg5NDpcXHR7XFxuMzg5NTpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZyxcXG4zODk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBhcnBfd29yay53b3JrKTtcXG4zODk3OlxcdFxcbjM4OTg6XFx0XFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUNUSVZFQkFDS1VQKVxcbjM4OTk6XFx0XFx0XFx0Ym9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihib25kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDQ6MzAuNDM3MjcwMDI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDAwODcwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBBUlAgTW9uaXRvcmluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBgZGVsdGFfaW5fdGlja3MgPSAxYCBiZWZvcmUganVtcGluZyB0byBgcmVfYXJtYCBpZiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIHRoZSBzZWNvbmQgdHJ5bG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSByaXNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjbGFzc2ljIGdvdGNoYS5cblxuSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYGRlbHRhX2luX3RpY2tzYCBpcyBpbml0aWFsaXplZCBhdCBsaW5lIDM4NDgsIHVzaW5nIGBtc2Vjc190b19qaWZmaWVzKGJvbmQtXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClgLiBTbywgdGhhdCdzIGdvb2QuIEl0J3MgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgcG90ZW50aWFsIGp1bXAuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycyBhcmUgYmVpbmcgbWVzc2VkIHdpdGgsIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBiZWluZyByZWFkLiBUaGlzIGlzIHB1cmVseSByZWxhdGVkIHRvIHRpbWluZyBhbmQgcmVzY2hlZHVsaW5nIHdpdGhpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvcmluZyBsb2dpYy5cblxuTm93LCBsZXQncyBjYXN0IGEgd2lkZXIgbmV0LiBBcmUgdGhlcmUgKmFueSogb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW55d2hlcmUgaW4gdGhpcyBwYXRjaD8gQWZ0ZXIgYSBxdWljayBzY2FuLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGVyZSBhcmUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBzb2NrZXQgYnVmZmVycywgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzIGFyZSB0b3VjaGVkLiBUaGVyZSBhcmUgbm8gb3RoZXIgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0cyB0aGF0IGp1bXAgb3V0LiBBZ2FpbiwgYGRlbHRhX2luX3RpY2tzYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgb2YgY29uY2Vybi5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGRhdGEgZXhwb3N1cmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiBvciBjb25jdXJyZW5jeSB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQsIG9yIGV2ZW4gdW5uZWNlc3Nhcnkgc2luY2UgdGhpcyBpcyBhIHB1cmUgbG9naWMgZml4LiBObyBuZWVkIHRvIGdvIGRlZXBlciBsb29raW5nIGZvciBtZW1vcnkgY29ycnVwdGlvbiBhcyBpdCdzIG5vdCBwb3NzaWJsZSBpbiB0aGlzIHNjZW5hcmlvLlxuXG5JJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAgYW5kIGZvbGxvdyB3aXRoIGEgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IGNvbnRyYXN0cyBLQVNBTiBhbmQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTAsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDU6MDAuNDM4MTQ0OTkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcXG5cXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXFx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpYCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnksIG5vciBkb2VzIGl0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBkYXRhLCBldGMuKS5cXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcXG5cXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXFx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpYCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnksIG5vciBkb2VzIGl0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBkYXRhLCBldGMuKS5cXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 09:28:16 +0000 UTC FinishedAt: 2026-08-31 09:45:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "NET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "NET_CORE" ], "series_id": "7e288732-133e-40e3-9296-fd5881e571c8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_enslave", "bond_release", "bond_opt_tryset_rtnl", "bond_create", "bond_change_active_slave", "bond_peer_notify_work_rearm" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7LAogICAgJiMzNDtib25kX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Ym9uZF9vcHRfdHJ5c2V0X3J0bmwmIzM0OywKICAgICYjMzQ7Ym9uZF9jcmVhdGUmIzM0OywKICAgICYjMzQ7Ym9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGFzc2lnbm1lbnQgYGRlbHRhX2luX3RpY2tzID0gMTtgIHByaW9yIHRvIGJyYW5jaGluZyB0byBgcmVfYXJtYCB3aGVuIGBydG5sX3RyeWxvY2soKWAgZmFpbHMgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oKWAuIFxuXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgdmFyaWFibGUgYGRlbHRhX2luX3RpY2tzYCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gKGBkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGI5MjBkODEyZTU2MzQyZmY1N2YxZGExZWMzYTg4NDJjMTY0NTRhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5pbmRleCBlZjllYjBjNTNjNjYxLi5jMjNjZjE4YTk5NmFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuQEAgLTM4NzEsMTAgJiM0MzszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKFJFQURfT05DRShib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7XG4tXHRcdGlmICghcnRubF90cnlsb2NrKCkpIHtcbi1cdFx0XHRkZWx0YV9pbl90aWNrcyA9IDE7XG4mIzQzO1x0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxuIFx0XHRcdGdvdG8gcmVfYXJtO1xuLVx0XHR9XG4gXG4gXHRcdGlmIChib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZilcbiBcdFx0XHRib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoYm9uZCwgdHJ1ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtib25kX29wdF90cnlzZXRfcnRubCYjMzQ7LAogICAgJiMzNDtib25kX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGI5MjBkODEyZTU2MzQyZmY1N2YxZGExZWMzYTg4NDJjMTY0NTRhYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggZWY5ZWIwYzUzYzY2MS4uYzIzY2YxOGE5OTZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0zODcxLDEwICYjNDM7Mzg3MSw4IEBAIHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoUkVBRF9PTkNFKGJvbmQtJmd0O3NlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7Ci0JCWlmICghcnRubF90cnlsb2NrKCkpIHsKLQkJCWRlbHRhX2luX3RpY2tzID0gMTsKJiM0MzsJCWlmICghcnRubF90cnlsb2NrKCkpCiAJCQlnb3RvIHJlX2FybTsKLQkJfQogCiAJCWlmIChib25kLSZndDtzZW5kX3BlZXJfbm90aWYpCiAJCQlib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoYm9uZCwgdHJ1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgY2hhbmdlOgoKKipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIEFSUCBNb25pdG9yaW5nIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHdpdGhpbiB0aGUgYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaGFzIHRvIGRvIHdpdGggQWN0aXZlLUJhY2t1cCBtb2RlIGFuZCBob3cgaXQgaGFuZGxlcyBBUlAgbW9uaXRvcmluZywgd2hpY2ggaXMgYSBrZXkgY29tcG9uZW50IG9mIHRoYXQgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCB0aGlzIEFSUCBtb25pdG9yaW5nIGlzIGRvaW5nIGluIHRoZSBvcmlnaW5hbCBjb2RlIHRvIGdyYXNwIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIHBhdGNoLgoKTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYW5kIGZvY3VzIG9uIHRoZSBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgZnVuY3Rpb24uIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY2FsbCB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gVW5kZXJzdGFuZGluZyB0aGUgQVJQIG1vbml0b3JpbmcgbG9naWMgaXMgY3J1Y2lhbCDigJMgdGhpbmdzIGxpa2UgaG93IGl0IHNlbmRzIEFSUCByZXF1ZXN0cywgaG93IGl0IGludGVycHJldHMgdGhlIHJlc3BvbnNlcyAob3IgbGFjayB0aGVyZW9mKSwgYW5kIGhvdyBpdCB0cmlnZ2VycyBhIGZhaWxvdmVyIGFyZSBhbGwgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQuIEkgbmVlZCB0byBzZWUgd2hhdCBhc3BlY3RzIG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBhY3RpdmUtYmFja3VwIGJlaGF2aW9yIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODUwOlx0XHRpZiAoIWJvbmRfaGFzX3NsYXZlcyhib25kKSlcbjM4NTE6XHRcdFx0Z290byByZV9hcm07XG4zODUyOlx0XG4zODUzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4zODU0Olx0XG4zODU1Olx0XHRpZiAoYm9uZF9hYl9hcnBfaW5zcGVjdChib25kKSkge1xuMzg1NjpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjM4NTc6XHRcbjM4NTg6XHRcdFx0LyogUmFjZSBhdm9pZGFuY2Ugd2l0aCBib25kX2Nsb3NlIGZsdXNoIG9mIHdvcmtxdWV1ZSAqL1xuMzg1OTpcdFx0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7XG4zODYwOlx0XHRcdFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xuMzg2MTpcdFx0XHRcdGdvdG8gcmVfYXJtO1xuMzg2MjpcdFx0XHR9XG4zODYzOlx0XG4zODY0Olx0XHRcdGJvbmRfYWJfYXJwX2NvbW1pdChib25kKTtcbjM4NjU6XHRcbjM4NjY6XHRcdFx0cnRubF91bmxvY2soKTtcbjM4Njc6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzg2ODpcdFx0fVxuMzg2OTpcdFxuMzg3MDpcdFx0c2hvdWxkX25vdGlmeV9ydG5sID0gYm9uZF9hYl9hcnBfcHJvYmUoYm9uZCk7XG4zODcxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjM4NzI6XHRcbjM4NzM6XHRcdGlmIChSRUFEX09OQ0UoYm9uZC1cdTAwM2VzZW5kX3BlZXJfbm90aWYpIHx8IHNob3VsZF9ub3RpZnlfcnRubCkge1xuMzg3NDpcdFx0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxuMzg3NTpcdFx0XHRcdGdvdG8gcmVfYXJtO1xuMzg3NjpcdFxuMzg3NzpcdFx0XHRpZiAoYm9uZC1cdTAwM2VzZW5kX3BlZXJfbm90aWYpXG4zODc4Olx0XHRcdFx0Ym9uZF9wZWVyX25vdGlmeV9tYXlfZXZlbnRzKGJvbmQsIHRydWUpO1xuMzg3OTpcdFxuMzg4MDpcdFx0XHRpZiAoc2hvdWxkX25vdGlmeV9ydG5sKSB7XG4zODgxOlx0XHRcdFx0Ym9uZF9zbGF2ZV9zdGF0ZV9ub3RpZnkoYm9uZCk7XG4zODgyOlx0XHRcdFx0Ym9uZF9zbGF2ZV9saW5rX25vdGlmeShib25kKTtcbjM4ODM6XHRcdFx0fVxuMzg4NDpcdFxuMzg4NTpcdFx0XHRydG5sX3VubG9jaygpO1xuMzg4NjpcdFx0fVxuMzg4NzpcdFxuMzg4ODpcdHJlX2FybTpcbjM4ODk6XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpXG4zODkwOlx0XHRcdHF1ZXVlX2RlbGF5ZWRfd29yayhib25kLVx1MDAzZXdxLCBcdTAwMjZib25kLVx1MDAzZWFycF93b3JrLCBkZWx0YV9pbl90aWNrcyk7XG4zODkxOlx0fVxuMzg5MjpcdFxuMzg5MzpcdHN0YXRpYyB2b2lkIGJvbmRfYXJwX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuMzg5NDpcdHtcbjM4OTU6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLFxuMzg5NjpcdFx0XHRcdFx0XHQgICAgYXJwX3dvcmsud29yayk7XG4zODk3Olx0XG4zODk4Olx0XHRpZiAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApXG4zODk5Olx0XHRcdGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oYm9uZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiBmaXJzdCBwZXJzb24sIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGhpcyBpcyByZWxhdGVkIHRvIHRyb3VibGVzaG9vdGluZyBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmA6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBCZWZvcmUgTGluZSAzODUwKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93ICpiZWZvcmUqIGxpbmUgMzg1MCBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAuIFRoYXQgbGluZSBpcyBvYnZpb3VzbHkgYSBzaWduaWZpY2FudCBicmVha3BvaW50LCBvciBwb3NzaWJseSB0aGUgbG9jYXRpb24gb2YgYW4gYW5vbWFseSBhcyBhbiBpbml0aWFsIGludmVzdGlnYXRpb24gc3RlcC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjb2RlJiMzOTtzIGJlaGF2aW9yICpsZWFkaW5nIHVwKiB0byB0aGF0IHBvaW50LiBJJiMzOTttIHRoaW5raW5nOiB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIG9yIG1vZGlmaWVkLCBhbmQgYXJlIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQ/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMgZHVyaW5nIHRoYXQgZXhlY3V0aW9uIHBlcmlvZCB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCBjb3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIGxlYWRpbmcgdXAgdG8gdGhhdCBsaW5lLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25kaXRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBzY2FubmluZyB0aGUgY29kZSwgcXVpY2tseSwgZm9yIG9idmlvdXMgaW5kaWNhdG9yczogbG9vcHMsIGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBhc3NpZ25tZW50cyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50LCBhbmQgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gZGlmZmVyZW50IGJyYW5jaGVzIG9mIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG9idmlvdXMgcmVkIGZsYWdzLCBzdWNoIGFzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgdW51c3VhbCBvcGVyYXRpb25zIG9uIHNoYXJlZCByZXNvdXJjZXMuIEtub3dpbmcgdGhpcyB0b29sJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbi1yZWxhdGVkIGVsZW1lbnRzIHRvbywgbGlrZSB3aGF0IHNldHRpbmdzIGFyZSBsb2FkZWQgYW5kIGhvdyB0aGV5IGltcGFjdCB0aGUgY29kZSBmbG93LiBUaGlzIGluaXRpYWwgcGFzcyB3aWxsIGJlIG1vcmUgb2YgYSByZWNvbm5haXNzYW5jZSBtaXNzaW9uLCBqdXN0IHRyeWluZyB0byBnZXQgYSBmZWVsIGZvciB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIHJlYWxseSBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MzA6XHRcdG5ld19zbGF2ZS1cdTAwM2VsYXN0X2xpbmtfdXAgPSBqaWZmaWVzO1xuMzgzMTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGJvbmQtXHUwMDNlY3VycmVudF9hcnBfc2xhdmUsIG5ld19zbGF2ZSk7XG4zODMyOlx0XG4zODMzOlx0Y2hlY2tfc3RhdGU6XG4zODM0Olx0XHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuMzgzNTpcdFx0XHRpZiAoc2xhdmUtXHUwMDNlc2hvdWxkX25vdGlmeSB8fCBzbGF2ZS1cdTAwM2VzaG91bGRfbm90aWZ5X2xpbmspIHtcbjM4MzY6XHRcdFx0XHRzaG91bGRfbm90aWZ5X3J0bmwgPSBCT05EX1NMQVZFX05PVElGWV9OT1c7XG4zODM3Olx0XHRcdFx0YnJlYWs7XG4zODM4Olx0XHRcdH1cbjM4Mzk6XHRcdH1cbjM4NDA6XHRcdHJldHVybiBzaG91bGRfbm90aWZ5X3J0bmw7XG4zODQxOlx0fVxuMzg0MjpcdFxuMzg0MzpcdHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4zODQ0Olx0e1xuMzg0NTpcdFx0Ym9vbCBzaG91bGRfbm90aWZ5X3J0bmw7XG4zODQ2Olx0XHRpbnQgZGVsdGFfaW5fdGlja3M7XG4zODQ3Olx0XG4zODQ4Olx0XHRkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKTtcbjM4NDk6XHRcbjM4NTA6XHRcdGlmICghYm9uZF9oYXNfc2xhdmVzKGJvbmQpKVxuMzg1MTpcdFx0XHRnb3RvIHJlX2FybTtcbjM4NTI6XHRcbjM4NTM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjM4NTQ6XHRcbjM4NTU6XHRcdGlmIChib25kX2FiX2FycF9pbnNwZWN0KGJvbmQpKSB7XG4zODU2Olx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMzg1NzpcdFxuMzg1ODpcdFx0XHQvKiBSYWNlIGF2b2lkYW5jZSB3aXRoIGJvbmRfY2xvc2UgZmx1c2ggb2Ygd29ya3F1ZXVlICovXG4zODU5Olx0XHRcdGlmICghcnRubF90cnlsb2NrKCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgdGhlIHJlbW92YWwgb2YgYGRlbHRhX2luX3RpY2tzID0gMWAuIEkgbmVlZCB0byBzZWUgdGhlIGNvbW1pdCBoaXN0b3J5IG9yIGdpdCBsb2cgYXJvdW5kIHRoaXMgc2VjdGlvbiB0byBncmFzcCB0aGUgY29udGV4dC4KCkkgc2VlIHRoYXQgYGRlbHRhX2luX3RpY2tzYCB3YXMgb3JpZ2luYWxseSBpbml0aWFsaXplZCB0byBgbXNlY3NfdG9famlmZmllcyhib25kLSZndDtwYXJhbXMuYXJwX2ludGVydmFsKWAuIFRoZW4sIGluIHRoZSBzZWNvbmQgYHJ0bmxfdHJ5bG9jaygpYCBjYWxsLCB0aGUgbGluZSBzZXR0aW5nIGBkZWx0YV9pbl90aWNrcyA9IDFgIHdhcyByZW1vdmVkLiBUaGF0JiMzOTtzIHRoZSBrZXk6IHdoeSB3YXMgdGhpcyByZW1vdmVkPwoKTG9va2luZyBhdCB0aGUgY29kZSBibG9ja3MsIEkgc2VlIHRoYXQgaWYgYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiB0aGUgZmlyc3QgYmxvY2ssIGBkZWx0YV9pbl90aWNrc2AgZ2V0cyBzZXQgdG8gMS4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBhdm9pZGFuY2UgbWVjaGFuaXNtLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUgZmx1c2ggaW4gYGJvbmRfY2xvc2VgLiBIb3dldmVyLCBpbiB0aGUgc2Vjb25kIGJsb2NrLCB0aGUgYXNzaWdubWVudCBpcyBnb25lISBJZiBgcnRubF90cnlsb2NrKClgIGZhaWxzLCBzaG91bGRuJiMzOTt0IHdlIHN0aWxsIGltbWVkaWF0ZWx5IHJlLWFybSBpbiB0aGUgc2Vjb25kIGJsb2NrPyBOb3csIGBkZWx0YV9pbl90aWNrc2AgY291bGQgcmV0YWluIGl0cyBwcmV2aW91cyB2YWx1ZSAoYG1zZWNzX3RvX2ppZmZpZXMoLi4uKWApIG9yIDEsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaXJzdCBibG9jayB3YXMgc3VjY2Vzc2Z1bC4KCklzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGJvbmRpbmcgZHJpdmVyIGlzIGEgc3RhbmRhcmQgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgYWNjZXNzaWJsZSB2aWEgbmV0bGluay9ydG5sLiBJdCYjMzk7cyBhIHB1cmUgc29mdHdhcmUgZHJpdmVyLCBzbyB5ZXMsIGl0IGlzIGZ1enphYmxlIGluIFFFTVUgb3IgR0NFLgoKSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBvciBub24tZnVuY3Rpb25hbCBjaGFuZ2UuIFByZXZpb3VzbHksIGlmIGBydG5sX3RyeWxvY2soKWAgZmFpbGVkIGluIHRoZSBzZWNvbmQgYmxvY2ssIHNldHRpbmcgYGRlbHRhX2luX3RpY2tzYCB0byAxIGVuc3VyZWQgaW1tZWRpYXRlIHJlLWFybWluZyBvZiB0aGUgZGVsYXllZCB3b3JrIHRvIHJldHJ5IHRoZSBgcnRubF9sb2NrYCBhbmQgc2VuZCBwZWVyL2xpbmsgbm90aWZpY2F0aW9ucy4gUmVtb3ZpbmcgdGhpcyBtaWdodCBpbnRyb2R1Y2UgYSBkZWxheSBkZXRlcm1pbmVkIGJ5IHRoZSBvcmlnaW5hbCBhcnBfaW50ZXJ2YWwsIHJhdGhlciB0aGFuIGEgbW9yZSBpbW1lZGlhdGUgcmV0cnkuCgpTbywgKndoeSogd2FzIGBkZWx0YV9pbl90aWNrcyA9IDFgIHJlbW92ZWQ/IEkgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBvciBjb21taXQgaGlzdG9yeSBmb3IgYm9uZGluZyBhcnAgbW9uIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS4gTXkgdGhvdWdodCBpcyBgZ2l0IGxvZyAtbiA1IGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIG9yIHVzZSBncmVwcGVyIGlmIG5lZWRlZC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvci4gTGV0JiMzOTtzIGNoZWNrIHRoZSBLY29uZmlnIGZvciBCT05ESU5HIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCT05ESU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIEJvbmRpbmcgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHVzdWFsIHN1c3BlY3RzLiBNeSBndXQgc2F5cyB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmdgIGRpcmVjdG9yeSBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGJvbmRpbmcgZHJpdmVyIGNvZGUsIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzLiBJZiBpdCYjMzk7cyBub3QgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzZWFyY2ggYW5kIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL25ldGAgbW9yZSBnZW5lcmFsbHkuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlKHMpLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCB3cml0dGVuIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBJJiMzOTttIHJlc2VhcmNoaW5nIG9yIGEgZ2VuZXJhbCBhcmVhIHRoYXQgcmVxdWlyZXMgb3B0aW1pemF0aW9uLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYXliZSBzb21lIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlIG9yIG90aGVyIHByZXJlcXVpc2l0ZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gdXNlIGFueSBvZiB0aGVcbiAgMzc6XHRcdCAgbmV0d29ya2luZyBjb3JlIGRyaXZlcnMgKGkuZS4gVkxBTiwgYnJpZGdpbmcsIGJvbmRpbmcsIGV0Yy4pXG4gIDM4Olx0XG4gIDM5Olx0aWYgTkVUX0NPUkVcbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBUaGlzIGlzIGVzc2VudGlhbGx5IGEgYml0LWJ1Y2tldCBkZXZpY2UgKGkuZS4gdHJhZmZpYyB5b3Ugc2VuZCB0b1xuICA2MzpcdFx0ICB0aGlzIGRldmljZSBpcyBjb25zaWduZWQgaW50byBvYmxpdmlvbikgd2l0aCBhIGNvbmZpZ3VyYWJsZSBJUFxuICA2NDpcdFx0ICBhZGRyZXNzLiBJdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gb3JkZXIgdG8gbWFrZSB5b3VyIGN1cnJlbnRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQ3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIHN5bWJvbHMgdGhhdCBtaWdodCBzd2F5IG15IGRlY2lzaW9uLiBJIHNob3VsZCBjaGVjayBmb3IgdGhpbmdzIGxpa2UgYE5FVF9DT1JFYCwgYEJPTkRJTkdgLCBhbmQgYElORVRgIHRvIGVuc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBjcml0ZXJpYS4gV2UgbmVlZCB0byBydWxlIG91dDogRG9jdW1lbnRhdGlvbi9LY29uZmlnIGNoYW5nZXMsIGRlY29yYXRpdmUgc3R1ZmYgbGlrZSBsb2dnaW5nLCBub24tZnVuY3Rpb25hbCBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemF0aW9uLCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgY29kZSByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUsIGFuZCB0ZWFyZG93biBjYWxsYmFja3MuCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGF0JiMzOTtzIHNxdWFyZWx5IGluIHRoZSBjb3JlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKSwgYW5kIGl0JiMzOTtzIGZpZGRsaW5nIHdpdGggdGhlIHdvcmtxdWV1ZSBzY2hlZHVsaW5nIGludGVydmFsIHdoZW4gYHJ0bmxfdHJ5bG9jaygpYCBmYWlscy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/CgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gSXQgY2hhbmdlcyB0aGUgdGltaW5nIGFuZCBleGVjdXRpb24gbG9naWMgb2YgdGhlIEFSUCBtb25pdG9yaW5nIHdvcmtxdWV1ZSB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBDcnVjaWFsbHksIGJvbmRpbmcgaXMgYSAqc29mdHdhcmUqIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBjb3JlIG5ldHdvcmtpbmcuIEkgY2FuIGVhc2lseSBpbnN0YW50aWF0ZSBpdCB3aXRoIHJ0bmwvbmV0bGluaywgYW5kIGl0JiMzOTtzICpmdWxseSogcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRS4gVGhlcmVmb3JlLCB0aGlzIG9uZSBsb29rcyBwcm9taXNpbmcsIHNvIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgYXBwcm9wcmlhdGUgc3ltYm9scy4gSSBuZWVkIHRvIGZpbmQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIOKAkyBsZXQmIzM5O3MgY2FsbCB0aGVtICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYm9uZGluZyBBUlAgbW9uaXRvcmluZywgb3IgcGVyaGFwcyBib25kaW5nIG5ldGxpbmsvcnRubCBpbnRlcmFjdGlvbnMuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHRoaW5ncyBsaWtlIGBib25kX2FycF9tb25pdG9yYCwgYW5kIGxvb2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCwgYGJvbmRfb3B0aW9ucy5jYCwgb3IgYGJvbmRfbmV0bGluay5jYC4gSSB3aWxsIHJ1biBhIGdyZXAgZm9yIHRob3NlIGZ1bmN0aW9ucyBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4gSSBtaWdodCBhbHNvIHRyeSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGJvbmRpbmcgQVJQIG1vbml0b3IgaXMgc2V0IHVwIGFuZCB0cmlnZ2VyZWQuIFRoaXMgd2lsbCBsZWFkIG1lIHRvIGFwcHJvcHJpYXRlIHRlc3QgY2FzZXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfYXJwX21vbml0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mzg0Mz1zdGF0aWMgdm9pZCBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzg5Mi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6Mzg5MzpzdGF0aWMgdm9pZCBib25kX2FycF9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzg5NC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzE4PXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyNy1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNmJvbmQtXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MzI4Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Ym9uZC1cdTAwM2VhcnBfd29yaywgYm9uZF9hcnBfbW9uaXRvcik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMjktXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZib25kLVx1MDAzZWFkX3dvcmssIGJvbmRfM2FkX3N0YXRlX21hY2hpbmVfaGFuZGxlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyBBUlAgTW9uaXRvcmluZyBhbmQgQm9uZGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IEFSUCBtb25pdG9yaW5nIGludGVyYWN0cyB3aXRoIGJvbmRpbmcuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMgdGhhdCAqY29uZmlndXJlKiBhbmQgKmVuYWJsZSogaXQgd2l0aGluIHRoZSBib25kaW5nIGNvbnRleHQuIFRoaW5ncyBsaWtlIHRoZSBgYXJwX2ludGVydmFsYCDigJMgd2hhdCYjMzk7cyB0aGUgZnJlcXVlbmN5PyBBbmQgdGhhdCBgYXJwX2lwX3RhcmdldGAgLSB3aGljaCBJUCBhZGRyZXNzIGFyZSB3ZSB1c2luZyB0byBwcm9iZT8gSSYjMzk7bSB0cnlpbmcgdG8gaWRlbnRpZnkgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGRlZmluZWQuIEJleW9uZCBqdXN0IHRoZSBzZXR0aW5ncyB0aGVtc2VsdmVzLCBJIHdhbnQgdG8gdHJhY2UgaG93IHRoZXNlIHNldHRpbmdzICp0aWUqIGludG8gdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbiBwcm9jZXNzIGluIGdlbmVyYWwsIGFuZCB3aGF0IG1hbmFnZXMgdGhlIGJvbmRpbmcgcHJvY2VzcyBpdHNlbGYuIEJhc2ljYWxseSwgaG93IGFuZCB3aGVyZSBhcmUgd2UgcmVnaXN0ZXJpbmcgYW5kIG1hbmFnaW5nIGJvbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBvcmNoZXN0cmF0ZXMgYWxsIG9mIHRoaXMsIGhvdyBpdCYjMzk7cyBzZXQgdXAgYW5kIGFkbWluaXN0ZXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHBpY3R1cmU6ICB0aGUgY29uZmlndXJhdGlvbiBwb2ludHMgYW5kIHRoZSBvdmVyYWxsIG1hbmFnZW1lbnQgd29ya2Zsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfb3B0X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDU4Mz1zdGF0aWMgaW50IGJvbmRfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ2NDctXHRjYXNlIFNJT0NCT05EQ0hBTkdFQUNUSVZFOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0NjQ4Olx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgc2xhdmVfZGV2LVx1MDAzZW5hbWUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQ5LVx0XHRyZXMgPSBfX2JvbmRfb3B0X3NldF9ub3RpZnkoYm9uZCwgQk9ORF9PUFRfQUNUSVZFX1NMQVZFLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4NT1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMDEtXHRpZiAobW9kZSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MTAyOlx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgbW9kZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMDMtXHRcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9NT0RFKSwgXHUwMDI2bmV3dmFsKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMTctXHRcdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYxMTg6XHRcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHhtaXRfaGFzaF9wb2xpY3kpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTE5LVx0XHRcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9YTUlUX0hBU0gpLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEzNC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjEzNTpcdFx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgbGFjcF9yYXRlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEzNi1cdFx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfTEFDUF9SQVRFKSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxNDctXHRpZiAoYWRfc2VsZWN0KSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYxNDg6XHRcdGJvbmRfb3B0X2luaXRzdHIoXHUwMDI2bmV3dmFsLCBhZF9zZWxlY3QpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTQ5LVx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfQURfU0VMRUNUKSxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYyMjQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYyMjU6XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgcGFja2V0c19wZXJfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MjI2LVx0aWYgKCFib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfUEFDS0VUU19QRVJfU0xBVkUpLCBcdTAwMjZuZXd2YWwpKSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzA2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzA3Olx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgYXJwX3ZhbGlkYXRlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjMwOC1cdFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX0FSUF9WQUxJREFURSksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzIwLVx0aWYgKGFycF9hbGxfdGFyZ2V0cykge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzIxOlx0XHRib25kX29wdF9pbml0c3RyKFx1MDAyNm5ld3ZhbCwgYXJwX2FsbF90YXJnZXRzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjMyMi1cdFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX0FSUF9BTExfVEFSR0VUUyksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzYyLVx0aWYgKHByaW1hcnkgXHUwMDI2XHUwMDI2IHByaW1hcnlfcmVzZWxlY3QpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjM2MzpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHByaW1hcnlfcmVzZWxlY3QpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzY0LVx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfUFJJTUFSWV9SRVNFTEVDVCksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02Mzc2LVx0aWYgKGZhaWxfb3Zlcl9tYWMpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjM3NzpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIGZhaWxfb3Zlcl9tYWMpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02Mzc4LVx0XHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfRkFJTF9PVkVSX01BQyksXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzkxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzkyOlx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIFwmIzM0O2RlZmF1bHRcJiMzNDspO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzkzLVx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDA5LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDEwOlx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIFwmIzM0O2RlZmF1bHRcJiMzNDspO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDExLVx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX1RMQl9EWU5BTUlDX0xCKSwgXHUwMDI2bmV3dmFsKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTE2Nz1zdGF0aWMgaW50IGJvbmRfc2xhdmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xODUtXHRcdFx0IHNsYXZlX2Rldi1cdTAwM2VuYW1lLCBxdWV1ZV9pZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjE4NjpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHF1ZXVlX2lkX3N0cik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTE4Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUVVFVUVfSUQsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTIxNj1zdGF0aWMgaW50IGJvbmRfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yMzAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjIzMTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIG1vZGUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yMzItXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01PREUsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI0OC1cdFx0fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNDk6XHRcdGJvbmRfb3B0X2luaXRzdHIoXHUwMDI2bmV3dmFsLCBhY3RpdmVfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNTAtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FDVElWRV9TTEFWRSwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjU3LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNTg6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBtaWltb24pO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNTktXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JSU1PTiwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjY2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNjc6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCB1cGRlbGF5KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjY4LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9VUERFTEFZLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNzUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjI3NjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGRvd25kZWxheSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI3Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfRE9XTkRFTEFZLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yODQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjI4NTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGRlbGF5KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjg2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9QRUVSX05PVElGX0RFTEFZLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMDYtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjMwNzpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFycF9pbnRlcnZhbCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMwOC1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX0lOVEVSVkFMLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMjUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjMyNjpcdFx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgKF9fZm9yY2UgdTY0KXRhcmdldCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMyNy1cdFx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BUlBfVEFSR0VUUyxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM1NS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzU2Olx0XHRcdGJvbmRfb3B0X2luaXRleHRyYShcdTAwMjZuZXd2YWwsIFx1MDAyNmFkZHI2LCBzaXplb2YoYWRkcjYpKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzU3LVx0XHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX05TX1RBUkdFVFMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zNzktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjM4MDpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFycF92YWxpZGF0ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM4MS1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX1ZBTElEQVRFLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zODktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjM5MDpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFycF9hbGxfdGFyZ2V0cyk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM5MS1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX0FMTF9UQVJHRVRTLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MDQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQwNTpcdFx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZuZXd2YWwsIHByaW1hcnkpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MDYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1BSSU1BUlksIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQxNC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDE1Olx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgcHJpbWFyeV9yZXNlbGVjdCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQxNi1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUFJJTUFSWV9SRVNFTEVDVCwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDI0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0MjU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBmYWlsX292ZXJfbWFjKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDI2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9GQUlMX09WRVJfTUFDLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MzQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQzNTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIHhtaXRfaGFzaF9wb2xpY3kpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MzYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1hNSVRfSEFTSCwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDQ0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NDU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCByZXNlbmRfaWdtcCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ0Ni1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUkVTRU5EX0lHTVAsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ1NC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDU1Olx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgbnVtX3BlZXJfbm90aWYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NTYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX05VTV9QRUVSX05PVElGLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NjQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ2NTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFsbF9zbGF2ZXNfYWN0aXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDY2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BTExfU0xBVkVTX0FDVElWRSwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDc0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NzU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBtaW5fbGlua3MpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NzYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JTkxJTktTLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00ODQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ4NTpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGxwX2ludGVydmFsKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDg2LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9MUF9JTlRFUlZBTCwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDk0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0OTU6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBwYWNrZXRzX3Blcl9zbGF2ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ5Ni1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUEFDS0VUU19QRVJfU0xBVkUsIFx1MDAyNm5ld3ZhbCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUwNC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTA1Olx0XHRib25kX29wdF9pbml0dmFsKFx1MDAyNm5ld3ZhbCwgbGFjcF9hY3RpdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MDYtXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfQUNUSVZFLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MTUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUxNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGxhY3BfcmF0ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUxNy1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTEFDUF9SQVRFLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MjUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUyNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFkX3NlbGVjdCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUyNy1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQURfU0VMRUNULCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MzUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUzNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGFjdG9yX3N5c19wcmlvKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTM3LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BRF9BQ1RPUl9TWVNfUFJJTywgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTQ1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NDY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBwb3J0X2tleSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU0Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQURfVVNFUl9QT1JUX0tFWSwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTU1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NTY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01NTctXHRcdFx0XHQgbmxhX2dldF91NjQoZGF0YVtJRkxBX0JPTkRfQURfQUNUT1JfU1lTVEVNXSkpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTY1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NjY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBkeW5hbWljX2xiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTY3LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9UTEJfRFlOQU1JQ19MQiwgXHUwMDI2bmV3dmFsLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTc1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1NzY6XHRcdGJvbmRfb3B0X2luaXR2YWwoXHUwMDI2bmV3dmFsLCBtaXNzZWRfbWF4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTc3LVx0XHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9NSVNTRURfTUFYLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01ODUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU4NjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGNvdXBsZWRfY29udHJvbCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU4Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQ09VUExFRF9DT05UUk9MLCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01OTUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU5NjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGJyb2FkY2FzdF9uZWlnaCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU5Ny1cdFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQlJPQURDQVNUX05FSUdILCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy02MDUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjYwNjpcdFx0Ym9uZF9vcHRfaW5pdHZhbChcdTAwMjZuZXd2YWwsIGZhbGxiYWNrX21vZGUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy02MDctXHRcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfU1RSSUNULCBcdTAwMjZuZXd2YWwsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz04Njg9aW50IGJvbmRfb3B0X3RyeXNldF9ydG5sKHN0cnVjdCBib25kaW5nICpib25kLCB1bnNpZ25lZCBpbnQgb3B0aW9uLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy04NzQtXHRcdHJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6ODc1Olx0Ym9uZF9vcHRfaW5pdHN0cihcdTAwMjZvcHR2YWwsIGJ1Zik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg3Ni1cdHJldCA9IF9fYm9uZF9vcHRfc2V0X25vdGlmeShib25kLCBvcHRpb24sIFx1MDAyNm9wdHZhbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyBCb25kaW5nIE1vZHVsZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBib25kaW5nIG1vZHVsZSYjMzk7cyBjb3JlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzdGFydCBieSBleGFtaW5pbmcgYGJvbmRfbWFpbi5jYCwgYGJvbmRfb3B0aW9ucy5jYCwgYW5kIGBib25kX25ldGxpbmsuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSBlbnRyeSBwb2ludHMgb3IgY3JpdGljYWwgY29tcG9uZW50cy4KCkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIGZ1bmN0aW9ucyBsaWtlIGBib25kX2NoYW5nZWxpbmtgLCBgYm9uZF9uZXdsaW5rYCwgYGJvbmRfY3JlYXRlYCwgYW5kIGFsc28gdGhlIG9wdGlvbi1yZWxhdGVkIGZ1bmN0aW9ucyBgYm9uZF9vcHRfdHJ5c2V0X3J0bmxgLCBgYm9uZF9kb19pb2N0bGAsIGFzIHdlbGwgYXMgYF9fYm9uZF9vcHRfc2V0X25vdGlmeWAgYW5kIGBfX2JvbmRfb3B0X3NldGAuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlcyBpbiB0aGUgYm9uZGluZyBsaWZlY3ljbGUuCgpOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2Agbm93LCBzZWVraW5nIG91dCBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiBib25kaW5nIGluaXRpYWxpemF0aW9uLCBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wgKEFSUCkgbW9uaXRvcmluZywgYW5kIHRoZSB3b3JrIHF1ZXVlIHN5c3RlbS4gVGhlc2UgYXJlYXMgYXJlIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBiZWhhdmlvciBvZiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGFpbSBpcyB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgYm9uZF98XmludCBib25kXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTIyMTQ9c3RhdGljIHZvaWQgYWRfbWFya2VyX3Jlc3BvbnNlX3JlY2VpdmVkKHN0cnVjdCBib25kX21hcmtlciAqbWFya2VyLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjM2LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjIyMzc6dm9pZCBib25kXzNhZF9pbml0aWF0ZV9hZ2dfc2VsZWN0aW9uKHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgdGltZW91dClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjM4LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI0Ny0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyMjQ4OnZvaWQgYm9uZF8zYWRfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjQ5LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI3MS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyMjcyOnZvaWQgYm9uZF8zYWRfYmluZF9zbGF2ZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTIyNzMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMzI1LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjIzMjY6dm9pZCBib25kXzNhZF91bmJpbmRfc2xhdmUoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMzI3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjQ4OC0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyNDg5OnZvaWQgYm9uZF8zYWRfdXBkYXRlX2FkX2FjdG9yX3NldHRpbmdzKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI0OTAte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0yNTIwPXN0YXRpYyBib29sIGJvbmRfYWdnX3RpbWVyX2FkdmFuY2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI1NDgtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjU0OTp2b2lkIGJvbmRfM2FkX3N0YXRlX21hY2hpbmVfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjU1MC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTI3MTA9c3RhdGljIHZvaWQgYWRfdXBkYXRlX2FjdG9yX2tleXMoc3RydWN0IHBvcnQgKnBvcnQsIGJvb2wgcmVzZXQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI3NTMtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjc1NDp2b2lkIGJvbmRfM2FkX2FkYXB0ZXJfc3BlZWRfZHVwbGV4X2NoYW5nZWQoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNzU1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc4MC0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyNzgxOnZvaWQgYm9uZF8zYWRfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBzbGF2ZSAqc2xhdmUsIGNoYXIgbGluaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNzgyLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjgzOC0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyODM5OmludCBib25kXzNhZF9zZXRfY2FycmllcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yODQwLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9Mjg4MT1pbnQgX19ib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvKGNvbnN0IHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTEzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5MTQ6aW50IGJvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8oY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBhZF9pbmZvICphZF9pbmZvKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MTUte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTI0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5MjU6aW50IGJvbmRfM2FkX2xhY3BkdV9yZWN2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MjYtXHRcdFx0IHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5NTYtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjk1Nzp2b2lkIGJvbmRfM2FkX3VwZGF0ZV9sYWNwX3JhdGUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjk1OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5ODEtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjk4Mjp2b2lkIGJvbmRfM2FkX3VwZGF0ZV9sYWNwX2FjdGl2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTgzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9MzAwMT1zaXplX3QgYm9uZF8zYWRfc3RhdHNfc2l6ZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDEzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMTQ6aW50IGJvbmRfM2FkX3N0YXRzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRfM2FkX3N0YXRzICpzdGF0cylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDE1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTI4ND1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzA1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzMDY6aW50IGJvbmRfYWxiX2luaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBybGJfZW5hYmxlZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzA3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMyNy1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMjkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTIzPW5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzI6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzNS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjM2OmludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjY1LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE2NjY6dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2Ny17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2NzktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY4MDp2b2lkIGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgY2hhciBsaW5rKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTg6dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTcxOS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3ODYtLyogQ2FsbGVkIHdpdGggUlROTCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3ODc6aW50IGJvbmRfYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHZvaWQgKmFkZHIpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTc4OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE4MzEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTgzMjp2b2lkIGJvbmRfYWxiX2NsZWFyX3ZsYW4oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIHNob3J0IHZsYW5faWQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzMy17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz01ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9uZF9kZWJ1Z19ybGJfaGFzaCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTU1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo1Njp2b2lkIGJvbmRfZGVidWdfcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTU3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTY0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo2NTp2b2lkIGJvbmRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjYte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjktXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjcwOnZvaWQgYm9uZF9kZWJ1Z19yZXJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy03MS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz03OT12b2lkIF9faW5pdCBib25kX2NyZWF0ZV9kZWJ1Z2ZzKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy04Ni1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6ODc6dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy04OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05NS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6OTY6dm9pZCBib25kX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05Ny17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05OS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTAwOnZvaWQgYm9uZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMDEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTAzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMDQ6dm9pZCBib25kX2RlYnVnX3JlcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTEwNS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz0xMDg9dm9pZCBfX2luaXQgYm9uZF9jcmVhdGVfZGVidWdmcyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTExLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMTI6dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMTMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NzM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybWRldl9vcHMgYm9uZF94ZnJtZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc1NS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NzU2OmludCBib25kX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy03NTcte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTE3Nj1zdGF0aWMgYm9vbCBib25kX3Nob3VsZF9ub3RpZnlfcGVlcnMoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjA4LS8qIFVzZSB0aGlzIHRvIHVwZGF0ZSBzZW5kX3BlZXJfbm90aWYgd2hlbiBSVE5MIG1heSBiZSBoZWxkIGluIG90aGVyIHBsYWNlcy4gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTIwOTp2b2lkIGJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgbG9uZyBkZWxheSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTIxMC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMjM4PXN0YXRpYyB2b2lkIGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgYm9vbCBmb3JjZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyNjUtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyNjY6dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI2Ny17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzY5LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzcwOnZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzcxLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4MDU9c3RhdGljIHZvaWQgYm9uZF9uZXRkZXZfbm90aWZ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICpfd29yaylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4MjEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE4MjI6dm9pZCBib25kX3F1ZXVlX3NsYXZlX2V2ZW50KHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4MjMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTgyNi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTgyNzp2b2lkIGJvbmRfbG93ZXJfc3RhdGVfY2hhbmdlZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODI4LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4NTY9c3RhdGljIHZvaWQgYm9uZF9ldGhlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODY0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODY1OnZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg2Ni17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg3LS8qIGVuc2xhdmUgZGV2aWNlIFx1MDAzY3NsYXZlXHUwMDNlIHRvIGJvbmQgZGV2aWNlIFx1MDAzY21hc3Rlclx1MDAzZSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODg4OmludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg5LVx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNjA1LS8qIEEgd3JhcHBlciB1c2VkIGJlY2F1c2Ugb2YgbmRvX2RlbF9saW5rICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjI2MDY6aW50IGJvbmRfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI2MDcte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzM3ND1zdGF0aWMgaW50IGJvbmRfbmFfcmN2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyMi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyMzppbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0MjQtXHRcdCAgICAgIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzAzPXN0YXRpYyB1MzIgYm9uZF94bWl0X2hhc2hfeGRwKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMTctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMTg6dm9pZCBib25kX3dvcmtfaW5pdF9hbGwoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMTkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMzMy1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDMzNDp2b2lkIGJvbmRfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzM1LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUwNTg9c3RhdGljIG5ldGRldl90eF90IGJvbmRfeG1pdF9hY3RpdmViYWNrdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNzQtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNzU6dm9pZCBib25kX3NsYXZlX2Fycl93b3JrX3JlYXJtKHN0cnVjdCBib25kaW5nICpib25kLCB1bnNpZ25lZCBsb25nIGRlbGF5KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDc2LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUxNDU9c3RhdGljIHZvaWQgYm9uZF9yZXNldF9zbGF2ZV9hcnIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MTU3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MTU4OmludCBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2tpcHNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MTU5LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5ODI9c3RhdGljIHZvaWQgYm9uZF9kZXN0cnVjdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5OTEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU5OTI6dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk5My17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02NTA4PXVuc2lnbmVkIGludCBib25kX2dldF9udW1fdHhfcXVldWVzKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTE3LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NTE4OmludCBib25kX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY1MTkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9MTAwOD1pbnQgX19pbml0IGJvbmRfbmV0bGlua19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xMDEyLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoxMDEzOnZvaWQgYm9uZF9uZXRsaW5rX2Zpbmkodm9pZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMTAxNC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz04NDQ9aW50IF9fYm9uZF9vcHRfc2V0X25vdGlmeShzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg2Ny0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6ODY4OmludCBib25kX29wdF90cnlzZXRfcnRubChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgaW50IG9wdGlvbiwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy04Njkte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9MTIxMz1zdGF0aWMgaW50IGJvbmRfb3B0aW9uX2FycF9pcF90YXJnZXRfcmVtKHN0cnVjdCBib25kaW5nICpib25kLCBfX2JlMzIgdGFyZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTI1MS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTI1Mjp2b2lkIGJvbmRfb3B0aW9uX2FycF9pcF90YXJnZXRzX2NsZWFyKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjUzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTEzMTE9c3RhdGljIHZvaWQgc2xhdmVfc2V0X25zX21hZGRycyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgYm9vbCBhZGQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzM0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxMzM1OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfYWRkKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzM2LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzNDEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjEzNDI6dm9pZCBib25kX3NsYXZlX25zX21hZGRyc19kZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzNDMte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9MTM4OD1zdGF0aWMgdm9pZCBfYm9uZF9vcHRpb25zX25zX2lwNl90YXJnZXRfc2V0KHN0cnVjdCBib25kaW5nICpib25kLCBpbnQgc2xvdCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE0MDQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjE0MDU6dm9pZCBib25kX29wdGlvbl9uc19pcDZfdGFyZ2V0c19jbGVhcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTQwNi17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xNDUzPXN0YXRpYyB2b2lkIHNsYXZlX3NldF9uc19tYWRkcnMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUsIGJvb2wgYWRkKSB7fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxNDU1OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfYWRkKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKSB7fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxNDU3OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfZGVsKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKSB7fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU4LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz0yODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMjkwLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjI5MTp2b2lkIGJvbmRfY3JlYXRlX3Byb2NfZW50cnkoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMjkyLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMzA2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjMwNzp2b2lkIGJvbmRfcmVtb3ZlX3Byb2NfZW50cnkoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMzA4LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYz04NTI9dm9pZCBfX25ldF9leGl0IGJvbmRfZGVzdHJveV9zeXNmcyhzdHJ1Y3QgYm9uZF9uZXQgKmJuKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jLTg1OS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jOjg2MDp2b2lkIGJvbmRfcHJlcGFyZV9zeXNmc19ncm91cChzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jLTg2MS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmM9MTMzPWNvbnN0IHN0cnVjdCBzeXNmc19vcHMgc2xhdmVfc3lzZnNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTEzNi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jOjEzNzppbnQgYm9uZF9zeXNmc19zbGF2ZV9hZGQoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTEzOC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmMtMTQxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmM6MTQyOnZvaWQgYm9uZF9zeXNmc19zbGF2ZV9kZWwoc3RydWN0IHNsYXZlICpzbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTE0My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQm9uZCBOZXRsaW5rIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdGhlIGJvbmQgZHJpdmVyIHNwZWNpZmljYWxseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byBob3cgdGhlIGBib25kYCBkcml2ZXIgaGFuZGxlcyBOZXRsaW5rIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIHByb2JhYmx5IGRlYnVnZ2luZyBvciBleHRlbmRpbmcgaXRzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoZSBOZXRsaW5rIGxldmVsLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYHJ0bmxfbGlua19vcHNgIHdpdGhpbiBgYm9uZF9uZXRsaW5rLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBlbnRyeXBvaW50cyBmb3IgbGluayBjb25maWd1cmF0aW9uIHZpYSBOZXRsaW5rIGFyZSBkZWZpbmVkLiBDaGVja2luZyB0aGVyZSB3aWxsIHF1aWNrbHkgc2hvdyBtZSB3aGljaCBOZXRsaW5rIG1lc3NhZ2VzIHRoZSBib25kIGRyaXZlciByZWdpc3RlcnMgZm9yIGFuZCBwcm9jZXNzZXMsIHJldmVhbGluZyB0aGUgbWV0aG9kcyBmb3IgYWRkaW5nLCBkZWxldGluZywgYW5kIGNvbmZpZ3VyaW5nIGJvbmRlZCBpbnRlcmZhY2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9mIGhvdyBib25kIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgTmV0bGluayBpbmZyYXN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2xpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTY1MTg9aW50IGJvbmRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY1MzMtXHRkZXZfbmV0X3NldChib25kX2RldiwgbmV0KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjUzNDpcdGJvbmRfZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgPSBcdTAwMjZib25kX2xpbmtfb3BzO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTM1LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9OTMzPXN0YXRpYyBpbnQgYm9uZF9maWxsX2xpbmt4c3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTk4NC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6OTg1OnN0cnVjdCBydG5sX2xpbmtfb3BzIGJvbmRfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtOTg2LVx0LmtpbmRcdFx0XHQ9IFwmIzM0O2JvbmRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTg4CgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gQm9uZGluZyBTeW1ib2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoaXMgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGJvbmRpbmcgbW9kdWxlLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgc28gSSYjMzk7bSBtYWtpbmcgc3VyZSBJJiMzOTt2ZSBnb3QgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzOiBgYm9uZF9lbnNsYXZlYCwgYGJvbmRfcmVsZWFzZWAsIGBib25kX29wdF90cnlzZXRfcnRubGAsIGBfX2JvbmRfb3B0X3NldF9ub3RpZnlgLCBgYm9uZF9jcmVhdGVgLCBgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlYCwgYGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZWAsIGFuZCBgYm9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtYC4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIEkgYmVsaWV2ZSB0aGUgbGlzdCBpcyBleGhhdXN0aXZlLgoKTm93LCBsZXQmIzM5O3MgdGFja2xlIHRob3NlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJIHJlbWVtYmVyIHRoYXQgYEJPTkRJTkdgIGlzIGNvbnRpbmdlbnQgdXBvbiBgSU5FVGAgYW5kIHRoZW4sIGNydWNpYWxseSwgZWl0aGVyIGBUTFNgIG9yLCBpZiBgVExTYCBpcyBleHBsaWNpdGx5IGRpc2FibGVkIChpLmUuLCBgVExTX0RFVklDRT1uYCkuIFRob3NlIGFyZSB0aGUgZ2F0ZWtlZXBlcnMuIE9rYXksIHRoaXMgdGVsbHMgbWUgdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYEJPTkRJTkdgLCBgSU5FVGAsIGFuZCwgb2YgY291cnNlLCBgTkVUX0NPUkVgIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGlzLiBBbHdheXMgbmVlZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoZSBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIGZpbmFsIGNoZWNrIG92ZXIgZXZlcnl0aGluZyB0byBjb25maXJtIHRoZXJlIGFyZSBubyBob2xlcyBpbiBteSB0aGlua2luZy4gT25jZSBJJiMzOTttIHNhdGlzZmllZCwgSSYjMzk7bGwgaW52b2tlIGBzZXQtcmVzdWx0c2AuIFJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtib25kX29wdF90cnlzZXRfcnRubCYjMzQ7LAogICAgJiMzNDtib25kX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JvbmRfb3B0X3RyeXNldF9ydG5sJiMzNDssCiAgICAmIzM0O2JvbmRfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZSYjMzQ7LAogICAgJiMzNDtib25kX3BlZXJfbm90aWZ5X3dvcmtfcmVhcm0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlbGF5ZWQgd29yayByZS1hcm1pbmcgYmVoYXZpb3IgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIgKGBDT05GSUdfQk9ORElOR2ApLiBXaGVuIGZhaWxpbmcgdG8gYWNxdWlyZSBSVE5MIGxvY2sgZHVyaW5nIHNsYXZlIG5vdGlmaWNhdGlvbiAvIHBlZXIgbm90aWZpY2F0aW9uIGluIGFjdGl2ZS1iYWNrdXAgQVJQIG1vbml0b3JpbmcsIGl0IG5vIGxvbmdlciBmb3JjaWJseSByZXNldHMgYGRlbHRhX2luX3RpY2tzYCB0byAxLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZyBvZiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgcGVyaW9kaWMgQVJQIG1vbml0b3IsIHdoaWNoIGlzIGEgc29mdHdhcmUgbmV0d29yayBpbnRlcmZhY2UgcmVhZGlseSBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDk6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcblxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeSwgbm9yIGRvZXMgaXQgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIGRhdGEsIGV0Yy4pLlxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YjkyMGQ4MTJlNTYzNDJmZjU3ZjFkYTFlYzNhODg0MmMxNjQ1NGFiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDk6NDI6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBlZjllYjBjNTNjNjYxLi5jMjNjZjE4YTk5NmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTM4NzEsMTAgJiM0MzszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChSRUFEX09OQ0UoYm9uZC0mZ3Q7c2VuZF9wZWVyX25vdGlmKSB8fCBzaG91bGRfbm90aWZ5X3J0bmwpIHsKLQkJaWYgKCFydG5sX3RyeWxvY2soKSkgewotCQkJZGVsdGFfaW5fdGlja3MgPSAxOwomIzQzOwkJaWYgKCFydG5sX3RyeWxvY2soKSkKIAkJCWdvdG8gcmVfYXJtOwotCQl9CiAKIAkJaWYgKGJvbmQtJmd0O3NlbmRfcGVlcl9ub3RpZikKIAkJCWJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJvbmRpbmcgRHJpdmVyIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgY2hhbmdlZCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBNeSBpbml0aWFsIHN0ZXAgaXMgZ29pbmcgdG8gYmUgYSBjYXJlZnVsIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYsIG9mIGNvdXJzZS4gVGhhdCYjMzk7cyBteSBnby10byBhcHByb2FjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCkdpdmVuIHRoZSBsaW5lIG51bWJlciByZWZlcmVuY2UsIEkmIzM5O2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgdG9vbCB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM4NzEuIEkgd2FudCB0byBzZWUgdGhlIGFkamFjZW50IGxpbmVzIG9mIGNvZGU7IHRoYXQgc3Vycm91bmRpbmcgY29udGV4dCBpcyBjcnVjaWFsLiBHZXR0aW5nIHRoZSBiaWcgcGljdHVyZSBvZiBob3cgdGhlIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGlzIHZpdGFsLiBPbmx5IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgY2FuIEkgdHJ1bHkgYXNzZXNzIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzg0MDpcdFx0cmV0dXJuIHNob3VsZF9ub3RpZnlfcnRubDtcbjM4NDE6XHR9XG4zODQyOlx0XG4zODQzOlx0c3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbjM4NDQ6XHR7XG4zODQ1Olx0XHRib29sIHNob3VsZF9ub3RpZnlfcnRubDtcbjM4NDY6XHRcdGludCBkZWx0YV9pbl90aWNrcztcbjM4NDc6XHRcbjM4NDg6XHRcdGRlbHRhX2luX3RpY2tzID0gbXNlY3NfdG9famlmZmllcyhib25kLVx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpO1xuMzg0OTpcdFxuMzg1MDpcdFx0aWYgKCFib25kX2hhc19zbGF2ZXMoYm9uZCkpXG4zODUxOlx0XHRcdGdvdG8gcmVfYXJtO1xuMzg1MjpcdFxuMzg1MzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzg1NDpcdFxuMzg1NTpcdFx0aWYgKGJvbmRfYWJfYXJwX2luc3BlY3QoYm9uZCkpIHtcbjM4NTY6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zODU3Olx0XG4zODU4Olx0XHRcdC8qIFJhY2UgYXZvaWRhbmNlIHdpdGggYm9uZF9jbG9zZSBmbHVzaCBvZiB3b3JrcXVldWUgKi9cbjM4NTk6XHRcdFx0aWYgKCFydG5sX3RyeWxvY2soKSkge1xuMzg2MDpcdFx0XHRcdGRlbHRhX2luX3RpY2tzID0gMTtcbjM4NjE6XHRcdFx0XHRnb3RvIHJlX2FybTtcbjM4NjI6XHRcdFx0fVxuMzg2MzpcdFxuMzg2NDpcdFx0XHRib25kX2FiX2FycF9jb21taXQoYm9uZCk7XG4zODY1Olx0XG4zODY2Olx0XHRcdHJ0bmxfdW5sb2NrKCk7XG4zODY3Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjM4Njg6XHRcdH1cbjM4Njk6XHRcbjM4NzA6XHRcdHNob3VsZF9ub3RpZnlfcnRubCA9IGJvbmRfYWJfYXJwX3Byb2JlKGJvbmQpO1xuMzg3MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zODcyOlx0XG4zODczOlx0XHRpZiAoUkVBRF9PTkNFKGJvbmQtXHUwMDNlc2VuZF9wZWVyX25vdGlmKSB8fCBzaG91bGRfbm90aWZ5X3J0bmwpIHtcbjM4NzQ6XHRcdFx0aWYgKCFydG5sX3RyeWxvY2soKSlcbjM4NzU6XHRcdFx0XHRnb3RvIHJlX2FybTtcbjM4NzY6XHRcbjM4Nzc6XHRcdFx0aWYgKGJvbmQtXHUwMDNlc2VuZF9wZWVyX25vdGlmKVxuMzg3ODpcdFx0XHRcdGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTtcbjM4Nzk6XHRcbjM4ODA6XHRcdFx0aWYgKHNob3VsZF9ub3RpZnlfcnRubCkge1xuMzg4MTpcdFx0XHRcdGJvbmRfc2xhdmVfc3RhdGVfbm90aWZ5KGJvbmQpO1xuMzg4MjpcdFx0XHRcdGJvbmRfc2xhdmVfbGlua19ub3RpZnkoYm9uZCk7XG4zODgzOlx0XHRcdH1cbjM4ODQ6XHRcbjM4ODU6XHRcdFx0cnRubF91bmxvY2soKTtcbjM4ODY6XHRcdH1cbjM4ODc6XHRcbjM4ODg6XHRyZV9hcm06XG4zODg5Olx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKVxuMzg5MDpcdFx0XHRxdWV1ZV9kZWxheWVkX3dvcmsoYm9uZC1cdTAwM2V3cSwgXHUwMDI2Ym9uZC1cdTAwM2VhcnBfd29yaywgZGVsdGFfaW5fdGlja3MpO1xuMzg5MTpcdH1cbjM4OTI6XHRcbjM4OTM6XHRzdGF0aWMgdm9pZCBib25kX2FycF9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjM4OTQ6XHR7XG4zODk1Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZyxcbjM4OTY6XHRcdFx0XHRcdFx0ICAgIGFycF93b3JrLndvcmspO1xuMzg5NzpcdFxuMzg5ODpcdFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUNUSVZFQkFDS1VQKVxuMzg5OTpcdFx0XHRib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKGJvbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjEwCgkJCQkJCQlvdXRwdXQ6IDI1MwoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJvbmRpbmcgQVJQIE1vbml0b3JpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBgZGVsdGFfaW5fdGlja3MgPSAxYCBiZWZvcmUganVtcGluZyB0byBgcmVfYXJtYCBpZiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIHRoZSBzZWNvbmQgdHJ5bG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSByaXNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjbGFzc2ljIGdvdGNoYS4KCkltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IGBkZWx0YV9pbl90aWNrc2AgaXMgaW5pdGlhbGl6ZWQgYXQgbGluZSAzODQ4LCB1c2luZyBgbXNlY3NfdG9famlmZmllcyhib25kLSZndDtwYXJhbXMuYXJwX2ludGVydmFsKWAuIFNvLCB0aGF0JiMzOTtzIGdvb2QuIEl0JiMzOTtzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKmJlZm9yZSogdGhlIHBvdGVudGlhbCBqdW1wLiBObyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgYXJlIGJlaW5nIG1lc3NlZCB3aXRoLCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBvciBmaWVsZHMgYmVpbmcgcmVhZC4gVGhpcyBpcyBwdXJlbHkgcmVsYXRlZCB0byB0aW1pbmcgYW5kIHJlc2NoZWR1bGluZyB3aXRoaW4gdGhlIGJvbmRpbmcgQVJQIG1vbml0b3JpbmcgbG9naWMuCgpOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBBcmUgdGhlcmUgKmFueSogb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW55d2hlcmUgaW4gdGhpcyBwYXRjaD8gQWZ0ZXIgYSBxdWljayBzY2FuLCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgdGhlcmUgYXJlLiBObyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IGJ1ZmZlcnMsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGxzLCBvciBCUEYgYnVmZmVycyBhcmUgdG91Y2hlZC4gVGhlcmUgYXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdHMgdGhhdCBqdW1wIG91dC4gQWdhaW4sIGBkZWx0YV9pbl90aWNrc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSBvZiBjb25jZXJuLgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGRhdGEgZXhwb3N1cmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiBvciBjb25jdXJyZW5jeSB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQsIG9yIGV2ZW4gdW5uZWNlc3Nhcnkgc2luY2UgdGhpcyBpcyBhIHB1cmUgbG9naWMgZml4LiBObyBuZWVkIHRvIGdvIGRlZXBlciBsb29raW5nIGZvciBtZW1vcnkgY29ycnVwdGlvbiBhcyBpdCYjMzk7cyBub3QgcG9zc2libGUgaW4gdGhpcyBzY2VuYXJpby4KCkkmIzM5O20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAgYW5kIGZvbGxvdyB3aXRoIGEgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IGNvbnRyYXN0cyBLQVNBTiBhbmQgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGFzc2lnbm1lbnQgYGRlbHRhX2luX3RpY2tzID0gMTtgIHByaW9yIHRvIGJyYW5jaGluZyB0byBgcmVfYXJtYCB3aGVuIGBydG5sX3RyeWxvY2soKWAgZmFpbHMgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oKWAuIFxuXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XG4xLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgdmFyaWFibGUgYGRlbHRhX2luX3RpY2tzYCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gKGBkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcblxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWdlIG1lbW9yeSwgbm9yIGRvZXMgaXQgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGBjb3B5X3RvX3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIGRhdGEsIGV0Yy4pLlxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0Mjo0NS4wMjMyNTQ4MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0MTQ5MzkzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIixcbiAgICBcImJvbmRfcmVsZWFzZVwiLFxuICAgIFwiYm9uZF9vcHRfdHJ5c2V0X3J0bmxcIixcbiAgICBcImJvbmRfY3JlYXRlXCIsXG4gICAgXCJib25kX2NoYW5nZV9hY3RpdmVfc2xhdmVcIixcbiAgICBcImJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYXNzaWdubWVudCBgZGVsdGFfaW5fdGlja3MgPSAxO2AgcHJpb3IgdG8gYnJhbmNoaW5nIHRvIGByZV9hcm1gIHdoZW4gYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbigpYC4gXFxuXFxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxcbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB2YXJpYWJsZSBgZGVsdGFfaW5fdGlja3NgIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiAoYGRlbHRhX2luX3RpY2tzID0gbXNlY3NfdG9famlmZmllcyhib25kLVxcdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXFxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlbGF5ZWQgd29yayByZS1hcm1pbmcgYmVoYXZpb3IgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIgKGBDT05GSUdfQk9ORElOR2ApLiBXaGVuIGZhaWxpbmcgdG8gYWNxdWlyZSBSVE5MIGxvY2sgZHVyaW5nIHNsYXZlIG5vdGlmaWNhdGlvbiAvIHBlZXIgbm90aWZpY2F0aW9uIGluIGFjdGl2ZS1iYWNrdXAgQVJQIG1vbml0b3JpbmcsIGl0IG5vIGxvbmdlciBmb3JjaWJseSByZXNldHMgYGRlbHRhX2luX3RpY2tzYCB0byAxLiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZyBvZiB0aGUgYm9uZGluZyBkcml2ZXIncyBwZXJpb2RpYyBBUlAgbW9uaXRvciwgd2hpY2ggaXMgYSBzb2Z0d2FyZSBuZXR3b3JrIGludGVyZmFjZSByZWFkaWx5IGV4ZXJjaXNhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDI6NDUuMDIzMjcwMzY4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTA0NjA1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YjkyMGQ4MTJlNTYzNDJmZjU3ZjFkYTFlYzNhODg0MmMxNjQ1NGFiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuaW5kZXggZWY5ZWIwYzUzYzY2MS4uYzIzY2YxOGE5OTZhYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xcbkBAIC0zODcxLDEwICszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRpZiAoUkVBRF9PTkNFKGJvbmQtXFx1MDAzZXNlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7XFxuLVxcdFxcdGlmICghcnRubF90cnlsb2NrKCkpIHtcXG4tXFx0XFx0XFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xcbitcXHRcXHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxcbiBcXHRcXHRcXHRnb3RvIHJlX2FybTtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGJvbmQtXFx1MDAzZXNlbmRfcGVlcl9ub3RpZilcXG4gXFx0XFx0XFx0Ym9uZF9wZWVyX25vdGlmeV9tYXlfZXZlbnRzKGJvbmQsIHRydWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0Mjo0NS40MTQ0MzAxODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2MDUyOTY1NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9lbnNsYXZlXCIsXG4gICAgXCJib25kX3JlbGVhc2VcIixcbiAgICBcImJvbmRfb3B0X3RyeXNldF9ydG5sXCIsXG4gICAgXCJib25kX2NyZWF0ZVwiLFxuICAgIFwiYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlXCIsXG4gICAgXCJib25kX3BlZXJfbm90aWZ5X3dvcmtfcmVhcm1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVsYXllZCB3b3JrIHJlLWFybWluZyBiZWhhdmlvciBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgd2l0aGluIHRoZSBib25kaW5nIGRyaXZlciAoYENPTkZJR19CT05ESU5HYCkuIFdoZW4gZmFpbGluZyB0byBhY3F1aXJlIFJUTkwgbG9jayBkdXJpbmcgc2xhdmUgbm90aWZpY2F0aW9uIC8gcGVlciBub3RpZmljYXRpb24gaW4gYWN0aXZlLWJhY2t1cCBBUlAgbW9uaXRvcmluZywgaXQgbm8gbG9uZ2VyIGZvcmNpYmx5IHJlc2V0cyBgZGVsdGFfaW5fdGlja3NgIHRvIDEuIFRoaXMgYWZmZWN0cyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIG9mIHRoZSBib25kaW5nIGRyaXZlcidzIHBlcmlvZGljIEFSUCBtb25pdG9yLCB3aGljaCBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgaW50ZXJmYWNlIHJlYWRpbHkgZXhlcmNpc2FibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YjkyMGQ4MTJlNTYzNDJmZjU3ZjFkYTFlYzNhODg0MmMxNjQ1NGFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDk6NDI6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuaW5kZXggZWY5ZWIwYzUzYzY2MS4uYzIzY2YxOGE5OTZhYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbkBAIC0zODcxLDEwICszODcxLDggQEAgc3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKFJFQURfT05DRShib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZikgfHwgc2hvdWxkX25vdGlmeV9ydG5sKSB7XG4tXHRcdGlmICghcnRubF90cnlsb2NrKCkpIHtcbi1cdFx0XHRkZWx0YV9pbl90aWNrcyA9IDE7XG4rXHRcdGlmICghcnRubF90cnlsb2NrKCkpXG4gXHRcdFx0Z290byByZV9hcm07XG4tXHRcdH1cbiBcbiBcdFx0aWYgKGJvbmQtXHUwMDNlc2VuZF9wZWVyX25vdGlmKVxuIFx0XHRcdGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQyOjQ1LjQxNDQzMTc5OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MTQ2MTc0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIGNoYW5nZTpcblxuKipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIEFSUCBNb25pdG9yaW5nIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBtb2RpZmljYXRpb24gaXMgZm9jdXNlZCBvbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2Agd2l0aGluIHRoZSBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBoYXMgdG8gZG8gd2l0aCBBY3RpdmUtQmFja3VwIG1vZGUgYW5kIGhvdyBpdCBoYW5kbGVzIEFSUCBtb25pdG9yaW5nLCB3aGljaCBpcyBhIGtleSBjb21wb25lbnQgb2YgdGhhdCBzZXR1cC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhpcyBBUlAgbW9uaXRvcmluZyBpcyBkb2luZyBpbiB0aGUgb3JpZ2luYWwgY29kZSB0byBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBwYXRjaC5cblxuTXkgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgYW5kIGZvY3VzIG9uIHRoZSBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbmAgZnVuY3Rpb24uIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBjYWxsIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBBUlAgbW9uaXRvcmluZyBsb2dpYyBpcyBjcnVjaWFsIOKAkyB0aGluZ3MgbGlrZSBob3cgaXQgc2VuZHMgQVJQIHJlcXVlc3RzLCBob3cgaXQgaW50ZXJwcmV0cyB0aGUgcmVzcG9uc2VzIChvciBsYWNrIHRoZXJlb2YpLCBhbmQgaG93IGl0IHRyaWdnZXJzIGEgZmFpbG92ZXIgYXJlIGFsbCBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLiBJIG5lZWQgdG8gc2VlIHdoYXQgYXNwZWN0cyBvZiB0aGUgYm9uZGluZyBkcml2ZXIncyBhY3RpdmUtYmFja3VwIGJlaGF2aW9yIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQyOjU5LjU2MDYwNzgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4NTA6XFx0XFx0aWYgKCFib25kX2hhc19zbGF2ZXMoYm9uZCkpXFxuMzg1MTpcXHRcXHRcXHRnb3RvIHJlX2FybTtcXG4zODUyOlxcdFxcbjM4NTM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjM4NTQ6XFx0XFxuMzg1NTpcXHRcXHRpZiAoYm9uZF9hYl9hcnBfaW5zcGVjdChib25kKSkge1xcbjM4NTY6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzg1NzpcXHRcXG4zODU4OlxcdFxcdFxcdC8qIFJhY2UgYXZvaWRhbmNlIHdpdGggYm9uZF9jbG9zZSBmbHVzaCBvZiB3b3JrcXVldWUgKi9cXG4zODU5OlxcdFxcdFxcdGlmICghcnRubF90cnlsb2NrKCkpIHtcXG4zODYwOlxcdFxcdFxcdFxcdGRlbHRhX2luX3RpY2tzID0gMTtcXG4zODYxOlxcdFxcdFxcdFxcdGdvdG8gcmVfYXJtO1xcbjM4NjI6XFx0XFx0XFx0fVxcbjM4NjM6XFx0XFxuMzg2NDpcXHRcXHRcXHRib25kX2FiX2FycF9jb21taXQoYm9uZCk7XFxuMzg2NTpcXHRcXG4zODY2OlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuMzg2NzpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMzg2ODpcXHRcXHR9XFxuMzg2OTpcXHRcXG4zODcwOlxcdFxcdHNob3VsZF9ub3RpZnlfcnRubCA9IGJvbmRfYWJfYXJwX3Byb2JlKGJvbmQpO1xcbjM4NzE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzg3MjpcXHRcXG4zODczOlxcdFxcdGlmIChSRUFEX09OQ0UoYm9uZC1cXHUwMDNlc2VuZF9wZWVyX25vdGlmKSB8fCBzaG91bGRfbm90aWZ5X3J0bmwpIHtcXG4zODc0OlxcdFxcdFxcdGlmICghcnRubF90cnlsb2NrKCkpXFxuMzg3NTpcXHRcXHRcXHRcXHRnb3RvIHJlX2FybTtcXG4zODc2OlxcdFxcbjM4Nzc6XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXNlbmRfcGVlcl9ub3RpZilcXG4zODc4OlxcdFxcdFxcdFxcdGJvbmRfcGVlcl9ub3RpZnlfbWF5X2V2ZW50cyhib25kLCB0cnVlKTtcXG4zODc5OlxcdFxcbjM4ODA6XFx0XFx0XFx0aWYgKHNob3VsZF9ub3RpZnlfcnRubCkge1xcbjM4ODE6XFx0XFx0XFx0XFx0Ym9uZF9zbGF2ZV9zdGF0ZV9ub3RpZnkoYm9uZCk7XFxuMzg4MjpcXHRcXHRcXHRcXHRib25kX3NsYXZlX2xpbmtfbm90aWZ5KGJvbmQpO1xcbjM4ODM6XFx0XFx0XFx0fVxcbjM4ODQ6XFx0XFxuMzg4NTpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjM4ODY6XFx0XFx0fVxcbjM4ODc6XFx0XFxuMzg4ODpcXHRyZV9hcm06XFxuMzg4OTpcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClcXG4zODkwOlxcdFxcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhib25kLVxcdTAwM2V3cSwgXFx1MDAyNmJvbmQtXFx1MDAzZWFycF93b3JrLCBkZWx0YV9pbl90aWNrcyk7XFxuMzg5MTpcXHR9XFxuMzg5MjpcXHRcXG4zODkzOlxcdHN0YXRpYyB2b2lkIGJvbmRfYXJwX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjM4OTQ6XFx0e1xcbjM4OTU6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXFxuMzg5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgYXJwX3dvcmsud29yayk7XFxuMzg5NzpcXHRcXG4zODk4OlxcdFxcdGlmIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FDVElWRUJBQ0tVUClcXG4zODk5OlxcdFxcdFxcdGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oYm9uZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQyOjU5LjU2MDgzMDg4OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4OTY2MjMzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCByZW5kZXJlZCBpbiBmaXJzdCBwZXJzb24sIGtlZXBpbmcgaW4gbWluZCBJJ20gYW4gZXhwZXJ0IGFuZCB0aGlzIGlzIHJlbGF0ZWQgdG8gdHJvdWJsZXNob290aW5nIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYDpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogQmVmb3JlIExpbmUgMzg1MCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIGZsb3cgKmJlZm9yZSogbGluZSAzODUwIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYC4gVGhhdCBsaW5lIGlzIG9idmlvdXNseSBhIHNpZ25pZmljYW50IGJyZWFrcG9pbnQsIG9yIHBvc3NpYmx5IHRoZSBsb2NhdGlvbiBvZiBhbiBhbm9tYWx5IGFzIGFuIGluaXRpYWwgaW52ZXN0aWdhdGlvbiBzdGVwLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvZGUncyBiZWhhdmlvciAqbGVhZGluZyB1cCogdG8gdGhhdCBwb2ludC4gSSdtIHRoaW5raW5nOiB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGVkPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIG9yIG1vZGlmaWVkLCBhbmQgYXJlIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQ/IFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMgZHVyaW5nIHRoYXQgZXhlY3V0aW9uIHBlcmlvZCB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gQXJlIHRoZXJlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgdGhhdCBjb3VsZCBkcmFzdGljYWxseSBjaGFuZ2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIGxlYWRpbmcgdXAgdG8gdGhhdCBsaW5lLCBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25kaXRpb25zPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHNjYW5uaW5nIHRoZSBjb2RlLCBxdWlja2x5LCBmb3Igb2J2aW91cyBpbmRpY2F0b3JzOiBsb29wcywgZnVuY3Rpb24gY2FsbHMsIHZhcmlhYmxlIGFzc2lnbm1lbnRzIHRoYXQgc2VlbSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQsIGFuZCBjb25kaXRpb25zIHRoYXQgbWlnaHQgbGVhZCB0byBkaWZmZXJlbnQgYnJhbmNoZXMgb2YgY29kZS4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvYnZpb3VzIHJlZCBmbGFncywgc3VjaCBhcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHVudXN1YWwgb3BlcmF0aW9ucyBvbiBzaGFyZWQgcmVzb3VyY2VzLiBLbm93aW5nIHRoaXMgdG9vbCdzIGFyY2hpdGVjdHVyZSwgSSdsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uLXJlbGF0ZWQgZWxlbWVudHMgdG9vLCBsaWtlIHdoYXQgc2V0dGluZ3MgYXJlIGxvYWRlZCBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBjb2RlIGZsb3cuIFRoaXMgaW5pdGlhbCBwYXNzIHdpbGwgYmUgbW9yZSBvZiBhIHJlY29ubmFpc3NhbmNlIG1pc3Npb24sIGp1c3QgdHJ5aW5nIHRvIGdldCBhIGZlZWwgZm9yIHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgcmVhbGx5IGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0MzowNi40NTc0NTcwNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODMwOlxcdFxcdG5ld19zbGF2ZS1cXHUwMDNlbGFzdF9saW5rX3VwID0gamlmZmllcztcXG4zODMxOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihib25kLVxcdTAwM2VjdXJyZW50X2FycF9zbGF2ZSwgbmV3X3NsYXZlKTtcXG4zODMyOlxcdFxcbjM4MzM6XFx0Y2hlY2tfc3RhdGU6XFxuMzgzNDpcXHRcXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xcbjM4MzU6XFx0XFx0XFx0aWYgKHNsYXZlLVxcdTAwM2VzaG91bGRfbm90aWZ5IHx8IHNsYXZlLVxcdTAwM2VzaG91bGRfbm90aWZ5X2xpbmspIHtcXG4zODM2OlxcdFxcdFxcdFxcdHNob3VsZF9ub3RpZnlfcnRubCA9IEJPTkRfU0xBVkVfTk9USUZZX05PVztcXG4zODM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjM4Mzg6XFx0XFx0XFx0fVxcbjM4Mzk6XFx0XFx0fVxcbjM4NDA6XFx0XFx0cmV0dXJuIHNob3VsZF9ub3RpZnlfcnRubDtcXG4zODQxOlxcdH1cXG4zODQyOlxcdFxcbjM4NDM6XFx0c3RhdGljIHZvaWQgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4zODQ0OlxcdHtcXG4zODQ1OlxcdFxcdGJvb2wgc2hvdWxkX25vdGlmeV9ydG5sO1xcbjM4NDY6XFx0XFx0aW50IGRlbHRhX2luX3RpY2tzO1xcbjM4NDc6XFx0XFxuMzg0ODpcXHRcXHRkZWx0YV9pbl90aWNrcyA9IG1zZWNzX3RvX2ppZmZpZXMoYm9uZC1cXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbCk7XFxuMzg0OTpcXHRcXG4zODUwOlxcdFxcdGlmICghYm9uZF9oYXNfc2xhdmVzKGJvbmQpKVxcbjM4NTE6XFx0XFx0XFx0Z290byByZV9hcm07XFxuMzg1MjpcXHRcXG4zODUzOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zODU0OlxcdFxcbjM4NTU6XFx0XFx0aWYgKGJvbmRfYWJfYXJwX2luc3BlY3QoYm9uZCkpIHtcXG4zODU2OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjM4NTc6XFx0XFxuMzg1ODpcXHRcXHRcXHQvKiBSYWNlIGF2b2lkYW5jZSB3aXRoIGJvbmRfY2xvc2UgZmx1c2ggb2Ygd29ya3F1ZXVlICovXFxuMzg1OTpcXHRcXHRcXHRpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQzOjA2LjQ1NzY3NDY0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTE5Mzc1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIFwid2h5XCIgYmVoaW5kIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHRoZSByZW1vdmFsIG9mIGBkZWx0YV9pbl90aWNrcyA9IDFgLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgaGlzdG9yeSBvciBnaXQgbG9nIGFyb3VuZCB0aGlzIHNlY3Rpb24gdG8gZ3Jhc3AgdGhlIGNvbnRleHQuXG5cbkkgc2VlIHRoYXQgYGRlbHRhX2luX3RpY2tzYCB3YXMgb3JpZ2luYWxseSBpbml0aWFsaXplZCB0byBgbXNlY3NfdG9famlmZmllcyhib25kLVx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpYC4gVGhlbiwgaW4gdGhlIHNlY29uZCBgcnRubF90cnlsb2NrKClgIGNhbGwsIHRoZSBsaW5lIHNldHRpbmcgYGRlbHRhX2luX3RpY2tzID0gMWAgd2FzIHJlbW92ZWQuIFRoYXQncyB0aGUga2V5OiB3aHkgd2FzIHRoaXMgcmVtb3ZlZD9cblxuTG9va2luZyBhdCB0aGUgY29kZSBibG9ja3MsIEkgc2VlIHRoYXQgaWYgYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiB0aGUgZmlyc3QgYmxvY2ssIGBkZWx0YV9pbl90aWNrc2AgZ2V0cyBzZXQgdG8gMS4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBhdm9pZGFuY2UgbWVjaGFuaXNtLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB3b3JrcXVldWUgZmx1c2ggaW4gYGJvbmRfY2xvc2VgLiBIb3dldmVyLCBpbiB0aGUgc2Vjb25kIGJsb2NrLCB0aGUgYXNzaWdubWVudCBpcyBnb25lISBJZiBgcnRubF90cnlsb2NrKClgIGZhaWxzLCBzaG91bGRuJ3Qgd2Ugc3RpbGwgaW1tZWRpYXRlbHkgcmUtYXJtIGluIHRoZSBzZWNvbmQgYmxvY2s/IE5vdywgYGRlbHRhX2luX3RpY2tzYCBjb3VsZCByZXRhaW4gaXRzIHByZXZpb3VzIHZhbHVlIChgbXNlY3NfdG9famlmZmllcyguLi4pYCkgb3IgMSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpcnN0IGJsb2NrIHdhcyBzdWNjZXNzZnVsLlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSBib25kaW5nIGRyaXZlciBpcyBhIHN0YW5kYXJkIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvcnRubC4gSXQncyBhIHB1cmUgc29mdHdhcmUgZHJpdmVyLCBzbyB5ZXMsIGl0IGlzIGZ1enphYmxlIGluIFFFTVUgb3IgR0NFLlxuXG5JIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG9yIG5vbi1mdW5jdGlvbmFsIGNoYW5nZS4gUHJldmlvdXNseSwgaWYgYHJ0bmxfdHJ5bG9jaygpYCBmYWlsZWQgaW4gdGhlIHNlY29uZCBibG9jaywgc2V0dGluZyBgZGVsdGFfaW5fdGlja3NgIHRvIDEgZW5zdXJlZCBpbW1lZGlhdGUgcmUtYXJtaW5nIG9mIHRoZSBkZWxheWVkIHdvcmsgdG8gcmV0cnkgdGhlIGBydG5sX2xvY2tgIGFuZCBzZW5kIHBlZXIvbGluayBub3RpZmljYXRpb25zLiBSZW1vdmluZyB0aGlzIG1pZ2h0IGludHJvZHVjZSBhIGRlbGF5IGRldGVybWluZWQgYnkgdGhlIG9yaWdpbmFsIGFycF9pbnRlcnZhbCwgcmF0aGVyIHRoYW4gYSBtb3JlIGltbWVkaWF0ZSByZXRyeS5cblxuU28sICp3aHkqIHdhcyBgZGVsdGFfaW5fdGlja3MgPSAxYCByZW1vdmVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBsb2cgb3IgY29tbWl0IGhpc3RvcnkgZm9yIGJvbmRpbmcgYXJwIG1vbiB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUuIE15IHRob3VnaHQgaXMgYGdpdCBsb2cgLW4gNSBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBvciB1c2UgZ3JlcHBlciBpZiBuZWVkZWQuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIExldCdzIGNoZWNrIHRoZSBLY29uZmlnIGZvciBCT05ESU5HIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQzOjMxLjU3NzA1MTc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDQ4NDg3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJPTkRJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6MzEuODIxNTQ3MTUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjcyMDQ2MzIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBCb25kaW5nIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHVzdWFsIHN1c3BlY3RzLiBNeSBndXQgc2F5cyB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmdgIGRpcmVjdG9yeSBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBib25kaW5nIGRyaXZlciBjb2RlLCBhbmQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBmaWxlcy4gSWYgaXQncyBub3QgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgbW92ZSBpcyB0byBicm9hZGVuIHRoZSBzZWFyY2ggYW5kIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL25ldGAgbW9yZSBnZW5lcmFsbHkuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUocykuIExldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0MzozOC41NDIwMTIzMDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTk3NDcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk9ORElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6MzguNzAxOTkzMTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMzA5MzA2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2Vzcywgd3JpdHRlbiBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgb3B0aW9ucywgcGVyaGFwcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZHJpdmVyIEknbSByZXNlYXJjaGluZyBvciBhIGdlbmVyYWwgYXJlYSB0aGF0IHJlcXVpcmVzIG9wdGltaXphdGlvbi4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGFudGljaXBhdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYXliZSBzb21lIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlIG9yIG90aGVyIHByZXJlcXVpc2l0ZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQzOjQ0LjAzMjkyNjE4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIkR1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cXG4gIDYzOlxcdFxcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcXG4gIDY0OlxcdFxcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6NDQuMDMzMDExMDk1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNDIyOTYwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBzeW1ib2xzIHRoYXQgbWlnaHQgc3dheSBteSBkZWNpc2lvbi4gSSBzaG91bGQgY2hlY2sgZm9yIHRoaW5ncyBsaWtlIGBORVRfQ09SRWAsIGBCT05ESU5HYCwgYW5kIGBJTkVUYCB0byBlbnN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgY29udGV4dC5cblxuTm93LCBsZXQncyBhcHBseSB0aGUgY3JpdGVyaWEuIFdlIG5lZWQgdG8gcnVsZSBvdXQ6IERvY3VtZW50YXRpb24vS2NvbmZpZyBjaGFuZ2VzLCBkZWNvcmF0aXZlIHN0dWZmIGxpa2UgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXphdGlvbiwgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyIGNvZGUgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzLlxuXG5SaWdodCwgc28gdGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGF0J3Mgc3F1YXJlbHkgaW4gdGhlIGNvcmUgYm9uZGluZyBkcml2ZXIgKGBDT05GSUdfQk9ORElOR2ApLCBhbmQgaXQncyBmaWRkbGluZyB3aXRoIHRoZSB3b3JrcXVldWUgc2NoZWR1bGluZyBpbnRlcnZhbCB3aGVuIGBydG5sX3RyeWxvY2soKWAgZmFpbHMuIFRoZSBxdWVzdGlvbiBpczogaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5MZXQncyBicmVhayBpdCBkb3duLiBJdCBjaGFuZ2VzIHRoZSB0aW1pbmcgYW5kIGV4ZWN1dGlvbiBsb2dpYyBvZiB0aGUgQVJQIG1vbml0b3Jpbmcgd29ya3F1ZXVlIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIENydWNpYWxseSwgYm9uZGluZyBpcyBhICpzb2Z0d2FyZSogdmlydHVhbCBuZXR3b3JrIGRldmljZSwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIGNvcmUgbmV0d29ya2luZy4gSSBjYW4gZWFzaWx5IGluc3RhbnRpYXRlIGl0IHdpdGggcnRubC9uZXRsaW5rLCBhbmQgaXQncyAqZnVsbHkqIHJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIFRoZXJlZm9yZSwgdGhpcyBvbmUgbG9va3MgcHJvbWlzaW5nLCBzbyBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBpZGVudGlmeSBhcHByb3ByaWF0ZSBzeW1ib2xzLiBJIG5lZWQgdG8gZmluZCBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMg4oCTIGxldCdzIGNhbGwgdGhlbSBcIkZvY3VzU3ltYm9sc1wiIOKAkyB0aGF0IGFyZSByZWxhdGVkIHRvIGJvbmRpbmcgQVJQIG1vbml0b3JpbmcsIG9yIHBlcmhhcHMgYm9uZGluZyBuZXRsaW5rL3J0bmwgaW50ZXJhY3Rpb25zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGluZ3MgbGlrZSBgYm9uZF9hcnBfbW9uaXRvcmAsIGFuZCBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AsIGBib25kX29wdGlvbnMuY2AsIG9yIGBib25kX25ldGxpbmsuY2AuIEkgd2lsbCBydW4gYSBncmVwIGZvciB0aG9zZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuIEkgbWlnaHQgYWxzbyB0cnkgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBib25kaW5nIEFSUCBtb25pdG9yIGlzIHNldCB1cCBhbmQgdHJpZ2dlcmVkLiBUaGlzIHdpbGwgbGVhZCBtZSB0byBhcHByb3ByaWF0ZSB0ZXN0IGNhc2VzIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjQ3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDM6NTMuMzc1MzA5ODgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0MTIxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hcnBfbW9uaXRvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mzg0Mz1zdGF0aWMgdm9pZCBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zODkyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6Mzg5MzpzdGF0aWMgdm9pZCBib25kX2FycF9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM4OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzE4PXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI3LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZib25kLVxcdTAwM2VtaWlfd29yaywgYm9uZF9taWlfbW9uaXRvcik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MzI4OlxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZib25kLVxcdTAwM2VhcnBfd29yaywgYm9uZF9hcnBfbW9uaXRvcik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI5LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZib25kLVxcdTAwM2VhZF93b3JrLCBib25kXzNhZF9zdGF0ZV9tYWNoaW5lX2hhbmRsZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0Mzo1My41MTM3MjYwODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2NTIyNzQ3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQXNzZXNzaW5nIEFSUCBNb25pdG9yaW5nIGFuZCBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IEFSUCBtb25pdG9yaW5nIGludGVyYWN0cyB3aXRoIGJvbmRpbmcuIEknbSB0aGlua2luZyBhYm91dCB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycyB0aGF0ICpjb25maWd1cmUqIGFuZCAqZW5hYmxlKiBpdCB3aXRoaW4gdGhlIGJvbmRpbmcgY29udGV4dC4gVGhpbmdzIGxpa2UgdGhlIGBhcnBfaW50ZXJ2YWxgIOKAkyB3aGF0J3MgdGhlIGZyZXF1ZW5jeT8gQW5kIHRoYXQgYGFycF9pcF90YXJnZXRgIC0gd2hpY2ggSVAgYWRkcmVzcyBhcmUgd2UgdXNpbmcgdG8gcHJvYmU/IEknbSB0cnlpbmcgdG8gaWRlbnRpZnkgd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIGRlZmluZWQuIEJleW9uZCBqdXN0IHRoZSBzZXR0aW5ncyB0aGVtc2VsdmVzLCBJIHdhbnQgdG8gdHJhY2UgaG93IHRoZXNlIHNldHRpbmdzICp0aWUqIGludG8gdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbiBwcm9jZXNzIGluIGdlbmVyYWwsIGFuZCB3aGF0IG1hbmFnZXMgdGhlIGJvbmRpbmcgcHJvY2VzcyBpdHNlbGYuIEJhc2ljYWxseSwgaG93IGFuZCB3aGVyZSBhcmUgd2UgcmVnaXN0ZXJpbmcgYW5kIG1hbmFnaW5nIGJvbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBvcmNoZXN0cmF0ZXMgYWxsIG9mIHRoaXMsIGhvdyBpdCdzIHNldCB1cCBhbmQgYWRtaW5pc3RlcmVkLiBJJ20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlOiAgdGhlIGNvbmZpZ3VyYXRpb24gcG9pbnRzIGFuZCB0aGUgb3ZlcmFsbCBtYW5hZ2VtZW50IHdvcmtmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDQ6MDguMTY2MDAzODgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQwMTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX29wdF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NTgzPXN0YXRpYyBpbnQgYm9uZF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQ3LVxcdGNhc2UgU0lPQ0JPTkRDSEFOR0VBQ1RJVkU6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0NjQ4OlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgc2xhdmVfZGV2LVxcdTAwM2VuYW1lKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ2NDktXFx0XFx0cmVzID0gX19ib25kX29wdF9zZXRfbm90aWZ5KGJvbmQsIEJPTkRfT1BUX0FDVElWRV9TTEFWRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4NT1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEwMS1cXHRpZiAobW9kZSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjEwMjpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIG1vZGUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjEwMy1cXHRcXHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfTU9ERSksIFxcdTAwMjZuZXd2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTE3LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MTE4OlxcdFxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgeG1pdF9oYXNoX3BvbGljeSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTE5LVxcdFxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9YTUlUX0hBU0gpLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTM0LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MTM1OlxcdFxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgbGFjcF9yYXRlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxMzYtXFx0XFx0XFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX0xBQ1BfUkFURSksXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYxNDctXFx0aWYgKGFkX3NlbGVjdCkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjE0ODpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIGFkX3NlbGVjdCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MTQ5LVxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9BRF9TRUxFQ1QpLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MjI0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjIyNTpcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIHBhY2tldHNfcGVyX3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYyMjYtXFx0aWYgKCFib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfUEFDS0VUU19QRVJfU0xBVkUpLCBcXHUwMDI2bmV3dmFsKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzA2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjMwNzpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIGFycF92YWxpZGF0ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzA4LVxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9BUlBfVkFMSURBVEUpLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzIwLVxcdGlmIChhcnBfYWxsX3RhcmdldHMpIHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYzMjE6XFx0XFx0Ym9uZF9vcHRfaW5pdHN0cihcXHUwMDI2bmV3dmFsLCBhcnBfYWxsX3RhcmdldHMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjMyMi1cXHRcXHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfQVJQX0FMTF9UQVJHRVRTKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjM2Mi1cXHRpZiAocHJpbWFyeSBcXHUwMDI2XFx1MDAyNiBwcmltYXJ5X3Jlc2VsZWN0KSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzYzOlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgcHJpbWFyeV9yZXNlbGVjdCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MzY0LVxcdFxcdHZhbHB0ciA9IGJvbmRfb3B0X3BhcnNlKGJvbmRfb3B0X2dldChCT05EX09QVF9QUklNQVJZX1JFU0VMRUNUKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjM3Ni1cXHRpZiAoZmFpbF9vdmVyX21hYykge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjM3NzpcXHRcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZuZXd2YWwsIGZhaWxfb3Zlcl9tYWMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjM3OC1cXHRcXHR2YWxwdHIgPSBib25kX29wdF9wYXJzZShib25kX29wdF9nZXQoQk9ORF9PUFRfRkFJTF9PVkVSX01BQyksXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYzOTEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MzkyOlxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgXFxcImRlZmF1bHRcXFwiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYzOTMtXFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0MDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NDEwOlxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgXFxcImRlZmF1bHRcXFwiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0MTEtXFx0dmFscHRyID0gYm9uZF9vcHRfcGFyc2UoYm9uZF9vcHRfZ2V0KEJPTkRfT1BUX1RMQl9EWU5BTUlDX0xCKSwgXFx1MDAyNm5ld3ZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTE2Nz1zdGF0aWMgaW50IGJvbmRfc2xhdmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTE4NS1cXHRcXHRcXHQgc2xhdmVfZGV2LVxcdTAwM2VuYW1lLCBxdWV1ZV9pZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoxODY6XFx0XFx0Ym9uZF9vcHRfaW5pdHN0cihcXHUwMDI2bmV3dmFsLCBxdWV1ZV9pZF9zdHIpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMTg3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1FVRVVFX0lELCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz0yMTY9c3RhdGljIGludCBib25kX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yMzAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyMzE6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBtb2RlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTIzMi1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9NT0RFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNDgtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MjQ5OlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgYWN0aXZlX3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI1MC1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BQ1RJVkVfU0xBVkUsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI1Ny1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjI1ODpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIG1paW1vbik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNTktXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTUlJTU9OLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNjYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNjc6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCB1cGRlbGF5KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTI2OC1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9VUERFTEFZLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0yNzUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzoyNzY6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBkb3duZGVsYXkpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjc3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0RPV05ERUxBWSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjg0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6Mjg1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZGVsYXkpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMjg2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX1BFRVJfTk9USUZfREVMQVksIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMwNi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjMwNzpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGFycF9pbnRlcnZhbCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMDgtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX0lOVEVSVkFMLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zMjUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozMjY6XFx0XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCAoX19mb3JjZSB1NjQpdGFyZ2V0KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMyNy1cXHRcXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BUlBfVEFSR0VUUyxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzU1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MzU2OlxcdFxcdFxcdGJvbmRfb3B0X2luaXRleHRyYShcXHUwMDI2bmV3dmFsLCBcXHUwMDI2YWRkcjYsIHNpemVvZihhZGRyNikpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzU3LVxcdFxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX05TX1RBUkdFVFMsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM3OS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjM4MDpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGFycF92YWxpZGF0ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zODEtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQVJQX1ZBTElEQVRFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zODktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozOTA6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBhcnBfYWxsX3RhcmdldHMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzkxLVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FSUF9BTExfVEFSR0VUUywgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDA0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDA1OlxcdFxcdGJvbmRfb3B0X2luaXRzdHIoXFx1MDAyNm5ld3ZhbCwgcHJpbWFyeSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MDYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUFJJTUFSWSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDE0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDE1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgcHJpbWFyeV9yZXNlbGVjdCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MTYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUFJJTUFSWV9SRVNFTEVDVCwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDI0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDI1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZmFpbF9vdmVyX21hYyk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MjYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfRkFJTF9PVkVSX01BQywgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDM0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDM1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgeG1pdF9oYXNoX3BvbGljeSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00MzYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfWE1JVF9IQVNILCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NDQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NDU6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCByZXNlbmRfaWdtcCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NDYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfUkVTRU5EX0lHTVAsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ1NC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ1NTpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIG51bV9wZWVyX25vdGlmKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ1Ni1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9OVU1fUEVFUl9OT1RJRiwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDY0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NDY1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgYWxsX3NsYXZlc19hY3RpdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDY2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FMTF9TTEFWRVNfQUNUSVZFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00NzQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0NzU6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBtaW5fbGlua3MpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNDc2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JTkxJTktTLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00ODQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo0ODU6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBscF9pbnRlcnZhbCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy00ODYtXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTFBfSU5URVJWQUwsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ5NC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjQ5NTpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIHBhY2tldHNfcGVyX3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTQ5Ni1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9QQUNLRVRTX1BFUl9TTEFWRSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTA0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTA1OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgbGFjcF9hY3RpdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTA2LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfQUNUSVZFLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01MTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1MTY6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBsYWNwX3JhdGUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTE3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0xBQ1BfUkFURSwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTI1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTI2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgYWRfc2VsZWN0KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUyNy1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BRF9TRUxFQ1QsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUzNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjUzNjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGFjdG9yX3N5c19wcmlvKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTUzNy1cXHRcXHRlcnIgPSBfX2JvbmRfb3B0X3NldChib25kLCBCT05EX09QVF9BRF9BQ1RPUl9TWVNfUFJJTywgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTQ1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTQ2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgcG9ydF9rZXkpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTQ3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0FEX1VTRVJfUE9SVF9LRVksIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU1NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU1NjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01NTctXFx0XFx0XFx0XFx0IG5sYV9nZXRfdTY0KGRhdGFbSUZMQV9CT05EX0FEX0FDVE9SX1NZU1RFTV0pKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTY1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NTY2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZHluYW1pY19sYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01NjctXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfVExCX0RZTkFNSUNfTEIsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU3NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU3NjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIG1pc3NlZF9tYXgpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTc3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX01JU1NFRF9NQVgsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTU4NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjU4NjpcXHRcXHRib25kX29wdF9pbml0dmFsKFxcdTAwMjZuZXd2YWwsIGNvdXBsZWRfY29udHJvbCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01ODctXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfQ09VUExFRF9DT05UUk9MLCBcXHUwMDI2bmV3dmFsLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy01OTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo1OTY6XFx0XFx0Ym9uZF9vcHRfaW5pdHZhbChcXHUwMDI2bmV3dmFsLCBicm9hZGNhc3RfbmVpZ2gpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNTk3LVxcdFxcdGVyciA9IF9fYm9uZF9vcHRfc2V0KGJvbmQsIEJPTkRfT1BUX0JST0FEQ0FTVF9ORUlHSCwgXFx1MDAyNm5ld3ZhbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtNjA1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NjA2OlxcdFxcdGJvbmRfb3B0X2luaXR2YWwoXFx1MDAyNm5ld3ZhbCwgZmFsbGJhY2tfbW9kZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy02MDctXFx0XFx0ZXJyID0gX19ib25kX29wdF9zZXQoYm9uZCwgQk9ORF9PUFRfTEFDUF9TVFJJQ1QsIFxcdTAwMjZuZXd2YWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTg2OD1pbnQgYm9uZF9vcHRfdHJ5c2V0X3J0bmwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIGludCBvcHRpb24sIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtODc0LVxcdFxcdHJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjg3NTpcXHRib25kX29wdF9pbml0c3RyKFxcdTAwMjZvcHR2YWwsIGJ1Zik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy04NzYtXFx0cmV0ID0gX19ib25kX29wdF9zZXRfbm90aWZ5KGJvbmQsIG9wdGlvbiwgXFx1MDAyNm9wdHZhbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjA4LjIxMjQwODkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MjQ2OTE1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmV2aWV3aW5nIEJvbmRpbmcgTW9kdWxlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBib25kaW5nIG1vZHVsZSdzIGNvcmUgZmlsZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgYm9uZF9tYWluLmNgLCBgYm9uZF9vcHRpb25zLmNgLCBhbmQgYGJvbmRfbmV0bGluay5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgY291bGQgcG90ZW50aWFsbHkgYmUgZW50cnkgcG9pbnRzIG9yIGNyaXRpY2FsIGNvbXBvbmVudHMuXG5cbkFscmlnaHQsIGEgcXVpY2sgc2NhbiByZXZlYWxzIGZ1bmN0aW9ucyBsaWtlIGBib25kX2NoYW5nZWxpbmtgLCBgYm9uZF9uZXdsaW5rYCwgYGJvbmRfY3JlYXRlYCwgYW5kIGFsc28gdGhlIG9wdGlvbi1yZWxhdGVkIGZ1bmN0aW9ucyBgYm9uZF9vcHRfdHJ5c2V0X3J0bmxgLCBgYm9uZF9kb19pb2N0bGAsIGFzIHdlbGwgYXMgYF9fYm9uZF9vcHRfc2V0X25vdGlmeWAgYW5kIGBfX2JvbmRfb3B0X3NldGAuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIGluIHRoZSBib25kaW5nIGxpZmVjeWNsZS5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGdvIGRlZXBlci4gSSdtIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCBub3csIHNlZWtpbmcgb3V0IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIGJvbmRpbmcgaW5pdGlhbGl6YXRpb24sIEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbCAoQVJQKSBtb25pdG9yaW5nLCBhbmQgdGhlIHdvcmsgcXVldWUgc3lzdGVtLiBUaGVzZSBhcmVhcyBhcmUgY3J1Y2lhbCB0byB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGJlaGF2aW9yIG9mIHRoZSBib25kaW5nIGRyaXZlci4gTXkgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoxMS4xMzcxMDM1MTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODk2MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGJvbmRffF5pbnQgYm9uZF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9MjIxND1zdGF0aWMgdm9pZCBhZF9tYXJrZXJfcmVzcG9uc2VfcmVjZWl2ZWQoc3RydWN0IGJvbmRfbWFya2VyICptYXJrZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjIzNi0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjIzNzp2b2lkIGJvbmRfM2FkX2luaXRpYXRlX2FnZ19zZWxlY3Rpb24oc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCB0aW1lb3V0KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMjQ3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyMjQ4OnZvaWQgYm9uZF8zYWRfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI3MS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjI3Mjp2b2lkIGJvbmRfM2FkX2JpbmRfc2xhdmUoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjI3My17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjMyNS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjMyNjp2b2lkIGJvbmRfM2FkX3VuYmluZF9zbGF2ZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yMzI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNDg4LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyNDg5OnZvaWQgYm9uZF8zYWRfdXBkYXRlX2FkX2FjdG9yX3NldHRpbmdzKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yNDkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0yNTIwPXN0YXRpYyBib29sIGJvbmRfYWdnX3RpbWVyX2FkdmFuY2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjU0OC0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjU0OTp2b2lkIGJvbmRfM2FkX3N0YXRlX21hY2hpbmVfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI1NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jPTI3MTA9c3RhdGljIHZvaWQgYWRfdXBkYXRlX2FjdG9yX2tleXMoc3RydWN0IHBvcnQgKnBvcnQsIGJvb2wgcmVzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc1My0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjc1NDp2b2lkIGJvbmRfM2FkX2FkYXB0ZXJfc3BlZWRfZHVwbGV4X2NoYW5nZWQoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjc4MC0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6Mjc4MTp2b2lkIGJvbmRfM2FkX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI3ODIte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI4MzgtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI4Mzk6aW50IGJvbmRfM2FkX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yODQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0yODgxPWludCBfX2JvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8oY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMjkxMy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MjkxNDppbnQgYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IGFkX2luZm8gKmFkX2luZm8pXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5MjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5MjU6aW50IGJvbmRfM2FkX2xhY3BkdV9yZWN2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTI2LVxcdFxcdFxcdCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTI5NTYtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjI5NTc6dm9pZCBib25kXzNhZF91cGRhdGVfbGFjcF9yYXRlKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTgxLSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzoyOTgyOnZvaWQgYm9uZF8zYWRfdXBkYXRlX2xhY3BfYWN0aXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0yOTgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0zMDAxPXNpemVfdCBib25kXzNhZF9zdGF0c19zaXplKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAxMy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAxNDppbnQgYm9uZF8zYWRfc3RhdHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZF8zYWRfc3RhdHMgKnN0YXRzKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMjg0PXN0YXRpYyBib29sIGFsYl9kZXRlcm1pbmVfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMwNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMwNjppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzA3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzI4OnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTIzPW5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzI6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzNS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTYzNjppbnQgYm9uZF9hbGJfaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2NS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY2Njp2b2lkIGJvbmRfYWxiX2RlaW5pdF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY3OS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY4MDp2b2lkIGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgY2hhciBsaW5rKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNzE4OnZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzg2LS8qIENhbGxlZCB3aXRoIFJUTkwgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTc4NzppbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTc4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzMS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTgzMjp2b2lkIGJvbmRfYWxiX2NsZWFyX3ZsYW4oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIHNob3J0IHZsYW5faWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE4MzMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz01ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUoYm9uZF9kZWJ1Z19ybGJfaGFzaCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy01NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjU2OnZvaWQgYm9uZF9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo2NTp2b2lkIGJvbmRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtNjktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo3MDp2b2lkIGJvbmRfZGVidWdfcmVyZWdpc3RlcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9Nzk9dm9pZCBfX2luaXQgYm9uZF9jcmVhdGVfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy04Ni1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjg3OnZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtOTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo5Njp2b2lkIGJvbmRfZGVidWdfcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTk5LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTAwOnZvaWQgYm9uZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTAzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTA0OnZvaWQgYm9uZF9kZWJ1Z19yZXJlZ2lzdGVyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9MTA4PXZvaWQgX19pbml0IGJvbmRfY3JlYXRlX2RlYnVnZnModm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmMtMTExLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTEyOnZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTExMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTczOD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1kZXZfb3BzIGJvbmRfeGZybWRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc1NS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjc1NjppbnQgYm9uZF9zZXRfY2FycmllcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTExNzY9c3RhdGljIGJvb2wgYm9uZF9zaG91bGRfbm90aWZ5X3BlZXJzKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjA4LS8qIFVzZSB0aGlzIHRvIHVwZGF0ZSBzZW5kX3BlZXJfbm90aWYgd2hlbiBSVE5MIG1heSBiZSBoZWxkIGluIG90aGVyIHBsYWNlcy4gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyMDk6dm9pZCBib25kX3BlZXJfbm90aWZ5X3dvcmtfcmVhcm0oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIGxvbmcgZGVsYXkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTIzOD1zdGF0aWMgdm9pZCBib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGJvb2wgZm9yY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyNjUtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMjY2OnZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjY3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM2OS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEzNzA6dm9pZCBib25kX3NlbGVjdF9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTgwNT1zdGF0aWMgdm9pZCBib25kX25ldGRldl9ub3RpZnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODIxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTgyMjp2b2lkIGJvbmRfcXVldWVfc2xhdmVfZXZlbnQoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODI2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTgyNzp2b2lkIGJvbmRfbG93ZXJfc3RhdGVfY2hhbmdlZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTgyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4NTY9c3RhdGljIHZvaWQgYm9uZF9ldGhlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4NjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODY1OnZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE4NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg3LS8qIGVuc2xhdmUgZGV2aWNlIFxcdTAwM2NzbGF2ZVxcdTAwM2UgdG8gYm9uZCBkZXZpY2UgXFx1MDAzY21hc3RlclxcdTAwM2UgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjE4ODg6aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xODg5LVxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTI0MjU9c3RhdGljIGludCBfX2JvbmRfcmVsZWFzZV9vbmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNjA1LS8qIEEgd3JhcHBlciB1c2VkIGJlY2F1c2Ugb2YgbmRvX2RlbF9saW5rICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNjA2OmludCBib25kX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjYwNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMzNzQ9c3RhdGljIGludCBib25kX25hX3Jjdihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyMi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0MjM6aW50IGJvbmRfcmN2X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyNC1cXHRcXHQgICAgICBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzAzPXN0YXRpYyB1MzIgYm9uZF94bWl0X2hhc2hfeGRwKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMxNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMTg6dm9pZCBib25kX3dvcmtfaW5pdF9hbGwoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMzMy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzMzQ6dm9pZCBib25kX3dvcmtfY2FuY2VsX2FsbChzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMzUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01MDU4PXN0YXRpYyBuZXRkZXZfdHhfdCBib25kX3htaXRfYWN0aXZlYmFja3VwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNzQtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDc1OnZvaWQgYm9uZF9zbGF2ZV9hcnJfd29ya19yZWFybShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgbG9uZyBkZWxheSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNzYte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01MTQ1PXN0YXRpYyB2b2lkIGJvbmRfcmVzZXRfc2xhdmVfYXJyKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MTU3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTE1ODppbnQgYm9uZF91cGRhdGVfc2xhdmVfYXJyKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNraXBzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUxNTkte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTgyPXN0YXRpYyB2b2lkIGJvbmRfZGVzdHJ1Y3RvcihzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5OTEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTkyOnZvaWQgYm9uZF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjUwOD11bnNpZ25lZCBpbnQgYm9uZF9nZXRfbnVtX3R4X3F1ZXVlcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTE3LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjUxODppbnQgYm9uZF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjUxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTEwMDg9aW50IF9faW5pdCBib25kX25ldGxpbmtfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xMDEyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6MTAxMzp2b2lkIGJvbmRfbmV0bGlua19maW5pKHZvaWQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0xMDE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM9ODQ0PWludCBfX2JvbmRfb3B0X3NldF9ub3RpZnkoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg2Ny0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjg2ODppbnQgYm9uZF9vcHRfdHJ5c2V0X3J0bmwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHVuc2lnbmVkIGludCBvcHRpb24sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTg2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTEyMTM9c3RhdGljIGludCBib25kX29wdGlvbl9hcnBfaXBfdGFyZ2V0X3JlbShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgX19iZTMyIHRhcmdldClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTI1MS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjEyNTI6dm9pZCBib25kX29wdGlvbl9hcnBfaXBfdGFyZ2V0c19jbGVhcihzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyNTMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMzExPXN0YXRpYyB2b2lkIHNsYXZlX3NldF9uc19tYWRkcnMoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUsIGJvb2wgYWRkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzM0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTMzNTp2b2lkIGJvbmRfc2xhdmVfbnNfbWFkZHJzX2FkZChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMzQxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTM0Mjp2b2lkIGJvbmRfc2xhdmVfbnNfbWFkZHJzX2RlbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEzNDMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMzg4PXN0YXRpYyB2b2lkIF9ib25kX29wdGlvbnNfbnNfaXA2X3RhcmdldF9zZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsIGludCBzbG90LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDA0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTQwNTp2b2lkIGJvbmRfb3B0aW9uX25zX2lwNl90YXJnZXRzX2NsZWFyKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTQwNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTE0NTM9c3RhdGljIHZvaWQgc2xhdmVfc2V0X25zX21hZGRycyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgYm9vbCBhZGQpIHt9XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xNDU0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTQ1NTp2b2lkIGJvbmRfc2xhdmVfbnNfbWFkZHJzX2FkZChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSkge31cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE0NTYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxNDU3OnZvaWQgYm9uZF9zbGF2ZV9uc19tYWRkcnNfZGVsKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKSB7fVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTQ1OC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz0yODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBib25kX2luZm9fc2VxX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0yOTAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjI5MTp2b2lkIGJvbmRfY3JlYXRlX3Byb2NfZW50cnkoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTI5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMzA2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYzozMDc6dm9pZCBib25kX3JlbW92ZV9wcm9jX2VudHJ5KHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0zMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmM9ODUyPXZvaWQgX19uZXRfZXhpdCBib25kX2Rlc3Ryb3lfc3lzZnMoc3RydWN0IGJvbmRfbmV0ICpibilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jLTg1OS0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYzo4NjA6dm9pZCBib25kX3ByZXBhcmVfc3lzZnNfZ3JvdXAoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMtODYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jPTEzMz1jb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHNsYXZlX3N5c2ZzX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTEzNi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnNfc2xhdmUuYzoxMzc6aW50IGJvbmRfc3lzZnNfc2xhdmVfYWRkKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzX3NsYXZlLmMtMTM4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTE0MS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnNfc2xhdmUuYzoxNDI6dm9pZCBib25kX3N5c2ZzX3NsYXZlX2RlbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmc19zbGF2ZS5jLTE0My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjExLjE4MzAwNjA4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDA0NTY4MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJvbmQgTmV0bGluayBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbmV0d29yayBpbnRlcmZhY2VzIGFuZCB0aGUgYm9uZCBkcml2ZXIgc3BlY2lmaWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGhvdyB0aGUgYGJvbmRgIGRyaXZlciBoYW5kbGVzIE5ldGxpbmsgb3BlcmF0aW9ucywgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSBwcm9iYWJseSBkZWJ1Z2dpbmcgb3IgZXh0ZW5kaW5nIGl0cyBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoZSBOZXRsaW5rIGxldmVsLiBUbyBkbyB0aGF0LCBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgcnRubF9saW5rX29wc2Agd2l0aGluIGBib25kX25ldGxpbmsuY2AuIFRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgZW50cnlwb2ludHMgZm9yIGxpbmsgY29uZmlndXJhdGlvbiB2aWEgTmV0bGluayBhcmUgZGVmaW5lZC4gQ2hlY2tpbmcgdGhlcmUgd2lsbCBxdWlja2x5IHNob3cgbWUgd2hpY2ggTmV0bGluayBtZXNzYWdlcyB0aGUgYm9uZCBkcml2ZXIgcmVnaXN0ZXJzIGZvciBhbmQgcHJvY2Vzc2VzLCByZXZlYWxpbmcgdGhlIG1ldGhvZHMgZm9yIGFkZGluZywgZGVsZXRpbmcsIGFuZCBjb25maWd1cmluZyBib25kZWQgaW50ZXJmYWNlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvZiBob3cgYm9uZCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJ3MgTmV0bGluayBpbmZyYXN0cnVjdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njc5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDQ6MTcuMTg3NTc2MTkzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0MjM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2xpbmtfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02NTE4PWludCBib25kX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY1MzMtXFx0ZGV2X25ldF9zZXQoYm9uZF9kZXYsIG5ldCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2NTM0OlxcdGJvbmRfZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID0gXFx1MDAyNmJvbmRfbGlua19vcHM7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NTM1LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz05MzM9c3RhdGljIGludCBib25kX2ZpbGxfbGlua3hzdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy05ODQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzo5ODU6c3RydWN0IHJ0bmxfbGlua19vcHMgYm9uZF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtOTg2LVxcdC5raW5kXFx0XFx0XFx0PSBcXFwiYm9uZFxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjE3LjIzMjkyMzIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTIwMjI5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEJvbmRpbmcgU3ltYm9sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBgRm9jdXNTeW1ib2xzYCBsaXN0IGZvciB0aGUgYm9uZGluZyBtb2R1bGUuIEkgbmVlZCB0byBiZSBwcmVjaXNlLCBzbyBJJ20gbWFraW5nIHN1cmUgSSd2ZSBnb3QgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzOiBgYm9uZF9lbnNsYXZlYCwgYGJvbmRfcmVsZWFzZWAsIGBib25kX29wdF90cnlzZXRfcnRubGAsIGBfX2JvbmRfb3B0X3NldF9ub3RpZnlgLCBgYm9uZF9jcmVhdGVgLCBgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlYCwgYGJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZWAsIGFuZCBgYm9uZF9wZWVyX25vdGlmeV93b3JrX3JlYXJtYC4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYW5kIEkgYmVsaWV2ZSB0aGUgbGlzdCBpcyBleGhhdXN0aXZlLlxuXG5Ob3csIGxldCdzIHRhY2tsZSB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSSByZW1lbWJlciB0aGF0IGBCT05ESU5HYCBpcyBjb250aW5nZW50IHVwb24gYElORVRgIGFuZCB0aGVuLCBjcnVjaWFsbHksIGVpdGhlciBgVExTYCBvciwgaWYgYFRMU2AgaXMgZXhwbGljaXRseSBkaXNhYmxlZCAoaS5lLiwgYFRMU19ERVZJQ0U9bmApLiBUaG9zZSBhcmUgdGhlIGdhdGVrZWVwZXJzLiBPa2F5LCB0aGlzIHRlbGxzIG1lIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGBCT05ESU5HYCwgYElORVRgLCBhbmQsIG9mIGNvdXJzZSwgYE5FVF9DT1JFYCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGlzLiBBbHdheXMgbmVlZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoZSBkZXBlbmRlbmNpZXMuXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIEknbSBnb2luZyB0byBydW4gYSBmaW5hbCBjaGVjayBvdmVyIGV2ZXJ5dGhpbmcgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gaG9sZXMgaW4gbXkgdGhpbmtpbmcuIE9uY2UgSSdtIHNhdGlzZmllZCwgSSdsbCBpbnZva2UgYHNldC1yZXN1bHRzYC4gUmVhZHkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg4LCJPdXRwdXRUb2tlbnMiOjIwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoyMS4zODQ5NDgxODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ0MzAwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIixcbiAgICBcImJvbmRfcmVsZWFzZVwiLFxuICAgIFwiYm9uZF9vcHRfdHJ5c2V0X3J0bmxcIixcbiAgICBcImJvbmRfY3JlYXRlXCIsXG4gICAgXCJib25kX2NoYW5nZV9hY3RpdmVfc2xhdmVcIixcbiAgICBcImJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgcGVyaW9kaWMgQVJQIG1vbml0b3IsIHdoaWNoIGlzIGEgc29mdHdhcmUgbmV0d29yayBpbnRlcmZhY2UgcmVhZGlseSBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2Vuc2xhdmVcIixcbiAgICBcImJvbmRfcmVsZWFzZVwiLFxuICAgIFwiYm9uZF9vcHRfdHJ5c2V0X3J0bmxcIixcbiAgICBcImJvbmRfY3JlYXRlXCIsXG4gICAgXCJib25kX2NoYW5nZV9hY3RpdmVfc2xhdmVcIixcbiAgICBcImJvbmRfcGVlcl9ub3RpZnlfd29ya19yZWFybVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWxheWVkIHdvcmsgcmUtYXJtaW5nIGJlaGF2aW9yIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uYCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyIChgQ09ORklHX0JPTkRJTkdgKS4gV2hlbiBmYWlsaW5nIHRvIGFjcXVpcmUgUlROTCBsb2NrIGR1cmluZyBzbGF2ZSBub3RpZmljYXRpb24gLyBwZWVyIG5vdGlmaWNhdGlvbiBpbiBhY3RpdmUtYmFja3VwIEFSUCBtb25pdG9yaW5nLCBpdCBubyBsb25nZXIgZm9yY2libHkgcmVzZXRzIGBkZWx0YV9pbl90aWNrc2AgdG8gMS4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgcGVyaW9kaWMgQVJQIG1vbml0b3IsIHdoaWNoIGlzIGEgc29mdHdhcmUgbmV0d29yayBpbnRlcmZhY2UgcmVhZGlseSBleGVyY2lzYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjIxLjQ2NzQwMDk4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NzA3NjczMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoyMS40NjgwMzgzMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODk3MDEyNTM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYXNzaWdubWVudCBgZGVsdGFfaW5fdGlja3MgPSAxO2AgcHJpb3IgdG8gYnJhbmNoaW5nIHRvIGByZV9hcm1gIHdoZW4gYHJ0bmxfdHJ5bG9jaygpYCBmYWlscyBpbiBgYm9uZF9hY3RpdmViYWNrdXBfYXJwX21vbigpYC4gXFxuXFxuQW5hbHlzaXMgZm9yIG1lbW9yeSBzYW5pdGl6ZXJzOlxcbjEuIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSB2YXJpYWJsZSBgZGVsdGFfaW5fdGlja3NgIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiAoYGRlbHRhX2luX3RpY2tzID0gbXNlY3NfdG9famlmZmllcyhib25kLVxcdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZ2UgbWVtb3J5LCBub3IgZG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gYGNvcHlfdG9fdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgZGF0YSwgZXRjLikuXFxuMi4gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2UgcHVyZWx5IGFkanVzdHMgdGhlIGRlbGF5ZWQgd29yayByZXNjaGVkdWxpbmcgaW50ZXJ2YWwgdXBvbiBmYWlsaW5nIHRvIGFjcXVpcmUgdGhlIFJUTkwgdHJ5bG9jayBpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvci4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGFuZCBMT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gbW9uaXRvciBhbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIG9iamVjdCBsaWZldGltZSBpc3N1ZXMuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGI5MjBkODEyZTU2MzQyZmY1N2YxZGExZWMzYTg4NDJjMTY0NTRhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA5OjQyOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IGVmOWViMGM1M2M2NjEuLmMyM2NmMThhOTk2YWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMzg3MSwxMCArMzg3MSw4IEBAIHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmIChSRUFEX09OQ0UoYm9uZC1cdTAwM2VzZW5kX3BlZXJfbm90aWYpIHx8IHNob3VsZF9ub3RpZnlfcnRubCkge1xuLVx0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7XG4tXHRcdFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xuK1x0XHRpZiAoIXJ0bmxfdHJ5bG9jaygpKVxuIFx0XHRcdGdvdG8gcmVfYXJtO1xuLVx0XHR9XG4gXG4gXHRcdGlmIChib25kLVx1MDAzZXNlbmRfcGVlcl9ub3RpZilcbiBcdFx0XHRib25kX3BlZXJfbm90aWZ5X21heV9ldmVudHMoYm9uZCwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwOTo0NDoyMS40NjgwMzk0MzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk2ODgyMDQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEJvbmRpbmcgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgY2hhbmdlZCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBNeSBpbml0aWFsIHN0ZXAgaXMgZ29pbmcgdG8gYmUgYSBjYXJlZnVsIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYsIG9mIGNvdXJzZS4gVGhhdCdzIG15IGdvLXRvIGFwcHJvYWNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgaW50ZW50IGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5HaXZlbiB0aGUgbGluZSBudW1iZXIgcmVmZXJlbmNlLCBJJ2xsIHVzZSB0aGUgYHJlYWQtZmlsZWAgdG9vbCB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDM4NzEuIEkgd2FudCB0byBzZWUgdGhlIGFkamFjZW50IGxpbmVzIG9mIGNvZGU7IHRoYXQgc3Vycm91bmRpbmcgY29udGV4dCBpcyBjcnVjaWFsLiBHZXR0aW5nIHRoZSBiaWcgcGljdHVyZSBvZiBob3cgdGhlIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGlzIHZpdGFsLiBPbmx5IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgY2FuIEkgdHJ1bHkgYXNzZXNzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA5OjQ0OjMwLjQzNjg2MzUxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODQwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODQwOlxcdFxcdHJldHVybiBzaG91bGRfbm90aWZ5X3J0bmw7XFxuMzg0MTpcXHR9XFxuMzg0MjpcXHRcXG4zODQzOlxcdHN0YXRpYyB2b2lkIGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb24oc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuMzg0NDpcXHR7XFxuMzg0NTpcXHRcXHRib29sIHNob3VsZF9ub3RpZnlfcnRubDtcXG4zODQ2OlxcdFxcdGludCBkZWx0YV9pbl90aWNrcztcXG4zODQ3OlxcdFxcbjM4NDg6XFx0XFx0ZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXFx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpO1xcbjM4NDk6XFx0XFxuMzg1MDpcXHRcXHRpZiAoIWJvbmRfaGFzX3NsYXZlcyhib25kKSlcXG4zODUxOlxcdFxcdFxcdGdvdG8gcmVfYXJtO1xcbjM4NTI6XFx0XFxuMzg1MzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMzg1NDpcXHRcXG4zODU1OlxcdFxcdGlmIChib25kX2FiX2FycF9pbnNwZWN0KGJvbmQpKSB7XFxuMzg1NjpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zODU3OlxcdFxcbjM4NTg6XFx0XFx0XFx0LyogUmFjZSBhdm9pZGFuY2Ugd2l0aCBib25kX2Nsb3NlIGZsdXNoIG9mIHdvcmtxdWV1ZSAqL1xcbjM4NTk6XFx0XFx0XFx0aWYgKCFydG5sX3RyeWxvY2soKSkge1xcbjM4NjA6XFx0XFx0XFx0XFx0ZGVsdGFfaW5fdGlja3MgPSAxO1xcbjM4NjE6XFx0XFx0XFx0XFx0Z290byByZV9hcm07XFxuMzg2MjpcXHRcXHRcXHR9XFxuMzg2MzpcXHRcXG4zODY0OlxcdFxcdFxcdGJvbmRfYWJfYXJwX2NvbW1pdChib25kKTtcXG4zODY1OlxcdFxcbjM4NjY6XFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4zODY3OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zODY4OlxcdFxcdH1cXG4zODY5OlxcdFxcbjM4NzA6XFx0XFx0c2hvdWxkX25vdGlmeV9ydG5sID0gYm9uZF9hYl9hcnBfcHJvYmUoYm9uZCk7XFxuMzg3MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zODcyOlxcdFxcbjM4NzM6XFx0XFx0aWYgKFJFQURfT05DRShib25kLVxcdTAwM2VzZW5kX3BlZXJfbm90aWYpIHx8IHNob3VsZF9ub3RpZnlfcnRubCkge1xcbjM4NzQ6XFx0XFx0XFx0aWYgKCFydG5sX3RyeWxvY2soKSlcXG4zODc1OlxcdFxcdFxcdFxcdGdvdG8gcmVfYXJtO1xcbjM4NzY6XFx0XFxuMzg3NzpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlc2VuZF9wZWVyX25vdGlmKVxcbjM4Nzg6XFx0XFx0XFx0XFx0Ym9uZF9wZWVyX25vdGlmeV9tYXlfZXZlbnRzKGJvbmQsIHRydWUpO1xcbjM4Nzk6XFx0XFxuMzg4MDpcXHRcXHRcXHRpZiAoc2hvdWxkX25vdGlmeV9ydG5sKSB7XFxuMzg4MTpcXHRcXHRcXHRcXHRib25kX3NsYXZlX3N0YXRlX25vdGlmeShib25kKTtcXG4zODgyOlxcdFxcdFxcdFxcdGJvbmRfc2xhdmVfbGlua19ub3RpZnkoYm9uZCk7XFxuMzg4MzpcXHRcXHRcXHR9XFxuMzg4NDpcXHRcXG4zODg1OlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuMzg4NjpcXHRcXHR9XFxuMzg4NzpcXHRcXG4zODg4OlxcdHJlX2FybTpcXG4zODg5OlxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMuYXJwX2ludGVydmFsKVxcbjM4OTA6XFx0XFx0XFx0cXVldWVfZGVsYXllZF93b3JrKGJvbmQtXFx1MDAzZXdxLCBcXHUwMDI2Ym9uZC1cXHUwMDNlYXJwX3dvcmssIGRlbHRhX2luX3RpY2tzKTtcXG4zODkxOlxcdH1cXG4zODkyOlxcdFxcbjM4OTM6XFx0c3RhdGljIHZvaWQgYm9uZF9hcnBfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMzg5NDpcXHR7XFxuMzg5NTpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm9uZGluZyxcXG4zODk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBhcnBfd29yay53b3JrKTtcXG4zODk3OlxcdFxcbjM4OTg6XFx0XFx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUNUSVZFQkFDS1VQKVxcbjM4OTk6XFx0XFx0XFx0Ym9uZF9hY3RpdmViYWNrdXBfYXJwX21vbihib25kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDQ6MzAuNDM3MjcwMDI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDAwODcwNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBBUlAgTW9uaXRvcmluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYGJvbmRfYWN0aXZlYmFja3VwX2FycF9tb25gLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgc2V0dGluZyBvZiBgZGVsdGFfaW5fdGlja3MgPSAxYCBiZWZvcmUganVtcGluZyB0byBgcmVfYXJtYCBpZiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIHRoZSBzZWNvbmQgdHJ5bG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSByaXNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYSBjbGFzc2ljIGdvdGNoYS5cblxuSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYGRlbHRhX2luX3RpY2tzYCBpcyBpbml0aWFsaXplZCBhdCBsaW5lIDM4NDgsIHVzaW5nIGBtc2Vjc190b19qaWZmaWVzKGJvbmQtXHUwMDNlcGFyYW1zLmFycF9pbnRlcnZhbClgLiBTbywgdGhhdCdzIGdvb2QuIEl0J3MgZXhwbGljaXRseSBpbml0aWFsaXplZCAqYmVmb3JlKiB0aGUgcG90ZW50aWFsIGp1bXAuIE5vIGhlYXAgb3Igc3RhY2sgYnVmZmVycyBhcmUgYmVpbmcgbWVzc2VkIHdpdGgsIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzIG9yIGZpZWxkcyBiZWluZyByZWFkLiBUaGlzIGlzIHB1cmVseSByZWxhdGVkIHRvIHRpbWluZyBhbmQgcmVzY2hlZHVsaW5nIHdpdGhpbiB0aGUgYm9uZGluZyBBUlAgbW9uaXRvcmluZyBsb2dpYy5cblxuTm93LCBsZXQncyBjYXN0IGEgd2lkZXIgbmV0LiBBcmUgdGhlcmUgKmFueSogb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW55d2hlcmUgaW4gdGhpcyBwYXRjaD8gQWZ0ZXIgYSBxdWljayBzY2FuLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGVyZSBhcmUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBzb2NrZXQgYnVmZmVycywgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bHMsIG9yIEJQRiBidWZmZXJzIGFyZSB0b3VjaGVkLiBUaGVyZSBhcmUgbm8gb3RoZXIgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0cyB0aGF0IGp1bXAgb3V0LiBBZ2FpbiwgYGRlbHRhX2luX3RpY2tzYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgb2YgY29uY2Vybi5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGRhdGEgZXhwb3N1cmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTiBvciBjb25jdXJyZW5jeSB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQsIG9yIGV2ZW4gdW5uZWNlc3Nhcnkgc2luY2UgdGhpcyBpcyBhIHB1cmUgbG9naWMgZml4LiBObyBuZWVkIHRvIGdvIGRlZXBlciBsb29raW5nIGZvciBtZW1vcnkgY29ycnVwdGlvbiBhcyBpdCdzIG5vdCBwb3NzaWJsZSBpbiB0aGlzIHNjZW5hcmlvLlxuXG5JJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAgYW5kIGZvbGxvdyB3aXRoIGEgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IGNvbnRyYXN0cyBLQVNBTiBhbmQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTAsIk91dHB1dFRva2VucyI6MjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDk6NDU6MDAuNDM4MTQ0OTkxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcXG5cXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXFx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpYCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnksIG5vciBkb2VzIGl0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBkYXRhLCBldGMuKS5cXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBhc3NpZ25tZW50IGBkZWx0YV9pbl90aWNrcyA9IDE7YCBwcmlvciB0byBicmFuY2hpbmcgdG8gYHJlX2FybWAgd2hlbiBgcnRubF90cnlsb2NrKClgIGZhaWxzIGluIGBib25kX2FjdGl2ZWJhY2t1cF9hcnBfbW9uKClgLiBcXG5cXG5BbmFseXNpcyBmb3IgbWVtb3J5IHNhbml0aXplcnM6XFxuMS4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHZhcmlhYmxlIGBkZWx0YV9pbl90aWNrc2AgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIChgZGVsdGFfaW5fdGlja3MgPSBtc2Vjc190b19qaWZmaWVzKGJvbmQtXFx1MDAzZXBhcmFtcy5hcnBfaW50ZXJ2YWwpYCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBtZW1vcnksIG5vciBkb2VzIGl0IHBhc3MgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBgY29weV90b191c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBkYXRhLCBldGMuKS5cXG4yLiBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZSBwdXJlbHkgYWRqdXN0cyB0aGUgZGVsYXllZCB3b3JrIHJlc2NoZWR1bGluZyBpbnRlcnZhbCB1cG9uIGZhaWxpbmcgdG8gYWNxdWlyZSB0aGUgUlROTCB0cnlsb2NrIGluIHRoZSBib25kaW5nIEFSUCBtb25pdG9yLiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgaXMgc3VmZmljaWVudCB0byBtb25pdG9yIGFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igb2JqZWN0IGxpZmV0aW1lIGlzc3Vlcy5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[1] Phase: Succeeded StartedAt: 2026-08-31 09:45:11 +0000 UTC FinishedAt: 2026-08-31 09:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 09:45:11 +0000 UTC FinishedAt: 2026-08-31 09:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2] Phase: Succeeded StartedAt: 2026-08-31 09:45:11 +0000 UTC FinishedAt: 2026-08-31 13:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 09:45:11 +0000 UTC FinishedAt: 2026-08-31 13:25:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","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-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 09:45:11 +0000 UTC FinishedAt: 2026-08-31 09:45:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 09:45:11 +0000 UTC FinishedAt: 2026-08-31 09:45:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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-workflowkpmf5/series-workflowkpmf5-convert-artifact-2377342171/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 09:45:21 +0000 UTC FinishedAt: 2026-08-31 10:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 09:45:21 +0000 UTC FinishedAt: 2026-08-31 10:02:32 +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:*9eefe251-61fb-4cb4-af89-c34e8b02e921,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-workflowkpmf5/series-workflowkpmf5-convert-artifact-2377342171/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": "46e99563-ff4a-491d-8d64-a9704bf35a06", "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-workflowkpmf5/series-workflowkpmf5-build-action-3550157337/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 09:45:21 +0000 UTC FinishedAt: 2026-08-31 10:02:22 +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:*9eefe251-61fb-4cb4-af89-c34e8b02e921,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-workflowkpmf5/series-workflowkpmf5-convert-artifact-2377342171/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": "46e99563-ff4a-491d-8d64-a9704bf35a06", "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-workflowkpmf5/series-workflowkpmf5-build-action-3550157337/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 10:02:32 +0000 UTC FinishedAt: 2026-08-31 10:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 10:02:32 +0000 UTC FinishedAt: 2026-08-31 10:02:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 10:02:32 +0000 UTC FinishedAt: 2026-08-31 10:02:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 10:02:32 +0000 UTC FinishedAt: 2026-08-31 10:02:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","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-workflowkpmf5/series-workflowkpmf5-convert-artifact-1116215858/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 10:02:42 +0000 UTC FinishedAt: 2026-08-31 10:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 10:02:42 +0000 UTC FinishedAt: 2026-08-31 10:04:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46e99563-ff4a-491d-8d64-a9704bf35a06,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-workflowkpmf5/series-workflowkpmf5-build-action-3550157337/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-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 10:04:37 +0000 UTC FinishedAt: 2026-08-31 10:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:04:37 +0000 UTC FinishedAt: 2026-08-31 10:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 10:04:37 +0000 UTC FinishedAt: 2026-08-31 10:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 10:04:37 +0000 UTC FinishedAt: 2026-08-31 10:21:32 +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:*9eefe251-61fb-4cb4-af89-c34e8b02e921,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-workflowkpmf5/series-workflowkpmf5-convert-artifact-1116215858/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": "bdd5ec7f-2f8a-4190-b764-20bff12d184e", "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-workflowkpmf5/series-workflowkpmf5-build-action-1757744070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:04:37 +0000 UTC FinishedAt: 2026-08-31 10:21:22 +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:*9eefe251-61fb-4cb4-af89-c34e8b02e921,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-workflowkpmf5/series-workflowkpmf5-convert-artifact-1116215858/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": "bdd5ec7f-2f8a-4190-b764-20bff12d184e", "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-workflowkpmf5/series-workflowkpmf5-build-action-1757744070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 10:21:32 +0000 UTC FinishedAt: 2026-08-31 10:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 10:21:32 +0000 UTC FinishedAt: 2026-08-31 10:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 10:21:32 +0000 UTC FinishedAt: 2026-08-31 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 10:21:32 +0000 UTC FinishedAt: 2026-08-31 10:23:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bdd5ec7f-2f8a-4190-b764-20bff12d184e,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-workflowkpmf5/series-workflowkpmf5-build-action-1757744070/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-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 10:23:49 +0000 UTC FinishedAt: 2026-08-31 13:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 10:23:49 +0000 UTC FinishedAt: 2026-08-31 13:25:12 +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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"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:*46e99563-ff4a-491d-8d64-a9704bf35a06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bdd5ec7f-2f8a-4190-b764-20bff12d184e,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-workflowkpmf5/series-workflowkpmf5-build-action-3550157337/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-workflowkpmf5/series-workflowkpmf5-build-action-1757744070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 10:23:49 +0000 UTC FinishedAt: 2026-08-31 10:23:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 10:23:49 +0000 UTC FinishedAt: 2026-08-31 10:23:54 +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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"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-workflowkpmf5/series-workflowkpmf5-convert-artifact-755741319/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 10:23:49 +0000 UTC FinishedAt: 2026-08-31 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 10:23:49 +0000 UTC FinishedAt: 2026-08-31 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:23:49 +0000 UTC FinishedAt: 2026-08-31 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 10:23:59 +0000 UTC FinishedAt: 2026-08-31 13:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkpmf5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"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":["bond_enslave","bond_release","bond_opt_tryset_rtnl","bond_create","bond_change_active_slave","bond_peer_notify_work_rearm"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","NET_CORE"],"series_id":"7e288732-133e-40e3-9296-fd5881e571c8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 10:23:59 +0000 UTC FinishedAt: 2026-08-31 13:25:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46e99563-ff4a-491d-8d64-a9704bf35a06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bdd5ec7f-2f8a-4190-b764-20bff12d184e,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-workflowkpmf5/series-workflowkpmf5-build-action-3550157337/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-workflowkpmf5/series-workflowkpmf5-build-action-1757744070/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-workflowkpmf5/series-workflowkpmf5-convert-artifact-755741319/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,}