Name: series-workflow9x6b6 Phase: Succeeded StartedAt: 2026-09-10 09:05:18 +0000 UTC FinishedAt: 2026-09-10 13:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[0] Phase: Succeeded StartedAt: 2026-09-10 09:05:18 +0000 UTC FinishedAt: 2026-09-10 09:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 09:05:18 +0000 UTC FinishedAt: 2026-09-10 09:30:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_TABLES", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_TABLES", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD" ], "series_id": "0428d600-8922-4aba-8968-6eedab94415b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_tcp_packet", "nft_flow_offload_eval", "nf_flow_reply_unoffloaded", "nf_flow_offload_forward", "nf_flow_offload_ipv6_forward" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGZpbHRlciBjb25udHJhY2sgYW5kIG5mdGFibGVzIGZsb3d0YWJsZSBvZmZsb2FkIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGx5IHRyYWZmaWMgYnlwYXNzZXMgdGhlIHJvdXRlcikuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxuMy4gSXQgdXBkYXRlcyBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mdF9mbG93X29mZmxvYWQuY2AgdG8gc3VwcG9ydCB1bmlkaXJlY3Rpb25hbGx5IG9mZmxvYWRlZCBmbG93cyB1bnRpbCBiaWRpcmVjdGlvbmFsIHRyYWZmaWMgaXMgY29uZmlybWVkLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVx1MDAzZXN0YXR1c2AsIGBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgbG9naWMgdG8gc3VwcG9ydCBhc3ltbWV0cmljIFRDUCBmbG93cyAod2hlcmUgcmVwbGllcyBieXBhc3MgdGhlIGhvc3QpLiBJdCB1cGRhdGVzIFRDUCBjb25udHJhY2sgcGFja2V0IHByb2Nlc3NpbmcgKG5mX2Nvbm50cmFja190Y3BfcGFja2V0KSB0byBoYW5kbGUgbWlkLXN0cmVhbSBwaWNrdXBzIGZvciB1bnJlcGxpZWQgY29ubmVjdGlvbnMsIGFuZCB1cGRhdGVzIGZsb3cgdGFibGUgZXZhbHVhdGlvbiBhbmQgZm9yd2FyZGluZyAobmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsLCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCwgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCkgdG8gZGVmZXIgYmlkaXJlY3Rpb25hbCBvZmZsb2FkaW5nIHVudGlsIGNvbm50cmFjayBjb25maXJtcyByZXBseSBwYWNrZXRzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGlzIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nIHZpYSBuZXR3b3JrIHBhY2tldCBjcmFmdGluZyBhbmQgbmZ0YWJsZXMgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OGVmZTY5MjI3MWMxNjFiM2VhMWVlOWJmNjMxN2IwOTQxY2YwNGY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDk6Mjg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuaW5kZXggZmRlMjQyN2NlYjhmYy4uYTRlM2Q5ZWQ3YTY0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuQEAgLTIwOCw2ICYjNDM7MjA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPT0gVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gfVxuJiM0MztcbiYjNDM7LyogQSBmbG93IHBpY2tlZCB1cCB3aXRob3V0IGl0cyByZXBseSBjYW5ub3QgYmVjb21lIGFzc3VyZWQuICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3QtXHUwMDNlcHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX05GX0NUX1BST1RPX1NDVFBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBhZDZmMTk4NmQ1MmE2Li4zMzViMTEzMDFhNzhhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtMTE3Myw2ICYjNDM7MTE3MywyNSBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnNcbiYjNDM7XHRcdCAqIHdoZW4gdGhlIHJlcGx5IGRpcmVjdGlvbiB0YWtlcyBhbm90aGVyIHBhdGgsIGFuZCB0aGUgY2xpZW50XG4mIzQzO1x0XHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxuJiM0MztcdFx0ICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXRcbiYjNDM7XHRcdCAqIGNyZWF0ZXMgYSBuZXcgb25lIHRoYXQgc2VlZHMgdGhlIHVuc2VlbiBkaXJlY3Rpb24gZnJvbSB0aGVcbiYjNDM7XHRcdCAqIHBhY2tldCBpdHNlbGYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh0bi1cdTAwM2V0Y3BfbG9vc2UgXHUwMDI2XHUwMDI2ICFuZmN0X3N5bnByb3h5KGN0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG50b2hsKHRoLVx1MDAzZXNlcSkgPT0gY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobmZfY3Rfa2lsbChjdCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1ORl9SRVBFQVQ7XG4mIzQzO1x0XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogSW52YWxpZCBwYWNrZXQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTQ2NSw2ICYjNDM7NDY1LDI2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbiB9XG4gXG4mIzQzOy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlXG4mIzQzOyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXG4mIzQzOyAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmZsb3ctXHUwMDNlY3QtXHUwMDNlc3RhdHVzKSkge1xuJiM0MztcdFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuQEAgLTQ3OCw2ICYjNDM7NDk4LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiBcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gXG4mIzQzO1x0aWYgKG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoZmxvd190YWJsZSwgZmxvdywgZGlyKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4gXHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiBcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbkBAIC0xMDc0LDYgJiM0MzsxMDk3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbiYjNDM7XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbiBcdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuIFx0XHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi4wYjZiZThhYzNkMjRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtNzMsNyAmIzQzOzczLDggQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXHUwMDNlc2tiLCBuZnRfdGhvZmYocGt0KSxcbiBcdFx0XHRcdFx0ICBzaXplb2YoX3RjcGgpLCBcdTAwMjZfdGNwaCk7XG4gXHRcdGlmICh1bmxpa2VseSghdGNwaCB8fCB0Y3BoLVx1MDAzZWZpbiB8fCB0Y3BoLVx1MDAzZXJzdCB8fFxuLVx0XHRcdCAgICAgIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpKSlcbiYjNDM7XHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKSkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX1VEUDpcbkBAIC0xMTcsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRpZiAodGNwaClcbiBcdFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XG4gXG4tXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRpZiAoIXRjcGggfHwgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSlcbiYjNDM7XHRcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZmxvd19hZGQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5pbmRleCA0NDljNTE4YmQ5NDdkLi41MTZhNTQ0MjY2ZjFhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbkBAIC01MTYsNiAmIzQzOzUxNiw3OSBAQCBlbHNlXG4gXHRyZXQ9MVxuIGZpXG4gXG4mIzQzOyMgQXN5bW1ldHJpYyBwYXRoIHRlc3Q6XG4mIzQzOyMgbnMyIGFuc3dlcnMgb3ZlciBhIGRpcmVjdCBsaW5rLCBzbyBuc3IxIHNlZXMgdGhlIG9yaWdpbmFsIGRpcmVjdGlvbiBvbmx5LlxuJiM0MzsjIFN1Y2ggYSBjb25uZWN0aW9uIG5ldmVyIGJlY29tZXMgYXNzdXJlZCwgYnV0IHRoZSBmbG93dGFibGUgaXMgZXhwZWN0ZWQgdG9cbiYjNDM7IyB0YWtlIG92ZXIgdGhlIGRpcmVjdGlvbiB0aGF0IG5zcjEgZG9lcyBzZWUuXG4mIzQzO2NoZWNrX29yaWdfb2ZmbG9hZGVkKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIHdoYXQ9JDFcbiYjNDM7XG4mIzQzO1x0bG9jYWwgb3JpZ1xuJiM0MztcdG9yaWc9JChpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCByZXNldCBjb3VudGVyIGluZXQgZmlsdGVyIHJvdXRlZF9vcmlnIHwgZ3JlcCBwYWNrZXRzKVxuJiM0MztcdGxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9XG4mIzQzO1xuJiM0MztcdGxvY2FsIGZzXG4mIzQzO1x0ZnM9JChkdSAtc2IgXCYjMzQ7JG5zaW5cJiMzNDspXG4mIzQzO1x0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcbiYjNDM7XG4mIzQzO1x0IyB0aGUgZmxvd3RhYmxlIHRha2VzIG92ZXIgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNrZXRzLCBzbyB0aGUgZm9yd2FyZFxuJiM0MztcdCMgaG9vayBtdXN0IHNlZSBhIHNtYWxsIGZyYWN0aW9uIG9mIHRoZSB0cmFuc2ZlcnJlZCBmaWxlLlxuJiM0MztcdGlmIFsgXCYjMzQ7JG9yaWdfY250XCYjMzQ7IC1ndCBcJiMzNDskbWF4X29yaWdcJiMzNDsgXTt0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICR3aGF0OiBvcmlnaW5hbCBjb3VudGVyICRvcmlnX2NudCBleGNlZWRzIGV4cGVjdGVkIHZhbHVlICRtYXhfb3JpZ1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtQQVNTOiAkd2hhdFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXG4mIzQzO3tcbiYjNDM7XHRpcCBsaW5rIGFkZCBuYW1lIGV0aDEgbmV0bnMgXCYjMzQ7JG5zMVwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIGV0aDEgbmV0bnMgXCYjMzQ7JG5zMlwmIzM0O1xuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zMVwmIzM0OyBhZGRyIGFkZCAxMC4wLjkuOTkvMjQgZGV2IGV0aDFcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgYWRkciBhZGQgMTAuMC45Ljk4LzI0IGRldiBldGgxXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMxXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWRcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgYWRkciBhZGQgZGVhZDo5Ojo5OC82NCBkZXYgZXRoMSBub2RhZFxuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zMVwmIzM0OyBsaW5rIHNldCBldGgxIHVwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IGxpbmsgc2V0IGV0aDEgdXBcbiYjNDM7XG4mIzQzO1x0IyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay5cbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgcm91dGUgYWRkIDEwLjAuMS45OSB2aWEgMTAuMC45Ljk5IGRldiBldGgxXG4mIzQzO1x0aXAgLTYgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IHJvdXRlIGFkZCBkZWFkOjE6Ojk5IHZpYSBkZWFkOjk6Ojk5IGRldiBldGgxXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zMVwmIzM0OyBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuczJcJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXG4mIzQzO1x0XHRjaGVja19vcmlnX29mZmxvYWRlZCBcJiMzNDtmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgbGlzdCBydWxlc2V0IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIDYgXCYjMzQ7W2RlYWQ6Mjo6OTldXCYjMzQ7IDEyMzQ1OyB0aGVuXG4mIzQzO1x0XHRjaGVja19vcmlnX29mZmxvYWRlZCBcJiMzNDtJUHY2IGZsb3cgb2ZmbG9hZGVkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldCAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuczFcJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnMyXCYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczFcJiMzNDsgbGluayBkZWwgZXRoMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aFxuJiM0MztcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24mIzM5O3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGxpZXMgYnlwYXNzIHRoZSBob3N0KS4gSXQgdXBkYXRlcyBUQ1AgY29ubnRyYWNrIHBhY2tldCBwcm9jZXNzaW5nIChuZl9jb25udHJhY2tfdGNwX3BhY2tldCkgdG8gaGFuZGxlIG1pZC1zdHJlYW0gcGlja3VwcyBmb3IgdW5yZXBsaWVkIGNvbm5lY3Rpb25zLCBhbmQgdXBkYXRlcyBmbG93IHRhYmxlIGV2YWx1YXRpb24gYW5kIGZvcndhcmRpbmcgKG5mdF9mbG93X29mZmxvYWRfZXZhbCwgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQsIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQpIHRvIGRlZmVyIGJpZGlyZWN0aW9uYWwgb2ZmbG9hZGluZyB1bnRpbCBjb25udHJhY2sgY29uZmlybXMgcmVwbHkgcGFja2V0cy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBpcyB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZyB2aWEgbmV0d29yayBwYWNrZXQgY3JhZnRpbmcgYW5kIG5mdGFibGVzIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDhlZmU2OTIyNzFjMTYxYjNlYTFlZTliZjYzMTdiMDk0MWNmMDRmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjI4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAppbmRleCBmZGUyNDI3Y2ViOGZjLi5hNGUzZDllZDdhNjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaApAQCAtMjA4LDYgJiM0MzsyMDgsMTMgQEAgc3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogCXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwogCSAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cyk7CiB9CiYjNDM7CiYjNDM7LyogQSBmbG93IHBpY2tlZCB1cCB3aXRob3V0IGl0cyByZXBseSBjYW5ub3QgYmVjb21lIGFzc3VyZWQuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKTsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xMTczLDYgJiM0MzsxMTczLDI1IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCQl9CiAKJiM0MzsJCS8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnMKJiM0MzsJCSAqIHdoZW4gdGhlIHJlcGx5IGRpcmVjdGlvbiB0YWtlcyBhbm90aGVyIHBhdGgsIGFuZCB0aGUgY2xpZW50CiYjNDM7CQkgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvbgomIzQzOwkJICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXQKJiM0MzsJCSAqIGNyZWF0ZXMgYSBuZXcgb25lIHRoYXQgc2VlZHMgdGhlIHVuc2VlbiBkaXJlY3Rpb24gZnJvbSB0aGUKJiM0MzsJCSAqIHBhY2tldCBpdHNlbGYuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0bi0mZ3Q7dGNwX2xvb3NlICZhbXA7JmFtcDsgIW5mY3Rfc3lucHJveHkoY3QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW5kZXggPT0gVENQX0FDS19TRVQgJmFtcDsmYW1wOyBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmYW1wO2N0LSZndDtzdGF0dXMpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBudG9obCh0aC0mZ3Q7c2VxKSA9PSBjdC0mZ3Q7cHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJCQlpZiAobmZfY3Rfa2lsbChjdCkpCiYjNDM7CQkJCXJldHVybiAtTkZfUkVQRUFUOwomIzQzOwkJCXJldHVybiBORl9EUk9QOwomIzQzOwkJfQomIzQzOwogCQkvKiBJbnZhbGlkIHBhY2tldCAqLwogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKIAkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTQ2NSw2ICYjNDM7NDY1LDI2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKIH0KIAomIzQzOy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlCiYjNDM7ICogY2xhc3NpYyBwYXRoIHNvIHRoYXQgY29ubnRyYWNrIHNlZXMgaXQuIE9uY2UgY29ubnRyYWNrIGhhcywgdGhlIGZsb3cgaXMKJiM0MzsgKiBvZmZsb2FkZWQgaW4gYm90aCBkaXJlY3Rpb25zLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQkJICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcikKJiM0Mzt7CiYjNDM7CWlmIChkaXIgIT0gRkxPV19PRkZMT0FEX0RJUl9SRVBMWSB8fAomIzQzOwkgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtmbG93LSZndDtjdC0mZ3Q7c3RhdHVzKSkgewomIzQzOwkJc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAJCQkJICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLApAQCAtNDc4LDYgJiM0Mzs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAomIzQzOwlpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJbXR1ID0gZmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0OwogCWlmIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSkKIAkJbXR1IC09IHNpemVvZigqaXBoKTsKQEAgLTEwNzQsNiAmIzQzOzEwOTcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlkaXIgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpcjsKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwogCiYjNDM7CWlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAltdHUgPSBmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LSZndDtvZmZzZXQ7CiAJaWYgKGZsb3ctJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKQogCQltdHUgLT0gc2l6ZW9mKCppcDZoKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKaW5kZXggMzJiNDI4MTAzOGRkMy4uMGI2YmU4YWMzZDI0ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJCXRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LSZndDtza2IsIG5mdF90aG9mZihwa3QpLAogCQkJCQkgIHNpemVvZihfdGNwaCksICZhbXA7X3RjcGgpOwogCQlpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC0mZ3Q7ZmluIHx8IHRjcGgtJmd0O3JzdCB8fAotCQkJICAgICAhbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkpKQomIzQzOwkJCSAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CkBAIC0xMTcsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJaWYgKHRjcGgpCiAJCWZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpOwogCi0JX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKQomIzQzOwkJX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiAJcmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycl9mbG93X2FkZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCA0NDljNTE4YmQ5NDdkLi41MTZhNTQ0MjY2ZjFhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCkBAIC01MTYsNiAmIzQzOzUxNiw3OSBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MzsjIEFzeW1tZXRyaWMgcGF0aCB0ZXN0OgomIzQzOyMgbnMyIGFuc3dlcnMgb3ZlciBhIGRpcmVjdCBsaW5rLCBzbyBuc3IxIHNlZXMgdGhlIG9yaWdpbmFsIGRpcmVjdGlvbiBvbmx5LgomIzQzOyMgU3VjaCBhIGNvbm5lY3Rpb24gbmV2ZXIgYmVjb21lcyBhc3N1cmVkLCBidXQgdGhlIGZsb3d0YWJsZSBpcyBleHBlY3RlZCB0bwomIzQzOyMgdGFrZSBvdmVyIHRoZSBkaXJlY3Rpb24gdGhhdCBuc3IxIGRvZXMgc2VlLgomIzQzO2NoZWNrX29yaWdfb2ZmbG9hZGVkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHdoYXQ9JDEKJiM0MzsKJiM0MzsJbG9jYWwgb3JpZwomIzQzOwlvcmlnPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXIgaW5ldCBmaWx0ZXIgcm91dGVkX29yaWcgfCBncmVwIHBhY2tldHMpCiYjNDM7CWxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9CiYjNDM7CiYjNDM7CWxvY2FsIGZzCiYjNDM7CWZzPSQoZHUgLXNiICYjMzQ7JG5zaW4mIzM0OykKJiM0MzsJbG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSkKJiM0MzsKJiM0MzsJIyB0aGUgZmxvd3RhYmxlIHRha2VzIG92ZXIgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNrZXRzLCBzbyB0aGUgZm9yd2FyZAomIzQzOwkjIGhvb2sgbXVzdCBzZWUgYSBzbWFsbCBmcmFjdGlvbiBvZiB0aGUgdHJhbnNmZXJyZWQgZmlsZS4KJiM0MzsJaWYgWyAmIzM0OyRvcmlnX2NudCYjMzQ7IC1ndCAmIzM0OyRtYXhfb3JpZyYjMzQ7IF07dGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICR3aGF0OiBvcmlnaW5hbCBjb3VudGVyICRvcmlnX2NudCBleGNlZWRzIGV4cGVjdGVkIHZhbHVlICRtYXhfb3JpZyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJZWNobyAmIzM0O1BBU1M6ICR3aGF0JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9hc3ltbWV0cmljX3BhdGgoKQomIzQzO3sKJiM0MzsJaXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zICYjMzQ7JG5zMSYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyAmIzM0OyRuczImIzM0OwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OS8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OC8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWQKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyBhZGRyIGFkZCBkZWFkOjk6Ojk4LzY0IGRldiBldGgxIG5vZGFkCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBzZXQgZXRoMSB1cAomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGxpbmsgc2V0IGV0aDEgdXAKJiM0MzsKJiM0MzsJIyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay4KJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgMTAuMC4xLjk5IHZpYSAxMC4wLjkuOTkgZGV2IGV0aDEKJiM0MzsJaXAgLTYgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMSYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMiYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW4KJiM0MzsJCWNoZWNrX29yaWdfb2ZmbG9hZGVkICYjMzQ7ZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwlmaQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNiAmIzM0O1tkZWFkOjI6Ojk5XSYjMzQ7IDEyMzQ1OyB0aGVuCiYjNDM7CQljaGVja19vcmlnX29mZmxvYWRlZCAmIzM0O0lQdjYgZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMxJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMyJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBkZWwgZXRoMQomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aAomIzQzOwogIyBkZWxldGUgZGVmYXVsdCByb3V0ZSwgaS5lLiBuczIgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZAogIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS4KICMgZXhwZWN0IG5zMSBoYXMgbnNyMSBhZGRyZXNzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enosIHdoYXQgY29uZmlndXJhdGlvbnMgd2UmIzM5O2xsIG5lZWQsIGFuZCB3aGF0IHRoZSBrZXkgc3ltYm9scyBhcmUgdG8gZm9jdXMgb24uIEZpcnN0LCBsZXQmIzM5O3MgZGlnZXN0IHRoaXMgZGlmZi4KClRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIGJhc2VkIG9uIHRoZSBmaWxlIGNoYW5nZXMsIHNlZW1zIHRvIGJlIGFyb3VuZCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgdG8gYm90aCB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIChgbmZfY29ubnRyYWNrX2w0cHJvdG8uaGAgaW50cm9kdWNlcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWRgKSBhbmQgdGhlIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24gKGBuZl9mbG93X3RhYmxlX2lwLmNgLCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGhhbmRsaW5nIG9mIHVucmVwbGllZCBUQ1AgZmxvd3MsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBhc3ltbWV0cmljIHBhdGhzLCBhcyBoaW50ZWQgaW4gYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG5vdyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGEgU1lOIG5ldmVyIGdldHMgYSByZXBseSBvbiB0aGUgaG9zdCB3aXRoICYjMzQ7bG9vc2UgY29ubnRyYWNrJiMzNDsgYW5kIHRoZSBhZGRpdGlvbiBvZiBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCgpYCBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgd2UgZGVhbCB3aXRoIHVucmVwbGllZCBmbG93cyBpbiB0aGUgb2ZmbG9hZCBjb250ZXh0LiBUaGUgaW5jbHVzaW9uIG9mIG5ldyB0ZXN0cyBpbiBgbmZ0X2Zsb3d0YWJsZS5zaGAgY29uZmlybXMgdGhpcyBhcmVhIG9mIGZvY3VzLgoKVGhpcyB1bnJlcGxpZWQgZmxvdyBoYW5kbGluZyBpcyB3aGVyZSB0aGUganVpY3kgYnVncyBhcmUgbGlrZWx5IHRvIGJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkIGFuZCBraWxsaW5nIGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZl9jdF9raWxsKGN0KWAgY2FsbHMgYW5kIHRoZSBiaWRpcmVjdGlvbmFsIGZsYWcgbG9naWMgaW4gYG5mdF9mbG93X29mZmxvYWRfZXZhbCgpYCB3aXRoIGEgZmluZS10b290aCBjb21iLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBvZmZsb2FkIGRlY2lzaW9ucyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBhcmUgb3V0IG9mIHN5bmMgb3Igc29tZSBpbnRlcm5hbCBzdGF0ZSBpcyBub3QgdXBkYXRlZCBjb3JyZWN0bHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBvZmZsb2FkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZSBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWEgZm9yIGZ1enppbmcuIFNvLCBJIG5lZWQgdG8gZ2V0IGZhbWlsaWFyIHdpdGggYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgLCBhbmQgdGhlIGNoYW5nZXMgYXJvdW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgpYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoKWAsIGFzIHdlbGwgYXMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoKWAuIEl0IHNlZW1zIHRoYXQgdGhlIG5ldyBmdW5jdGlvbnMgc3VjaCBhcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgYW5kIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIHdpbGwgYmUgY2VudHJhbCB0byB0aGF0LgoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGludG8gdGhlIHJlbGV2YW50IGNvZGUgY29udGV4dCBhbmQgc3BvdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3MS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MjpzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ4OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNTAwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTAxOlx0aWYgKG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoZmxvd190YWJsZSwgZmxvdywgZGlyKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTUwMi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA4Nz1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDk5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTEwMDpcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTAxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipEaXZpbmcgaW50byB0aGUgVENQIENvbm5lY3Rpb24gVHJhY2tpbmcgYW5kIEZsb3cgT2ZmbG9hZCBNZWNoYW5pY3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW50ZXJhY3RzIHdpdGggZmxvdyBvZmZsb2FkIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNzMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBjb3JlIFRDUCBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBGSU4tV0FJVCBzdGF0ZXMsIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgdGhlcmUgYXJvdW5kIHRoZSB2YXJpb3VzIHRpbWVycyBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCBmbG93IG9mZmxvYWQuIExldCYjMzk7cyBjaGVjayBvdXQgYG5mdF9mbG93X29mZmxvYWQuY2AgYXJvdW5kIGxpbmUgNzMuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGltcGxlbWVudGF0aW9uIGxpdmVzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgaGFuZG9mZiBiZXR3ZWVuIGNvbm50cmFjayBhbmQgb2ZmbG9hZCwgd2hlbiBhbmQgaG93IHRoZSBvZmZsb2FkaW5nIGlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdGhlIHR3byBzdWJzeXN0ZW1zLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBvZmZsb2FkPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB1c2VkPwoKRmluYWxseSwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgbmZfZmxvd190YWJsZV9pcC5jYC4gVGhpcyB3aWxsIGxpa2VseSBjb250YWluIHRoZSBJUC1zcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgZmxvdyB0YWJsZSwgYW5kIGJ5IHJlYWRpbmcgdGhpcyBJJiMzOTtsbCBiZSBhYmxlIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgb2ZmbG9hZCBtZWNoYW5pc21zIGludGVyYWN0IHdpdGggdGhlIElQIGxheWVyLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgY29udGFpbiB0aGUgY29kZSB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgb2ZmbG9hZGluZyB0byBhIG5ldHdvcmsgY2FyZCBhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgY29tZSB0b2dldGhlci4gV2l0aCB0aGVzZSB0aHJlZSBsb2NhdGlvbnMgaW4gbWluZCwgSSBzaG91bGQgYmUgYWJsZSB0byByZWNvbnN0cnVjdCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgZXZlcnl0aGluZyB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTYwOlx0XHRjYXNlIFRDUF9DT05OVFJBQ0tfTUFYOlxuMTE2MTpcdFx0XHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcbjExNjI6XHRcdFx0ICogdGhlIFNZTi9BQ0sgZnJvbSB0aGUgc2VydmVyIGlzIGxvc3QsIHRoZSBjbGllbnQgbWF5IHRyYW5zbWl0XG4xMTYzOlx0XHRcdCAqIGEga2VlcC1hbGl2ZSBwYWNrZXQgd2hpbGUgaW4gU1lOX1NFTlQgc3RhdGUuIFRoaXMgbmVlZHMgdG9cbjExNjQ6XHRcdFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cbjExNjU6XHRcdFx0ICogZ2VuZXJhdGUgYSBuZXcgU1lOIHdpdGggdGhlIGNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyLlxuMTE2NjpcdFx0XHQgKi9cbjExNjc6XHRcdFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNiBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExNjg6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE2OTpcdFx0XHQgICAgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbjExNzA6XHRcdFx0ICAgIGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cdTAwM2VzZXEpKSB7XG4xMTcxOlx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmZfY3RfdGNwOiBTWU4gcHJveHkgY2xpZW50IGtlZXAgYWxpdmVcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuMTE3MzpcdFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4xMTc0Olx0XHRcdH1cbjExNzU6XHRcbjExNzY6XHRcdFx0LyogVGhlIGFuc3dlciB0byB0aGUgU1lOIG5ldmVyIHBhc3NlZCB0aGUgaG9zdCwgYXMgaGFwcGVuc1xuMTE3NzpcdFx0XHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxuMTE3ODpcdFx0XHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxuMTE3OTpcdFx0XHQgKiBvdmVyIGFzIGEgbWlkLXN0cmVhbSBwaWNrdXA6IGRlbGV0ZSB0aGUgZW50cnkgc28gdGhlIHBhY2tldFxuMTE4MDpcdFx0XHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXG4xMTgxOlx0XHRcdCAqIHBhY2tldCBpdHNlbGYuXG4xMTgyOlx0XHRcdCAqL1xuMTE4MzpcdFx0XHRpZiAodG4tXHUwMDNldGNwX2xvb3NlIFx1MDAyNlx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXHUwMDI2XHUwMDI2XG4xMTg0Olx0XHRcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExODU6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE4NjpcdFx0XHQgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSBcdTAwMjZcdTAwMjZcbjExODc6XHRcdFx0ICAgIG50b2hsKHRoLVx1MDAzZXNlcSkgPT0gY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcbjExODg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExODk6XHRcbjExOTA6XHRcdFx0XHRpZiAobmZfY3Rfa2lsbChjdCkpXG4xMTkxOlx0XHRcdFx0XHRyZXR1cm4gLU5GX1JFUEVBVDtcbjExOTI6XHRcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjExOTM6XHRcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdFx0XHQvKiBJbnZhbGlkIHBhY2tldCAqL1xuMTE5NjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExOTc6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbjExOTg6XHRcdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4xMTk5Olx0XHRcdFx0XHRcdCAgaW5kZXgsIGRpcixcbjEyMDA6XHRcdFx0XHRcdFx0ICB0Y3BfY29ubnRyYWNrX25hbWVzW29sZF9zdGF0ZV0pO1xuMTIwMTpcdFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbjEyMDI6XHRcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XG4xMjAzOlx0XHRcdC8qIFJGQzU5NjEgY29tcGxpYW5jZSBjYXVzZSBzdGFjayB0byBzZW5kIFwmIzM0O2NoYWxsZW5nZS1BQ0tcJiMzNDtcbjEyMDQ6XHRcdFx0ICogZS5nLiBpbiByZXNwb25zZSB0byBzcHVyaW91cyBTWU5zLiAgQ29ubnRyYWNrIE1VU1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gbmZ0X2Zsb3dfb2ZmbG9hZC5jKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBvZmZsb2FkaW5nIG5ldHdvcmsgdHJhZmZpYyB0byBoYXJkd2FyZSwgcGFydGljdWxhcmx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZSBmbG93IGNhY2hlIGVudHJpZXMsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBmaWx0ZXIgYW5kIGhhcmR3YXJlIG9mZmxvYWQsIGFuZCBob3cgdGhlIGRlY2lzaW9uIHRvIG9mZmxvYWQgaXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgc3VzcGVjdCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUgYG5mdF9mbG93X29mZmxvYWRgIGhvb2tzIGZpdCBpbnRvIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHByb3RvY29scyBhbmQgd2hldGhlciBpdCBzdXBwb3J0cyB0aGluZ3MgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlIGluIHRoZSBvZmZsb2FkIGRlY2lzaW9ucy4gVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB1bmRlcnBpbiB0aGUgb2ZmbG9hZCBwcm9jZXNzLCBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0XHRnb3RvIG91dDtcbiAgNjY6XHRcbiAgNjc6XHRcdGN0ID0gbmZfY3RfZ2V0KHBrdC1cdTAwM2Vza2IsIFx1MDAyNmN0aW5mbyk7XG4gIDY4Olx0XHRpZiAoIWN0KVxuICA2OTpcdFx0XHRnb3RvIG91dDtcbiAgNzA6XHRcbiAgNzE6XHRcdHN3aXRjaCAoY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7XG4gIDcyOlx0XHRjYXNlIElQUFJPVE9fVENQOlxuICA3MzpcdFx0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIG5mdF90aG9mZihwa3QpLFxuICA3NDpcdFx0XHRcdFx0XHQgIHNpemVvZihfdGNwaCksIFx1MDAyNl90Y3BoKTtcbiAgNzU6XHRcdFx0aWYgKHVubGlrZWx5KCF0Y3BoIHx8IHRjcGgtXHUwMDNlZmluIHx8IHRjcGgtXHUwMDNlcnN0IHx8XG4gIDc2Olx0XHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuICA3NzpcdFx0XHRcdCAgICAgICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpKSlcbiAgNzg6XHRcdFx0XHRnb3RvIG91dDtcbiAgNzk6XHRcdFx0YnJlYWs7XG4gIDgwOlx0XHRjYXNlIElQUFJPVE9fVURQOlxuICA4MTpcdFx0XHRicmVhaztcbiAgODI6XHQjaWZkZWYgQ09ORklHX05GX0NUX1BST1RPX0dSRVxuICA4MzpcdFx0Y2FzZSBJUFBST1RPX0dSRToge1xuICA4NDpcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbiAgODU6XHRcbiAgODY6XHRcdFx0aWYgKGN0LVx1MDAzZXN0YXR1cyBcdTAwMjYgSVBTX05BVF9NQVNLKVxuICA4NzpcdFx0XHRcdGdvdG8gb3V0O1xuICA4ODpcdFx0XHR0dXBsZSA9IFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuICA4OTpcdFx0XHQvKiBObyBzdXBwb3J0IGZvciBHUkUgdjEgKi9cbiAgOTA6XHRcdFx0aWYgKHR1cGxlLVx1MDAzZXNyYy51LmdyZS5rZXkgfHwgdHVwbGUtXHUwMDNlZHN0LnUuZ3JlLmtleSlcbiAgOTE6XHRcdFx0XHRnb3RvIG91dDtcbiAgOTI6XHRcdFx0YnJlYWs7XG4gIDkzOlx0XHR9XG4gIDk0Olx0I2VuZGlmXG4gIDk1Olx0XHRkZWZhdWx0OlxuICA5NjpcdFx0XHRnb3RvIG91dDtcbiAgOTc6XHRcdH1cbiAgOTg6XHRcbiAgOTk6XHRcdGlmIChuZl9jdF9leHRfZXhpc3QoY3QsIE5GX0NUX0VYVF9IRUxQRVIpIHx8XG4gMTAwOlx0XHQgICAgY3QtXHUwMDNlc3RhdHVzIFx1MDAyNiAoSVBTX1NFUV9BREpVU1QgfCBJUFNfTkFUX0NMQVNIKSlcbiAxMDE6XHRcdFx0Z290byBvdXQ7XG4gMTAyOlx0XG4gMTAzOlx0XHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXG4gMTA0Olx0XHRcdGdvdG8gb3V0O1xuIDEwNTpcdFxuIDEwNjpcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDEwNzpcdFx0XHRnb3RvIG91dDtcbiAxMDg6XHRcbiAxMDk6XHRcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbiAxMTA6XHRcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG4gMTExOlx0XHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4gMTEyOlx0XG4gMTEzOlx0XHRmbG93ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcbiAxMTQ6XHRcdGlmICghZmxvdylcbiAxMTU6XHRcdFx0Z290byBlcnJfZmxvd19hbGxvYztcbiAxMTY6XHRcbiAxMTc6XHRcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFx1MDAyNnJvdXRlKTtcbiAxMTg6XHRcdGlmICh0Y3BoKVxuIDExOTpcdFx0XHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcbiAxMjA6XHRcbiAxMjE6XHRcdGlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKVxuIDEyMjpcdFx0XHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAxMjM6XHRcdHJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTtcbiAxMjQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTI1Olx0XHRcdGdvdG8gZXJyX2Zsb3dfYWRkO1xuIDEyNjpcdFxuIDEyNzpcdFx0cmV0dXJuO1xuIDEyODpcdFxuIDEyOTpcdGVycl9mbG93X2FkZDpcbiAxMzA6XHRcdGZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpO1xuIDEzMTpcdGVycl9mbG93X2FsbG9jOlxuIDEzMjpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xuIDEzMzpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcbiAxMzQ6XHRlcnJfZmxvd19yb3V0ZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODM1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gSXQmIzM5O3Mgd2hlcmUgdGhlIElQLXNwZWNpZmljIGxvZ2ljIGZvciB0aGUgZmxvdyB0YWJsZSBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGFuZCBmbG93IGtleSBnZW5lcmF0aW9uIGhhcHBlbmluZyBpbiB0aGVyZSwgYWxvbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSVAgcHJvdG9jb2wgZmFtaWx5LiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGZsb3dzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBuZl9jb25udHJhY2tgIHN1YnN5c3RlbSBoYXBwZW5zLCBnaXZlbiB0aGF0IHRoZSBmbG93IHRhYmxlIGlzIG1lYW50IHRvIGJlIGEgaGlnaC1wZXJmb3JtYW5jZSBhbHRlcm5hdGl2ZSB0byB0cmFkaXRpb25hbCBjb25uZWN0aW9uIHRyYWNraW5nIGluIG1hbnkgY2FzZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIHZhcmlvdXMgSVAgb3B0aW9ucywgZnJhZ21lbnRhdGlvbiwgYW5kIG90aGVyIGVkZ2UgY2FzZXMgd2l0aGluIHRoZSBmbG93IHRhYmxlIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVybmFscyBvZiB0aGlzIGZpbGUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGFuZCBsaW1pdGF0aW9ucyBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdCAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gNDcxOlx0ICovXG4gNDcyOlx0c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiA0NzQ6XHRcdFx0XHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4gNDc1Olx0e1xuIDQ3NjpcdFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XG4gNDc3Olx0XHQgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiA0Nzg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0aWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Zmxvdy1cdTAwM2VjdC1cdTAwM2VzdGF0dXMpKSB7XG4gNDgxOlx0XHRcdHNldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiA0ODI6XHRcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XG4gNDgzOlx0XHR9XG4gNDg0Olx0XG4gNDg1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA0ODY6XHR9XG4gNDg3Olx0XG4gNDg4Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ4OTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0OTA6XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbiA0OTE6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDkyOlx0e1xuIDQ5MzpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbiA0OTQ6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDk1Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbiA0OTY6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiA0OTk6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gNTAwOlx0XG4gNTAxOlx0XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuIDUwMjpcdFx0XHRyZXR1cm4gMDtcbiA1MDM6XHRcbiA1MDQ6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4gNTA1Olx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiA1MDY6XHRcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4gNTA5Olx0XHRcdHJldHVybiAwO1xuIDUxMDpcdFxuIDUxMTpcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbiA1MTI6XHRcdHRob2ZmID0gKGlwaC1cdTAwM2VpaGwgKiA0KSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuIDUxMzpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXBoLVx1MDAzZXByb3RvY29sLCBza2IsIHRob2ZmKSlcbiA1MTQ6XHRcdFx0cmV0dXJuIDA7XG4gNTE1Olx0XG4gNTE2Olx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbiA1MTc6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIDUxODpcdFx0XHRyZXR1cm4gMDtcbiA1MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NDIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IE9mZmxvYWRpbmcqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBmbG93IG9mZmxvYWRpbmcuIFdlJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIElQdjQsIGJ1dCBnaXZlbiB0aGUgY3VycmVudCBuZXR3b3JrIGxhbmRzY2FwZSwgaXQmIzM5O3MgYWJzb2x1dGVseSBjcnVjaWFsIHRvIGFsc28gZXhhbWluZSB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgZm9jdXMgbWlnaHQgaGF2ZSBiZWVuIG9uIElQdjQsIGdpdmVuIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9ucywgYnV0IHdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gaWdub3JlIElQdjYuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2hlY2sgaG93IGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBpcyBiZWhhdmluZy4gSXMgaXQgd29ya2luZyBhcyBleHBlY3RlZD8gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBwb3RlbnRpYWwgYnVncyBpbiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIG9yIGltcGxlbWVudGF0aW9uPyBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGltcG9ydGFudCBhbmQgdGhlcmVmb3JlIEkgc2hvdWxkIGNoZWNrIGl0LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBlbmQtdG8tZW5kIHBlcmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5LCBhcyBJUHY2IGlzIGJlY29taW5nIGluY3JlYXNpbmdseSBwcmV2YWxlbnQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgY29uc2lzdGVudCBhbmQgb3B0aW1pemVkIG5ldHdvcmtpbmcgZXhwZXJpZW5jZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODU6XHR9XG4xMDg2Olx0XG4xMDg3Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4xMDg4Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4xMDg5Olx0XHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbjEwOTA6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwOTE6XHR7XG4xMDkyOlx0XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xuMTA5MzpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbjEwOTQ6XHRcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xuMTA5NTpcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4xMDk2Olx0XG4xMDk3Olx0XHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuMTA5ODpcdFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbjEwOTk6XHRcbjExMDA6XHRcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4xMTAxOlx0XHRcdHJldHVybiAwO1xuMTEwMjpcdFxuMTEwMzpcdFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjExMDQ6XHRcdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuMTEwNTpcdFx0XHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcbjExMDY6XHRcbjExMDc6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4xMTA4Olx0XHRcdHJldHVybiAwO1xuMTEwOTpcdFxuMTExMDpcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbjExMTE6XHRcdHRob2ZmID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuMTExMjpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXA2aC1cdTAwM2VuZXh0aGRyLCBza2IsIHRob2ZmKSlcbjExMTM6XHRcdFx0cmV0dXJuIDA7XG4xMTE0Olx0XG4xMTE1Olx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbjExMTY6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuMTExNzpcdFx0XHRyZXR1cm4gMDtcbjExMTg6XHRcdH1cbjExMTk6XHRcbjExMjA6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgJiM0MzsgY3R4LVx1MDAzZWhkcnNpemUpKVxuMTEyMTpcdFx0XHRyZXR1cm4gLTE7XG4xMTIyOlx0XG4xMTIzOlx0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XG4xMTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIE5ldGZpbHRlci9Db25udHJhY2svRmxvd3RhYmxlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZT8gRm9yIHRoZSBOZXRmaWx0ZXIsIGNvbm50cmFjaywgYW5kIGZsb3d0YWJsZSBzdWJzeXN0ZW1zICh0aGUgY29yZSBuZXR3b3JraW5nIHN0dWZmKSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCDigJMgc29ja2V0cywgdHVuL3RhcCwgdmV0aCwgbmV0bGluayAobmZ0YWJsZXMvY29ubnRyYWNrKSBhcmUgYWxsIGVhc2lseSBleGVyY2lzZWQgYnkgc3l6a2FsbGVyLiBObyBwcm9ibGVtIHRoZXJlLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRoYXQgY2F0Y2ggbXkgYXR0ZW50aW9uLiBJbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgZGVhbHMgd2l0aCBhc3ltbWV0cmljIHBhdGhzIGFuZCBtaWQtc3RyZWFtIHBpY2t1cHMgd2hlbiB0aGUgU1lOIHJlcGx5IG5ldmVyIGV2ZW4gdG91Y2hlZCB0aGUgaG9zdCwgcGFydGljdWxhcmx5IHdoZW4gYHRjcF9sb29zZWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGVuLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2AgYWxsb3dzIGZvciBvZmZsb2FkaW5nIHVucmVwbGllZCBUQ1AgZmxvd3Mgd2hpbGUgbWFuaXB1bGF0aW5nIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBBbmQgZmluYWxseSwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKClgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgIHRvdWNoIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgLCB3aGljaCBpbnNwZWN0cyBhbmQgbW9kaWZpZXMgYE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTGAgd2hpbGUgY2FsbGluZyBgZmxvd19vZmZsb2FkX3JlZnJlc2goKWAuICBQbHVzLCB0aGVyZSYjMzk7cyBhIG5ldyBpbmxpbmUgaGVscGVyLCBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oYC4gQWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJlc3RpbmcsIGluIHBhcnRpY3VsYXIgaG93IHRoZXkgaGFuZGxlIFRDUCBjb25udHJhY2sgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGZsb3d0YWJsZSBvZmZsb2FkLgoKU28sIGluIG15IGV4cGVydCBvcGluaW9uLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGVhbGluZyB3aXRoIFRDUCBjb25udHJhY2sgYW5kIGZsb3d0YWJsZSBvZmZsb2FkaW5n4oCUYSBoaWdoLXZhbHVlIHRhcmdldC4KCk5vdywgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0YXJnZXQgc3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCB0byBjb21waWxlIGFuZCBhY3R1YWxseSBleGVjdXRlIHRoaXMgY29kZS4gIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AsIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KG5mX2Zsb3dfdGFibGV8bmZ0X2Zsb3dfb2ZmbG9hZHxuZl9jb25udHJhY2tfcHJvdG9fdGNwKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT01PW5mX2Nvbm50cmFjay15XHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo2Olx0XHQgICBuZl9jb25udHJhY2tfcHJvdG8ubyBuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5vIG5mX2Nvbm50cmFja19wcm90b190Y3AubyBuZl9jb25udHJhY2tfcHJvdG9fdWRwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNy1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXHRcdCYjNDM7PSBuZnRfY3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXHQmIzQzOz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVx0XHQmIzQzOz0gbmZ0X2xpbWl0Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXHQmIzQzOz0gbmZ0X2Z3ZF9uZXRkZXYub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NDpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ2Om5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICYjNDM7PSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ny1pZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSxtKVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDg6bmZfZmxvd190YWJsZS0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSAmIzQzOz0gbmZfZmxvd190YWJsZV9icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDktZWxzZSBpZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSx5KVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTA6bmZfZmxvd190YWJsZS0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUxLWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTUzOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFX0lORVQpICYjNDM7PSBuZl9mbG93X3RhYmxlX2luZXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ3CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGludmVzdGlnYXRpb24sIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmcgJmFtcDsgRmxvdyBPZmZsb2FkKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggc29tZSBLY29uZmlnIGh1bnRpbmcuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZvdW5kYXRpb24gZm9yIG5ldHdvcmsgY29ubmVjdGlvbiB0cmFja2luZyBpcyBlbmFibGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGRlZmluaXRpb25zIGZvciBgTkZfQ09OTlRSQUNLYC4gVGhhdCYjMzk7cyB0aGUgYmVkcm9jaywgcmlnaHQ/IFdpdGhvdXQgaXQsIHdlJiMzOTtyZSBub3QgZ29pbmcgYW55d2hlcmUuIFRoZW4sIHNpbmNlIHdlJiMzOTtyZSBwcm9iYWJseSB0YWxraW5nIGFib3V0IHNvbWUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIG5ld2VyIG5ldHdvcmtpbmcgZmVhdHVyZXMsIEkmIzM5O2xsIG1vdmUgb24gdG8gYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3RhdGVmdWwgZmlyZXdhbGwgY2FwYWJpbGl0aWVzIGFuZCBhbnkgb2ZmbG9hZGluZyB0ZWNobmlxdWVzLiBGaW5hbGx5LCBJJiMzOTtsbCBkZWZpbml0ZWx5IHdhbnQgdG8gdmVyaWZ5IGBORl9UQUJMRVNgIOKAkyB0aGF0JiMzOTtzIHRoZSBmcmFtZXdvcmsgZm9yIGRlZmluaW5nIHRoZSBydWxlcyBhbmQgcG9saWNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQgZnJhbWV3b3JrIGlzIHNldCBjb3JyZWN0bHksIHRvby4gSSYjMzk7bSBlc3NlbnRpYWxseSB0cmFjaW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZSwgbWFraW5nIHN1cmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgaW4gcGxhY2UgYW5kIGNvbmZpZ3VyZWQgYXMgSSYjMzk7ZCBleHBlY3QuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBzZXR0aW5ncyBpcyBrZXkgdG8gaW50ZXJwcmV0aW5nIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIGFsc28gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgaW5jb21wYXRpYmlsaXRpZXMuIEl0JiMzOTtzIGEgc3lzdGVtYXRpYyBwcm9jZXNzLCByZWFsbHksIGJ1dCBlc3NlbnRpYWwgZm9yIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKE5GX0NPTk5UUkFDS3xORl9GTE9XX1RBQkxFfE5GVF9GTE9XX09GRkxPQUR8TkZfVEFCTEVTKVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBrZXJuZWwgbW9kdWxlcywgYE5GVF9GTE9XX09GRkxPQURgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZfQ09OTlRSQUNLYCwgYXJlIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgZ28tdG8gc291cmNlIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZWFjaCBvZiB0aGVtLCBzeXN0ZW1hdGljYWxseSB3b3JraW5nIHRocm91Z2ggdGhlIG9wdGlvbnMgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZWlyIHB1cnBvc2UgYW5kIHBvc3NpYmxlIGludGVycGxheS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGFueSBjaGFuZ2VzIG9yIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0ZGVmYXVsdCBuXG4gNTAxOlx0XHRoZWxwXG4gNTAyOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgbWF0Y2hpbmcgb24gRENDUCBleHRlbnNpb24gaGVhZGVycy5cbiA1MDM6XHRcbiA1MDQ6XHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxuIDUwNTpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA1MDY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVwmIzM0O1xuIDUwNzpcdFx0aGVscFxuIDUwODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTA5Olx0XHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXG4gNTEwOlx0XG4gNTExOlx0Y29uZmlnIE5GVF9DT05OTElNSVRcbiA1MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuIDUxMzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA1MTQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gNTE1Olx0XHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxuIDUxNjpcdFx0aGVscFxuIDUxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtjb25ubGltaXRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTE4Olx0XHQgIHJhdGVsaW1pdCBydWxlIG1hdGNoaW5ncyBwZXIgY29ubmVjdGlvbnMuXG4gNTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTkZfRkxPV19UQUJMRSBhbmQgS2NvbmZpZyBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBORl9GTE9XX1RBQkxFYCBvcHRpb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYEtjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgYXJvdW5kIGxpbmUgNzEwLCBnaXZlIG9yIHRha2UsIGFzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQmIzM5O3Mgd2hlcmUgY29yZSBuZXR3b3JrIGZlYXR1cmVzIGFyZSBvZnRlbiBkZWZpbmVkLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBtYW5hZ2luZyBhbmQgYWNjZWxlcmF0aW5nIG5ldHdvcmsgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgd2hhdCBvdGhlciByZWxhdGVkIG9wdGlvbnMgYXJlIHByZXNlbnQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIElzIGl0IG1vZHVsYXI/IEJ1aWx0LWluPyBXaGF0IGJ1aWxkLXRpbWUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmbG93IHRhYmxlIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZCBhdCB0aGUgY29uZmlndXJhdGlvbiBzdGFnZSwgYXMgdGhpcyB3aWxsIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IgYW5kIGF2YWlsYWJpbGl0eSB3aXRoaW4gdGhlIHN5c3RlbSwgYXMgd2VsbCBhcyBhbnkgdHJvdWJsZXNob290aW5nIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XG4gNzAxOlx0ZW5kaWYgIyBORl9UQUJMRVNcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG4gNzA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4gNzA1Olx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MDY6XHRcdGhlbHBcbiA3MDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cbiA3MDg6XHRcbiA3MDk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MTA6XHRcbiA3MTE6XHRjb25maWcgTkZfRkxPV19UQUJMRVxuIDcxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4gNzEzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXG4gNzE0Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuIDcxNTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiA3MTY6XHRcdGhlbHBcbiA3MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxuIDcxODpcdFxuIDcxOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcyMDpcdFxuIDcyMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xuIDcyMjpcdFx0Ym9vbCBcJiMzNDtTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1wmIzM0O1xuIDcyMzpcdFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXG4gNzI0Olx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiA3MjU6XHRcdGhlbHBcbiA3MjY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmb3IgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBzdGF0aXN0aWNzXG4gNzI3Olx0XHQgIHRvIGJlIHNob3duIGluIHByb2NmcyB1bmRlciBuZXQvbmV0ZmlsdGVyL25mX2Zsb3d0YWJsZS5cbiA3Mjg6XHRcbiA3Mjk6XHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBhcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGVzc2VudGlhbCBvbmVzIGFyZSBzZXQ6IGBORl9DT05OVFJBQ0tgLCBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GVF9GTE9XX09GRkxPQURgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgc3ltYm9scyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkgaGVyZSBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBJIHNlZToKCiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgOiBUaGlzIG9uZSYjMzk7cyBpbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBtaWQtc3RyZWFtIHBhY2tldCBwaWNrdXAgYW5kIGRlYWwgd2l0aCBhc3ltbWV0cmljIHBhdGggc2l0dWF0aW9ucy4KKiAgIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgOiBJbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpcyB0aGUgY29yZSBldmFsdWF0aW9uIGZ1bmN0aW9uLiBTZWVtcyBpdCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgb2ZmbG9hZGluZyB1bnJlcGxpZWQgVENQIGZsb3dzIGFuZCBjaGVja2luZyB0aGUgYmlkaXJlY3Rpb25hbCBmbGFnLgoqICAgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgOiBBIG5ldyBzdGF0aWMgZnVuY3Rpb24gaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIFRoaXMgaXMgaW50cmlndWluZzsgaXQgcHJvYmFibHkgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgOiBBbm90aGVyIG9uZSBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kIGl0IGNhbGxzIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkYC4KKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYDogQWxzbyBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kLCBhZ2FpbiwgaXQgY2FsbHMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgLiBTbyBpdCBsb29rcyBsaWtlIHRoZXNlIGZvcndhcmQgZnVuY3Rpb25zIG5lZWQgdGhpcyBuZXcgcmVwbHkgaGFuZGxpbmcgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBmbG93cy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IHN0YXRpYywgb3IgYXJlIHRoZXkgZXhwb3J0ZWQ/IEFyZSB0aGV5IGluIC5jIGZpbGVzPyBJIGhhdmUgdG8ga25vdyB3aG8gY2FuIGNhbGwgd2hvLgoKKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGA6IEl0JiMzOTtzIGEgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgZ2xvYmFsbHkgdmlzaWJsZS4gR29vZCB0byBrbm93LgoqICAgYG5mdF9mbG93X29mZmxvYWRfZXZhbGA6IFRoaXMgb25lJiMzOTtzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSB3aXRoaW4gYG5mdF9mbG93X29mZmxvYWQuY2AuCiogICBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZGA6IFRoaXMgb25lJiMzOTtzIGFsc28gc3RhdGljLCByZXNpZGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuCiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgOiBUaGlzIG9uZSBpcyBzdGF0aWMgdG9vLCBhbmQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuCiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGA6IGFuZCB0aGlzIG9uZSB0b28sIGFsc28gc3RhdGljIGFuZCBpbiBgbmZfZmxvd190YWJsZV9pcC5jYC4KCk9rYXksIGZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgdGhlc2UsIGFuZCB3aGljaCBvdGhlciBmdW5jdGlvbnMgYXJlIHRoZXkgY2FsbGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyAqcmVhbGx5KiBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkLipmb3J3YXJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDcyPXN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00ODctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0ODg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTAyMT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVwbGVfaXB2NihzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwODYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDg3OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA4OC1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMjE5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjM4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIzOTpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjQwLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzEKCQkJCQkJCW91dHB1dDogMjQ4CgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvbnNpZGVyZWQgYWxsIHJlbGV2YW50IGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWRkIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCB0byB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gcmV2aWV3LCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTm93LCB3aGljaCBGb2N1c1N5bWJvbHMgd2lsbCBiZSB0aGUgbW9zdCBlZmZlY3RpdmUgZm9yIGZ1enppbmc/IEFmdGVyIHJldmlld2luZywgaXQmIzM5O3MgY2xlYXIgdGhlIGJlc3QgY2hvaWNlcyBhcmU6CiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgCiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYAoqICAgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgCiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgCiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAKKiAgIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AKKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYAoKVGhlc2UgYXJlIGFsbCBzcGVjaWZpYyB0byB0aGUgbmV0ZmlsdGVyIGFuZCBmbG93dGFibGUgY29kZSBwYXRocyB0aGF0IHdlcmUgYWN0dWFsbHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLCBtYWtpbmcgdGhlbSBpZGVhbCB0YXJnZXRzLiBUaGV5IGFyZW4mIzM5O3QgZ2VuZXJpYyB1dGlsaXRpZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS4gVGhlIHJlYXNvbmluZyBpczogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBhc3ltbWV0cmljIHJvdXRpbmcgYW5kIHVucmVwbGllZCBtaWQtc3RyZWFtIFRDUCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb25udHJhY2sgYW5kIGhhcmR3YXJlIGZsb3d0YWJsZSBvZmZsb2FkIG1lY2hhbmlzbXMuIEl0IHNwZWNpZmljYWxseSBhbHRlcnMgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHRvIGhhbmRsZSBtaWQtc3RyZWFtIGNvbm5lY3Rpb25zIHdoZXJlIFNZTiByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdC4gQWxzbywgYG5mdF9mbG93X29mZmxvYWRfZXZhbCgpYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKClgLCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoKWAgYXJlIHVwZGF0ZWQgdXNpbmcgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoKWAgdG8gc3VwcG9ydCB0aGUgb2ZmbG9hZGluZyBvZiB1bmlkaXJlY3Rpb25hbCBUQ1AgZmxvd3MgdW50aWwgdGhlIHJlcGx5IGlzIHNlZW4uIFRoaXMgcmVwcmVzZW50cyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlIHZpYSBuZXR3b3JrIHNvY2tldHMgYW5kIG5ldGZpbHRlci9uZnRhYmxlcyBydWxlcy4KCkkmIzM5O2xsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBFbmFibGVDb25maWdzOiBgWyYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssICYjMzQ7TkZfVEFCTEVTJiMzNDssICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LCAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0O11gLgoKVGhlIGZpbmFsIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBbJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LCAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LCAmIzM0O25mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQmIzM0OywgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LCAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0O11gCgpPa2F5LCB3aXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJJiMzOTttIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19vZmZsb2FkX2V2YWwmIzM0OywKICAgICYjMzQ7bmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19vZmZsb2FkX2V2YWwmIzM0OywKICAgICYjMzQ7bmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGZpbHRlciBjb25udHJhY2sgYW5kIG5mdGFibGVzIGZsb3d0YWJsZSBvZmZsb2FkIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGx5IHRyYWZmaWMgYnlwYXNzZXMgdGhlIHJvdXRlcikuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxuMy4gSXQgdXBkYXRlcyBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mdF9mbG93X29mZmxvYWQuY2AgdG8gc3VwcG9ydCB1bmlkaXJlY3Rpb25hbGx5IG9mZmxvYWRlZCBmbG93cyB1bnRpbCBiaWRpcmVjdGlvbmFsIHRyYWZmaWMgaXMgY29uZmlybWVkLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVx1MDAzZXN0YXR1c2AsIGBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDhlZmU2OTIyNzFjMTYxYjNlYTFlZTliZjYzMTdiMDk0MWNmMDRmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjI4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAppbmRleCBmZGUyNDI3Y2ViOGZjLi5hNGUzZDllZDdhNjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaApAQCAtMjA4LDYgJiM0MzsyMDgsMTMgQEAgc3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogCXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwogCSAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cyk7CiB9CiYjNDM7CiYjNDM7LyogQSBmbG93IHBpY2tlZCB1cCB3aXRob3V0IGl0cyByZXBseSBjYW5ub3QgYmVjb21lIGFzc3VyZWQuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKTsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xMTczLDYgJiM0MzsxMTczLDI1IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCQl9CiAKJiM0MzsJCS8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnMKJiM0MzsJCSAqIHdoZW4gdGhlIHJlcGx5IGRpcmVjdGlvbiB0YWtlcyBhbm90aGVyIHBhdGgsIGFuZCB0aGUgY2xpZW50CiYjNDM7CQkgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvbgomIzQzOwkJICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXQKJiM0MzsJCSAqIGNyZWF0ZXMgYSBuZXcgb25lIHRoYXQgc2VlZHMgdGhlIHVuc2VlbiBkaXJlY3Rpb24gZnJvbSB0aGUKJiM0MzsJCSAqIHBhY2tldCBpdHNlbGYuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0bi0mZ3Q7dGNwX2xvb3NlICZhbXA7JmFtcDsgIW5mY3Rfc3lucHJveHkoY3QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW5kZXggPT0gVENQX0FDS19TRVQgJmFtcDsmYW1wOyBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmYW1wO2N0LSZndDtzdGF0dXMpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBudG9obCh0aC0mZ3Q7c2VxKSA9PSBjdC0mZ3Q7cHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJCQlpZiAobmZfY3Rfa2lsbChjdCkpCiYjNDM7CQkJCXJldHVybiAtTkZfUkVQRUFUOwomIzQzOwkJCXJldHVybiBORl9EUk9QOwomIzQzOwkJfQomIzQzOwogCQkvKiBJbnZhbGlkIHBhY2tldCAqLwogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKIAkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTQ2NSw2ICYjNDM7NDY1LDI2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKIH0KIAomIzQzOy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlCiYjNDM7ICogY2xhc3NpYyBwYXRoIHNvIHRoYXQgY29ubnRyYWNrIHNlZXMgaXQuIE9uY2UgY29ubnRyYWNrIGhhcywgdGhlIGZsb3cgaXMKJiM0MzsgKiBvZmZsb2FkZWQgaW4gYm90aCBkaXJlY3Rpb25zLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQkJICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcikKJiM0Mzt7CiYjNDM7CWlmIChkaXIgIT0gRkxPV19PRkZMT0FEX0RJUl9SRVBMWSB8fAomIzQzOwkgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtmbG93LSZndDtjdC0mZ3Q7c3RhdHVzKSkgewomIzQzOwkJc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAJCQkJICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLApAQCAtNDc4LDYgJiM0Mzs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAomIzQzOwlpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJbXR1ID0gZmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0OwogCWlmIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSkKIAkJbXR1IC09IHNpemVvZigqaXBoKTsKQEAgLTEwNzQsNiAmIzQzOzEwOTcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlkaXIgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpcjsKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwogCiYjNDM7CWlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAltdHUgPSBmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LSZndDtvZmZzZXQ7CiAJaWYgKGZsb3ctJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKQogCQltdHUgLT0gc2l6ZW9mKCppcDZoKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKaW5kZXggMzJiNDI4MTAzOGRkMy4uMGI2YmU4YWMzZDI0ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJCXRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LSZndDtza2IsIG5mdF90aG9mZihwa3QpLAogCQkJCQkgIHNpemVvZihfdGNwaCksICZhbXA7X3RjcGgpOwogCQlpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC0mZ3Q7ZmluIHx8IHRjcGgtJmd0O3JzdCB8fAotCQkJICAgICAhbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkpKQomIzQzOwkJCSAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CkBAIC0xMTcsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJaWYgKHRjcGgpCiAJCWZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpOwogCi0JX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKQomIzQzOwkJX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiAJcmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycl9mbG93X2FkZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCA0NDljNTE4YmQ5NDdkLi41MTZhNTQ0MjY2ZjFhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCkBAIC01MTYsNiAmIzQzOzUxNiw3OSBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MzsjIEFzeW1tZXRyaWMgcGF0aCB0ZXN0OgomIzQzOyMgbnMyIGFuc3dlcnMgb3ZlciBhIGRpcmVjdCBsaW5rLCBzbyBuc3IxIHNlZXMgdGhlIG9yaWdpbmFsIGRpcmVjdGlvbiBvbmx5LgomIzQzOyMgU3VjaCBhIGNvbm5lY3Rpb24gbmV2ZXIgYmVjb21lcyBhc3N1cmVkLCBidXQgdGhlIGZsb3d0YWJsZSBpcyBleHBlY3RlZCB0bwomIzQzOyMgdGFrZSBvdmVyIHRoZSBkaXJlY3Rpb24gdGhhdCBuc3IxIGRvZXMgc2VlLgomIzQzO2NoZWNrX29yaWdfb2ZmbG9hZGVkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHdoYXQ9JDEKJiM0MzsKJiM0MzsJbG9jYWwgb3JpZwomIzQzOwlvcmlnPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXIgaW5ldCBmaWx0ZXIgcm91dGVkX29yaWcgfCBncmVwIHBhY2tldHMpCiYjNDM7CWxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9CiYjNDM7CiYjNDM7CWxvY2FsIGZzCiYjNDM7CWZzPSQoZHUgLXNiICYjMzQ7JG5zaW4mIzM0OykKJiM0MzsJbG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSkKJiM0MzsKJiM0MzsJIyB0aGUgZmxvd3RhYmxlIHRha2VzIG92ZXIgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNrZXRzLCBzbyB0aGUgZm9yd2FyZAomIzQzOwkjIGhvb2sgbXVzdCBzZWUgYSBzbWFsbCBmcmFjdGlvbiBvZiB0aGUgdHJhbnNmZXJyZWQgZmlsZS4KJiM0MzsJaWYgWyAmIzM0OyRvcmlnX2NudCYjMzQ7IC1ndCAmIzM0OyRtYXhfb3JpZyYjMzQ7IF07dGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICR3aGF0OiBvcmlnaW5hbCBjb3VudGVyICRvcmlnX2NudCBleGNlZWRzIGV4cGVjdGVkIHZhbHVlICRtYXhfb3JpZyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJZWNobyAmIzM0O1BBU1M6ICR3aGF0JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9hc3ltbWV0cmljX3BhdGgoKQomIzQzO3sKJiM0MzsJaXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zICYjMzQ7JG5zMSYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyAmIzM0OyRuczImIzM0OwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OS8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OC8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWQKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyBhZGRyIGFkZCBkZWFkOjk6Ojk4LzY0IGRldiBldGgxIG5vZGFkCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBzZXQgZXRoMSB1cAomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGxpbmsgc2V0IGV0aDEgdXAKJiM0MzsKJiM0MzsJIyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay4KJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgMTAuMC4xLjk5IHZpYSAxMC4wLjkuOTkgZGV2IGV0aDEKJiM0MzsJaXAgLTYgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMSYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMiYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW4KJiM0MzsJCWNoZWNrX29yaWdfb2ZmbG9hZGVkICYjMzQ7ZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwlmaQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNiAmIzM0O1tkZWFkOjI6Ojk5XSYjMzQ7IDEyMzQ1OyB0aGVuCiYjNDM7CQljaGVja19vcmlnX29mZmxvYWRlZCAmIzM0O0lQdjYgZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMxJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMyJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBkZWwgZXRoMQomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aAomIzQzOwogIyBkZWxldGUgZGVmYXVsdCByb3V0ZSwgaS5lLiBuczIgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZAogIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS4KICMgZXhwZWN0IG5zMSBoYXMgbnNyMSBhZGRyZXNzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhcmVhcyB0aGF0IEtNU0FOIG5lZWRzIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgcmFjZXMuCgpGaXJzdCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZGAsIGFkZGVkIGluIGBuZl9jb25udHJhY2tfbDRwcm90by5oYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjaGVja2luZyBmb3IgVENQIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGVzdGFibGlzaGVkIGJ1dCBoYXZlbiYjMzk7dCByZWNlaXZlZCBhIHJlcGx5LiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgc28gSSYjMzk7bGwga2VlcCBhbiBleWUgb24gaG93IHRoaXMgaXMgdXNlZC4gVGhlIGtleSBwYXJ0IGlzIHRoZSBzdGF0ZSBjaGVjayBhbmQgdGhlIGBJUFNfU0VFTl9SRVBMWV9CSVRgLgoKVGhlbiwgSSYjMzk7bSBub3RpbmcgY2hhbmdlcyBpbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYC4gVGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgd2l0aGluIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCB0aGF0IGludm9sdmVzIGB0Y3BfbG9vc2VgLCBgbmZjdF9zeW5wcm94eWAsIGFuZCBzZXF1ZW5jZSBudW1iZXIgY29tcGFyaXNvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3Mga2lsbGluZyBjb25uZWN0aW9ucyBiYXNlZCBvbiBhIFNZTi1TRU5UIHN0YXRlIGFuZCBzb21lIFRDUCBzZXF1ZW5jZSBudW1iZXIgY3JpdGVyaWEgaWYgbm8gcmVwbHkgaXMgc2Vlbi4gVGhpcyBpcyBhIGJpdCBjb21wbGV4LCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBwb3NzaWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGtpbGwgb3BlcmF0aW9uLgoKTW92aW5nIG9udG8gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIEkgc2VlIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIGFuZCBjYWxscyB0byBpdCBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoKWAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBmbG93cyBhbmQgb2ZmbG9hZGluZywgYW5kIGl0JiMzOTtzIGNvbmRpdGlvbmFsIG9uIHRoZSBgRkxPV19PRkZMT0FEX0RJUl9SRVBMWWAgYW5kIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBJUFNfQVNTVVJFRF9CSVRgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhIGJpZGlyZWN0aW9uYWwgZmxvdy4gSSBtdXN0IGNvbmZpcm0gdGhhdCBhbGwgZmxhZyBtYW5pcHVsYXRpb25zIGFuZCBtZW1vcnkgYWNjZXNzZXMgYXJlIHN5bmNocm9uaXplZCBhbmQgc2FmZS4KCkZpbmFsbHksIGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKClgIGhhcyBuZXcgbG9naWMgdGhhdCBhbGxvd3MgdW5yZXBsaWVkIFRDUCBjb25uZWN0aW9ucyBhbmQgY29uZGl0aW9uYWxseSBzZXRzIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBUaGUgY29uZGl0aW9uYWwgY2hlY2sgYXJvdW5kIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdClgIGlzIGNydWNpYWwuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzdWJ0bGUgc3luY2hyb25pemF0aW9uIG51YW5jZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4gSSB3aWxsIGFsc28gaGF2ZSBhIGNsb3NlIGxvb2sgYXQgdGhlIHVzYWdlIG9mIGBfX3NldF9iaXRgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIGNvcnJlY3RseSBoZXJlLgoKSSYjMzk7bSBhbHNvIHNlZWluZyBhIHNlbGZ0ZXN0IGluY2x1ZGVkLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCBkb2VzbiYjMzk7dCByZXBsYWNlIGEgZGV0YWlsZWQgbWFudWFsIGFuYWx5c2lzIG9mIHRoZSBjb2RlLiBJIHdpbGwgcmV2aWV3IGl0IGxhdGVyLgoKVG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgKG9yIG15IHByZWZlcnJlZCB0b29sKSB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBtb3JlIGRlZXBseS4gSSBtaWdodCBhbHNvIGByZWFkLWZpbGVgIHRvIG1hbnVhbGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMuIE15IG1haW4gY29uY2VybiBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbXMsIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIGNvZGUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSB0aG9yb3VnaCBLTVNBTiByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDcyPXN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00ODctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0ODg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gbmZ0X2Zsb3dfb2ZmbG9hZC5jKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG5mdF9mbG93X29mZmxvYWQuY2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGZsb3cgb2ZmbG9hZCBsb2dpYywgc28gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZXZhbHVhdGluZyBydWxlcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBmb3IgcGFja2V0IG9mZmxvYWRpbmcuIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgaXQgY2hlY2tzIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgZmxvdyBydWxlcy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhpcyBzZWN0aW9uPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCBhdCB0aGlzIHBvaW50LCBsaWtlIHRoZSBmbG93IHRhYmxlIGVudHJpZXMgb3IgdGhlIHJ1bGUgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZTogaXMgaXQgYSBzaW1wbGUgbG9va3VwIG9yIG1vcmUgY29tcGxleCBsb2dpYyBpbnZvbHZlZD8gQXJlIHdlIGVmZmljaWVudGx5IHV0aWxpemluZyBhbnkgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZlYXR1cmVzIGF2YWlsYWJsZSBpbiB0aGUgbmV0d29yayBjYXJkLCBvciBkb2VzIGl0IGFwcGVhciB3ZSBhcmUgc29mdHdhcmUtYm91bmNpbmcgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB0aGUgTklDPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhpcyBldmFsdWF0aW9uIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHRcdGdvdG8gb3V0O1xuICA2NjpcdFxuICA2NzpcdFx0Y3QgPSBuZl9jdF9nZXQocGt0LVx1MDAzZXNrYiwgXHUwMDI2Y3RpbmZvKTtcbiAgNjg6XHRcdGlmICghY3QpXG4gIDY5Olx0XHRcdGdvdG8gb3V0O1xuICA3MDpcdFxuICA3MTpcdFx0c3dpdGNoIChjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pIHtcbiAgNzI6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4gIDczOlx0XHRcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXG4gIDc0Olx0XHRcdFx0XHRcdCAgc2l6ZW9mKF90Y3BoKSwgXHUwMDI2X3RjcGgpO1xuICA3NTpcdFx0XHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cdTAwM2VmaW4gfHwgdGNwaC1cdTAwM2Vyc3QgfHxcbiAgNzY6XHRcdFx0XHQgICAgICghbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkgXHUwMDI2XHUwMDI2XG4gIDc3Olx0XHRcdFx0ICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKVxuICA3ODpcdFx0XHRcdGdvdG8gb3V0O1xuICA3OTpcdFx0XHRicmVhaztcbiAgODA6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4gIDgxOlx0XHRcdGJyZWFrO1xuICA4MjpcdCNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fR1JFXG4gIDgzOlx0XHRjYXNlIElQUFJPVE9fR1JFOiB7XG4gIDg0Olx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlO1xuICA4NTpcdFxuICA4NjpcdFx0XHRpZiAoY3QtXHUwMDNlc3RhdHVzIFx1MDAyNiBJUFNfTkFUX01BU0spXG4gIDg3Olx0XHRcdFx0Z290byBvdXQ7XG4gIDg4Olx0XHRcdHR1cGxlID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4gIDg5Olx0XHRcdC8qIE5vIHN1cHBvcnQgZm9yIEdSRSB2MSAqL1xuICA5MDpcdFx0XHRpZiAodHVwbGUtXHUwMDNlc3JjLnUuZ3JlLmtleSB8fCB0dXBsZS1cdTAwM2Vkc3QudS5ncmUua2V5KVxuICA5MTpcdFx0XHRcdGdvdG8gb3V0O1xuICA5MjpcdFx0XHRicmVhaztcbiAgOTM6XHRcdH1cbiAgOTQ6XHQjZW5kaWZcbiAgOTU6XHRcdGRlZmF1bHQ6XG4gIDk2Olx0XHRcdGdvdG8gb3V0O1xuICA5NzpcdFx0fVxuICA5ODpcdFxuICA5OTpcdFx0aWYgKG5mX2N0X2V4dF9leGlzdChjdCwgTkZfQ1RfRVhUX0hFTFBFUikgfHxcbiAxMDA6XHRcdCAgICBjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IChJUFNfU0VRX0FESlVTVCB8IElQU19OQVRfQ0xBU0gpKVxuIDEwMTpcdFx0XHRnb3RvIG91dDtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSlcbiAxMDQ6XHRcdFx0Z290byBvdXQ7XG4gMTA1Olx0XG4gMTA2Olx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChJUFNfT0ZGTE9BRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykpXG4gMTA3Olx0XHRcdGdvdG8gb3V0O1xuIDEwODpcdFxuIDEwOTpcdFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIDExMDpcdFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXHUwMDNlZmxvd3RhYmxlKSBcdTAwM2MgMClcbiAxMTE6XHRcdFx0Z290byBlcnJfZmxvd19yb3V0ZTtcbiAxMTI6XHRcbiAxMTM6XHRcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xuIDExNDpcdFx0aWYgKCFmbG93KVxuIDExNTpcdFx0XHRnb3RvIGVycl9mbG93X2FsbG9jO1xuIDExNjpcdFxuIDExNzpcdFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuIDExODpcdFx0aWYgKHRjcGgpXG4gMTE5Olx0XHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKCF0Y3BoIHx8ICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpXG4gMTIyOlx0XHRcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIDEyMzpcdFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIDEyNDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxMjU6XHRcdFx0Z290byBlcnJfZmxvd19hZGQ7XG4gMTI2Olx0XG4gMTI3Olx0XHRyZXR1cm47XG4gMTI4Olx0XG4gMTI5Olx0ZXJyX2Zsb3dfYWRkOlxuIDEzMDpcdFx0Zmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7XG4gMTMxOlx0ZXJyX2Zsb3dfYWxsb2M6XG4gMTMyOlx0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4gMTMzOlx0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xuIDEzNDpcdGVycl9mbG93X3JvdXRlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTEzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQgb2YgY29kZSwgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQqKgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZnVuY3Rpb25pbmcsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCBhcm91bmQgbGluZSAxMTczLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAgZnVuY3Rpb24gbGl2ZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiBob3cgVENQIHBhY2tldHMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgZGlzc2VjdHMgdGhlIFRDUCBoZWFkZXIsIGFuYWx5emVzIHRoZSBmbGFncywgYW5kIGZpZ3VyZXMgb3V0IHRoZSBjb25uZWN0aW9uJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoZXJlIOKAkyBob3cgaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgcGFja2V0IGlzIHBhcnQgb2YgYW4gZXN0YWJsaXNoZWQgZmxvdywgYSBuZXcgY29ubmVjdGlvbiBhdHRlbXB0LCBhIEZJTiwgb3IgYSBSU1QuIEl0JiMzOTtsbCBiZSBlc3NlbnRpYWwgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBrZWVwaW5nIHRyYWNrIG9mIHNlcXVlbmNlIG51bWJlcnMgYW5kIGFja25vd2xlZGdlbWVudHMsIHdoaWNoIGlzIGhvdyBUQ1AgZW5zdXJlcyByZWxpYWJsZSBkYXRhIHRyYW5zbWlzc2lvbiBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjZcbjExNTE6XHRcdFx0ICAgIGRpciA9PSBJUF9DVF9ESVJfUkVQTFkpXG4xMTUyOlx0XHRcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfYWNrID0gbnRvaGwodGgtXHUwMDNlYWNrX3NlcSk7XG4xMTUzOlx0XG4xMTU0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuMTE1NTpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuMTE1NjpcdFx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1wmIzM0OyxcbjExNTc6XHRcdFx0XHRcdFx0ICBpbmRleCwgZGlyLFxuMTE1ODpcdFx0XHRcdFx0XHQgIHRjcF9jb25udHJhY2tfbmFtZXNbb2xkX3N0YXRlXSk7XG4xMTU5Olx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4xMTYwOlx0XHRjYXNlIFRDUF9DT05OVFJBQ0tfTUFYOlxuMTE2MTpcdFx0XHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcbjExNjI6XHRcdFx0ICogdGhlIFNZTi9BQ0sgZnJvbSB0aGUgc2VydmVyIGlzIGxvc3QsIHRoZSBjbGllbnQgbWF5IHRyYW5zbWl0XG4xMTYzOlx0XHRcdCAqIGEga2VlcC1hbGl2ZSBwYWNrZXQgd2hpbGUgaW4gU1lOX1NFTlQgc3RhdGUuIFRoaXMgbmVlZHMgdG9cbjExNjQ6XHRcdFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cbjExNjU6XHRcdFx0ICogZ2VuZXJhdGUgYSBuZXcgU1lOIHdpdGggdGhlIGNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyLlxuMTE2NjpcdFx0XHQgKi9cbjExNjc6XHRcdFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNiBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExNjg6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE2OTpcdFx0XHQgICAgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbjExNzA6XHRcdFx0ICAgIGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cdTAwM2VzZXEpKSB7XG4xMTcxOlx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmZfY3RfdGNwOiBTWU4gcHJveHkgY2xpZW50IGtlZXAgYWxpdmVcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuMTE3MzpcdFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4xMTc0Olx0XHRcdH1cbjExNzU6XHRcbjExNzY6XHRcdFx0LyogVGhlIGFuc3dlciB0byB0aGUgU1lOIG5ldmVyIHBhc3NlZCB0aGUgaG9zdCwgYXMgaGFwcGVuc1xuMTE3NzpcdFx0XHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxuMTE3ODpcdFx0XHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxuMTE3OTpcdFx0XHQgKiBvdmVyIGFzIGEgbWlkLXN0cmVhbSBwaWNrdXA6IGRlbGV0ZSB0aGUgZW50cnkgc28gdGhlIHBhY2tldFxuMTE4MDpcdFx0XHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXG4xMTgxOlx0XHRcdCAqIHBhY2tldCBpdHNlbGYuXG4xMTgyOlx0XHRcdCAqL1xuMTE4MzpcdFx0XHRpZiAodG4tXHUwMDNldGNwX2xvb3NlIFx1MDAyNlx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXHUwMDI2XHUwMDI2XG4xMTg0Olx0XHRcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExODU6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE4NjpcdFx0XHQgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSBcdTAwMjZcdTAwMjZcbjExODc6XHRcdFx0ICAgIG50b2hsKHRoLVx1MDAzZXNlcSkgPT0gY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcbjExODg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExODk6XHRcbjExOTA6XHRcdFx0XHRpZiAobmZfY3Rfa2lsbChjdCkpXG4xMTkxOlx0XHRcdFx0XHRyZXR1cm4gLU5GX1JFUEVBVDtcbjExOTI6XHRcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjExOTM6XHRcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdFx0XHQvKiBJbnZhbGlkIHBhY2tldCAqL1xuMTE5NjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExOTc6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbjExOTg6XHRcdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4xMTk5Olx0XHRcdFx0XHRcdCAgaW5kZXgsIGRpcixcbjEyMDA6XHRcdFx0XHRcdFx0ICB0Y3BfY29ubnRyYWNrX25hbWVzW29sZF9zdGF0ZV0pO1xuMTIwMTpcdFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbjEyMDI6XHRcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XG4xMjAzOlx0XHRcdC8qIFJGQzU5NjEgY29tcGxpYW5jZSBjYXVzZSBzdGFjayB0byBzZW5kIFwmIzM0O2NoYWxsZW5nZS1BQ0tcJiMzNDtcbjEyMDQ6XHRcdFx0ICogZS5nLiBpbiByZXNwb25zZSB0byBzcHVyaW91cyBTWU5zLiAgQ29ubnRyYWNrIE1VU1RcbjEyMDU6XHRcdFx0ICogbm90IGJlbGlldmUgdGhpcyBBQ0sgaXMgYWNraW5nIGxhc3QgRklOLlxuMTIwNjpcdFx0XHQgKi9cbjEyMDc6XHRcdFx0aWYgKG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0xBU1RfQUNLIFx1MDAyNlx1MDAyNlxuMTIwODpcdFx0XHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXHUwMDI2XHUwMDI2XG4xMjA5Olx0XHRcdCAgICBjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgT2ZmbG9hZCBMb2dpYyoqCgpSaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHRoZSBkZWNpc2lvbi1tYWtpbmcgbG9naWMgZm9yIGFjdHVhbGx5IG9mZmxvYWRpbmcgcGFja2V0cyBpcyBsb2NhdGVkLCBvciBzaG91bGQgYmUgbG9jYXRlZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgcGFja2V0IGZvcndhcmRpbmcgcHJvY2VzcyB3aGVuIHRoZSBmbG93IG9mZmxvYWQgZmVhdHVyZSBpcyBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgdXNlZCBmb3IgYSBwYWNrZXQgdG8gcXVhbGlmeSBmb3IgYmVpbmcgb2ZmbG9hZGVkLiBXaGF0IGFyZSB0aGUga2V5IGNoZWNrcyBhcm91bmQgY29ubmVjdGlvbiBzdGF0ZSwgY29ubnRyYWNrLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1ldGFkYXRhLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIGNhcGFiaWxpdGllcy4gQW55IGludGVyYWN0aW9uIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uLCBhbnkgc3VidGxlIGVkZ2UgY2FzZXMgaW4gdGhhdCBhcmVhLCBpcyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldOKAmXMgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHdoZXJlIHRoZSBsb2dpYyBtaWdodCBpbnRyb2R1Y2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdW5kZXIgaGlnaCBsb2FkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGRlc2lnbmVkOyBpZGVudGlmeSBwb3RlbnRpYWwgYnVncywgY29ybmVyIGNhc2VzLCBhbmQgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuIDQ2MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NjQ6XHRcbiA0NjU6XHRcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbiA0NjY6XHR9XG4gNDY3Olx0XG4gNDY4Olx0LyogVGhlIHJlcGx5IGRpcmVjdGlvbiBvZiBhIGZsb3cgb2ZmbG9hZGVkIGluIG9uZSBkaXJlY3Rpb24gb25seSBzdGF5cyBvbiB0aGVcbiA0Njk6XHQgKiBjbGFzc2ljIHBhdGggc28gdGhhdCBjb25udHJhY2sgc2VlcyBpdC4gT25jZSBjb25udHJhY2sgaGFzLCB0aGUgZmxvdyBpc1xuIDQ3MDpcdCAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gNDcxOlx0ICovXG4gNDcyOlx0c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiA0NzQ6XHRcdFx0XHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4gNDc1Olx0e1xuIDQ3NjpcdFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XG4gNDc3Olx0XHQgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiA0Nzg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0aWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Zmxvdy1cdTAwM2VjdC1cdTAwM2VzdGF0dXMpKSB7XG4gNDgxOlx0XHRcdHNldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiA0ODI6XHRcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XG4gNDgzOlx0XHR9XG4gNDg0Olx0XG4gNDg1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA0ODY6XHR9XG4gNDg3Olx0XG4gNDg4Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ4OTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0OTA6XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbiA0OTE6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDkyOlx0e1xuIDQ5MzpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbiA0OTQ6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDk1Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbiA0OTY6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiA0OTk6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gNTAwOlx0XG4gNTAxOlx0XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuIDUwMjpcdFx0XHRyZXR1cm4gMDtcbiA1MDM6XHRcbiA1MDQ6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4gNTA1Olx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiA1MDY6XHRcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4gNTA5Olx0XHRcdHJldHVybiAwO1xuIDUxMDpcdFxuIDUxMTpcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbiA1MTI6XHRcdHRob2ZmID0gKGlwaC1cdTAwM2VpaGwgKiA0KSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuIDUxMzpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXBoLVx1MDAzZXByb3RvY29sLCBza2IsIHRob2ZmKSlcbiA1MTQ6XHRcdFx0cmV0dXJuIDA7XG4gNTE1Olx0XG4gNTE2Olx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbiA1MTc6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIDUxODpcdFx0XHRyZXR1cm4gMDtcbiA1MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgSVB2NiBPZmZsb2FkIHdpdGggYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgKioKCk9rYXksIEkmIzM5O20gYWxyZWFkeSBkaWdnaW5nIGludG8gb2ZmbG9hZCBwZXJmb3JtYW5jZSBhbmQgdHVuYWJsZXMsIHNvIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBvYnZpb3VzLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGFsbCByZWxldmFudCBwYXJhbWV0ZXJzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgc3BlY2lmaWMgc2V0dGluZyBJIG5lZWQgdG8gbG9vayBhdCBpcyBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBJUHY2IHBhY2tldCBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG9mZmxvYWQgbWVjaGFuaXNtLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IGFyY2hpdGVjdHVyZSBhbmQgd29ya2xvYWRzLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGlzIHRvIHBlcmZvcm1hbmNlIG1ldHJpY3MgYW5kIGxvb2sgZm9yIGFueSByZWQgZmxhZ3Mgb3Igb3B0aW1pemF0aW9ucyBJIGNhbiBtYWtlIHJlbGF0ZWQgdG8gdGhpcyBrZXkgcGFyYW1ldGVyLiBJdOKAmXMgYSBzdGFuZGFyZCBzYW5pdHkgY2hlY2ssIGJ1dCBvZnRlbiB0aGVzZSBzdWJ0bGUgc2V0dGluZ3MgY2FuIG1ha2Ugb3IgYnJlYWsgdGhlIHBlcmZvcm1hbmNlIG9mIGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgZmxvdyBvZmZsb2FkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuMTA4ODpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuMTA4OTpcdFx0XHRcdFx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4xMDkwOlx0XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4xMDkxOlx0e1xuMTA5MjpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbjEwOTM6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4xMDk0Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbjEwOTU6XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuMTA5NjpcdFxuMTA5NzpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbjEwOTg6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4xMDk5Olx0XG4xMTAwOlx0XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuMTEwMTpcdFx0XHRyZXR1cm4gMDtcbjExMDI6XHRcbjExMDM6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4xMTA0Olx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbjExMDU6XHRcdFx0bXR1IC09IHNpemVvZigqaXA2aCk7XG4xMTA2Olx0XG4xMTA3Olx0XHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxuMTEwODpcdFx0XHRyZXR1cm4gMDtcbjExMDk6XHRcbjExMTA6XHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgY3R4LVx1MDAzZW9mZnNldCk7XG4xMTExOlx0XHR0aG9mZiA9IHNpemVvZigqaXA2aCkgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjExMTI6XHRcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXHUwMDNlbmV4dGhkciwgc2tiLCB0aG9mZikpXG4xMTEzOlx0XHRcdHJldHVybiAwO1xuMTExNDpcdFxuMTExNTpcdFx0aWYgKCFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZ0dXBsZWhhc2gtXHUwMDNldHVwbGUpKSB7XG4xMTE2Olx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbjExMTc6XHRcdFx0cmV0dXJuIDA7XG4xMTE4Olx0XHR9XG4xMTE5Olx0XG4xMTIwOlx0XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHRob2ZmICYjNDM7IGN0eC1cdTAwM2VoZHJzaXplKSlcbjExMjE6XHRcdFx0cmV0dXJuIC0xO1xuMTEyMjpcdFxuMTEyMzpcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgZmFsc2UpO1xuMTEyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5OQoJCQkJCQkJb3V0cHV0OiAyODIKCQkJCQkJCXRob3VnaHRzOiA1NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQ29uY2VybnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIEtNU0FOLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIGFzeW1tZXRyaWMgcm91dGluZywgYW5kIG1pZC1zdHJlYW0gcGlja3VwIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIFRDUCBjb25udHJhY2sgYW5kIGZsb3d0YWJsZSBvZmZsb2FkIG1lY2hhbmlzbXMuIFdlIGFyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBlc3RhYmxpc2hlZCBzdHJ1Y3R1cmVzIGFuZCBmbG93IGxvZ2ljLCBub3QgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGNhdXNlIGlzc3Vlcy4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHk6IFRoZSBwYXRjaCBpbXBsZW1lbnRzIGhlbHBlciBmdW5jdGlvbnMgYW5kIGxvZ2ljIHdpdGhpbiBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCwgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYC4gVGhlc2UgY29tcG9uZW50cyBhcmUgZGVzaWduZWQgdG8gbWFuYWdlIFRDUCBjb25uZWN0aW9uIHN0YXRlcyB3aGVuIHRoZXJlJiMzOTtzIGFzeW1tZXRyaWMgcm91dGluZywgd2hlcmUgdGhlIHJlcGx5IHBhdGggaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGtub3duLCBvciB3aGVyZSBvZmZsb2FkaW5nIHRvIHRoZSBmbG93dGFibGUgaXMgZGVsYXllZC4gU3BlY2lmaWNhbGx5IHRoZSBtaWQtc3RyZWFtIHBpY2t1cCBsb2dpYywgZGVhbGluZyB3aXRoIGEgU1lOIGZyb20gdGhlIGNsaWVudCwgbm8gcmVwbHkgc2VlbiB5ZXQsIGFuZCB0aGVuIGFuIEFDSyBtYXRjaGluZyBhIHByZXZpb3VzbHkgc2VlbiBzZXF1ZW5jZSBudW1iZXIuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIE5ldGZpbHRlci9jb25udHJhY2sgdGVycml0b3J5LgoKTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiAxKSBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ7IDIpIGFsbCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gZXhpc3RpbmcgYGZsb3dgIGFuZCBgY3RgIHN0cnVjdHVyZXMsIHN1Y2ggYXMgYGZsb3ctJmd0O2ZsYWdzYCwgYGN0LSZndDtzdGF0dXNgLCBgY3QtJmd0O3Byb3RvLnRjcC5zdGF0ZWA7IDMpIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM7IGFuZCA0KSBubyBidWZmZXIgcGFyc2luZyBvciBib3VuZHMgbW9kaWZpY2F0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnl0ZXMuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MuIEl04oCZcyBtb2RpZnlpbmcgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIHJvdXRpbmcgbG9naWMgd2l0aGluIHRoZSBlc3RhYmxpc2hlZCBOZXRmaWx0ZXIvY29ubnRyYWNrIGZyYW1ld29yay4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKHN0YXRlIHRyYW5zaXRpb25zLCBwYWNrZXQgZHJvcHMsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBudWxsIGRlcmVmcywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcsIEtBU0FOLCBvciBMT0NLREVQLiBJIGZvdW5kIG5vIGV2aWRlbmNlIG9mIEtNU0FOIGNvbmNlcm5zLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSBhc3Nlc3NtZW50IGFuZCBzZW5kIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBhZGRzIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZCgpYCB0byBjaGVjayBmb3IgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb25zIGxhY2tpbmcgcmVwbHkgcGFja2V0cy5cbjIuIEl0IGludHJvZHVjZXMgYSBtaWQtc3RyZWFtIHBpY2t1cCBtZWNoYW5pc20gaW4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHdoZW4gdGhlIGxvb3NlIFRDUCBtb2RlIGlzIGVuYWJsZWQgYW5kIGEgcG9zdC1TWU4gQUNLIGlzIHJlY2VpdmVkIHdpdGhvdXQgYSByZXBseS5cbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbGwgc3RhdGUgZmxhZ3MgYW5kIHN0cnVjdCBmaWVsZHMgYWNjZXNzZWQgKGBjdC1cdTAwM2VzdGF0dXNgLCBgY3QtXHUwMDNlcHJvdG8udGNwLnN0YXRlYCwgYGZsb3ctXHUwMDNlZmxhZ3NgKSBiZWxvbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgY29ubnRyYWNrIGFuZCBmbG93IHRhYmxlIHN0cnVjdHVyZXMuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyAoc3VjaCBhcyBzdGF0ZSBtYWNoaW5lIGJ1Z3Mgb3IgcmVmZXJlbmNlL2xpZmV0aW1lIGlzc3VlcykgYXJlIGRldGVjdGFibGUgdGhyb3VnaCBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGZpbHRlciBjb25udHJhY2sgYW5kIG5mdGFibGVzIGZsb3d0YWJsZSBvZmZsb2FkIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGx5IHRyYWZmaWMgYnlwYXNzZXMgdGhlIHJvdXRlcikuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxuMy4gSXQgdXBkYXRlcyBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mdF9mbG93X29mZmxvYWQuY2AgdG8gc3VwcG9ydCB1bmlkaXJlY3Rpb25hbGx5IG9mZmxvYWRlZCBmbG93cyB1bnRpbCBiaWRpcmVjdGlvbmFsIHRyYWZmaWMgaXMgY29uZmlybWVkLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVx1MDAzZXN0YXR1c2AsIGBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyODozNS4wODEzODM1MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODU5NzY5NjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIixcbiAgICBcIm5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgdG8gY2hlY2sgZm9yIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucyBsYWNraW5nIHJlcGx5IHBhY2tldHMuXFxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxcbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVxcdTAwM2VzdGF0dXNgLCBgY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZWAsIGBmbG93LVxcdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjg6MzUuMDgxMzkwMDU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY1MDY5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OGVmZTY5MjI3MWMxNjFiM2VhMWVlOWJmNjMxN2IwOTQxY2YwNGY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA5OjI4OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcXG5pbmRleCBmZGUyNDI3Y2ViOGZjLi5hNGUzZDllZDdhNjRjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcXG5AQCAtMjA4LDYgKzIwOCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuIFxcdHJldHVybiBjdC1cXHUwMDNlcHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICAgIHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpO1xcbiB9XFxuK1xcbisvKiBBIGZsb3cgcGlja2VkIHVwIHdpdGhvdXQgaXRzIHJlcGx5IGNhbm5vdCBiZWNvbWUgYXNzdXJlZC4gKi9cXG4rc3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG4re1xcbitcXHRyZXR1cm4gY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cyk7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX05GX0NUX1BST1RPX1NDVFBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xcbmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xcbkBAIC0xMTczLDYgKzExNzMsMjUgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogVGhlIGFuc3dlciB0byB0aGUgU1lOIG5ldmVyIHBhc3NlZCB0aGUgaG9zdCwgYXMgaGFwcGVuc1xcbitcXHRcXHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxcbitcXHRcXHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxcbitcXHRcXHQgKiBvdmVyIGFzIGEgbWlkLXN0cmVhbSBwaWNrdXA6IGRlbGV0ZSB0aGUgZW50cnkgc28gdGhlIHBhY2tldFxcbitcXHRcXHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXFxuK1xcdFxcdCAqIHBhY2tldCBpdHNlbGYuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodG4tXFx1MDAzZXRjcF9sb29zZSBcXHUwMDI2XFx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcXHUwMDI2XFx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG50b2hsKHRoLVxcdTAwM2VzZXEpID09IGN0LVxcdTAwM2Vwcm90by50Y3Auc2VlbltkaXJdLnRkX2VuZCkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0XFx0XFx0aWYgKG5mX2N0X2tpbGwoY3QpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLU5GX1JFUEVBVDtcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIEludmFsaWQgcGFja2V0ICovXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5pbmRleCBjOGMyOWE5YTE2ODQ0Li5mMmNkNWMyYzUzNjVjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5AQCAtNDY1LDYgKzQ2NSwyNiBAQCBuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFxcdTAwMjZ0dXBsZSk7XFxuIH1cXG4gXFxuKy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlXFxuKyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXFxuKyAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuK3tcXG4rXFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFxcdTAwMjZmbG93LVxcdTAwM2VjdC1cXHUwMDNlc3RhdHVzKSkge1xcbitcXHRcXHRzZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG5AQCAtNDc4LDYgKzQ5OCw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuIFxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuIFxcbitcXHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuIFxcdFxcdG10dSAtPSBzaXplb2YoKmlwaCk7XFxuQEAgLTEwNzQsNiArMTA5Nyw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gXFxuK1xcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0bXR1ID0gZmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuIFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4gXFx0XFx0bXR1IC09IHNpemVvZigqaXA2aCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi4wYjZiZThhYzNkMjRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG5AQCAtNzMsNyArNzMsOCBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cXHUwMDNlc2tiLCBuZnRfdGhvZmYocGt0KSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzaXplb2YoX3RjcGgpLCBcXHUwMDI2X3RjcGgpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cXHUwMDNlZmluIHx8IHRjcGgtXFx1MDAzZXJzdCB8fFxcbi1cXHRcXHRcXHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXFxuK1xcdFxcdFxcdCAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5AQCAtMTE3LDcgKzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdGlmICh0Y3BoKVxcbiBcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gXFxuLVxcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKVxcbitcXHRcXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9mbG93X2FkZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXFxuaW5kZXggNDQ5YzUxOGJkOTQ3ZC4uNTE2YTU0NDI2NmYxYSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG5AQCAtNTE2LDYgKzUxNiw3OSBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbisjIEFzeW1tZXRyaWMgcGF0aCB0ZXN0OlxcbisjIG5zMiBhbnN3ZXJzIG92ZXIgYSBkaXJlY3QgbGluaywgc28gbnNyMSBzZWVzIHRoZSBvcmlnaW5hbCBkaXJlY3Rpb24gb25seS5cXG4rIyBTdWNoIGEgY29ubmVjdGlvbiBuZXZlciBiZWNvbWVzIGFzc3VyZWQsIGJ1dCB0aGUgZmxvd3RhYmxlIGlzIGV4cGVjdGVkIHRvXFxuKyMgdGFrZSBvdmVyIHRoZSBkaXJlY3Rpb24gdGhhdCBuc3IxIGRvZXMgc2VlLlxcbitjaGVja19vcmlnX29mZmxvYWRlZCgpXFxuK3tcXG4rXFx0bG9jYWwgd2hhdD0kMVxcbitcXG4rXFx0bG9jYWwgb3JpZ1xcbitcXHRvcmlnPSQoaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCByZXNldCBjb3VudGVyIGluZXQgZmlsdGVyIHJvdXRlZF9vcmlnIHwgZ3JlcCBwYWNrZXRzKVxcbitcXHRsb2NhbCBvcmlnX2NudD0ke29yaWcjKmJ5dGVzfVxcbitcXG4rXFx0bG9jYWwgZnNcXG4rXFx0ZnM9JChkdSAtc2IgXFxcIiRuc2luXFxcIilcXG4rXFx0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcXG4rXFxuK1xcdCMgdGhlIGZsb3d0YWJsZSB0YWtlcyBvdmVyIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0cywgc28gdGhlIGZvcndhcmRcXG4rXFx0IyBob29rIG11c3Qgc2VlIGEgc21hbGwgZnJhY3Rpb24gb2YgdGhlIHRyYW5zZmVycmVkIGZpbGUuXFxuK1xcdGlmIFsgXFxcIiRvcmlnX2NudFxcXCIgLWd0IFxcXCIkbWF4X29yaWdcXFwiIF07dGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAkd2hhdDogb3JpZ2luYWwgY291bnRlciAkb3JpZ19jbnQgZXhjZWVkcyBleHBlY3RlZCB2YWx1ZSAkbWF4X29yaWdcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFxuK1xcdGVjaG8gXFxcIlBBU1M6ICR3aGF0XFxcIlxcbit9XFxuK1xcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXFxuK3tcXG4rXFx0aXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zIFxcXCIkbnMxXFxcIiB0eXBlIHZldGggcGVlciBuYW1lIGV0aDEgbmV0bnMgXFxcIiRuczJcXFwiXFxuK1xcdGlwIC1uZXQgXFxcIiRuczFcXFwiIGFkZHIgYWRkIDEwLjAuOS45OS8yNCBkZXYgZXRoMVxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGFkZCAxMC4wLjkuOTgvMjQgZGV2IGV0aDFcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMVxcXCIgYWRkciBhZGQgZGVhZDo5Ojo5OS82NCBkZXYgZXRoMSBub2RhZFxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGFkZCBkZWFkOjk6Ojk4LzY0IGRldiBldGgxIG5vZGFkXFxuK1xcdGlwIC1uZXQgXFxcIiRuczFcXFwiIGxpbmsgc2V0IGV0aDEgdXBcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMlxcXCIgbGluayBzZXQgZXRoMSB1cFxcbitcXG4rXFx0IyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay5cXG4rXFx0aXAgLW5ldCBcXFwiJG5zMlxcXCIgcm91dGUgYWRkIDEwLjAuMS45OSB2aWEgMTAuMC45Ljk5IGRldiBldGgxXFxuK1xcdGlwIC02IC1uZXQgXFxcIiRuczJcXFwiIHJvdXRlIGFkZCBkZWFkOjE6Ojk5IHZpYSBkZWFkOjk6Ojk5IGRldiBldGgxXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnMxXFxcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zMlxcXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFxcdTAwM2UvZGV2L251bGxcXG4rXFxuK1xcdGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXFxcIiRuczFcXFwiIFxcXCIkbnMyXFxcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXFxuK1xcdFxcdGNoZWNrX29yaWdfb2ZmbG9hZGVkIFxcXCJmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0IDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0aWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbitcXHRcXHRjaGVja19vcmlnX29mZmxvYWRlZCBcXFwiSVB2NiBmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBsaXN0IHJ1bGVzZXQgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRmaVxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zMVxcXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuczJcXFwiIHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxcbitcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMVxcXCIgbGluayBkZWwgZXRoMVxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFxcdTAwM2UvZGV2L251bGxcXG4rfVxcbitcXG4rdGVzdF9hc3ltbWV0cmljX3BhdGhcXG4rXFxuICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbid0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZFxcbiAjIHdpbGwgZGVwZW5kIG9uIG5zMSBiZWluZyBtYXNxdWVyYWRlZCBpbiBuc3IxLlxcbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjg6MzUuNzE4NjI5NjA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NDc4MDY1MTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIixcbiAgICBcIm5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGxpZXMgYnlwYXNzIHRoZSBob3N0KS4gSXQgdXBkYXRlcyBUQ1AgY29ubnRyYWNrIHBhY2tldCBwcm9jZXNzaW5nIChuZl9jb25udHJhY2tfdGNwX3BhY2tldCkgdG8gaGFuZGxlIG1pZC1zdHJlYW0gcGlja3VwcyBmb3IgdW5yZXBsaWVkIGNvbm5lY3Rpb25zLCBhbmQgdXBkYXRlcyBmbG93IHRhYmxlIGV2YWx1YXRpb24gYW5kIGZvcndhcmRpbmcgKG5mdF9mbG93X29mZmxvYWRfZXZhbCwgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQsIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQpIHRvIGRlZmVyIGJpZGlyZWN0aW9uYWwgb2ZmbG9hZGluZyB1bnRpbCBjb25udHJhY2sgY29uZmlybXMgcmVwbHkgcGFja2V0cy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBpcyB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZyB2aWEgbmV0d29yayBwYWNrZXQgY3JhZnRpbmcgYW5kIG5mdGFibGVzIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ4ZWZlNjkyMjcxYzE2MWIzZWExZWU5YmY2MzE3YjA5NDFjZjA0ZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOToyODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbmluZGV4IGZkZTI0MjdjZWI4ZmMuLmE0ZTNkOWVkN2E2NGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbkBAIC0yMDgsNiArMjA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPT0gVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gfVxuK1xuKy8qIEEgZmxvdyBwaWNrZWQgdXAgd2l0aG91dCBpdHMgcmVwbHkgY2Fubm90IGJlY29tZSBhc3N1cmVkLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4re1xuK1x0cmV0dXJuIGN0LVx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4rfVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMTczLDYgKzExNzMsMjUgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0XHR9XG4gXG4rXHRcdC8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnNcbitcdFx0ICogd2hlbiB0aGUgcmVwbHkgZGlyZWN0aW9uIHRha2VzIGFub3RoZXIgcGF0aCwgYW5kIHRoZSBjbGllbnRcbitcdFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cbitcdFx0ICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXRcbitcdFx0ICogY3JlYXRlcyBhIG5ldyBvbmUgdGhhdCBzZWVkcyB0aGUgdW5zZWVuIGRpcmVjdGlvbiBmcm9tIHRoZVxuK1x0XHQgKiBwYWNrZXQgaXRzZWxmLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRuLVx1MDAzZXRjcF9sb29zZSBcdTAwMjZcdTAwMjYgIW5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgb2xkX3N0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBudG9obCh0aC1cdTAwM2VzZXEpID09IGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXG4rXHRcdFx0aWYgKG5mX2N0X2tpbGwoY3QpKVxuK1x0XHRcdFx0cmV0dXJuIC1ORl9SRVBFQVQ7XG4rXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRcdH1cbitcbiBcdFx0LyogSW52YWxpZCBwYWNrZXQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTQ2NSw2ICs0NjUsMjYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuIH1cbiBcbisvKiBUaGUgcmVwbHkgZGlyZWN0aW9uIG9mIGEgZmxvdyBvZmZsb2FkZWQgaW4gb25lIGRpcmVjdGlvbiBvbmx5IHN0YXlzIG9uIHRoZVxuKyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXG4rICogb2ZmbG9hZGVkIGluIGJvdGggZGlyZWN0aW9ucy5cbisgKi9cbitzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbit7XG4rXHRpZiAoZGlyICE9IEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgfHxcbitcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZmbG93LVx1MDAzZWN0LVx1MDAzZXN0YXR1cykpIHtcbitcdFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuQEAgLTQ3OCw2ICs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwaCk7XG5AQCAtMTA3NCw2ICsxMDk3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDMuLjBiNmJlOGFjM2QyNGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbkBAIC03Myw3ICs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXG4gXHRcdFx0XHRcdCAgc2l6ZW9mKF90Y3BoKSwgXHUwMDI2X3RjcGgpO1xuIFx0XHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cdTAwM2VmaW4gfHwgdGNwaC1cdTAwM2Vyc3QgfHxcbi1cdFx0XHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXG4rXHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fVURQOlxuQEAgLTExNyw3ICsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuLVx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4rXHRpZiAoIXRjcGggfHwgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSlcbitcdFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9mbG93X2FkZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLjUxNmE1NDQyNjZmMWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTUxNiw2ICs1MTYsNzkgQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuKyMgQXN5bW1ldHJpYyBwYXRoIHRlc3Q6XG4rIyBuczIgYW5zd2VycyBvdmVyIGEgZGlyZWN0IGxpbmssIHNvIG5zcjEgc2VlcyB0aGUgb3JpZ2luYWwgZGlyZWN0aW9uIG9ubHkuXG4rIyBTdWNoIGEgY29ubmVjdGlvbiBuZXZlciBiZWNvbWVzIGFzc3VyZWQsIGJ1dCB0aGUgZmxvd3RhYmxlIGlzIGV4cGVjdGVkIHRvXG4rIyB0YWtlIG92ZXIgdGhlIGRpcmVjdGlvbiB0aGF0IG5zcjEgZG9lcyBzZWUuXG4rY2hlY2tfb3JpZ19vZmZsb2FkZWQoKVxuK3tcbitcdGxvY2FsIHdoYXQ9JDFcbitcbitcdGxvY2FsIG9yaWdcbitcdG9yaWc9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBpbmV0IGZpbHRlciByb3V0ZWRfb3JpZyB8IGdyZXAgcGFja2V0cylcbitcdGxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9XG4rXG4rXHRsb2NhbCBmc1xuK1x0ZnM9JChkdSAtc2IgXCIkbnNpblwiKVxuK1x0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcbitcbitcdCMgdGhlIGZsb3d0YWJsZSB0YWtlcyBvdmVyIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0cywgc28gdGhlIGZvcndhcmRcbitcdCMgaG9vayBtdXN0IHNlZSBhIHNtYWxsIGZyYWN0aW9uIG9mIHRoZSB0cmFuc2ZlcnJlZCBmaWxlLlxuK1x0aWYgWyBcIiRvcmlnX2NudFwiIC1ndCBcIiRtYXhfb3JpZ1wiIF07dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJHdoYXQ6IG9yaWdpbmFsIGNvdW50ZXIgJG9yaWdfY250IGV4Y2VlZHMgZXhwZWN0ZWQgdmFsdWUgJG1heF9vcmlnXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRlY2hvIFwiUEFTUzogJHdoYXRcIlxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXG4re1xuK1x0aXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyBcIiRuczJcIlxuK1x0aXAgLW5ldCBcIiRuczFcIiBhZGRyIGFkZCAxMC4wLjkuOTkvMjQgZGV2IGV0aDFcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgMTAuMC45Ljk4LzI0IGRldiBldGgxXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWRcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgZGVhZDo5Ojo5OC82NCBkZXYgZXRoMSBub2RhZFxuK1x0aXAgLW5ldCBcIiRuczFcIiBsaW5rIHNldCBldGgxIHVwXG4rXHRpcCAtbmV0IFwiJG5zMlwiIGxpbmsgc2V0IGV0aDEgdXBcbitcbitcdCMgbnMxIGtlZXBzIHNlbmRpbmcgdGhyb3VnaCBuc3IxLCBuczIgYW5zd2VycyBvbiB0aGUgZGlyZWN0IGxpbmsuXG4rXHRpcCAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCAxMC4wLjEuOTkgdmlhIDEwLjAuOS45OSBkZXYgZXRoMVxuK1x0aXAgLTYgLW5ldCBcIiRuczJcIiByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMVxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczFcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnMyXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwiJG5zMVwiIFwiJG5zMlwiIDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGxpc3QgcnVsZXNldCAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZmlcbitcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbitcbitcdGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJJUHY2IGZsb3cgb2ZmbG9hZGVkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcIlxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBsaXN0IHJ1bGVzZXQgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zMVwiIHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczJcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTFcbitcbitcdGlwIC1uZXQgXCIkbnMxXCIgbGluayBkZWwgZXRoMVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aFxuK1xuICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbid0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZFxuICMgd2lsbCBkZXBlbmQgb24gbnMxIGJlaW5nIG1hc3F1ZXJhZGVkIGluIG5zcjEuXG4gIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyODozNS43MTg2MzEzMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODg1NTQ1NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enosIHdoYXQgY29uZmlndXJhdGlvbnMgd2UnbGwgbmVlZCwgYW5kIHdoYXQgdGhlIGtleSBzeW1ib2xzIGFyZSB0byBmb2N1cyBvbi4gRmlyc3QsIGxldCdzIGRpZ2VzdCB0aGlzIGRpZmYuXG5cblRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIGJhc2VkIG9uIHRoZSBmaWxlIGNoYW5nZXMsIHNlZW1zIHRvIGJlIGFyb3VuZCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nLiBJJ20gc2VlaW5nIGFkZGl0aW9ucyB0byBib3RoIHRoZSBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGBuZl9jb25udHJhY2tfbDRwcm90by5oYCBpbnRyb2R1Y2VzIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZGApIGFuZCB0aGUgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiAoYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGBuZnRfZmxvd19vZmZsb2FkLmNgKS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBoYW5kbGluZyBvZiB1bnJlcGxpZWQgVENQIGZsb3dzLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgYXN5bW1ldHJpYyBwYXRocywgYXMgaGludGVkIGluIGBuZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG5vdyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGEgU1lOIG5ldmVyIGdldHMgYSByZXBseSBvbiB0aGUgaG9zdCB3aXRoIFwibG9vc2UgY29ubnRyYWNrXCIgYW5kIHRoZSBhZGRpdGlvbiBvZiBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCgpYCBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgd2UgZGVhbCB3aXRoIHVucmVwbGllZCBmbG93cyBpbiB0aGUgb2ZmbG9hZCBjb250ZXh0LiBUaGUgaW5jbHVzaW9uIG9mIG5ldyB0ZXN0cyBpbiBgbmZ0X2Zsb3d0YWJsZS5zaGAgY29uZmlybXMgdGhpcyBhcmVhIG9mIGZvY3VzLlxuXG5UaGlzIHVucmVwbGllZCBmbG93IGhhbmRsaW5nIGlzIHdoZXJlIHRoZSBqdWljeSBidWdzIGFyZSBsaWtlbHkgdG8gYmUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIGZsb3cgb2ZmbG9hZCBhbmQga2lsbGluZyBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmZfY3Rfa2lsbChjdClgIGNhbGxzIGFuZCB0aGUgYmlkaXJlY3Rpb25hbCBmbGFnIGxvZ2ljIGluIGBuZnRfZmxvd19vZmZsb2FkX2V2YWwoKWAgd2l0aCBhIGZpbmUtdG9vdGggY29tYi4gSXQncyBsaWtlbHkgdGhhdCBvZmZsb2FkIGRlY2lzaW9ucyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBhcmUgb3V0IG9mIHN5bmMgb3Igc29tZSBpbnRlcm5hbCBzdGF0ZSBpcyBub3QgdXBkYXRlZCBjb3JyZWN0bHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBvZmZsb2FkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZSBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWEgZm9yIGZ1enppbmcuIFNvLCBJIG5lZWQgdG8gZ2V0IGZhbWlsaWFyIHdpdGggYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgLCBhbmQgdGhlIGNoYW5nZXMgYXJvdW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgpYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoKWAsIGFzIHdlbGwgYXMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoKWAuIEl0IHNlZW1zIHRoYXQgdGhlIG5ldyBmdW5jdGlvbnMgc3VjaCBhcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgYW5kIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIHdpbGwgYmUgY2VudHJhbCB0byB0aGF0LlxuXG5UbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBpbnRvIHRoZSByZWxldmFudCBjb2RlIGNvbnRleHQgYW5kIHNwb3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjg6NDUuNjA0MTgwMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2Mzk4MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ1Nz1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzEtICovXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDcyOnN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ4OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTAxOlxcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNTAyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA4Nz1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwOTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTEwMDpcXHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMDEtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI4OjQ4LjI2ODE2OTQ2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ3MDAzMDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIENvbm5lY3Rpb24gVHJhY2tpbmcgYW5kIEZsb3cgT2ZmbG9hZCBNZWNoYW5pY3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlcmFjdHMgd2l0aCBmbG93IG9mZmxvYWQgaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNzMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBjb3JlIFRDUCBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBGSU4tV0FJVCBzdGF0ZXMsIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUuIEkgZXhwZWN0IHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyB0aGVyZSBhcm91bmQgdGhlIHZhcmlvdXMgdGltZXJzIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggZmxvdyBvZmZsb2FkLiBMZXQncyBjaGVjayBvdXQgYG5mdF9mbG93X29mZmxvYWQuY2AgYXJvdW5kIGxpbmUgNzMuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24gbGl2ZXMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGhhbmRvZmYgYmV0d2VlbiBjb25udHJhY2sgYW5kIG9mZmxvYWQsIHdoZW4gYW5kIGhvdyB0aGUgb2ZmbG9hZGluZyBpcyB0cmlnZ2VyZWQsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gc3Vic3lzdGVtcy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgb2ZmbG9hZD8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgdXNlZD9cblxuRmluYWxseSwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgbmZfZmxvd190YWJsZV9pcC5jYC4gVGhpcyB3aWxsIGxpa2VseSBjb250YWluIHRoZSBJUC1zcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgZmxvdyB0YWJsZSwgYW5kIGJ5IHJlYWRpbmcgdGhpcyBJJ2xsIGJlIGFibGUgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCB0aGUgSVAgbGF5ZXIuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGNvbnRhaW4gdGhlIGNvZGUgdGhhdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgb2ZmbG9hZGluZyB0byBhIG5ldHdvcmsgY2FyZCBhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgY29tZSB0b2dldGhlci4gV2l0aCB0aGVzZSB0aHJlZSBsb2NhdGlvbnMgaW4gbWluZCwgSSBzaG91bGQgYmUgYWJsZSB0byByZWNvbnN0cnVjdCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgZXZlcnl0aGluZyB3b3JrcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI4OjU3LjczODIwNDEzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTYwOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19NQVg6XFxuMTE2MTpcXHRcXHRcXHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcXG4xMTYyOlxcdFxcdFxcdCAqIHRoZSBTWU4vQUNLIGZyb20gdGhlIHNlcnZlciBpcyBsb3N0LCB0aGUgY2xpZW50IG1heSB0cmFuc21pdFxcbjExNjM6XFx0XFx0XFx0ICogYSBrZWVwLWFsaXZlIHBhY2tldCB3aGlsZSBpbiBTWU5fU0VOVCBzdGF0ZS4gVGhpcyBuZWVkcyB0b1xcbjExNjQ6XFx0XFx0XFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cXG4xMTY1OlxcdFxcdFxcdCAqIGdlbmVyYXRlIGEgbmV3IFNZTiB3aXRoIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG51bWJlci5cXG4xMTY2OlxcdFxcdFxcdCAqL1xcbjExNjc6XFx0XFx0XFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFxcdTAwMjZcXHUwMDI2IG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UIFxcdTAwMjZcXHUwMDI2XFxuMTE2ODpcXHRcXHRcXHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXFx1MDAyNlxcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcXHUwMDI2XFx1MDAyNlxcbjExNjk6XFx0XFx0XFx0ICAgIGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFxcdTAwMjZcXHUwMDI2XFxuMTE3MDpcXHRcXHRcXHQgICAgY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cXHUwMDNlc2VxKSkge1xcbjExNzE6XFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3RjcDogU1lOIHByb3h5IGNsaWVudCBrZWVwIGFsaXZlXFxcXG5cXFwiKTtcXG4xMTcyOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHQvKiBUaGUgYW5zd2VyIHRvIHRoZSBTWU4gbmV2ZXIgcGFzc2VkIHRoZSBob3N0LCBhcyBoYXBwZW5zXFxuMTE3NzpcXHRcXHRcXHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxcbjExNzg6XFx0XFx0XFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cXG4xMTc5OlxcdFxcdFxcdCAqIG92ZXIgYXMgYSBtaWQtc3RyZWFtIHBpY2t1cDogZGVsZXRlIHRoZSBlbnRyeSBzbyB0aGUgcGFja2V0XFxuMTE4MDpcXHRcXHRcXHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXFxuMTE4MTpcXHRcXHRcXHQgKiBwYWNrZXQgaXRzZWxmLlxcbjExODI6XFx0XFx0XFx0ICovXFxuMTE4MzpcXHRcXHRcXHRpZiAodG4tXFx1MDAzZXRjcF9sb29zZSBcXHUwMDI2XFx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXFx1MDAyNlxcdTAwMjZcXG4xMTg0OlxcdFxcdFxcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcXHUwMDI2XFx1MDAyNlxcbjExODU6XFx0XFx0XFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFxcdTAwMjZcXHUwMDI2IGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwgXFx1MDAyNlxcdTAwMjZcXG4xMTg2OlxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4xMTg3OlxcdFxcdFxcdCAgICBudG9obCh0aC1cXHUwMDNlc2VxKSA9PSBjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcXG4xMTg4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdFxcdFxcdGlmIChuZl9jdF9raWxsKGN0KSlcXG4xMTkxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtTkZfUkVQRUFUO1xcbjExOTI6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTE5MzpcXHRcXHRcXHR9XFxuMTE5NDpcXHRcXG4xMTk1OlxcdFxcdFxcdC8qIEludmFsaWQgcGFja2V0ICovXFxuMTE5NjpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbjExOTc6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4xMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpbnZhbGlkLCBzdGF0ZSAlc1xcXCIsXFxuMTE5OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGluZGV4LCBkaXIsXFxuMTIwMDpcXHRcXHRcXHRcXHRcXHRcXHQgIHRjcF9jb25udHJhY2tfbmFtZXNbb2xkX3N0YXRlXSk7XFxuMTIwMTpcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4xMjAyOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XFxuMTIwMzpcXHRcXHRcXHQvKiBSRkM1OTYxIGNvbXBsaWFuY2UgY2F1c2Ugc3RhY2sgdG8gc2VuZCBcXFwiY2hhbGxlbmdlLUFDS1xcXCJcXG4xMjA0OlxcdFxcdFxcdCAqIGUuZy4gaW4gcmVzcG9uc2UgdG8gc3B1cmlvdXMgU1lOcy4gIENvbm50cmFjayBNVVNUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI4OjU3LjczODM2OTM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTY4NTExNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIG5mdF9mbG93X29mZmxvYWQuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBvZmZsb2FkaW5nIG5ldHdvcmsgdHJhZmZpYyB0byBoYXJkd2FyZSwgcGFydGljdWxhcmx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlIGZsb3cgY2FjaGUgZW50cmllcywgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHNvZnR3YXJlIGZpbHRlciBhbmQgaGFyZHdhcmUgb2ZmbG9hZCwgYW5kIGhvdyB0aGUgZGVjaXNpb24gdG8gb2ZmbG9hZCBpcyBtYWRlIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBzdXNwZWN0IEknbGwgYmUgZm9jdXNlZCBvbiBob3cgdGhlIGBuZnRfZmxvd19vZmZsb2FkYCBob29rcyBmaXQgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwcm90b2NvbHMgYW5kIHdoZXRoZXIgaXQgc3VwcG9ydHMgdGhpbmdzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZSBpbiB0aGUgb2ZmbG9hZCBkZWNpc2lvbnMuIFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB1bmRlcnBpbiB0aGUgb2ZmbG9hZCBwcm9jZXNzLCBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MDAuMDk1MjIzNTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRjdCA9IG5mX2N0X2dldChwa3QtXFx1MDAzZXNrYiwgXFx1MDAyNmN0aW5mbyk7XFxuICA2ODpcXHRcXHRpZiAoIWN0KVxcbiAgNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdHN3aXRjaCAoY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSkge1xcbiAgNzI6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4gIDczOlxcdFxcdFxcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVxcdTAwM2Vza2IsIG5mdF90aG9mZihwa3QpLFxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2YoX3RjcGgpLCBcXHUwMDI2X3RjcGgpO1xcbiAgNzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF0Y3BoIHx8IHRjcGgtXFx1MDAzZWZpbiB8fCB0Y3BoLVxcdTAwM2Vyc3QgfHxcXG4gIDc2OlxcdFxcdFxcdFxcdCAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSBcXHUwMDI2XFx1MDAyNlxcbiAgNzc6XFx0XFx0XFx0XFx0ICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKVxcbiAgNzg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3OTpcXHRcXHRcXHRicmVhaztcXG4gIDgwOlxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuICA4MTpcXHRcXHRcXHRicmVhaztcXG4gIDgyOlxcdCNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fR1JFXFxuICA4MzpcXHRcXHRjYXNlIElQUFJPVE9fR1JFOiB7XFxuICA4NDpcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0XFx0aWYgKGN0LVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBJUFNfTkFUX01BU0spXFxuICA4NzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDg4OlxcdFxcdFxcdHR1cGxlID0gXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcXG4gIDg5OlxcdFxcdFxcdC8qIE5vIHN1cHBvcnQgZm9yIEdSRSB2MSAqL1xcbiAgOTA6XFx0XFx0XFx0aWYgKHR1cGxlLVxcdTAwM2VzcmMudS5ncmUua2V5IHx8IHR1cGxlLVxcdTAwM2Vkc3QudS5ncmUua2V5KVxcbiAgOTE6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuICA5MjpcXHRcXHRcXHRicmVhaztcXG4gIDkzOlxcdFxcdH1cXG4gIDk0OlxcdCNlbmRpZlxcbiAgOTU6XFx0XFx0ZGVmYXVsdDpcXG4gIDk2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRpZiAobmZfY3RfZXh0X2V4aXN0KGN0LCBORl9DVF9FWFRfSEVMUEVSKSB8fFxcbiAxMDA6XFx0XFx0ICAgIGN0LVxcdTAwM2VzdGF0dXMgXFx1MDAyNiAoSVBTX1NFUV9BREpVU1QgfCBJUFNfTkFUX0NMQVNIKSlcXG4gMTAxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxuIDEwNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykpXFxuIDEwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbiAxMTA6XFx0XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4gMTExOlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xcbiAxMTQ6XFx0XFx0aWYgKCFmbG93KVxcbiAxMTU6XFx0XFx0XFx0Z290byBlcnJfZmxvd19hbGxvYztcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXFx1MDAyNnJvdXRlKTtcXG4gMTE4OlxcdFxcdGlmICh0Y3BoKVxcbiAxMTk6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKVxcbiAxMjI6XFx0XFx0XFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4gMTIzOlxcdFxcdHJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTtcXG4gMTI0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMjU6XFx0XFx0XFx0Z290byBlcnJfZmxvd19hZGQ7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHJldHVybjtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0ZXJyX2Zsb3dfYWRkOlxcbiAxMzA6XFx0XFx0Zmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7XFxuIDEzMTpcXHRlcnJfZmxvd19hbGxvYzpcXG4gMTMyOlxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTtcXG4gMTMzOlxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7XFxuIDEzNDpcXHRlcnJfZmxvd19yb3V0ZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MDAuMDk1MzcxNjM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1OTcyODcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gSXQncyB3aGVyZSB0aGUgSVAtc3BlY2lmaWMgbG9naWMgZm9yIHRoZSBmbG93IHRhYmxlIGxpa2VseSByZXNpZGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgZmxvdyBrZXkgZ2VuZXJhdGlvbiBoYXBwZW5pbmcgaW4gdGhlcmUsIGFsb25nIHdpdGggdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIElQIHByb3RvY29sIGZhbWlseS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGZsb3dzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBuZl9jb25udHJhY2tgIHN1YnN5c3RlbSBoYXBwZW5zLCBnaXZlbiB0aGF0IHRoZSBmbG93IHRhYmxlIGlzIG1lYW50IHRvIGJlIGEgaGlnaC1wZXJmb3JtYW5jZSBhbHRlcm5hdGl2ZSB0byB0cmFkaXRpb25hbCBjb25uZWN0aW9uIHRyYWNraW5nIGluIG1hbnkgY2FzZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgdmFyaW91cyBJUCBvcHRpb25zLCBmcmFnbWVudGF0aW9uLCBhbmQgb3RoZXIgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIGZsb3cgdGFibGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIG9mIHRoaXMgZmlsZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgYW5kIGxpbWl0YXRpb25zIG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MDMuMzU1MTAzMTA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0ICogb2ZmbG9hZGVkIGluIGJvdGggZGlyZWN0aW9ucy5cXG4gNDcxOlxcdCAqL1xcbiA0NzI6XFx0c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbiA0NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gNDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuIDQ3NTpcXHR7XFxuIDQ3NjpcXHRcXHRpZiAoZGlyICE9IEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgfHxcXG4gNDc3OlxcdFxcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuIDQ3ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdFxcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFxcdTAwMjZmbG93LVxcdTAwM2VjdC1cXHUwMDNlc3RhdHVzKSkge1xcbiA0ODE6XFx0XFx0XFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuIDQ4MjpcXHRcXHRcXHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCB0cnVlKTtcXG4gNDgzOlxcdFxcdH1cXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQ4NjpcXHR9XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gNDg5OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIDQ5MDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxuIDQ5MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0OTI6XFx0e1xcbiA0OTM6XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG4gNDk0OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIDQ5NTpcXHRcXHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcXG4gNDk2OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4gNDk5OlxcdFxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxuIDUwMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0bXR1ID0gZmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuIDUwNTpcXHRcXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuIDUwNjpcXHRcXHRcXHRtdHUgLT0gc2l6ZW9mKCppcGgpO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbiA1MDk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUxMDpcXHRcXG4gNTExOlxcdFxcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuIDUxMjpcXHRcXHR0aG9mZiA9IChpcGgtXFx1MDAzZWlobCAqIDQpICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuIDUxMzpcXHRcXHRpZiAobmZfZmxvd19zdGF0ZV9jaGVjayhmbG93LCBpcGgtXFx1MDAzZXByb3RvY29sLCBza2IsIHRob2ZmKSlcXG4gNTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MTU6XFx0XFxuIDUxNjpcXHRcXHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFxcdTAwMjZ0dXBsZWhhc2gtXFx1MDAzZXR1cGxlKSkge1xcbiA1MTc6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiA1MTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUxOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjAzLjM1NTI1MjI3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDAyMzIxMzMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRmxvdyBPZmZsb2FkaW5nKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGZsb3cgb2ZmbG9hZGluZy4gV2UndmUgYmVlbiBmb2N1c2luZyBvbiBJUHY0LCBidXQgZ2l2ZW4gdGhlIGN1cnJlbnQgbmV0d29yayBsYW5kc2NhcGUsIGl0J3MgYWJzb2x1dGVseSBjcnVjaWFsIHRvIGFsc28gZXhhbWluZSB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgZm9jdXMgbWlnaHQgaGF2ZSBiZWVuIG9uIElQdjQsIGdpdmVuIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9ucywgYnV0IHdlIGNhbid0IGFmZm9yZCB0byBpZ25vcmUgSVB2Ni4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSBjaGVjayBob3cgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGlzIGJlaGF2aW5nLiBJcyBpdCB3b3JraW5nIGFzIGV4cGVjdGVkPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHBvdGVudGlhbCBidWdzIGluIGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3IgaW1wbGVtZW50YXRpb24/IE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBpbXBvcnRhbnQgYW5kIHRoZXJlZm9yZSBJIHNob3VsZCBjaGVjayBpdC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZW5kLXRvLWVuZCBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eSwgYXMgSVB2NiBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgcHJldmFsZW50LiBJdCdzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgY29uc2lzdGVudCBhbmQgb3B0aW1pemVkIG5ldHdvcmtpbmcgZXhwZXJpZW5jZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToxMy4zNzg0Njg0MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4xMDg4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuMTA4OTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxuMTA5MDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEwOTE6XFx0e1xcbjEwOTI6XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG4xMDkzOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuMTA5NDpcXHRcXHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcXG4xMDk1OlxcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4xMDk4OlxcdFxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuMTA5OTpcXHRcXG4xMTAwOlxcdFxcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxuMTEwMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTAyOlxcdFxcbjExMDM6XFx0XFx0bXR1ID0gZmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuMTEwNDpcXHRcXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuMTEwNTpcXHRcXHRcXHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcXG4xMTA4OlxcdFxcdFxcdHJldHVybiAwO1xcbjExMDk6XFx0XFxuMTExMDpcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgY3R4LVxcdTAwM2VvZmZzZXQpO1xcbjExMTE6XFx0XFx0dGhvZmYgPSBzaXplb2YoKmlwNmgpICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuMTExMjpcXHRcXHRpZiAobmZfZmxvd19zdGF0ZV9jaGVjayhmbG93LCBpcDZoLVxcdTAwM2VuZXh0aGRyLCBza2IsIHRob2ZmKSlcXG4xMTEzOlxcdFxcdFxcdHJldHVybiAwO1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFxcdTAwMjZ0dXBsZWhhc2gtXFx1MDAzZXR1cGxlKSkge1xcbjExMTY6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbjExMTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTExODpcXHRcXHR9XFxuMTExOTpcXHRcXG4xMTIwOlxcdFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgKyBjdHgtXFx1MDAzZWhkcnNpemUpKVxcbjExMjE6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XFxuMTEyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MTMuMzc4NjIwNzY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NTM1NzQ3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgTmV0ZmlsdGVyL0Nvbm50cmFjay9GbG93dGFibGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZT8gRm9yIHRoZSBOZXRmaWx0ZXIsIGNvbm50cmFjaywgYW5kIGZsb3d0YWJsZSBzdWJzeXN0ZW1zICh0aGUgY29yZSBuZXR3b3JraW5nIHN0dWZmKSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IOKAkyBzb2NrZXRzLCB0dW4vdGFwLCB2ZXRoLCBuZXRsaW5rIChuZnRhYmxlcy9jb25udHJhY2spIGFyZSBhbGwgZWFzaWx5IGV4ZXJjaXNlZCBieSBzeXprYWxsZXIuIE5vIHByb2JsZW0gdGhlcmUuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0aGF0IGNhdGNoIG15IGF0dGVudGlvbi4gSW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIGRlYWxzIHdpdGggYXN5bW1ldHJpYyBwYXRocyBhbmQgbWlkLXN0cmVhbSBwaWNrdXBzIHdoZW4gdGhlIFNZTiByZXBseSBuZXZlciBldmVuIHRvdWNoZWQgdGhlIGhvc3QsIHBhcnRpY3VsYXJseSB3aGVuIGB0Y3BfbG9vc2VgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGVuLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2AgYWxsb3dzIGZvciBvZmZsb2FkaW5nIHVucmVwbGllZCBUQ1AgZmxvd3Mgd2hpbGUgbWFuaXB1bGF0aW5nIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBBbmQgZmluYWxseSwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKClgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgIHRvdWNoIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgLCB3aGljaCBpbnNwZWN0cyBhbmQgbW9kaWZpZXMgYE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTGAgd2hpbGUgY2FsbGluZyBgZmxvd19vZmZsb2FkX3JlZnJlc2goKWAuICBQbHVzLCB0aGVyZSdzIGEgbmV3IGlubGluZSBoZWxwZXIsIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZCgpYCBpbiBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhgLiBBbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZywgaW4gcGFydGljdWxhciBob3cgdGhleSBoYW5kbGUgVENQIGNvbm50cmFjayBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgZmxvd3RhYmxlIG9mZmxvYWQuXG5cblNvLCBpbiBteSBleHBlcnQgb3BpbmlvbiwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSXQncyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGVhbGluZyB3aXRoIFRDUCBjb25udHJhY2sgYW5kIGZsb3d0YWJsZSBvZmZsb2FkaW5n4oCUYSBoaWdoLXZhbHVlIHRhcmdldC5cblxuTm93LCB0byBtYWtlIHN1cmUgaXQncyBldmVuICpyZWFjaGFibGUqIGluIGEgdGFyZ2V0IHN5c3RlbSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgdG8gY29tcGlsZSBhbmQgYWN0dWFsbHkgZXhlY3V0ZSB0aGlzIGNvZGUuICBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AsIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToxNy44MzIxOTc3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3MTYzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKG5mX2Zsb3dfdGFibGV8bmZ0X2Zsb3dfb2ZmbG9hZHxuZl9jb25udHJhY2tfcHJvdG9fdGNwKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NT1uZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjY6XFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTctXFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVxcdFxcdCs9IG5mdF9jdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXFx0Kz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcXHRcXHQrPSBuZnRfbGltaXQub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVxcdCs9IG5mdF9md2RfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcdCs9IG5mX2Zsb3dfdGFibGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ1OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NjpuZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSArPSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDctaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSksbSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0ODpuZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICs9IG5mX2Zsb3dfdGFibGVfYnBmLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0OS1lbHNlIGlmZXEgKCQoQ09ORklHX05GX0ZMT1dfVEFCTEUpLHkpXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTA6bmZfZmxvd190YWJsZS0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0gbmZfZmxvd190YWJsZV9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUxLWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTM6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVCkgKz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MTcuOTI4OTE5MzI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzY4OTc5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGludmVzdGlnYXRpb24sIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmU6IE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyBcdTAwMjYgRmxvdyBPZmZsb2FkKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIEtjb25maWcgaHVudGluZy4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgZm91bmRhdGlvbiBmb3IgbmV0d29yayBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQuIEknbSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYE5GX0NPTk5UUkFDS2AuIFRoYXQncyB0aGUgYmVkcm9jaywgcmlnaHQ/IFdpdGhvdXQgaXQsIHdlJ3JlIG5vdCBnb2luZyBhbnl3aGVyZS4gVGhlbiwgc2luY2Ugd2UncmUgcHJvYmFibHkgdGFsa2luZyBhYm91dCBzb21lIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBuZXdlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBJJ2xsIG1vdmUgb24gdG8gYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3RhdGVmdWwgZmlyZXdhbGwgY2FwYWJpbGl0aWVzIGFuZCBhbnkgb2ZmbG9hZGluZyB0ZWNobmlxdWVzLiBGaW5hbGx5LCBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byB2ZXJpZnkgYE5GX1RBQkxFU2Ag4oCTIHRoYXQncyB0aGUgZnJhbWV3b3JrIGZvciBkZWZpbmluZyB0aGUgcnVsZXMgYW5kIHBvbGljaWVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQgZnJhbWV3b3JrIGlzIHNldCBjb3JyZWN0bHksIHRvby4gSSdtIGVzc2VudGlhbGx5IHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcyBoZXJlLCBtYWtpbmcgc3VyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIGFyZSBpbiBwbGFjZSBhbmQgY29uZmlndXJlZCBhcyBJJ2QgZXhwZWN0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2Ugc2V0dGluZ3MgaXMga2V5IHRvIGludGVycHJldGluZyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgbmV0d29yayBzdGFjay4gSSdsbCBuZWVkIHRvIGFsc28gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgaW5jb21wYXRpYmlsaXRpZXMuIEl0J3MgYSBzeXN0ZW1hdGljIHByb2Nlc3MsIHJlYWxseSwgYnV0IGVzc2VudGlhbCBmb3IgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQ3LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MjAuOTA1ODE5MTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA2Nzk0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChORl9DT05OVFJBQ0t8TkZfRkxPV19UQUJMRXxORlRfRkxPV19PRkZMT0FEfE5GX1RBQkxFUylcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTcwMz1jb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjIxLjAxNjUwMzQ3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQyMzMyMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2Uga2VybmVsIG1vZHVsZXMsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0NPTk5UUkFDS2AsIGFyZSBjb25maWd1cmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGdvLXRvIHNvdXJjZSBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZWFjaCBvZiB0aGVtLCBzeXN0ZW1hdGljYWxseSB3b3JraW5nIHRocm91Z2ggdGhlIG9wdGlvbnMgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZWlyIHB1cnBvc2UgYW5kIHBvc3NpYmxlIGludGVycGxheS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGFueSBjaGFuZ2VzIG9yIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToyNS41NTg4MzgwNDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdGRlZmF1bHQgblxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDUwMzpcXHRcXG4gNTA0OlxcdGNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxuIDUwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDUwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXFxcIlxcbiA1MDc6XFx0XFx0aGVscFxcbiA1MDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiZmxvd19vZmZsb2FkXFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG4gNTA5OlxcdFxcdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cXG4gNTEwOlxcdFxcbiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjI1LjU2MTA5MjY2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTczNzk1NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIGFuZCBLY29uZmlnIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBORl9GTE9XX1RBQkxFYCBvcHRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBgS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDcxMCwgZ2l2ZSBvciB0YWtlLCBhcyBhIGxpa2VseSBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0J3Mgd2hlcmUgY29yZSBuZXR3b3JrIGZlYXR1cmVzIGFyZSBvZnRlbiBkZWZpbmVkLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBtYW5hZ2luZyBhbmQgYWNjZWxlcmF0aW5nIG5ldHdvcmsgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcHJlc2VudC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSXMgaXQgbW9kdWxhcj8gQnVpbHQtaW4/IFdoYXQgYnVpbGQtdGltZSBvcHRpb25zIGFyZSBhdmFpbGFibGUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0vZG93bnN0cmVhbSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eSBpcyBoYW5kbGVkIGF0IHRoZSBjb25maWd1cmF0aW9uIHN0YWdlLCBhcyB0aGlzIHdpbGwgaW5mbHVlbmNlIGl0cyBiZWhhdmlvciBhbmQgYXZhaWxhYmlsaXR5IHdpdGhpbiB0aGUgc3lzdGVtLCBhcyB3ZWxsIGFzIGFueSB0cm91Ymxlc2hvb3RpbmcgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToyOC4xMzQ4OTEyMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFxuIDcwMTpcXHRlbmRpZiAjIE5GX1RBQkxFU1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxuIDcwNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4gNzA1OlxcdFxcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxcbiA3MDY6XFx0XFx0aGVscFxcbiA3MDc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBzdXBwb3J0LlxcbiA3MDg6XFx0XFxuIDcwOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcxMDpcXHRcXG4gNzExOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFXFxuIDcxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcbiA3MTM6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xcbiA3MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNzE1OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuIDcxNjpcXHRcXHRoZWxwXFxuIDcxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cXG4gNzE4OlxcdFxcbiA3MTk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MjA6XFx0XFxuIDcyMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG4gNzIyOlxcdFxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcbiA3MjM6XFx0XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxuIDcyNDpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gNzI1OlxcdFxcdGhlbHBcXG4gNzI2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmb3IgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBzdGF0aXN0aWNzXFxuIDcyNzpcXHRcXHQgIHRvIGJlIHNob3duIGluIHByb2NmcyB1bmRlciBuZXQvbmV0ZmlsdGVyL25mX2Zsb3d0YWJsZS5cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjI4LjEzNTAwNzgxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjYwMTk2ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGFyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZSBlc3NlbnRpYWwgb25lcyBhcmUgc2V0OiBgTkZfQ09OTlRSQUNLYCwgYE5GX1RBQkxFU2AsIGBORl9GTE9XX1RBQkxFYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBvdGhlciByZWxldmFudCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheSBoZXJlIGFzIHdlbGwuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBJIHNlZTpcblxuKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGA6IFRoaXMgb25lJ3MgaW4gYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBtaWQtc3RyZWFtIHBhY2tldCBwaWNrdXAgYW5kIGRlYWwgd2l0aCBhc3ltbWV0cmljIHBhdGggc2l0dWF0aW9ucy5cbiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYDogSW4gYG5mdF9mbG93X29mZmxvYWQuY2AsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhpcyBpcyB0aGUgY29yZSBldmFsdWF0aW9uIGZ1bmN0aW9uLiBTZWVtcyBpdCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgb2ZmbG9hZGluZyB1bnJlcGxpZWQgVENQIGZsb3dzIGFuZCBjaGVja2luZyB0aGUgYmlkaXJlY3Rpb25hbCBmbGFnLlxuKiAgIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkYDogQSBuZXcgc3RhdGljIGZ1bmN0aW9uIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBUaGlzIGlzIGludHJpZ3Vpbmc7IGl0IHByb2JhYmx5IGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LlxuKiAgIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGA6IEFub3RoZXIgb25lIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCBhbmQgaXQgY2FsbHMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgLlxuKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYDogQWxzbyBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kLCBhZ2FpbiwgaXQgY2FsbHMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgLiBTbyBpdCBsb29rcyBsaWtlIHRoZXNlIGZvcndhcmQgZnVuY3Rpb25zIG5lZWQgdGhpcyBuZXcgcmVwbHkgaGFuZGxpbmcgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBmbG93cy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCB2aXNpYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgc3RhdGljLCBvciBhcmUgdGhleSBleHBvcnRlZD8gQXJlIHRoZXkgaW4gLmMgZmlsZXM/IEkgaGF2ZSB0byBrbm93IHdobyBjYW4gY2FsbCB3aG8uXG5cbiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgOiBJdCdzIGEgbm9uLXN0YXRpYywgc28gaXQncyBnbG9iYWxseSB2aXNpYmxlLiBHb29kIHRvIGtub3cuXG4qICAgYG5mdF9mbG93X29mZmxvYWRfZXZhbGA6IFRoaXMgb25lJ3Mgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYC5cbiogICBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZGA6IFRoaXMgb25lJ3MgYWxzbyBzdGF0aWMsIHJlc2lkaW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZV9pcC5jYC5cbiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgOiBUaGlzIG9uZSBpcyBzdGF0aWMgdG9vLCBhbmQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuXG4qICAgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgOiBhbmQgdGhpcyBvbmUgdG9vLCBhbHNvIHN0YXRpYyBhbmQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuXG5cbk9rYXksIGZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgdGhlc2UsIGFuZCB3aGljaCBvdGhlciBmdW5jdGlvbnMgYXJlIHRoZXkgY2FsbGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzICpyZWFsbHkqIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjM0Ljc5NTIwODQyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTc3NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZC4qZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NzI9c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ4ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMjE9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwODYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA4NzpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDg4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMjE5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMzgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIzOTpcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjQwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTozNS4xMDgzOTI1OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2NTY5NTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb25zaWRlcmVkIGFsbCByZWxldmFudCBmdW5jdGlvbnMuIEknbGwgYWRkIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCB0byB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gcmV2aWV3LCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5Ob3csIHdoaWNoIEZvY3VzU3ltYm9scyB3aWxsIGJlIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb3IgZnV6emluZz8gQWZ0ZXIgcmV2aWV3aW5nLCBpdCdzIGNsZWFyIHRoZSBiZXN0IGNob2ljZXMgYXJlOlxuKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGBcbiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYFxuKiAgIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkYFxuKiAgIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGBcbiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGBcbiogICBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgXG4qICAgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgXG5cblRoZXNlIGFyZSBhbGwgc3BlY2lmaWMgdG8gdGhlIG5ldGZpbHRlciBhbmQgZmxvd3RhYmxlIGNvZGUgcGF0aHMgdGhhdCB3ZXJlIGFjdHVhbGx5IG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCwgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cy4gVGhleSBhcmVuJ3QgZ2VuZXJpYyB1dGlsaXRpZXMuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuIFRoZSByZWFzb25pbmcgaXM6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBoYW5kbGluZyBmb3IgYXN5bW1ldHJpYyByb3V0aW5nIGFuZCB1bnJlcGxpZWQgbWlkLXN0cmVhbSBUQ1AgY29ubmVjdGlvbnMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBoYXJkd2FyZSBmbG93dGFibGUgb2ZmbG9hZCBtZWNoYW5pc21zLiBJdCBzcGVjaWZpY2FsbHkgYWx0ZXJzIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCB0byBoYW5kbGUgbWlkLXN0cmVhbSBjb25uZWN0aW9ucyB3aGVyZSBTWU4gcmVwbGllcyBieXBhc3MgdGhlIGhvc3QuIEFsc28sIGBuZnRfZmxvd19vZmZsb2FkX2V2YWwoKWAsIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgpYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKClgIGFyZSB1cGRhdGVkIHVzaW5nIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIHRvIHN1cHBvcnQgdGhlIG9mZmxvYWRpbmcgb2YgdW5pZGlyZWN0aW9uYWwgVENQIGZsb3dzIHVudGlsIHRoZSByZXBseSBpcyBzZWVuLiBUaGlzIHJlcHJlc2VudHMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBhY2Nlc3NpYmxlIGFuZCB0ZXN0YWJsZSB2aWEgbmV0d29yayBzb2NrZXRzIGFuZCBuZXRmaWx0ZXIvbmZ0YWJsZXMgcnVsZXMuXG5cbkknbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIEVuYWJsZUNvbmZpZ3M6IGBbXCJORl9DT05OVFJBQ0tcIiwgXCJORl9UQUJMRVNcIiwgXCJORl9GTE9XX1RBQkxFXCIsIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiXWAuXG5cblRoZSBmaW5hbCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgW1wibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIiwgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIiwgXCJuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkXCIsIFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIiwgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCJdYFxuXG5Pa2F5LCB3aXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJJ20gcmVhZHkgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzcxLCJPdXRwdXRUb2tlbnMiOjI0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo0MC4zNzQwOTMwMDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxODM2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIixcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfZXZhbFwiLFxuICAgIFwibmZfZmxvd19yZXBseV91bm9mZmxvYWRlZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgbG9naWMgdG8gc3VwcG9ydCBhc3ltbWV0cmljIFRDUCBmbG93cyAod2hlcmUgcmVwbGllcyBieXBhc3MgdGhlIGhvc3QpLiBJdCB1cGRhdGVzIFRDUCBjb25udHJhY2sgcGFja2V0IHByb2Nlc3NpbmcgKG5mX2Nvbm50cmFja190Y3BfcGFja2V0KSB0byBoYW5kbGUgbWlkLXN0cmVhbSBwaWNrdXBzIGZvciB1bnJlcGxpZWQgY29ubmVjdGlvbnMsIGFuZCB1cGRhdGVzIGZsb3cgdGFibGUgZXZhbHVhdGlvbiBhbmQgZm9yd2FyZGluZyAobmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsLCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCwgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCkgdG8gZGVmZXIgYmlkaXJlY3Rpb25hbCBvZmZsb2FkaW5nIHVudGlsIGNvbm50cmFjayBjb25maXJtcyByZXBseSBwYWNrZXRzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGlzIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nIHZpYSBuZXR3b3JrIHBhY2tldCBjcmFmdGluZyBhbmQgbmZ0YWJsZXMgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiLFxuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gICAgXCJuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NDAuNDk5Mjg2NzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzE3OTc3OTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjQwLjUwMDI2NDA0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMTc4Nzk2NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgdG8gY2hlY2sgZm9yIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucyBsYWNraW5nIHJlcGx5IHBhY2tldHMuXFxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxcbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVxcdTAwM2VzdGF0dXNgLCBgY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZWAsIGBmbG93LVxcdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ4ZWZlNjkyMjcxYzE2MWIzZWExZWU5YmY2MzE3YjA5NDFjZjA0ZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOToyODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbmluZGV4IGZkZTI0MjdjZWI4ZmMuLmE0ZTNkOWVkN2E2NGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbkBAIC0yMDgsNiArMjA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPT0gVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gfVxuK1xuKy8qIEEgZmxvdyBwaWNrZWQgdXAgd2l0aG91dCBpdHMgcmVwbHkgY2Fubm90IGJlY29tZSBhc3N1cmVkLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4re1xuK1x0cmV0dXJuIGN0LVx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4rfVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMTczLDYgKzExNzMsMjUgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0XHR9XG4gXG4rXHRcdC8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnNcbitcdFx0ICogd2hlbiB0aGUgcmVwbHkgZGlyZWN0aW9uIHRha2VzIGFub3RoZXIgcGF0aCwgYW5kIHRoZSBjbGllbnRcbitcdFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cbitcdFx0ICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXRcbitcdFx0ICogY3JlYXRlcyBhIG5ldyBvbmUgdGhhdCBzZWVkcyB0aGUgdW5zZWVuIGRpcmVjdGlvbiBmcm9tIHRoZVxuK1x0XHQgKiBwYWNrZXQgaXRzZWxmLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRuLVx1MDAzZXRjcF9sb29zZSBcdTAwMjZcdTAwMjYgIW5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgb2xkX3N0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBudG9obCh0aC1cdTAwM2VzZXEpID09IGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXG4rXHRcdFx0aWYgKG5mX2N0X2tpbGwoY3QpKVxuK1x0XHRcdFx0cmV0dXJuIC1ORl9SRVBFQVQ7XG4rXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRcdH1cbitcbiBcdFx0LyogSW52YWxpZCBwYWNrZXQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTQ2NSw2ICs0NjUsMjYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuIH1cbiBcbisvKiBUaGUgcmVwbHkgZGlyZWN0aW9uIG9mIGEgZmxvdyBvZmZsb2FkZWQgaW4gb25lIGRpcmVjdGlvbiBvbmx5IHN0YXlzIG9uIHRoZVxuKyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXG4rICogb2ZmbG9hZGVkIGluIGJvdGggZGlyZWN0aW9ucy5cbisgKi9cbitzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbit7XG4rXHRpZiAoZGlyICE9IEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgfHxcbitcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZmbG93LVx1MDAzZWN0LVx1MDAzZXN0YXR1cykpIHtcbitcdFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuQEAgLTQ3OCw2ICs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwaCk7XG5AQCAtMTA3NCw2ICsxMDk3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDMuLjBiNmJlOGFjM2QyNGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbkBAIC03Myw3ICs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXG4gXHRcdFx0XHRcdCAgc2l6ZW9mKF90Y3BoKSwgXHUwMDI2X3RjcGgpO1xuIFx0XHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cdTAwM2VmaW4gfHwgdGNwaC1cdTAwM2Vyc3QgfHxcbi1cdFx0XHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXG4rXHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fVURQOlxuQEAgLTExNyw3ICsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuLVx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4rXHRpZiAoIXRjcGggfHwgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSlcbitcdFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9mbG93X2FkZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLjUxNmE1NDQyNjZmMWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTUxNiw2ICs1MTYsNzkgQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuKyMgQXN5bW1ldHJpYyBwYXRoIHRlc3Q6XG4rIyBuczIgYW5zd2VycyBvdmVyIGEgZGlyZWN0IGxpbmssIHNvIG5zcjEgc2VlcyB0aGUgb3JpZ2luYWwgZGlyZWN0aW9uIG9ubHkuXG4rIyBTdWNoIGEgY29ubmVjdGlvbiBuZXZlciBiZWNvbWVzIGFzc3VyZWQsIGJ1dCB0aGUgZmxvd3RhYmxlIGlzIGV4cGVjdGVkIHRvXG4rIyB0YWtlIG92ZXIgdGhlIGRpcmVjdGlvbiB0aGF0IG5zcjEgZG9lcyBzZWUuXG4rY2hlY2tfb3JpZ19vZmZsb2FkZWQoKVxuK3tcbitcdGxvY2FsIHdoYXQ9JDFcbitcbitcdGxvY2FsIG9yaWdcbitcdG9yaWc9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBpbmV0IGZpbHRlciByb3V0ZWRfb3JpZyB8IGdyZXAgcGFja2V0cylcbitcdGxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9XG4rXG4rXHRsb2NhbCBmc1xuK1x0ZnM9JChkdSAtc2IgXCIkbnNpblwiKVxuK1x0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcbitcbitcdCMgdGhlIGZsb3d0YWJsZSB0YWtlcyBvdmVyIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0cywgc28gdGhlIGZvcndhcmRcbitcdCMgaG9vayBtdXN0IHNlZSBhIHNtYWxsIGZyYWN0aW9uIG9mIHRoZSB0cmFuc2ZlcnJlZCBmaWxlLlxuK1x0aWYgWyBcIiRvcmlnX2NudFwiIC1ndCBcIiRtYXhfb3JpZ1wiIF07dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJHdoYXQ6IG9yaWdpbmFsIGNvdW50ZXIgJG9yaWdfY250IGV4Y2VlZHMgZXhwZWN0ZWQgdmFsdWUgJG1heF9vcmlnXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRlY2hvIFwiUEFTUzogJHdoYXRcIlxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXG4re1xuK1x0aXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyBcIiRuczJcIlxuK1x0aXAgLW5ldCBcIiRuczFcIiBhZGRyIGFkZCAxMC4wLjkuOTkvMjQgZGV2IGV0aDFcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgMTAuMC45Ljk4LzI0IGRldiBldGgxXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWRcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgZGVhZDo5Ojo5OC82NCBkZXYgZXRoMSBub2RhZFxuK1x0aXAgLW5ldCBcIiRuczFcIiBsaW5rIHNldCBldGgxIHVwXG4rXHRpcCAtbmV0IFwiJG5zMlwiIGxpbmsgc2V0IGV0aDEgdXBcbitcbitcdCMgbnMxIGtlZXBzIHNlbmRpbmcgdGhyb3VnaCBuc3IxLCBuczIgYW5zd2VycyBvbiB0aGUgZGlyZWN0IGxpbmsuXG4rXHRpcCAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCAxMC4wLjEuOTkgdmlhIDEwLjAuOS45OSBkZXYgZXRoMVxuK1x0aXAgLTYgLW5ldCBcIiRuczJcIiByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMVxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczFcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnMyXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwiJG5zMVwiIFwiJG5zMlwiIDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGxpc3QgcnVsZXNldCAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZmlcbitcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbitcbitcdGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJJUHY2IGZsb3cgb2ZmbG9hZGVkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcIlxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBsaXN0IHJ1bGVzZXQgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zMVwiIHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczJcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTFcbitcbitcdGlwIC1uZXQgXCIkbnMxXCIgbGluayBkZWwgZXRoMVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aFxuK1xuICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbid0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZFxuICMgd2lsbCBkZXBlbmQgb24gbnMxIGJlaW5nIG1hc3F1ZXJhZGVkIGluIG5zcjEuXG4gIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo0MC41MDAyNjU3MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM2ODIxNjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgYXJlYXMgdGhhdCBLTVNBTiBuZWVkcyB0byBiZSBjb25jZXJuZWQgd2l0aC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgcmFjZXMuXG5cbkZpcnN0LCBJIHNlZSBhIG5ldyBmdW5jdGlvbiwgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkYCwgYWRkZWQgaW4gYG5mX2Nvbm50cmFja19sNHByb3RvLmhgLiBJdCBsb29rcyBsaWtlIGl0J3MgY2hlY2tpbmcgZm9yIFRDUCBjb25uZWN0aW9ucyB0aGF0IGFyZSBlc3RhYmxpc2hlZCBidXQgaGF2ZW4ndCByZWNlaXZlZCBhIHJlcGx5LiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgc28gSSdsbCBrZWVwIGFuIGV5ZSBvbiBob3cgdGhpcyBpcyB1c2VkLiBUaGUga2V5IHBhcnQgaXMgdGhlIHN0YXRlIGNoZWNrIGFuZCB0aGUgYElQU19TRUVOX1JFUExZX0JJVGAuXG5cblRoZW4sIEknbSBub3RpbmcgY2hhbmdlcyBpbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYC4gVGhlcmUncyBhIG5ldyBjaGVjayB3aXRoaW4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHRoYXQgaW52b2x2ZXMgYHRjcF9sb29zZWAsIGBuZmN0X3N5bnByb3h5YCwgYW5kIHNlcXVlbmNlIG51bWJlciBjb21wYXJpc29ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIGtpbGxpbmcgY29ubmVjdGlvbnMgYmFzZWQgb24gYSBTWU4tU0VOVCBzdGF0ZSBhbmQgc29tZSBUQ1Agc2VxdWVuY2UgbnVtYmVyIGNyaXRlcmlhIGlmIG5vIHJlcGx5IGlzIHNlZW4uIFRoaXMgaXMgYSBiaXQgY29tcGxleCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gcG9zc2liaWxpdGllcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjb25kaXRpb25hbCBraWxsIG9wZXJhdGlvbi5cblxuTW92aW5nIG9udG8gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIEkgc2VlIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIGFuZCBjYWxscyB0byBpdCBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoKWAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBmbG93cyBhbmQgb2ZmbG9hZGluZywgYW5kIGl0J3MgY29uZGl0aW9uYWwgb24gdGhlIGBGTE9XX09GRkxPQURfRElSX1JFUExZYCBhbmQgdGhlIGBORl9GTE9XX0hXX0JJRElSRUNUSU9OQUxgIGZsYWcuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYElQU19BU1NVUkVEX0JJVGAgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgYmlkaXJlY3Rpb25hbCBmbG93LiBJIG11c3QgY29uZmlybSB0aGF0IGFsbCBmbGFnIG1hbmlwdWxhdGlvbnMgYW5kIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3luY2hyb25pemVkIGFuZCBzYWZlLlxuXG5GaW5hbGx5LCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgYG5mdF9mbG93X29mZmxvYWRfZXZhbCgpYCBoYXMgbmV3IGxvZ2ljIHRoYXQgYWxsb3dzIHVucmVwbGllZCBUQ1AgY29ubmVjdGlvbnMgYW5kIGNvbmRpdGlvbmFsbHkgc2V0cyB0aGUgYE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTGAgZmxhZy4gVGhlIGNvbmRpdGlvbmFsIGNoZWNrIGFyb3VuZCBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpYCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgc3VidGxlIHN5bmNocm9uaXphdGlvbiBudWFuY2VzIHRoYXQgY291bGQgbGVhZCB0byBpc3N1ZXMuIEkgd2lsbCBhbHNvIGhhdmUgYSBjbG9zZSBsb29rIGF0IHRoZSB1c2FnZSBvZiBgX19zZXRfYml0YCB0byBtYWtlIHN1cmUgaXQncyBkb25lIGNvcnJlY3RseSBoZXJlLlxuXG5JJ20gYWxzbyBzZWVpbmcgYSBzZWxmdGVzdCBpbmNsdWRlZC4gVGhhdCdzIGdvb2QsIGJ1dCBpdCBkb2Vzbid0IHJlcGxhY2UgYSBkZXRhaWxlZCBtYW51YWwgYW5hbHlzaXMgb2YgdGhlIGNvZGUuIEkgd2lsbCByZXZpZXcgaXQgbGF0ZXIuXG5cblRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJJ2xsIHVzZSBgZ3JlcHBlcmAgKG9yIG15IHByZWZlcnJlZCB0b29sKSB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBtb3JlIGRlZXBseS4gSSBtaWdodCBhbHNvIGByZWFkLWZpbGVgIHRvIG1hbnVhbGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMuIE15IG1haW4gY29uY2VybiBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbXMsIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIGNvZGUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSB0aG9yb3VnaCBLTVNBTiByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo0OS44Njg0ODY2NDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTg2MDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NzI9c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ4ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTAuMjI0MzU2OTQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MTYyMDUxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipEaXZpbmcgaW50byBuZnRfZmxvd19vZmZsb2FkLmMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBuZnRfZmxvd19vZmZsb2FkLmNgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIGZsb3cgb2ZmbG9hZCBsb2dpYywgc28gdW5kZXJzdGFuZGluZyBob3cgaXQncyBldmFsdWF0aW5nIHJ1bGVzIGlzIGNydWNpYWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGZvciBwYWNrZXQgb2ZmbG9hZGluZy4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGNoZWNrcyBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIGZsb3cgcnVsZXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoaXMgc2VjdGlvbj8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWNjZXNzZWQgYXQgdGhpcyBwb2ludCwgbGlrZSB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzIG9yIHRoZSBydWxlIGNvbnRleHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmU6IGlzIGl0IGEgc2ltcGxlIGxvb2t1cCBvciBtb3JlIGNvbXBsZXggbG9naWMgaW52b2x2ZWQ/IEFyZSB3ZSBlZmZpY2llbnRseSB1dGlsaXppbmcgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmZWF0dXJlcyBhdmFpbGFibGUgaW4gdGhlIG5ldHdvcmsgY2FyZCwgb3IgZG9lcyBpdCBhcHBlYXIgd2UgYXJlIHNvZnR3YXJlLWJvdW5jaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdGhlIE5JQz8gSSdsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhpcyBldmFsdWF0aW9uIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MDQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo1NC4wNDA1NjUxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjU6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGN0ID0gbmZfY3RfZ2V0KHBrdC1cXHUwMDNlc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG4gIDY4OlxcdFxcdGlmICghY3QpXFxuICA2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0c3dpdGNoIChjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7XFxuICA3MjpcXHRcXHRjYXNlIElQUFJPVE9fVENQOlxcbiAgNzM6XFx0XFx0XFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXFx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXFxuICA3NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihfdGNwaCksIFxcdTAwMjZfdGNwaCk7XFxuICA3NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cXHUwMDNlZmluIHx8IHRjcGgtXFx1MDAzZXJzdCB8fFxcbiAgNzY6XFx0XFx0XFx0XFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFxcdTAwMjZcXHUwMDI2XFxuICA3NzpcXHRcXHRcXHRcXHQgICAgICAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKSkpXFxuICA3ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDc5OlxcdFxcdFxcdGJyZWFrO1xcbiAgODA6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUDpcXG4gIDgxOlxcdFxcdFxcdGJyZWFrO1xcbiAgODI6XFx0I2lmZGVmIENPTkZJR19ORl9DVF9QUk9UT19HUkVcXG4gIDgzOlxcdFxcdGNhc2UgSVBQUk9UT19HUkU6IHtcXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRcXHRpZiAoY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19OQVRfTUFTSylcXG4gIDg3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgODg6XFx0XFx0XFx0dHVwbGUgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xcbiAgODk6XFx0XFx0XFx0LyogTm8gc3VwcG9ydCBmb3IgR1JFIHYxICovXFxuICA5MDpcXHRcXHRcXHRpZiAodHVwbGUtXFx1MDAzZXNyYy51LmdyZS5rZXkgfHwgdHVwbGUtXFx1MDAzZWRzdC51LmdyZS5rZXkpXFxuICA5MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDkyOlxcdFxcdFxcdGJyZWFrO1xcbiAgOTM6XFx0XFx0fVxcbiAgOTQ6XFx0I2VuZGlmXFxuICA5NTpcXHRcXHRkZWZhdWx0OlxcbiAgOTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA5NzpcXHRcXHR9XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdGlmIChuZl9jdF9leHRfZXhpc3QoY3QsIE5GX0NUX0VYVF9IRUxQRVIpIHx8XFxuIDEwMDpcXHRcXHQgICAgY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IChJUFNfU0VRX0FESlVTVCB8IElQU19OQVRfQ0xBU0gpKVxcbiAxMDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSlcXG4gMTA0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChJUFNfT0ZGTE9BRF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4gMTA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxuIDExMDpcXHRcXHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXFx1MDAzZWZsb3d0YWJsZSkgXFx1MDAzYyAwKVxcbiAxMTE6XFx0XFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0ZmxvdyA9IGZsb3dfb2ZmbG9hZF9hbGxvYyhjdCk7XFxuIDExNDpcXHRcXHRpZiAoIWZsb3cpXFxuIDExNTpcXHRcXHRcXHRnb3RvIGVycl9mbG93X2FsbG9jO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRmbG93X29mZmxvYWRfcm91dGVfaW5pdChmbG93LCBcXHUwMDI2cm91dGUpO1xcbiAxMTg6XFx0XFx0aWYgKHRjcGgpXFxuIDExOTpcXHRcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0XFx0aWYgKCF0Y3BoIHx8ICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpXFxuIDEyMjpcXHRcXHRcXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiAxMjM6XFx0XFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xcbiAxMjQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDEyNTpcXHRcXHRcXHRnb3RvIGVycl9mbG93X2FkZDtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0cmV0dXJuO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRlcnJfZmxvd19hZGQ6XFxuIDEzMDpcXHRcXHRmbG93X29mZmxvYWRfZnJlZShmbG93KTtcXG4gMTMxOlxcdGVycl9mbG93X2FsbG9jOlxcbiAxMzI6XFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xcbiAxMzM6XFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcXG4gMTM0OlxcdGVycl9mbG93X3JvdXRlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo1NC4wNDA3MDE5MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzAyNzA5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBzbmlwcGV0IG9mIGNvZGUsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQqKlxuXG5SaWdodCwgc28gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBpcyBmdW5jdGlvbmluZywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGBuZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgIGFyb3VuZCBsaW5lIDExNzMuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGZ1bmN0aW9uIGxpdmVzLCBhbmQgdGhhdCdzIHRoZSBoZWFydCBvZiBob3cgVENQIHBhY2tldHMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBkaXNzZWN0cyB0aGUgVENQIGhlYWRlciwgYW5hbHl6ZXMgdGhlIGZsYWdzLCBhbmQgZmlndXJlcyBvdXQgdGhlIGNvbm5lY3Rpb24ncyBzdGF0ZSB0cmFuc2l0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoZXJlIOKAkyBob3cgaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgcGFja2V0IGlzIHBhcnQgb2YgYW4gZXN0YWJsaXNoZWQgZmxvdywgYSBuZXcgY29ubmVjdGlvbiBhdHRlbXB0LCBhIEZJTiwgb3IgYSBSU1QuIEl0J2xsIGJlIGVzc2VudGlhbCB0byBzZWUgaG93IHRoZXkncmUga2VlcGluZyB0cmFjayBvZiBzZXF1ZW5jZSBudW1iZXJzIGFuZCBhY2tub3dsZWRnZW1lbnRzLCB3aGljaCBpcyBob3cgVENQIGVuc3VyZXMgcmVsaWFibGUgZGF0YSB0cmFuc21pc3Npb24gYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIGl0cyBlZmZpY2llbmN5IGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODExMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTYuNzQzNDMyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1MDpcXHRcXHRcXHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXFx1MDAyNlxcdTAwMjZcXG4xMTUxOlxcdFxcdFxcdCAgICBkaXIgPT0gSVBfQ1RfRElSX1JFUExZKVxcbjExNTI6XFx0XFx0XFx0XFx0Y3QtXFx1MDAzZXByb3RvLnRjcC5sYXN0X2FjayA9IG50b2hsKHRoLVxcdTAwM2VhY2tfc2VxKTtcXG4xMTUzOlxcdFxcbjExNTQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4xMTU1OlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuMTE1NjpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaWdub3JlZCwgc3RhdGUgJXNcXFwiLFxcbjExNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLFxcbjExNTg6XFx0XFx0XFx0XFx0XFx0XFx0ICB0Y3BfY29ubnRyYWNrX25hbWVzW29sZF9zdGF0ZV0pO1xcbjExNTk6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xMTYwOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19NQVg6XFxuMTE2MTpcXHRcXHRcXHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcXG4xMTYyOlxcdFxcdFxcdCAqIHRoZSBTWU4vQUNLIGZyb20gdGhlIHNlcnZlciBpcyBsb3N0LCB0aGUgY2xpZW50IG1heSB0cmFuc21pdFxcbjExNjM6XFx0XFx0XFx0ICogYSBrZWVwLWFsaXZlIHBhY2tldCB3aGlsZSBpbiBTWU5fU0VOVCBzdGF0ZS4gVGhpcyBuZWVkcyB0b1xcbjExNjQ6XFx0XFx0XFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cXG4xMTY1OlxcdFxcdFxcdCAqIGdlbmVyYXRlIGEgbmV3IFNZTiB3aXRoIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG51bWJlci5cXG4xMTY2OlxcdFxcdFxcdCAqL1xcbjExNjc6XFx0XFx0XFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFxcdTAwMjZcXHUwMDI2IG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UIFxcdTAwMjZcXHUwMDI2XFxuMTE2ODpcXHRcXHRcXHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXFx1MDAyNlxcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcXHUwMDI2XFx1MDAyNlxcbjExNjk6XFx0XFx0XFx0ICAgIGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFxcdTAwMjZcXHUwMDI2XFxuMTE3MDpcXHRcXHRcXHQgICAgY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cXHUwMDNlc2VxKSkge1xcbjExNzE6XFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3RjcDogU1lOIHByb3h5IGNsaWVudCBrZWVwIGFsaXZlXFxcXG5cXFwiKTtcXG4xMTcyOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHQvKiBUaGUgYW5zd2VyIHRvIHRoZSBTWU4gbmV2ZXIgcGFzc2VkIHRoZSBob3N0LCBhcyBoYXBwZW5zXFxuMTE3NzpcXHRcXHRcXHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxcbjExNzg6XFx0XFx0XFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cXG4xMTc5OlxcdFxcdFxcdCAqIG92ZXIgYXMgYSBtaWQtc3RyZWFtIHBpY2t1cDogZGVsZXRlIHRoZSBlbnRyeSBzbyB0aGUgcGFja2V0XFxuMTE4MDpcXHRcXHRcXHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXFxuMTE4MTpcXHRcXHRcXHQgKiBwYWNrZXQgaXRzZWxmLlxcbjExODI6XFx0XFx0XFx0ICovXFxuMTE4MzpcXHRcXHRcXHRpZiAodG4tXFx1MDAzZXRjcF9sb29zZSBcXHUwMDI2XFx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXFx1MDAyNlxcdTAwMjZcXG4xMTg0OlxcdFxcdFxcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcXHUwMDI2XFx1MDAyNlxcbjExODU6XFx0XFx0XFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFxcdTAwMjZcXHUwMDI2IGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwgXFx1MDAyNlxcdTAwMjZcXG4xMTg2OlxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4xMTg3OlxcdFxcdFxcdCAgICBudG9obCh0aC1cXHUwMDNlc2VxKSA9PSBjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcXG4xMTg4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdFxcdFxcdGlmIChuZl9jdF9raWxsKGN0KSlcXG4xMTkxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtTkZfUkVQRUFUO1xcbjExOTI6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTE5MzpcXHRcXHRcXHR9XFxuMTE5NDpcXHRcXG4xMTk1OlxcdFxcdFxcdC8qIEludmFsaWQgcGFja2V0ICovXFxuMTE5NjpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbjExOTc6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4xMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpbnZhbGlkLCBzdGF0ZSAlc1xcXCIsXFxuMTE5OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGluZGV4LCBkaXIsXFxuMTIwMDpcXHRcXHRcXHRcXHRcXHRcXHQgIHRjcF9jb25udHJhY2tfbmFtZXNbb2xkX3N0YXRlXSk7XFxuMTIwMTpcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4xMjAyOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XFxuMTIwMzpcXHRcXHRcXHQvKiBSRkM1OTYxIGNvbXBsaWFuY2UgY2F1c2Ugc3RhY2sgdG8gc2VuZCBcXFwiY2hhbGxlbmdlLUFDS1xcXCJcXG4xMjA0OlxcdFxcdFxcdCAqIGUuZy4gaW4gcmVzcG9uc2UgdG8gc3B1cmlvdXMgU1lOcy4gIENvbm50cmFjayBNVVNUXFxuMTIwNTpcXHRcXHRcXHQgKiBub3QgYmVsaWV2ZSB0aGlzIEFDSyBpcyBhY2tpbmcgbGFzdCBGSU4uXFxuMTIwNjpcXHRcXHRcXHQgKi9cXG4xMjA3OlxcdFxcdFxcdGlmIChvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19MQVNUX0FDSyBcXHUwMDI2XFx1MDAyNlxcbjEyMDg6XFx0XFx0XFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFxcdTAwMjZcXHUwMDI2XFxuMTIwOTpcXHRcXHRcXHQgICAgY3QtXFx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciAhPSBkaXIgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTYuNzQzNjc1NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1ODcwNDQ4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93IE9mZmxvYWQgTG9naWMqKlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBpbXBsZW1lbnRhdGlvbi4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGRlY2lzaW9uLW1ha2luZyBsb2dpYyBmb3IgYWN0dWFsbHkgb2ZmbG9hZGluZyBwYWNrZXRzIGlzIGxvY2F0ZWQsIG9yIHNob3VsZCBiZSBsb2NhdGVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBwcm9jZXNzIHdoZW4gdGhlIGZsb3cgb2ZmbG9hZCBmZWF0dXJlIGlzIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBhIHBhY2tldCB0byBxdWFsaWZ5IGZvciBiZWluZyBvZmZsb2FkZWQuIFdoYXQgYXJlIHRoZSBrZXkgY2hlY2tzIGFyb3VuZCBjb25uZWN0aW9uIHN0YXRlLCBjb25udHJhY2ssIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWV0YWRhdGEuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBpbnRlZ3JhdGUgd2l0aCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEFueSBpbnRlcmFjdGlvbiB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYW55IHN1YnRsZSBlZGdlIGNhc2VzIGluIHRoYXQgYXJlYSwgaXMgd2hhdCBJJ20gbG9va2luZyBmb3IuIExldOKAmXMgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHdoZXJlIHRoZSBsb2dpYyBtaWdodCBpbnRyb2R1Y2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdW5kZXIgaGlnaCBsb2FkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGRlc2lnbmVkOyBpZGVudGlmeSBwb3RlbnRpYWwgYnVncywgY29ybmVyIGNhc2VzLCBhbmQgYXJlYXMgb2YgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU1OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTkuMzMwNzI0MTMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMClcXG4gNDYzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbiA0NjY6XFx0fVxcbiA0Njc6XFx0XFxuIDQ2ODpcXHQvKiBUaGUgcmVwbHkgZGlyZWN0aW9uIG9mIGEgZmxvdyBvZmZsb2FkZWQgaW4gb25lIGRpcmVjdGlvbiBvbmx5IHN0YXlzIG9uIHRoZVxcbiA0Njk6XFx0ICogY2xhc3NpYyBwYXRoIHNvIHRoYXQgY29ubnRyYWNrIHNlZXMgaXQuIE9uY2UgY29ubnRyYWNrIGhhcywgdGhlIGZsb3cgaXNcXG4gNDcwOlxcdCAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXFxuIDQ3MTpcXHQgKi9cXG4gNDcyOlxcdHN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNDczOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuIDQ3NDpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbiA0NzU6XFx0e1xcbiA0NzY6XFx0XFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XFxuIDQ3NzpcXHRcXHQgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbiA0Nzg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcXHUwMDI2Zmxvdy1cXHUwMDNlY3QtXFx1MDAzZXN0YXR1cykpIHtcXG4gNDgxOlxcdFxcdFxcdHNldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiA0ODI6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XFxuIDQ4MzpcXHRcXHR9XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdHJldHVybiB0cnVlO1xcbiA0ODY6XFx0fVxcbiA0ODc6XFx0XFxuIDQ4ODpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbiA0OTA6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbiA0OTE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNDkyOlxcdHtcXG4gNDkzOlxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxuIDQ5NDpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbiA0OTU6XFx0XFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XFxuIDQ5NjpcXHRcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuIDQ5OTpcXHRcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbiA1MDA6XFx0XFxuIDUwMTpcXHRcXHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxcbiA1MDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwMzpcXHRcXG4gNTA0OlxcdFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbiA1MDU6XFx0XFx0aWYgKGZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxcbiA1MDY6XFx0XFx0XFx0bXR1IC09IHNpemVvZigqaXBoKTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcXG4gNTA5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MTA6XFx0XFxuIDUxMTpcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgY3R4LVxcdTAwM2VvZmZzZXQpO1xcbiA1MTI6XFx0XFx0dGhvZmYgPSAoaXBoLVxcdTAwM2VpaGwgKiA0KSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbiA1MTM6XFx0XFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXBoLVxcdTAwM2Vwcm90b2NvbCwgc2tiLCB0aG9mZikpXFxuIDUxNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTE1OlxcdFxcbiA1MTY6XFx0XFx0aWYgKCFuZl9mbG93X2RzdF9jaGVjayhcXHUwMDI2dHVwbGVoYXNoLVxcdTAwM2V0dXBsZSkpIHtcXG4gNTE3OlxcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG4gNTE4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo1OS4zMzA4MTgzNDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE5MjQ4ODE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIElQdjYgT2ZmbG9hZCB3aXRoIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCoqXG5cbk9rYXksIEknbSBhbHJlYWR5IGRpZ2dpbmcgaW50byBvZmZsb2FkIHBlcmZvcm1hbmNlIGFuZCB0dW5hYmxlcywgc28gYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGluIHRoZSB3ZWVkcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgb2J2aW91cy4gSXQncyBhIGdvb2QgcHJhY3RpY2UgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGFsbCByZWxldmFudCBwYXJhbWV0ZXJzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgc3BlY2lmaWMgc2V0dGluZyBJIG5lZWQgdG8gbG9vayBhdCBpcyBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBJUHY2IHBhY2tldCBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG9mZmxvYWQgbWVjaGFuaXNtLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IGFyY2hpdGVjdHVyZSBhbmQgd29ya2xvYWRzLiBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoaXMgdG8gcGVyZm9ybWFuY2UgbWV0cmljcyBhbmQgbG9vayBmb3IgYW55IHJlZCBmbGFncyBvciBvcHRpbWl6YXRpb25zIEkgY2FuIG1ha2UgcmVsYXRlZCB0byB0aGlzIGtleSBwYXJhbWV0ZXIuIEl04oCZcyBhIHN0YW5kYXJkIHNhbml0eSBjaGVjaywgYnV0IG9mdGVuIHRoZXNlIHN1YnRsZSBzZXR0aW5ncyBjYW4gbWFrZSBvciBicmVhayB0aGUgcGVyZm9ybWFuY2Ugb2YgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBmbG93IG9mZmxvYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTozMDowMi41MjMzMTAwMjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4NTpcXHR9XFxuMTA4NjpcXHRcXG4xMDg3OlxcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbjEwODg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4xMDg5OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG4xMDkwOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpXFxuMTA5MTpcXHR7XFxuMTA5MjpcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbjEwOTM6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4xMDk0OlxcdFxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcbjEwOTU6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdGRpciA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyO1xcbjEwOTg6XFx0XFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0aWYgKG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoZmxvd190YWJsZSwgZmxvdywgZGlyKSlcXG4xMTAxOlxcdFxcdFxcdHJldHVybiAwO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRtdHUgPSBmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMTA0OlxcdFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4xMTA1OlxcdFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuMTExMTpcXHRcXHR0aG9mZiA9IHNpemVvZigqaXA2aCkgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMTEyOlxcdFxcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXFx1MDAzZW5leHRoZHIsIHNrYiwgdGhvZmYpKVxcbjExMTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdGlmICghbmZfZmxvd19kc3RfY2hlY2soXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUpKSB7XFxuMTExNjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuMTExNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTE4OlxcdFxcdH1cXG4xMTE5OlxcdFxcbjExMjA6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB0aG9mZiArIGN0eC1cXHUwMDNlaGRyc2l6ZSkpXFxuMTEyMTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4xMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTozMDowMi41MjM0MDU1NjNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNTU2MDIzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQ29uY2VybnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBLTVNBTi4gVGhlIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiBhc3ltbWV0cmljIHJvdXRpbmcsIGFuZCBtaWQtc3RyZWFtIHBpY2t1cCB3aXRoaW4gdGhlIE5ldGZpbHRlciBUQ1AgY29ubnRyYWNrIGFuZCBmbG93dGFibGUgb2ZmbG9hZCBtZWNoYW5pc21zLiBXZSBhcmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gZXN0YWJsaXNoZWQgc3RydWN0dXJlcyBhbmQgZmxvdyBsb2dpYywgbm90IHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IHN0cnVjdHVyZXMgdGhhdCBtaWdodCBjYXVzZSBpc3N1ZXMuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHk6IFRoZSBwYXRjaCBpbXBsZW1lbnRzIGhlbHBlciBmdW5jdGlvbnMgYW5kIGxvZ2ljIHdpdGhpbiBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCwgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYC4gVGhlc2UgY29tcG9uZW50cyBhcmUgZGVzaWduZWQgdG8gbWFuYWdlIFRDUCBjb25uZWN0aW9uIHN0YXRlcyB3aGVuIHRoZXJlJ3MgYXN5bW1ldHJpYyByb3V0aW5nLCB3aGVyZSB0aGUgcmVwbHkgcGF0aCBpc24ndCBpbW1lZGlhdGVseSBrbm93biwgb3Igd2hlcmUgb2ZmbG9hZGluZyB0byB0aGUgZmxvd3RhYmxlIGlzIGRlbGF5ZWQuIFNwZWNpZmljYWxseSB0aGUgbWlkLXN0cmVhbSBwaWNrdXAgbG9naWMsIGRlYWxpbmcgd2l0aCBhIFNZTiBmcm9tIHRoZSBjbGllbnQsIG5vIHJlcGx5IHNlZW4geWV0LCBhbmQgdGhlbiBhbiBBQ0sgbWF0Y2hpbmcgYSBwcmV2aW91c2x5IHNlZW4gc2VxdWVuY2UgbnVtYmVyLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBOZXRmaWx0ZXIvY29ubnRyYWNrIHRlcnJpdG9yeS5cblxuTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiAxKSBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ7IDIpIGFsbCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gZXhpc3RpbmcgYGZsb3dgIGFuZCBgY3RgIHN0cnVjdHVyZXMsIHN1Y2ggYXMgYGZsb3ctXHUwMDNlZmxhZ3NgLCBgY3QtXHUwMDNlc3RhdHVzYCwgYGN0LVx1MDAzZXByb3RvLnRjcC5zdGF0ZWA7IDMpIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM7IGFuZCA0KSBubyBidWZmZXIgcGFyc2luZyBvciBib3VuZHMgbW9kaWZpY2F0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnl0ZXMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkgYW0gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcy4gSXTigJlzIG1vZGlmeWluZyB0aGUgc3RhdGUgbWFjaGluZSBhbmQgcm91dGluZyBsb2dpYyB3aXRoaW4gdGhlIGVzdGFibGlzaGVkIE5ldGZpbHRlci9jb25udHJhY2sgZnJhbWV3b3JrLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3RhdGUgdHJhbnNpdGlvbnMsIHBhY2tldCBkcm9wcywgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG51bGwgZGVyZWZzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGUgcmVhbG0gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZywgS0FTQU4sIG9yIExPQ0tERVAuIEkgZm91bmQgbm8gZXZpZGVuY2Ugb2YgS01TQU4gY29uY2VybnMuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gZmluYWxpemUgdGhlIGFzc2Vzc21lbnQgYW5kIHNlbmQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzk5LCJPdXRwdXRUb2tlbnMiOjI4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjMwOjEzLjY3OTAxMTEwN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0ZmlsdGVyIGNvbm50cmFjayBhbmQgbmZ0YWJsZXMgZmxvd3RhYmxlIG9mZmxvYWQgbG9naWMgdG8gc3VwcG9ydCBhc3ltbWV0cmljIFRDUCBmbG93cyAod2hlcmUgcmVwbHkgdHJhZmZpYyBieXBhc3NlcyB0aGUgcm91dGVyKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxcbjIuIEl0IGludHJvZHVjZXMgYSBtaWQtc3RyZWFtIHBpY2t1cCBtZWNoYW5pc20gaW4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHdoZW4gdGhlIGxvb3NlIFRDUCBtb2RlIGlzIGVuYWJsZWQgYW5kIGEgcG9zdC1TWU4gQUNLIGlzIHJlY2VpdmVkIHdpdGhvdXQgYSByZXBseS5cXG4zLiBJdCB1cGRhdGVzIGBuZl9mbG93X3RhYmxlX2lwLmNgIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCB0byBzdXBwb3J0IHVuaWRpcmVjdGlvbmFsbHkgb2ZmbG9hZGVkIGZsb3dzIHVudGlsIGJpZGlyZWN0aW9uYWwgdHJhZmZpYyBpcyBjb25maXJtZWQuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbGwgc3RhdGUgZmxhZ3MgYW5kIHN0cnVjdCBmaWVsZHMgYWNjZXNzZWQgKGBjdC1cXHUwMDNlc3RhdHVzYCwgYGN0LVxcdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cXHUwMDNlZmxhZ3NgKSBiZWxvbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgY29ubnRyYWNrIGFuZCBmbG93IHRhYmxlIHN0cnVjdHVyZXMuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyAoc3VjaCBhcyBzdGF0ZSBtYWNoaW5lIGJ1Z3Mgb3IgcmVmZXJlbmNlL2xpZmV0aW1lIGlzc3VlcykgYXJlIGRldGVjdGFibGUgdGhyb3VnaCBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgdG8gY2hlY2sgZm9yIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucyBsYWNraW5nIHJlcGx5IHBhY2tldHMuXFxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxcbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVxcdTAwM2VzdGF0dXNgLCBgY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZWAsIGBmbG93LVxcdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 09:05:18 +0000 UTC FinishedAt: 2026-09-10 09:30:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_TABLES", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_TABLES", "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD" ], "series_id": "0428d600-8922-4aba-8968-6eedab94415b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_tcp_packet", "nft_flow_offload_eval", "nf_flow_reply_unoffloaded", "nf_flow_offload_forward", "nf_flow_offload_ipv6_forward" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfY29ubnRyYWNrX3RjcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGZpbHRlciBjb25udHJhY2sgYW5kIG5mdGFibGVzIGZsb3d0YWJsZSBvZmZsb2FkIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGx5IHRyYWZmaWMgYnlwYXNzZXMgdGhlIHJvdXRlcikuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxuMy4gSXQgdXBkYXRlcyBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mdF9mbG93X29mZmxvYWQuY2AgdG8gc3VwcG9ydCB1bmlkaXJlY3Rpb25hbGx5IG9mZmxvYWRlZCBmbG93cyB1bnRpbCBiaWRpcmVjdGlvbmFsIHRyYWZmaWMgaXMgY29uZmlybWVkLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVx1MDAzZXN0YXR1c2AsIGBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgbG9naWMgdG8gc3VwcG9ydCBhc3ltbWV0cmljIFRDUCBmbG93cyAod2hlcmUgcmVwbGllcyBieXBhc3MgdGhlIGhvc3QpLiBJdCB1cGRhdGVzIFRDUCBjb25udHJhY2sgcGFja2V0IHByb2Nlc3NpbmcgKG5mX2Nvbm50cmFja190Y3BfcGFja2V0KSB0byBoYW5kbGUgbWlkLXN0cmVhbSBwaWNrdXBzIGZvciB1bnJlcGxpZWQgY29ubmVjdGlvbnMsIGFuZCB1cGRhdGVzIGZsb3cgdGFibGUgZXZhbHVhdGlvbiBhbmQgZm9yd2FyZGluZyAobmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsLCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCwgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCkgdG8gZGVmZXIgYmlkaXJlY3Rpb25hbCBvZmZsb2FkaW5nIHVudGlsIGNvbm50cmFjayBjb25maXJtcyByZXBseSBwYWNrZXRzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGlzIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nIHZpYSBuZXR3b3JrIHBhY2tldCBjcmFmdGluZyBhbmQgbmZ0YWJsZXMgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OGVmZTY5MjI3MWMxNjFiM2VhMWVlOWJmNjMxN2IwOTQxY2YwNGY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDk6Mjg6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuaW5kZXggZmRlMjQyN2NlYjhmYy4uYTRlM2Q5ZWQ3YTY0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuQEAgLTIwOCw2ICYjNDM7MjA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPT0gVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gfVxuJiM0MztcbiYjNDM7LyogQSBmbG93IHBpY2tlZCB1cCB3aXRob3V0IGl0cyByZXBseSBjYW5ub3QgYmVjb21lIGFzc3VyZWQuICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3QtXHUwMDNlcHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX05GX0NUX1BST1RPX1NDVFBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBhZDZmMTk4NmQ1MmE2Li4zMzViMTEzMDFhNzhhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtMTE3Myw2ICYjNDM7MTE3MywyNSBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnNcbiYjNDM7XHRcdCAqIHdoZW4gdGhlIHJlcGx5IGRpcmVjdGlvbiB0YWtlcyBhbm90aGVyIHBhdGgsIGFuZCB0aGUgY2xpZW50XG4mIzQzO1x0XHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxuJiM0MztcdFx0ICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXRcbiYjNDM7XHRcdCAqIGNyZWF0ZXMgYSBuZXcgb25lIHRoYXQgc2VlZHMgdGhlIHVuc2VlbiBkaXJlY3Rpb24gZnJvbSB0aGVcbiYjNDM7XHRcdCAqIHBhY2tldCBpdHNlbGYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh0bi1cdTAwM2V0Y3BfbG9vc2UgXHUwMDI2XHUwMDI2ICFuZmN0X3N5bnByb3h5KGN0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG50b2hsKHRoLVx1MDAzZXNlcSkgPT0gY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobmZfY3Rfa2lsbChjdCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1ORl9SRVBFQVQ7XG4mIzQzO1x0XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogSW52YWxpZCBwYWNrZXQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTQ2NSw2ICYjNDM7NDY1LDI2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbiB9XG4gXG4mIzQzOy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlXG4mIzQzOyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXG4mIzQzOyAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XG4mIzQzO1x0ICAgIHRlc3RfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmZsb3ctXHUwMDNlY3QtXHUwMDNlc3RhdHVzKSkge1xuJiM0MztcdFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuQEAgLTQ3OCw2ICYjNDM7NDk4LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiBcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gXG4mIzQzO1x0aWYgKG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoZmxvd190YWJsZSwgZmxvdywgZGlyKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4gXHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiBcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbkBAIC0xMDc0LDYgJiM0MzsxMDk3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbiYjNDM7XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbiBcdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuIFx0XHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi4wYjZiZThhYzNkMjRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXG5AQCAtNzMsNyAmIzQzOzczLDggQEAgc3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXHUwMDNlc2tiLCBuZnRfdGhvZmYocGt0KSxcbiBcdFx0XHRcdFx0ICBzaXplb2YoX3RjcGgpLCBcdTAwMjZfdGNwaCk7XG4gXHRcdGlmICh1bmxpa2VseSghdGNwaCB8fCB0Y3BoLVx1MDAzZWZpbiB8fCB0Y3BoLVx1MDAzZXJzdCB8fFxuLVx0XHRcdCAgICAgIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpKSlcbiYjNDM7XHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKSkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJUFBST1RPX1VEUDpcbkBAIC0xMTcsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRpZiAodGNwaClcbiBcdFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XG4gXG4tXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRpZiAoIXRjcGggfHwgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSlcbiYjNDM7XHRcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZmxvd19hZGQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG5pbmRleCA0NDljNTE4YmQ5NDdkLi41MTZhNTQ0MjY2ZjFhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbkBAIC01MTYsNiAmIzQzOzUxNiw3OSBAQCBlbHNlXG4gXHRyZXQ9MVxuIGZpXG4gXG4mIzQzOyMgQXN5bW1ldHJpYyBwYXRoIHRlc3Q6XG4mIzQzOyMgbnMyIGFuc3dlcnMgb3ZlciBhIGRpcmVjdCBsaW5rLCBzbyBuc3IxIHNlZXMgdGhlIG9yaWdpbmFsIGRpcmVjdGlvbiBvbmx5LlxuJiM0MzsjIFN1Y2ggYSBjb25uZWN0aW9uIG5ldmVyIGJlY29tZXMgYXNzdXJlZCwgYnV0IHRoZSBmbG93dGFibGUgaXMgZXhwZWN0ZWQgdG9cbiYjNDM7IyB0YWtlIG92ZXIgdGhlIGRpcmVjdGlvbiB0aGF0IG5zcjEgZG9lcyBzZWUuXG4mIzQzO2NoZWNrX29yaWdfb2ZmbG9hZGVkKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIHdoYXQ9JDFcbiYjNDM7XG4mIzQzO1x0bG9jYWwgb3JpZ1xuJiM0MztcdG9yaWc9JChpcCBuZXRucyBleGVjIFwmIzM0OyRuc3IxXCYjMzQ7IG5mdCByZXNldCBjb3VudGVyIGluZXQgZmlsdGVyIHJvdXRlZF9vcmlnIHwgZ3JlcCBwYWNrZXRzKVxuJiM0MztcdGxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9XG4mIzQzO1xuJiM0MztcdGxvY2FsIGZzXG4mIzQzO1x0ZnM9JChkdSAtc2IgXCYjMzQ7JG5zaW5cJiMzNDspXG4mIzQzO1x0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcbiYjNDM7XG4mIzQzO1x0IyB0aGUgZmxvd3RhYmxlIHRha2VzIG92ZXIgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNrZXRzLCBzbyB0aGUgZm9yd2FyZFxuJiM0MztcdCMgaG9vayBtdXN0IHNlZSBhIHNtYWxsIGZyYWN0aW9uIG9mIHRoZSB0cmFuc2ZlcnJlZCBmaWxlLlxuJiM0MztcdGlmIFsgXCYjMzQ7JG9yaWdfY250XCYjMzQ7IC1ndCBcJiMzNDskbWF4X29yaWdcJiMzNDsgXTt0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICR3aGF0OiBvcmlnaW5hbCBjb3VudGVyICRvcmlnX2NudCBleGNlZWRzIGV4cGVjdGVkIHZhbHVlICRtYXhfb3JpZ1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtQQVNTOiAkd2hhdFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXG4mIzQzO3tcbiYjNDM7XHRpcCBsaW5rIGFkZCBuYW1lIGV0aDEgbmV0bnMgXCYjMzQ7JG5zMVwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIGV0aDEgbmV0bnMgXCYjMzQ7JG5zMlwmIzM0O1xuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zMVwmIzM0OyBhZGRyIGFkZCAxMC4wLjkuOTkvMjQgZGV2IGV0aDFcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgYWRkciBhZGQgMTAuMC45Ljk4LzI0IGRldiBldGgxXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMxXCYjMzQ7IGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWRcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgYWRkciBhZGQgZGVhZDo5Ojo5OC82NCBkZXYgZXRoMSBub2RhZFxuJiM0MztcdGlwIC1uZXQgXCYjMzQ7JG5zMVwmIzM0OyBsaW5rIHNldCBldGgxIHVwXG4mIzQzO1x0aXAgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IGxpbmsgc2V0IGV0aDEgdXBcbiYjNDM7XG4mIzQzO1x0IyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay5cbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczJcJiMzNDsgcm91dGUgYWRkIDEwLjAuMS45OSB2aWEgMTAuMC45Ljk5IGRldiBldGgxXG4mIzQzO1x0aXAgLTYgLW5ldCBcJiMzNDskbnMyXCYjMzQ7IHJvdXRlIGFkZCBkZWFkOjE6Ojk5IHZpYSBkZWFkOjk6Ojk5IGRldiBldGgxXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zMVwmIzM0OyBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuczJcJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXG4mIzQzO1x0XHRjaGVja19vcmlnX29mZmxvYWRlZCBcJiMzNDtmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnNyMVwmIzM0OyBuZnQgbGlzdCBydWxlc2V0IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwmIzM0OyRuczFcJiMzNDsgXCYjMzQ7JG5zMlwmIzM0OyAxIDYgXCYjMzQ7W2RlYWQ6Mjo6OTldXCYjMzQ7IDEyMzQ1OyB0aGVuXG4mIzQzO1x0XHRjaGVja19vcmlnX29mZmxvYWRlZCBcJiMzNDtJUHY2IGZsb3cgb2ZmbG9hZGVkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IGxpc3QgcnVsZXNldCAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRuczFcJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xXG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskbnMyXCYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxuJiM0MztcbiYjNDM7XHRpcCAtbmV0IFwmIzM0OyRuczFcJiMzNDsgbGluayBkZWwgZXRoMVxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zcjFcJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aFxuJiM0MztcbiAjIGRlbGV0ZSBkZWZhdWx0IHJvdXRlLCBpLmUuIG5zMiB3b24mIzM5O3QgYmUgYWJsZSB0byByZWFjaCBuczEgYW5kXG4gIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS5cbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGxpZXMgYnlwYXNzIHRoZSBob3N0KS4gSXQgdXBkYXRlcyBUQ1AgY29ubnRyYWNrIHBhY2tldCBwcm9jZXNzaW5nIChuZl9jb25udHJhY2tfdGNwX3BhY2tldCkgdG8gaGFuZGxlIG1pZC1zdHJlYW0gcGlja3VwcyBmb3IgdW5yZXBsaWVkIGNvbm5lY3Rpb25zLCBhbmQgdXBkYXRlcyBmbG93IHRhYmxlIGV2YWx1YXRpb24gYW5kIGZvcndhcmRpbmcgKG5mdF9mbG93X29mZmxvYWRfZXZhbCwgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQsIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQpIHRvIGRlZmVyIGJpZGlyZWN0aW9uYWwgb2ZmbG9hZGluZyB1bnRpbCBjb25udHJhY2sgY29uZmlybXMgcmVwbHkgcGFja2V0cy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBpcyB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZyB2aWEgbmV0d29yayBwYWNrZXQgY3JhZnRpbmcgYW5kIG5mdGFibGVzIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDhlZmU2OTIyNzFjMTYxYjNlYTFlZTliZjYzMTdiMDk0MWNmMDRmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjI4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAppbmRleCBmZGUyNDI3Y2ViOGZjLi5hNGUzZDllZDdhNjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaApAQCAtMjA4LDYgJiM0MzsyMDgsMTMgQEAgc3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogCXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwogCSAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cyk7CiB9CiYjNDM7CiYjNDM7LyogQSBmbG93IHBpY2tlZCB1cCB3aXRob3V0IGl0cyByZXBseSBjYW5ub3QgYmVjb21lIGFzc3VyZWQuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKTsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xMTczLDYgJiM0MzsxMTczLDI1IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCQl9CiAKJiM0MzsJCS8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnMKJiM0MzsJCSAqIHdoZW4gdGhlIHJlcGx5IGRpcmVjdGlvbiB0YWtlcyBhbm90aGVyIHBhdGgsIGFuZCB0aGUgY2xpZW50CiYjNDM7CQkgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvbgomIzQzOwkJICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXQKJiM0MzsJCSAqIGNyZWF0ZXMgYSBuZXcgb25lIHRoYXQgc2VlZHMgdGhlIHVuc2VlbiBkaXJlY3Rpb24gZnJvbSB0aGUKJiM0MzsJCSAqIHBhY2tldCBpdHNlbGYuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0bi0mZ3Q7dGNwX2xvb3NlICZhbXA7JmFtcDsgIW5mY3Rfc3lucHJveHkoY3QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW5kZXggPT0gVENQX0FDS19TRVQgJmFtcDsmYW1wOyBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmYW1wO2N0LSZndDtzdGF0dXMpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBudG9obCh0aC0mZ3Q7c2VxKSA9PSBjdC0mZ3Q7cHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJCQlpZiAobmZfY3Rfa2lsbChjdCkpCiYjNDM7CQkJCXJldHVybiAtTkZfUkVQRUFUOwomIzQzOwkJCXJldHVybiBORl9EUk9QOwomIzQzOwkJfQomIzQzOwogCQkvKiBJbnZhbGlkIHBhY2tldCAqLwogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKIAkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTQ2NSw2ICYjNDM7NDY1LDI2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKIH0KIAomIzQzOy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlCiYjNDM7ICogY2xhc3NpYyBwYXRoIHNvIHRoYXQgY29ubnRyYWNrIHNlZXMgaXQuIE9uY2UgY29ubnRyYWNrIGhhcywgdGhlIGZsb3cgaXMKJiM0MzsgKiBvZmZsb2FkZWQgaW4gYm90aCBkaXJlY3Rpb25zLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQkJICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcikKJiM0Mzt7CiYjNDM7CWlmIChkaXIgIT0gRkxPV19PRkZMT0FEX0RJUl9SRVBMWSB8fAomIzQzOwkgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtmbG93LSZndDtjdC0mZ3Q7c3RhdHVzKSkgewomIzQzOwkJc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAJCQkJICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLApAQCAtNDc4LDYgJiM0Mzs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAomIzQzOwlpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJbXR1ID0gZmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0OwogCWlmIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSkKIAkJbXR1IC09IHNpemVvZigqaXBoKTsKQEAgLTEwNzQsNiAmIzQzOzEwOTcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlkaXIgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpcjsKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwogCiYjNDM7CWlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAltdHUgPSBmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LSZndDtvZmZzZXQ7CiAJaWYgKGZsb3ctJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKQogCQltdHUgLT0gc2l6ZW9mKCppcDZoKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKaW5kZXggMzJiNDI4MTAzOGRkMy4uMGI2YmU4YWMzZDI0ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJCXRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LSZndDtza2IsIG5mdF90aG9mZihwa3QpLAogCQkJCQkgIHNpemVvZihfdGNwaCksICZhbXA7X3RjcGgpOwogCQlpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC0mZ3Q7ZmluIHx8IHRjcGgtJmd0O3JzdCB8fAotCQkJICAgICAhbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkpKQomIzQzOwkJCSAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CkBAIC0xMTcsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJaWYgKHRjcGgpCiAJCWZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpOwogCi0JX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKQomIzQzOwkJX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiAJcmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycl9mbG93X2FkZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCA0NDljNTE4YmQ5NDdkLi41MTZhNTQ0MjY2ZjFhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCkBAIC01MTYsNiAmIzQzOzUxNiw3OSBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MzsjIEFzeW1tZXRyaWMgcGF0aCB0ZXN0OgomIzQzOyMgbnMyIGFuc3dlcnMgb3ZlciBhIGRpcmVjdCBsaW5rLCBzbyBuc3IxIHNlZXMgdGhlIG9yaWdpbmFsIGRpcmVjdGlvbiBvbmx5LgomIzQzOyMgU3VjaCBhIGNvbm5lY3Rpb24gbmV2ZXIgYmVjb21lcyBhc3N1cmVkLCBidXQgdGhlIGZsb3d0YWJsZSBpcyBleHBlY3RlZCB0bwomIzQzOyMgdGFrZSBvdmVyIHRoZSBkaXJlY3Rpb24gdGhhdCBuc3IxIGRvZXMgc2VlLgomIzQzO2NoZWNrX29yaWdfb2ZmbG9hZGVkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHdoYXQ9JDEKJiM0MzsKJiM0MzsJbG9jYWwgb3JpZwomIzQzOwlvcmlnPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXIgaW5ldCBmaWx0ZXIgcm91dGVkX29yaWcgfCBncmVwIHBhY2tldHMpCiYjNDM7CWxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9CiYjNDM7CiYjNDM7CWxvY2FsIGZzCiYjNDM7CWZzPSQoZHUgLXNiICYjMzQ7JG5zaW4mIzM0OykKJiM0MzsJbG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSkKJiM0MzsKJiM0MzsJIyB0aGUgZmxvd3RhYmxlIHRha2VzIG92ZXIgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNrZXRzLCBzbyB0aGUgZm9yd2FyZAomIzQzOwkjIGhvb2sgbXVzdCBzZWUgYSBzbWFsbCBmcmFjdGlvbiBvZiB0aGUgdHJhbnNmZXJyZWQgZmlsZS4KJiM0MzsJaWYgWyAmIzM0OyRvcmlnX2NudCYjMzQ7IC1ndCAmIzM0OyRtYXhfb3JpZyYjMzQ7IF07dGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICR3aGF0OiBvcmlnaW5hbCBjb3VudGVyICRvcmlnX2NudCBleGNlZWRzIGV4cGVjdGVkIHZhbHVlICRtYXhfb3JpZyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJZWNobyAmIzM0O1BBU1M6ICR3aGF0JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9hc3ltbWV0cmljX3BhdGgoKQomIzQzO3sKJiM0MzsJaXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zICYjMzQ7JG5zMSYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyAmIzM0OyRuczImIzM0OwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OS8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OC8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWQKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyBhZGRyIGFkZCBkZWFkOjk6Ojk4LzY0IGRldiBldGgxIG5vZGFkCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBzZXQgZXRoMSB1cAomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGxpbmsgc2V0IGV0aDEgdXAKJiM0MzsKJiM0MzsJIyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay4KJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgMTAuMC4xLjk5IHZpYSAxMC4wLjkuOTkgZGV2IGV0aDEKJiM0MzsJaXAgLTYgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMSYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMiYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW4KJiM0MzsJCWNoZWNrX29yaWdfb2ZmbG9hZGVkICYjMzQ7ZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwlmaQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNiAmIzM0O1tkZWFkOjI6Ojk5XSYjMzQ7IDEyMzQ1OyB0aGVuCiYjNDM7CQljaGVja19vcmlnX29mZmxvYWRlZCAmIzM0O0lQdjYgZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMxJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMyJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBkZWwgZXRoMQomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aAomIzQzOwogIyBkZWxldGUgZGVmYXVsdCByb3V0ZSwgaS5lLiBuczIgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZAogIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS4KICMgZXhwZWN0IG5zMSBoYXMgbnNyMSBhZGRyZXNzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enosIHdoYXQgY29uZmlndXJhdGlvbnMgd2UmIzM5O2xsIG5lZWQsIGFuZCB3aGF0IHRoZSBrZXkgc3ltYm9scyBhcmUgdG8gZm9jdXMgb24uIEZpcnN0LCBsZXQmIzM5O3MgZGlnZXN0IHRoaXMgZGlmZi4KClRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIGJhc2VkIG9uIHRoZSBmaWxlIGNoYW5nZXMsIHNlZW1zIHRvIGJlIGFyb3VuZCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nLiBJJiMzOTttIHNlZWluZyBhZGRpdGlvbnMgdG8gYm90aCB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIChgbmZfY29ubnRyYWNrX2w0cHJvdG8uaGAgaW50cm9kdWNlcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWRgKSBhbmQgdGhlIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24gKGBuZl9mbG93X3RhYmxlX2lwLmNgLCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGhhbmRsaW5nIG9mIHVucmVwbGllZCBUQ1AgZmxvd3MsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBhc3ltbWV0cmljIHBhdGhzLCBhcyBoaW50ZWQgaW4gYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIG5vdyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGEgU1lOIG5ldmVyIGdldHMgYSByZXBseSBvbiB0aGUgaG9zdCB3aXRoICYjMzQ7bG9vc2UgY29ubnRyYWNrJiMzNDsgYW5kIHRoZSBhZGRpdGlvbiBvZiBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCgpYCBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgd2UgZGVhbCB3aXRoIHVucmVwbGllZCBmbG93cyBpbiB0aGUgb2ZmbG9hZCBjb250ZXh0LiBUaGUgaW5jbHVzaW9uIG9mIG5ldyB0ZXN0cyBpbiBgbmZ0X2Zsb3d0YWJsZS5zaGAgY29uZmlybXMgdGhpcyBhcmVhIG9mIGZvY3VzLgoKVGhpcyB1bnJlcGxpZWQgZmxvdyBoYW5kbGluZyBpcyB3aGVyZSB0aGUganVpY3kgYnVncyBhcmUgbGlrZWx5IHRvIGJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkIGFuZCBraWxsaW5nIGNvbm5lY3Rpb25zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBuZl9jdF9raWxsKGN0KWAgY2FsbHMgYW5kIHRoZSBiaWRpcmVjdGlvbmFsIGZsYWcgbG9naWMgaW4gYG5mdF9mbG93X29mZmxvYWRfZXZhbCgpYCB3aXRoIGEgZmluZS10b290aCBjb21iLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBvZmZsb2FkIGRlY2lzaW9ucyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBhcmUgb3V0IG9mIHN5bmMgb3Igc29tZSBpbnRlcm5hbCBzdGF0ZSBpcyBub3QgdXBkYXRlZCBjb3JyZWN0bHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBvZmZsb2FkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZSBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWEgZm9yIGZ1enppbmcuIFNvLCBJIG5lZWQgdG8gZ2V0IGZhbWlsaWFyIHdpdGggYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgLCBhbmQgdGhlIGNoYW5nZXMgYXJvdW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgpYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoKWAsIGFzIHdlbGwgYXMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoKWAuIEl0IHNlZW1zIHRoYXQgdGhlIG5ldyBmdW5jdGlvbnMgc3VjaCBhcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgYW5kIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIHdpbGwgYmUgY2VudHJhbCB0byB0aGF0LgoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGludG8gdGhlIHJlbGV2YW50IGNvZGUgY29udGV4dCBhbmQgc3BvdCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NTc9bmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTQ3MS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ3MjpzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ4OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNTAwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTAxOlx0aWYgKG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoZmxvd190YWJsZSwgZmxvdywgZGlyKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTUwMi1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA4Nz1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDk5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTEwMDpcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTAxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipEaXZpbmcgaW50byB0aGUgVENQIENvbm5lY3Rpb24gVHJhY2tpbmcgYW5kIEZsb3cgT2ZmbG9hZCBNZWNoYW5pY3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW50ZXJhY3RzIHdpdGggZmxvdyBvZmZsb2FkIGluIHRoZSBMaW51eCBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNzMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBjb3JlIFRDUCBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBGSU4tV0FJVCBzdGF0ZXMsIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgdGhlcmUgYXJvdW5kIHRoZSB2YXJpb3VzIHRpbWVycyBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuCgpOZXh0LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCBmbG93IG9mZmxvYWQuIExldCYjMzk7cyBjaGVjayBvdXQgYG5mdF9mbG93X29mZmxvYWQuY2AgYXJvdW5kIGxpbmUgNzMuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBOZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIGltcGxlbWVudGF0aW9uIGxpdmVzLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgaGFuZG9mZiBiZXR3ZWVuIGNvbm50cmFjayBhbmQgb2ZmbG9hZCwgd2hlbiBhbmQgaG93IHRoZSBvZmZsb2FkaW5nIGlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdGhlIHR3byBzdWJzeXN0ZW1zLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBvZmZsb2FkPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB1c2VkPwoKRmluYWxseSwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgbmZfZmxvd190YWJsZV9pcC5jYC4gVGhpcyB3aWxsIGxpa2VseSBjb250YWluIHRoZSBJUC1zcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgZmxvdyB0YWJsZSwgYW5kIGJ5IHJlYWRpbmcgdGhpcyBJJiMzOTtsbCBiZSBhYmxlIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgb2ZmbG9hZCBtZWNoYW5pc21zIGludGVyYWN0IHdpdGggdGhlIElQIGxheWVyLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgY29udGFpbiB0aGUgY29kZSB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgb2ZmbG9hZGluZyB0byBhIG5ldHdvcmsgY2FyZCBhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgY29tZSB0b2dldGhlci4gV2l0aCB0aGVzZSB0aHJlZSBsb2NhdGlvbnMgaW4gbWluZCwgSSBzaG91bGQgYmUgYWJsZSB0byByZWNvbnN0cnVjdCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgZXZlcnl0aGluZyB3b3JrcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTYwOlx0XHRjYXNlIFRDUF9DT05OVFJBQ0tfTUFYOlxuMTE2MTpcdFx0XHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcbjExNjI6XHRcdFx0ICogdGhlIFNZTi9BQ0sgZnJvbSB0aGUgc2VydmVyIGlzIGxvc3QsIHRoZSBjbGllbnQgbWF5IHRyYW5zbWl0XG4xMTYzOlx0XHRcdCAqIGEga2VlcC1hbGl2ZSBwYWNrZXQgd2hpbGUgaW4gU1lOX1NFTlQgc3RhdGUuIFRoaXMgbmVlZHMgdG9cbjExNjQ6XHRcdFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cbjExNjU6XHRcdFx0ICogZ2VuZXJhdGUgYSBuZXcgU1lOIHdpdGggdGhlIGNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyLlxuMTE2NjpcdFx0XHQgKi9cbjExNjc6XHRcdFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNiBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExNjg6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE2OTpcdFx0XHQgICAgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbjExNzA6XHRcdFx0ICAgIGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cdTAwM2VzZXEpKSB7XG4xMTcxOlx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmZfY3RfdGNwOiBTWU4gcHJveHkgY2xpZW50IGtlZXAgYWxpdmVcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuMTE3MzpcdFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4xMTc0Olx0XHRcdH1cbjExNzU6XHRcbjExNzY6XHRcdFx0LyogVGhlIGFuc3dlciB0byB0aGUgU1lOIG5ldmVyIHBhc3NlZCB0aGUgaG9zdCwgYXMgaGFwcGVuc1xuMTE3NzpcdFx0XHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxuMTE3ODpcdFx0XHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxuMTE3OTpcdFx0XHQgKiBvdmVyIGFzIGEgbWlkLXN0cmVhbSBwaWNrdXA6IGRlbGV0ZSB0aGUgZW50cnkgc28gdGhlIHBhY2tldFxuMTE4MDpcdFx0XHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXG4xMTgxOlx0XHRcdCAqIHBhY2tldCBpdHNlbGYuXG4xMTgyOlx0XHRcdCAqL1xuMTE4MzpcdFx0XHRpZiAodG4tXHUwMDNldGNwX2xvb3NlIFx1MDAyNlx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXHUwMDI2XHUwMDI2XG4xMTg0Olx0XHRcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExODU6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE4NjpcdFx0XHQgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSBcdTAwMjZcdTAwMjZcbjExODc6XHRcdFx0ICAgIG50b2hsKHRoLVx1MDAzZXNlcSkgPT0gY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcbjExODg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExODk6XHRcbjExOTA6XHRcdFx0XHRpZiAobmZfY3Rfa2lsbChjdCkpXG4xMTkxOlx0XHRcdFx0XHRyZXR1cm4gLU5GX1JFUEVBVDtcbjExOTI6XHRcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjExOTM6XHRcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdFx0XHQvKiBJbnZhbGlkIHBhY2tldCAqL1xuMTE5NjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExOTc6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbjExOTg6XHRcdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4xMTk5Olx0XHRcdFx0XHRcdCAgaW5kZXgsIGRpcixcbjEyMDA6XHRcdFx0XHRcdFx0ICB0Y3BfY29ubnRyYWNrX25hbWVzW29sZF9zdGF0ZV0pO1xuMTIwMTpcdFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbjEyMDI6XHRcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XG4xMjAzOlx0XHRcdC8qIFJGQzU5NjEgY29tcGxpYW5jZSBjYXVzZSBzdGFjayB0byBzZW5kIFwmIzM0O2NoYWxsZW5nZS1BQ0tcJiMzNDtcbjEyMDQ6XHRcdFx0ICogZS5nLiBpbiByZXNwb25zZSB0byBzcHVyaW91cyBTWU5zLiAgQ29ubnRyYWNrIE1VU1RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gbmZ0X2Zsb3dfb2ZmbG9hZC5jKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBvZmZsb2FkaW5nIG5ldHdvcmsgdHJhZmZpYyB0byBoYXJkd2FyZSwgcGFydGljdWxhcmx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZSBmbG93IGNhY2hlIGVudHJpZXMsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBmaWx0ZXIgYW5kIGhhcmR3YXJlIG9mZmxvYWQsIGFuZCBob3cgdGhlIGRlY2lzaW9uIHRvIG9mZmxvYWQgaXMgbWFkZSBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgc3VzcGVjdCBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUgYG5mdF9mbG93X29mZmxvYWRgIGhvb2tzIGZpdCBpbnRvIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZSwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgZGlmZmVyZW50IHByb3RvY29scyBhbmQgd2hldGhlciBpdCBzdXBwb3J0cyB0aGluZ3MgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nIHN0YXRlIGluIHRoZSBvZmZsb2FkIGRlY2lzaW9ucy4gVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB1bmRlcnBpbiB0aGUgb2ZmbG9hZCBwcm9jZXNzLCBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0XHRnb3RvIG91dDtcbiAgNjY6XHRcbiAgNjc6XHRcdGN0ID0gbmZfY3RfZ2V0KHBrdC1cdTAwM2Vza2IsIFx1MDAyNmN0aW5mbyk7XG4gIDY4Olx0XHRpZiAoIWN0KVxuICA2OTpcdFx0XHRnb3RvIG91dDtcbiAgNzA6XHRcbiAgNzE6XHRcdHN3aXRjaCAoY3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7XG4gIDcyOlx0XHRjYXNlIElQUFJPVE9fVENQOlxuICA3MzpcdFx0XHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cdTAwM2Vza2IsIG5mdF90aG9mZihwa3QpLFxuICA3NDpcdFx0XHRcdFx0XHQgIHNpemVvZihfdGNwaCksIFx1MDAyNl90Y3BoKTtcbiAgNzU6XHRcdFx0aWYgKHVubGlrZWx5KCF0Y3BoIHx8IHRjcGgtXHUwMDNlZmluIHx8IHRjcGgtXHUwMDNlcnN0IHx8XG4gIDc2Olx0XHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuICA3NzpcdFx0XHRcdCAgICAgICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpKSlcbiAgNzg6XHRcdFx0XHRnb3RvIG91dDtcbiAgNzk6XHRcdFx0YnJlYWs7XG4gIDgwOlx0XHRjYXNlIElQUFJPVE9fVURQOlxuICA4MTpcdFx0XHRicmVhaztcbiAgODI6XHQjaWZkZWYgQ09ORklHX05GX0NUX1BST1RPX0dSRVxuICA4MzpcdFx0Y2FzZSBJUFBST1RPX0dSRToge1xuICA4NDpcdFx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbiAgODU6XHRcbiAgODY6XHRcdFx0aWYgKGN0LVx1MDAzZXN0YXR1cyBcdTAwMjYgSVBTX05BVF9NQVNLKVxuICA4NzpcdFx0XHRcdGdvdG8gb3V0O1xuICA4ODpcdFx0XHR0dXBsZSA9IFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xuICA4OTpcdFx0XHQvKiBObyBzdXBwb3J0IGZvciBHUkUgdjEgKi9cbiAgOTA6XHRcdFx0aWYgKHR1cGxlLVx1MDAzZXNyYy51LmdyZS5rZXkgfHwgdHVwbGUtXHUwMDNlZHN0LnUuZ3JlLmtleSlcbiAgOTE6XHRcdFx0XHRnb3RvIG91dDtcbiAgOTI6XHRcdFx0YnJlYWs7XG4gIDkzOlx0XHR9XG4gIDk0Olx0I2VuZGlmXG4gIDk1Olx0XHRkZWZhdWx0OlxuICA5NjpcdFx0XHRnb3RvIG91dDtcbiAgOTc6XHRcdH1cbiAgOTg6XHRcbiAgOTk6XHRcdGlmIChuZl9jdF9leHRfZXhpc3QoY3QsIE5GX0NUX0VYVF9IRUxQRVIpIHx8XG4gMTAwOlx0XHQgICAgY3QtXHUwMDNlc3RhdHVzIFx1MDAyNiAoSVBTX1NFUV9BREpVU1QgfCBJUFNfTkFUX0NMQVNIKSlcbiAxMDE6XHRcdFx0Z290byBvdXQ7XG4gMTAyOlx0XG4gMTAzOlx0XHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXG4gMTA0Olx0XHRcdGdvdG8gb3V0O1xuIDEwNTpcdFxuIDEwNjpcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuIDEwNzpcdFx0XHRnb3RvIG91dDtcbiAxMDg6XHRcbiAxMDk6XHRcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbiAxMTA6XHRcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG4gMTExOlx0XHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4gMTEyOlx0XG4gMTEzOlx0XHRmbG93ID0gZmxvd19vZmZsb2FkX2FsbG9jKGN0KTtcbiAxMTQ6XHRcdGlmICghZmxvdylcbiAxMTU6XHRcdFx0Z290byBlcnJfZmxvd19hbGxvYztcbiAxMTY6XHRcbiAxMTc6XHRcdGZsb3dfb2ZmbG9hZF9yb3V0ZV9pbml0KGZsb3csIFx1MDAyNnJvdXRlKTtcbiAxMTg6XHRcdGlmICh0Y3BoKVxuIDExOTpcdFx0XHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcbiAxMjA6XHRcbiAxMjE6XHRcdGlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKVxuIDEyMjpcdFx0XHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiAxMjM6XHRcdHJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTtcbiAxMjQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTI1Olx0XHRcdGdvdG8gZXJyX2Zsb3dfYWRkO1xuIDEyNjpcdFxuIDEyNzpcdFx0cmV0dXJuO1xuIDEyODpcdFxuIDEyOTpcdGVycl9mbG93X2FkZDpcbiAxMzA6XHRcdGZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpO1xuIDEzMTpcdGVycl9mbG93X2FsbG9jOlxuIDEzMjpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xuIDEzMzpcdFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcbiAxMzQ6XHRlcnJfZmxvd19yb3V0ZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODM1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gSXQmIzM5O3Mgd2hlcmUgdGhlIElQLXNwZWNpZmljIGxvZ2ljIGZvciB0aGUgZmxvdyB0YWJsZSBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGFuZCBmbG93IGtleSBnZW5lcmF0aW9uIGhhcHBlbmluZyBpbiB0aGVyZSwgYWxvbmcgd2l0aCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSVAgcHJvdG9jb2wgZmFtaWx5LiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGZsb3dzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBuZl9jb25udHJhY2tgIHN1YnN5c3RlbSBoYXBwZW5zLCBnaXZlbiB0aGF0IHRoZSBmbG93IHRhYmxlIGlzIG1lYW50IHRvIGJlIGEgaGlnaC1wZXJmb3JtYW5jZSBhbHRlcm5hdGl2ZSB0byB0cmFkaXRpb25hbCBjb25uZWN0aW9uIHRyYWNraW5nIGluIG1hbnkgY2FzZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIHZhcmlvdXMgSVAgb3B0aW9ucywgZnJhZ21lbnRhdGlvbiwgYW5kIG90aGVyIGVkZ2UgY2FzZXMgd2l0aGluIHRoZSBmbG93IHRhYmxlIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVybmFscyBvZiB0aGlzIGZpbGUgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGFuZCBsaW1pdGF0aW9ucyBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3MDpcdCAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gNDcxOlx0ICovXG4gNDcyOlx0c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiA0NzQ6XHRcdFx0XHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4gNDc1Olx0e1xuIDQ3NjpcdFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XG4gNDc3Olx0XHQgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiA0Nzg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0aWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Zmxvdy1cdTAwM2VjdC1cdTAwM2VzdGF0dXMpKSB7XG4gNDgxOlx0XHRcdHNldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiA0ODI6XHRcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XG4gNDgzOlx0XHR9XG4gNDg0Olx0XG4gNDg1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA0ODY6XHR9XG4gNDg3Olx0XG4gNDg4Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ4OTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0OTA6XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbiA0OTE6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDkyOlx0e1xuIDQ5MzpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbiA0OTQ6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDk1Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbiA0OTY6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiA0OTk6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gNTAwOlx0XG4gNTAxOlx0XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuIDUwMjpcdFx0XHRyZXR1cm4gMDtcbiA1MDM6XHRcbiA1MDQ6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4gNTA1Olx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiA1MDY6XHRcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4gNTA5Olx0XHRcdHJldHVybiAwO1xuIDUxMDpcdFxuIDUxMTpcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbiA1MTI6XHRcdHRob2ZmID0gKGlwaC1cdTAwM2VpaGwgKiA0KSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuIDUxMzpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXBoLVx1MDAzZXByb3RvY29sLCBza2IsIHRob2ZmKSlcbiA1MTQ6XHRcdFx0cmV0dXJuIDA7XG4gNTE1Olx0XG4gNTE2Olx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbiA1MTc6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIDUxODpcdFx0XHRyZXR1cm4gMDtcbiA1MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NDIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBGbG93IE9mZmxvYWRpbmcqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBmbG93IG9mZmxvYWRpbmcuIFdlJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIElQdjQsIGJ1dCBnaXZlbiB0aGUgY3VycmVudCBuZXR3b3JrIGxhbmRzY2FwZSwgaXQmIzM5O3MgYWJzb2x1dGVseSBjcnVjaWFsIHRvIGFsc28gZXhhbWluZSB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgZm9jdXMgbWlnaHQgaGF2ZSBiZWVuIG9uIElQdjQsIGdpdmVuIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9ucywgYnV0IHdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gaWdub3JlIElQdjYuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2hlY2sgaG93IGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBpcyBiZWhhdmluZy4gSXMgaXQgd29ya2luZyBhcyBleHBlY3RlZD8gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBwb3RlbnRpYWwgYnVncyBpbiBpdHMgY3VycmVudCBjb25maWd1cmF0aW9uIG9yIGltcGxlbWVudGF0aW9uPyBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGltcG9ydGFudCBhbmQgdGhlcmVmb3JlIEkgc2hvdWxkIGNoZWNrIGl0LiBUaGlzIGlzIGNyaXRpY2FsIGZvciBlbmQtdG8tZW5kIHBlcmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5LCBhcyBJUHY2IGlzIGJlY29taW5nIGluY3JlYXNpbmdseSBwcmV2YWxlbnQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgY29uc2lzdGVudCBhbmQgb3B0aW1pemVkIG5ldHdvcmtpbmcgZXhwZXJpZW5jZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODU6XHR9XG4xMDg2Olx0XG4xMDg3Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4xMDg4Olx0XHRcdFx0XHRcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4xMDg5Olx0XHRcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbjEwOTA6XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbjEwOTE6XHR7XG4xMDkyOlx0XHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xuMTA5MzpcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbjEwOTQ6XHRcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xuMTA5NTpcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4xMDk2Olx0XG4xMDk3Olx0XHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuMTA5ODpcdFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbjEwOTk6XHRcbjExMDA6XHRcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4xMTAxOlx0XHRcdHJldHVybiAwO1xuMTEwMjpcdFxuMTEwMzpcdFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjExMDQ6XHRcdGlmIChmbG93LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxuMTEwNTpcdFx0XHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcbjExMDY6XHRcbjExMDc6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4xMTA4Olx0XHRcdHJldHVybiAwO1xuMTEwOTpcdFxuMTExMDpcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbjExMTE6XHRcdHRob2ZmID0gc2l6ZW9mKCppcDZoKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuMTExMjpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXA2aC1cdTAwM2VuZXh0aGRyLCBza2IsIHRob2ZmKSlcbjExMTM6XHRcdFx0cmV0dXJuIDA7XG4xMTE0Olx0XG4xMTE1Olx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbjExMTY6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuMTExNzpcdFx0XHRyZXR1cm4gMDtcbjExMTg6XHRcdH1cbjExMTk6XHRcbjExMjA6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgJiM0MzsgY3R4LVx1MDAzZWhkcnNpemUpKVxuMTEyMTpcdFx0XHRyZXR1cm4gLTE7XG4xMTIyOlx0XG4xMTIzOlx0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XG4xMTI0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIE5ldGZpbHRlci9Db25udHJhY2svRmxvd3RhYmxlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZT8gRm9yIHRoZSBOZXRmaWx0ZXIsIGNvbm50cmFjaywgYW5kIGZsb3d0YWJsZSBzdWJzeXN0ZW1zICh0aGUgY29yZSBuZXR3b3JraW5nIHN0dWZmKSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCDigJMgc29ja2V0cywgdHVuL3RhcCwgdmV0aCwgbmV0bGluayAobmZ0YWJsZXMvY29ubnRyYWNrKSBhcmUgYWxsIGVhc2lseSBleGVyY2lzZWQgYnkgc3l6a2FsbGVyLiBObyBwcm9ibGVtIHRoZXJlLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRoYXQgY2F0Y2ggbXkgYXR0ZW50aW9uLiBJbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLCBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgZGVhbHMgd2l0aCBhc3ltbWV0cmljIHBhdGhzIGFuZCBtaWQtc3RyZWFtIHBpY2t1cHMgd2hlbiB0aGUgU1lOIHJlcGx5IG5ldmVyIGV2ZW4gdG91Y2hlZCB0aGUgaG9zdCwgcGFydGljdWxhcmx5IHdoZW4gYHRjcF9sb29zZWAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGVuLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2AgYWxsb3dzIGZvciBvZmZsb2FkaW5nIHVucmVwbGllZCBUQ1AgZmxvd3Mgd2hpbGUgbWFuaXB1bGF0aW5nIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBBbmQgZmluYWxseSwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKClgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgIHRvdWNoIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgLCB3aGljaCBpbnNwZWN0cyBhbmQgbW9kaWZpZXMgYE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTGAgd2hpbGUgY2FsbGluZyBgZmxvd19vZmZsb2FkX3JlZnJlc2goKWAuICBQbHVzLCB0aGVyZSYjMzk7cyBhIG5ldyBpbmxpbmUgaGVscGVyLCBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oYC4gQWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJlc3RpbmcsIGluIHBhcnRpY3VsYXIgaG93IHRoZXkgaGFuZGxlIFRDUCBjb25udHJhY2sgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGZsb3d0YWJsZSBvZmZsb2FkLgoKU28sIGluIG15IGV4cGVydCBvcGluaW9uLCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGVhbGluZyB3aXRoIFRDUCBjb25udHJhY2sgYW5kIGZsb3d0YWJsZSBvZmZsb2FkaW5n4oCUYSBoaWdoLXZhbHVlIHRhcmdldC4KCk5vdywgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0YXJnZXQgc3lzdGVtLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCB0byBjb21waWxlIGFuZCBhY3R1YWxseSBleGVjdXRlIHRoaXMgY29kZS4gIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AsIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KG5mX2Zsb3dfdGFibGV8bmZ0X2Zsb3dfb2ZmbG9hZHxuZl9jb25udHJhY2tfcHJvdG9fdGNwKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT01PW5mX2Nvbm50cmFjay15XHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo2Olx0XHQgICBuZl9jb25udHJhY2tfcHJvdG8ubyBuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5vIG5mX2Nvbm50cmFja19wcm90b190Y3AubyBuZl9jb25udHJhY2tfcHJvdG9fdWRwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNy1cdFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXHRcdCYjNDM7PSBuZnRfY3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXHQmIzQzOz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVx0XHQmIzQzOz0gbmZ0X2xpbWl0Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzOT1vYmotJChDT05GSUdfTkZUX0ZXRF9ORVRERVYpXHQmIzQzOz0gbmZ0X2Z3ZF9uZXRkZXYub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NDpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NTpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ2Om5mX2Zsb3dfdGFibGUtJChDT05GSUdfTkZfRkxPV19UQUJMRV9QUk9DRlMpICYjNDM7PSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0Ny1pZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSxtKVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDg6bmZfZmxvd190YWJsZS0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSAmIzQzOz0gbmZfZmxvd190YWJsZV9icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDktZWxzZSBpZmVxICgkKENPTkZJR19ORl9GTE9XX1RBQkxFKSx5KVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTA6bmZfZmxvd190YWJsZS0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX2Zsb3dfdGFibGVfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUxLWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Mi1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTUzOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFX0lORVQpICYjNDM7PSBuZl9mbG93X3RhYmxlX2luZXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ3CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGludmVzdGlnYXRpb24sIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBOZXR3b3JrIENvbm5lY3Rpb24gVHJhY2tpbmcgJmFtcDsgRmxvdyBPZmZsb2FkKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggc29tZSBLY29uZmlnIGh1bnRpbmcuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZvdW5kYXRpb24gZm9yIG5ldHdvcmsgY29ubmVjdGlvbiB0cmFja2luZyBpcyBlbmFibGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGRlZmluaXRpb25zIGZvciBgTkZfQ09OTlRSQUNLYC4gVGhhdCYjMzk7cyB0aGUgYmVkcm9jaywgcmlnaHQ/IFdpdGhvdXQgaXQsIHdlJiMzOTtyZSBub3QgZ29pbmcgYW55d2hlcmUuIFRoZW4sIHNpbmNlIHdlJiMzOTtyZSBwcm9iYWJseSB0YWxraW5nIGFib3V0IHNvbWUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIG5ld2VyIG5ldHdvcmtpbmcgZmVhdHVyZXMsIEkmIzM5O2xsIG1vdmUgb24gdG8gYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3RhdGVmdWwgZmlyZXdhbGwgY2FwYWJpbGl0aWVzIGFuZCBhbnkgb2ZmbG9hZGluZyB0ZWNobmlxdWVzLiBGaW5hbGx5LCBJJiMzOTtsbCBkZWZpbml0ZWx5IHdhbnQgdG8gdmVyaWZ5IGBORl9UQUJMRVNgIOKAkyB0aGF0JiMzOTtzIHRoZSBmcmFtZXdvcmsgZm9yIGRlZmluaW5nIHRoZSBydWxlcyBhbmQgcG9saWNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQgZnJhbWV3b3JrIGlzIHNldCBjb3JyZWN0bHksIHRvby4gSSYjMzk7bSBlc3NlbnRpYWxseSB0cmFjaW5nIHRoZSBkZXBlbmRlbmNpZXMgaGVyZSwgbWFraW5nIHN1cmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgaW4gcGxhY2UgYW5kIGNvbmZpZ3VyZWQgYXMgSSYjMzk7ZCBleHBlY3QuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyBvZiB0aGVzZSBzZXR0aW5ncyBpcyBrZXkgdG8gaW50ZXJwcmV0aW5nIHRoZSBvdmVyYWxsIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBuZWVkIHRvIGFsc28gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgaW5jb21wYXRpYmlsaXRpZXMuIEl0JiMzOTtzIGEgc3lzdGVtYXRpYyBwcm9jZXNzLCByZWFsbHksIGJ1dCBlc3NlbnRpYWwgZm9yIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgKE5GX0NPTk5UUkFDS3xORl9GTE9XX1RBQkxFfE5GVF9GTE9XX09GRkxPQUR8TkZfVEFCTEVTKVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBrZXJuZWwgbW9kdWxlcywgYE5GVF9GTE9XX09GRkxPQURgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZfQ09OTlRSQUNLYCwgYXJlIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgZ28tdG8gc291cmNlIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZWFjaCBvZiB0aGVtLCBzeXN0ZW1hdGljYWxseSB3b3JraW5nIHRocm91Z2ggdGhlIG9wdGlvbnMgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZWlyIHB1cnBvc2UgYW5kIHBvc3NpYmxlIGludGVycGxheS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGFueSBjaGFuZ2VzIG9yIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0ZGVmYXVsdCBuXG4gNTAxOlx0XHRoZWxwXG4gNTAyOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgbWF0Y2hpbmcgb24gRENDUCBleHRlbnNpb24gaGVhZGVycy5cbiA1MDM6XHRcbiA1MDQ6XHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxuIDUwNTpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA1MDY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVwmIzM0O1xuIDUwNzpcdFx0aGVscFxuIDUwODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTA5Olx0XHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXG4gNTEwOlx0XG4gNTExOlx0Y29uZmlnIE5GVF9DT05OTElNSVRcbiA1MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuIDUxMzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA1MTQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gNTE1Olx0XHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxuIDUxNjpcdFx0aGVscFxuIDUxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtjb25ubGltaXRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTE4Olx0XHQgIHJhdGVsaW1pdCBydWxlIG1hdGNoaW5ncyBwZXIgY29ubmVjdGlvbnMuXG4gNTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTkZfRkxPV19UQUJMRSBhbmQgS2NvbmZpZyBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBORl9GTE9XX1RBQkxFYCBvcHRpb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYEtjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgYXJvdW5kIGxpbmUgNzEwLCBnaXZlIG9yIHRha2UsIGFzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQmIzM5O3Mgd2hlcmUgY29yZSBuZXR3b3JrIGZlYXR1cmVzIGFyZSBvZnRlbiBkZWZpbmVkLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBtYW5hZ2luZyBhbmQgYWNjZWxlcmF0aW5nIG5ldHdvcmsgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgd2hhdCBvdGhlciByZWxhdGVkIG9wdGlvbnMgYXJlIHByZXNlbnQuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIElzIGl0IG1vZHVsYXI/IEJ1aWx0LWluPyBXaGF0IGJ1aWxkLXRpbWUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gZGVwZW5kZW5jaWVzPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmbG93IHRhYmxlIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZCBhdCB0aGUgY29uZmlndXJhdGlvbiBzdGFnZSwgYXMgdGhpcyB3aWxsIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IgYW5kIGF2YWlsYWJpbGl0eSB3aXRoaW4gdGhlIHN5c3RlbSwgYXMgd2VsbCBhcyBhbnkgdHJvdWJsZXNob290aW5nIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XG4gNzAxOlx0ZW5kaWYgIyBORl9UQUJMRVNcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG4gNzA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4gNzA1Olx0XHRkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEVcbiA3MDY6XHRcdGhlbHBcbiA3MDc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgc3VwcG9ydC5cbiA3MDg6XHRcbiA3MDk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA3MTA6XHRcbiA3MTE6XHRjb25maWcgTkZfRkxPV19UQUJMRVxuIDcxMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXCYjMzQ7XG4gNzEzOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXG4gNzE0Olx0XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xuIDcxNTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiA3MTY6XHRcdGhlbHBcbiA3MTc6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxuIDcxODpcdFxuIDcxOTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDcyMDpcdFxuIDcyMTpcdGNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xuIDcyMjpcdFx0Ym9vbCBcJiMzNDtTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1wmIzM0O1xuIDcyMzpcdFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXG4gNzI0Olx0XHRkZXBlbmRzIG9uIFBST0NfRlNcbiA3MjU6XHRcdGhlbHBcbiA3MjY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmb3IgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBzdGF0aXN0aWNzXG4gNzI3Olx0XHQgIHRvIGJlIHNob3duIGluIHByb2NmcyB1bmRlciBuZXQvbmV0ZmlsdGVyL25mX2Zsb3d0YWJsZS5cbiA3Mjg6XHRcbiA3Mjk6XHRjb25maWcgTkVURklMVEVSX1hUQUJMRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBhcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGVzc2VudGlhbCBvbmVzIGFyZSBzZXQ6IGBORl9DT05OVFJBQ0tgLCBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GVF9GTE9XX09GRkxPQURgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgc3ltYm9scyBvciBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkgaGVyZSBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBJIHNlZToKCiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgOiBUaGlzIG9uZSYjMzk7cyBpbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBtaWQtc3RyZWFtIHBhY2tldCBwaWNrdXAgYW5kIGRlYWwgd2l0aCBhc3ltbWV0cmljIHBhdGggc2l0dWF0aW9ucy4KKiAgIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgOiBJbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpcyB0aGUgY29yZSBldmFsdWF0aW9uIGZ1bmN0aW9uLiBTZWVtcyBpdCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgb2ZmbG9hZGluZyB1bnJlcGxpZWQgVENQIGZsb3dzIGFuZCBjaGVja2luZyB0aGUgYmlkaXJlY3Rpb25hbCBmbGFnLgoqICAgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgOiBBIG5ldyBzdGF0aWMgZnVuY3Rpb24gaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIFRoaXMgaXMgaW50cmlndWluZzsgaXQgcHJvYmFibHkgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuCiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgOiBBbm90aGVyIG9uZSBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kIGl0IGNhbGxzIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkYC4KKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYDogQWxzbyBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kLCBhZ2FpbiwgaXQgY2FsbHMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgLiBTbyBpdCBsb29rcyBsaWtlIHRoZXNlIGZvcndhcmQgZnVuY3Rpb25zIG5lZWQgdGhpcyBuZXcgcmVwbHkgaGFuZGxpbmcgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBmbG93cy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdmlzaWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEFyZSB0aGV5IHN0YXRpYywgb3IgYXJlIHRoZXkgZXhwb3J0ZWQ/IEFyZSB0aGV5IGluIC5jIGZpbGVzPyBJIGhhdmUgdG8ga25vdyB3aG8gY2FuIGNhbGwgd2hvLgoKKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGA6IEl0JiMzOTtzIGEgbm9uLXN0YXRpYywgc28gaXQmIzM5O3MgZ2xvYmFsbHkgdmlzaWJsZS4gR29vZCB0byBrbm93LgoqICAgYG5mdF9mbG93X29mZmxvYWRfZXZhbGA6IFRoaXMgb25lJiMzOTtzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBzY29wZSB3aXRoaW4gYG5mdF9mbG93X29mZmxvYWQuY2AuCiogICBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZGA6IFRoaXMgb25lJiMzOTtzIGFsc28gc3RhdGljLCByZXNpZGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuCiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgOiBUaGlzIG9uZSBpcyBzdGF0aWMgdG9vLCBhbmQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuCiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGA6IGFuZCB0aGlzIG9uZSB0b28sIGFsc28gc3RhdGljIGFuZCBpbiBgbmZfZmxvd190YWJsZV9pcC5jYC4KCk9rYXksIGZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgdGhlc2UsIGFuZCB3aGljaCBvdGhlciBmdW5jdGlvbnMgYXJlIHRoZXkgY2FsbGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyAqcmVhbGx5KiBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd19vZmZsb2FkLipmb3J3YXJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDcyPXN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00ODctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0ODg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTAyMT1zdGF0aWMgaW50IG5mX2Zsb3dfdHVwbGVfaXB2NihzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwODYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMDg3OnN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtMTA4OC1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMjE5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjM4LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIzOTpcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjQwLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzEKCQkJCQkJCW91dHB1dDogMjQ4CgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBGbG93IE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvbnNpZGVyZWQgYWxsIHJlbGV2YW50IGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWRkIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCB0byB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gcmV2aWV3LCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKTm93LCB3aGljaCBGb2N1c1N5bWJvbHMgd2lsbCBiZSB0aGUgbW9zdCBlZmZlY3RpdmUgZm9yIGZ1enppbmc/IEFmdGVyIHJldmlld2luZywgaXQmIzM5O3MgY2xlYXIgdGhlIGJlc3QgY2hvaWNlcyBhcmU6CiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgCiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYAoqICAgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgCiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgCiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAKKiAgIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AKKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYAoKVGhlc2UgYXJlIGFsbCBzcGVjaWZpYyB0byB0aGUgbmV0ZmlsdGVyIGFuZCBmbG93dGFibGUgY29kZSBwYXRocyB0aGF0IHdlcmUgYWN0dWFsbHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLCBtYWtpbmcgdGhlbSBpZGVhbCB0YXJnZXRzLiBUaGV5IGFyZW4mIzM5O3QgZ2VuZXJpYyB1dGlsaXRpZXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgdHJ1ZS4gVGhlIHJlYXNvbmluZyBpczogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGhhbmRsaW5nIGZvciBhc3ltbWV0cmljIHJvdXRpbmcgYW5kIHVucmVwbGllZCBtaWQtc3RyZWFtIFRDUCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb25udHJhY2sgYW5kIGhhcmR3YXJlIGZsb3d0YWJsZSBvZmZsb2FkIG1lY2hhbmlzbXMuIEl0IHNwZWNpZmljYWxseSBhbHRlcnMgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHRvIGhhbmRsZSBtaWQtc3RyZWFtIGNvbm5lY3Rpb25zIHdoZXJlIFNZTiByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdC4gQWxzbywgYG5mdF9mbG93X29mZmxvYWRfZXZhbCgpYCwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKClgLCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoKWAgYXJlIHVwZGF0ZWQgdXNpbmcgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoKWAgdG8gc3VwcG9ydCB0aGUgb2ZmbG9hZGluZyBvZiB1bmlkaXJlY3Rpb25hbCBUQ1AgZmxvd3MgdW50aWwgdGhlIHJlcGx5IGlzIHNlZW4uIFRoaXMgcmVwcmVzZW50cyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlIHZpYSBuZXR3b3JrIHNvY2tldHMgYW5kIG5ldGZpbHRlci9uZnRhYmxlcyBydWxlcy4KCkkmIzM5O2xsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBFbmFibGVDb25maWdzOiBgWyYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssICYjMzQ7TkZfVEFCTEVTJiMzNDssICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LCAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0O11gLgoKVGhlIGZpbmFsIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBbJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LCAmIzM0O25mdF9mbG93X29mZmxvYWRfZXZhbCYjMzQ7LCAmIzM0O25mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQmIzM0OywgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LCAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQmIzM0O11gCgpPa2F5LCB3aXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJJiMzOTttIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19vZmZsb2FkX2V2YWwmIzM0OywKICAgICYjMzQ7bmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19vZmZsb2FkX2V2YWwmIzM0OywKICAgICYjMzQ7bmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGZpbHRlciBjb25udHJhY2sgYW5kIG5mdGFibGVzIGZsb3d0YWJsZSBvZmZsb2FkIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGx5IHRyYWZmaWMgYnlwYXNzZXMgdGhlIHJvdXRlcikuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxuMy4gSXQgdXBkYXRlcyBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mdF9mbG93X29mZmxvYWQuY2AgdG8gc3VwcG9ydCB1bmlkaXJlY3Rpb25hbGx5IG9mZmxvYWRlZCBmbG93cyB1bnRpbCBiaWRpcmVjdGlvbmFsIHRyYWZmaWMgaXMgY29uZmlybWVkLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVx1MDAzZXN0YXR1c2AsIGBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDhlZmU2OTIyNzFjMTYxYjNlYTFlZTliZjYzMTdiMDk0MWNmMDRmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjI4OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAppbmRleCBmZGUyNDI3Y2ViOGZjLi5hNGUzZDllZDdhNjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaApAQCAtMjA4LDYgJiM0MzsyMDgsMTMgQEAgc3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogCXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwogCSAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZhbXA7Y3QtJmd0O3N0YXR1cyk7CiB9CiYjNDM7CiYjNDM7LyogQSBmbG93IHBpY2tlZCB1cCB3aXRob3V0IGl0cyByZXBseSBjYW5ub3QgYmVjb21lIGFzc3VyZWQuICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdC0mZ3Q7cHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKTsKJiM0Mzt9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jCkBAIC0xMTczLDYgJiM0MzsxMTczLDI1IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCQl9CiAKJiM0MzsJCS8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnMKJiM0MzsJCSAqIHdoZW4gdGhlIHJlcGx5IGRpcmVjdGlvbiB0YWtlcyBhbm90aGVyIHBhdGgsIGFuZCB0aGUgY2xpZW50CiYjNDM7CQkgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvbgomIzQzOwkJICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXQKJiM0MzsJCSAqIGNyZWF0ZXMgYSBuZXcgb25lIHRoYXQgc2VlZHMgdGhlIHVuc2VlbiBkaXJlY3Rpb24gZnJvbSB0aGUKJiM0MzsJCSAqIHBhY2tldCBpdHNlbGYuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0bi0mZ3Q7dGNwX2xvb3NlICZhbXA7JmFtcDsgIW5mY3Rfc3lucHJveHkoY3QpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW5kZXggPT0gVENQX0FDS19TRVQgJmFtcDsmYW1wOyBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmYW1wO2N0LSZndDtzdGF0dXMpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBudG9obCh0aC0mZ3Q7c2VxKSA9PSBjdC0mZ3Q7cHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJCQlpZiAobmZfY3Rfa2lsbChjdCkpCiYjNDM7CQkJCXJldHVybiAtTkZfUkVQRUFUOwomIzQzOwkJCXJldHVybiBORl9EUk9QOwomIzQzOwkJfQomIzQzOwogCQkvKiBJbnZhbGlkIHBhY2tldCAqLwogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKIAkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKQEAgLTQ2NSw2ICYjNDM7NDY1LDI2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKIH0KIAomIzQzOy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlCiYjNDM7ICogY2xhc3NpYyBwYXRoIHNvIHRoYXQgY29ubnRyYWNrIHNlZXMgaXQuIE9uY2UgY29ubnRyYWNrIGhhcywgdGhlIGZsb3cgaXMKJiM0MzsgKiBvZmZsb2FkZWQgaW4gYm90aCBkaXJlY3Rpb25zLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKJiM0MzsJCQkJICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcikKJiM0Mzt7CiYjNDM7CWlmIChkaXIgIT0gRkxPV19PRkZMT0FEX0RJUl9SRVBMWSB8fAomIzQzOwkgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCAmYW1wO2Zsb3ctJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmFtcDtmbG93LSZndDtjdC0mZ3Q7c3RhdHVzKSkgewomIzQzOwkJc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCiAJCQkJICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLApAQCAtNDc4LDYgJiM0Mzs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJZGlyID0gdHVwbGVoYXNoLSZndDt0dXBsZS5kaXI7CiAJZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTsKIAomIzQzOwlpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJbXR1ID0gZmxvdy0mZ3Q7dHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC0mZ3Q7b2Zmc2V0OwogCWlmIChmbG93LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSkKIAkJbXR1IC09IHNpemVvZigqaXBoKTsKQEAgLTEwNzQsNiAmIzQzOzEwOTcsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAlkaXIgPSB0dXBsZWhhc2gtJmd0O3R1cGxlLmRpcjsKIAlmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pOwogCiYjNDM7CWlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAltdHUgPSBmbG93LSZndDt0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgJiM0MzsgY3R4LSZndDtvZmZzZXQ7CiAJaWYgKGZsb3ctJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKQogCQltdHUgLT0gc2l6ZW9mKCppcDZoKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKaW5kZXggMzJiNDI4MTAzOGRkMy4uMGI2YmU4YWMzZDI0ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJCXRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LSZndDtza2IsIG5mdF90aG9mZihwa3QpLAogCQkJCQkgIHNpemVvZihfdGNwaCksICZhbXA7X3RjcGgpOwogCQlpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC0mZ3Q7ZmluIHx8IHRjcGgtJmd0O3JzdCB8fAotCQkJICAgICAhbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkpKQomIzQzOwkJCSAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CkBAIC0xMTcsNyAmIzQzOzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJaWYgKHRjcGgpCiAJCWZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpOwogCi0JX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiYjNDM7CWlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKQomIzQzOwkJX19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgJmFtcDtmbG93LSZndDtmbGFncyk7CiAJcmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycl9mbG93X2FkZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaAppbmRleCA0NDljNTE4YmQ5NDdkLi41MTZhNTQ0MjY2ZjFhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoCkBAIC01MTYsNiAmIzQzOzUxNiw3OSBAQCBlbHNlCiAJcmV0PTEKIGZpCiAKJiM0MzsjIEFzeW1tZXRyaWMgcGF0aCB0ZXN0OgomIzQzOyMgbnMyIGFuc3dlcnMgb3ZlciBhIGRpcmVjdCBsaW5rLCBzbyBuc3IxIHNlZXMgdGhlIG9yaWdpbmFsIGRpcmVjdGlvbiBvbmx5LgomIzQzOyMgU3VjaCBhIGNvbm5lY3Rpb24gbmV2ZXIgYmVjb21lcyBhc3N1cmVkLCBidXQgdGhlIGZsb3d0YWJsZSBpcyBleHBlY3RlZCB0bwomIzQzOyMgdGFrZSBvdmVyIHRoZSBkaXJlY3Rpb24gdGhhdCBuc3IxIGRvZXMgc2VlLgomIzQzO2NoZWNrX29yaWdfb2ZmbG9hZGVkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHdoYXQ9JDEKJiM0MzsKJiM0MzsJbG9jYWwgb3JpZwomIzQzOwlvcmlnPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRuc3IxJiMzNDsgbmZ0IHJlc2V0IGNvdW50ZXIgaW5ldCBmaWx0ZXIgcm91dGVkX29yaWcgfCBncmVwIHBhY2tldHMpCiYjNDM7CWxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9CiYjNDM7CiYjNDM7CWxvY2FsIGZzCiYjNDM7CWZzPSQoZHUgLXNiICYjMzQ7JG5zaW4mIzM0OykKJiM0MzsJbG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSkKJiM0MzsKJiM0MzsJIyB0aGUgZmxvd3RhYmxlIHRha2VzIG92ZXIgYWZ0ZXIgdGhlIGZpcnN0IGZldyBwYWNrZXRzLCBzbyB0aGUgZm9yd2FyZAomIzQzOwkjIGhvb2sgbXVzdCBzZWUgYSBzbWFsbCBmcmFjdGlvbiBvZiB0aGUgdHJhbnNmZXJyZWQgZmlsZS4KJiM0MzsJaWYgWyAmIzM0OyRvcmlnX2NudCYjMzQ7IC1ndCAmIzM0OyRtYXhfb3JpZyYjMzQ7IF07dGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICR3aGF0OiBvcmlnaW5hbCBjb3VudGVyICRvcmlnX2NudCBleGNlZWRzIGV4cGVjdGVkIHZhbHVlICRtYXhfb3JpZyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJZWNobyAmIzM0O1BBU1M6ICR3aGF0JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7dGVzdF9hc3ltbWV0cmljX3BhdGgoKQomIzQzO3sKJiM0MzsJaXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zICYjMzQ7JG5zMSYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyAmIzM0OyRuczImIzM0OwomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OS8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGFkZHIgYWRkIDEwLjAuOS45OC8yNCBkZXYgZXRoMQomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMSYjMzQ7IGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWQKJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyBhZGRyIGFkZCBkZWFkOjk6Ojk4LzY0IGRldiBldGgxIG5vZGFkCiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBzZXQgZXRoMSB1cAomIzQzOwlpcCAtbmV0ICYjMzQ7JG5zMiYjMzQ7IGxpbmsgc2V0IGV0aDEgdXAKJiM0MzsKJiM0MzsJIyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay4KJiM0MzsJaXAgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgMTAuMC4xLjk5IHZpYSAxMC4wLjkuOTkgZGV2IGV0aDEKJiM0MzsJaXAgLTYgLW5ldCAmIzM0OyRuczImIzM0OyByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMSYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zMiYjMzQ7IHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW4KJiM0MzsJCWNoZWNrX29yaWdfb2ZmbG9hZGVkICYjMzQ7ZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgbGlzdCBydWxlc2V0IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwlmaQomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzOwomIzQzOwlpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nICYjMzQ7JG5zMSYjMzQ7ICYjMzQ7JG5zMiYjMzQ7IDEgNiAmIzM0O1tkZWFkOjI6Ojk5XSYjMzQ7IDEyMzQ1OyB0aGVuCiYjNDM7CQljaGVja19vcmlnX29mZmxvYWRlZCAmIzM0O0lQdjYgZmxvdyBvZmZsb2FkZWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBJUHY2IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWlwIG5ldG5zIGV4ZWMgJiMzNDskbnNyMSYjMzQ7IG5mdCBsaXN0IHJ1bGVzZXQgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMxJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskbnMyJiMzNDsgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xCiYjNDM7CiYjNDM7CWlwIC1uZXQgJiMzNDskbnMxJiMzNDsgbGluayBkZWwgZXRoMQomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zcjEmIzM0OyBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0Mzt0ZXN0X2FzeW1tZXRyaWNfcGF0aAomIzQzOwogIyBkZWxldGUgZGVmYXVsdCByb3V0ZSwgaS5lLiBuczIgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZAogIyB3aWxsIGRlcGVuZCBvbiBuczEgYmVpbmcgbWFzcXVlcmFkZWQgaW4gbnNyMS4KICMgZXhwZWN0IG5zMSBoYXMgbnNyMSBhZGRyZXNzLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhcmVhcyB0aGF0IEtNU0FOIG5lZWRzIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgcmFjZXMuCgpGaXJzdCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZGAsIGFkZGVkIGluIGBuZl9jb25udHJhY2tfbDRwcm90by5oYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjaGVja2luZyBmb3IgVENQIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGVzdGFibGlzaGVkIGJ1dCBoYXZlbiYjMzk7dCByZWNlaXZlZCBhIHJlcGx5LiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgc28gSSYjMzk7bGwga2VlcCBhbiBleWUgb24gaG93IHRoaXMgaXMgdXNlZC4gVGhlIGtleSBwYXJ0IGlzIHRoZSBzdGF0ZSBjaGVjayBhbmQgdGhlIGBJUFNfU0VFTl9SRVBMWV9CSVRgLgoKVGhlbiwgSSYjMzk7bSBub3RpbmcgY2hhbmdlcyBpbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYC4gVGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgd2l0aGluIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCB0aGF0IGludm9sdmVzIGB0Y3BfbG9vc2VgLCBgbmZjdF9zeW5wcm94eWAsIGFuZCBzZXF1ZW5jZSBudW1iZXIgY29tcGFyaXNvbnMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3Mga2lsbGluZyBjb25uZWN0aW9ucyBiYXNlZCBvbiBhIFNZTi1TRU5UIHN0YXRlIGFuZCBzb21lIFRDUCBzZXF1ZW5jZSBudW1iZXIgY3JpdGVyaWEgaWYgbm8gcmVwbHkgaXMgc2Vlbi4gVGhpcyBpcyBhIGJpdCBjb21wbGV4LCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBwb3NzaWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdGhlIGNvbmRpdGlvbmFsIGtpbGwgb3BlcmF0aW9uLgoKTW92aW5nIG9udG8gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIEkgc2VlIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIGFuZCBjYWxscyB0byBpdCBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoKWAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBmbG93cyBhbmQgb2ZmbG9hZGluZywgYW5kIGl0JiMzOTtzIGNvbmRpdGlvbmFsIG9uIHRoZSBgRkxPV19PRkZMT0FEX0RJUl9SRVBMWWAgYW5kIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBJUFNfQVNTVVJFRF9CSVRgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBhIGJpZGlyZWN0aW9uYWwgZmxvdy4gSSBtdXN0IGNvbmZpcm0gdGhhdCBhbGwgZmxhZyBtYW5pcHVsYXRpb25zIGFuZCBtZW1vcnkgYWNjZXNzZXMgYXJlIHN5bmNocm9uaXplZCBhbmQgc2FmZS4KCkZpbmFsbHksIGluIGBuZnRfZmxvd19vZmZsb2FkLmNgLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKClgIGhhcyBuZXcgbG9naWMgdGhhdCBhbGxvd3MgdW5yZXBsaWVkIFRDUCBjb25uZWN0aW9ucyBhbmQgY29uZGl0aW9uYWxseSBzZXRzIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBUaGUgY29uZGl0aW9uYWwgY2hlY2sgYXJvdW5kIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdClgIGlzIGNydWNpYWwuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzdWJ0bGUgc3luY2hyb25pemF0aW9uIG51YW5jZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4gSSB3aWxsIGFsc28gaGF2ZSBhIGNsb3NlIGxvb2sgYXQgdGhlIHVzYWdlIG9mIGBfX3NldF9iaXRgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBkb25lIGNvcnJlY3RseSBoZXJlLgoKSSYjMzk7bSBhbHNvIHNlZWluZyBhIHNlbGZ0ZXN0IGluY2x1ZGVkLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCBkb2VzbiYjMzk7dCByZXBsYWNlIGEgZGV0YWlsZWQgbWFudWFsIGFuYWx5c2lzIG9mIHRoZSBjb2RlLiBJIHdpbGwgcmV2aWV3IGl0IGxhdGVyLgoKVG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgKG9yIG15IHByZWZlcnJlZCB0b29sKSB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBtb3JlIGRlZXBseS4gSSBtaWdodCBhbHNvIGByZWFkLWZpbGVgIHRvIG1hbnVhbGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMuIE15IG1haW4gY29uY2VybiBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbXMsIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIGNvZGUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSB0aG9yb3VnaCBLTVNBTiByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9NDcyPXN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00ODctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo0ODg6c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy05MDYtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRGl2aW5nIGludG8gbmZ0X2Zsb3dfb2ZmbG9hZC5jKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG5mdF9mbG93X29mZmxvYWQuY2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG5mdF9mbG93X29mZmxvYWRfZXZhbGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGZsb3cgb2ZmbG9hZCBsb2dpYywgc28gdW5kZXJzdGFuZGluZyBob3cgaXQmIzM5O3MgZXZhbHVhdGluZyBydWxlcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyBmb3IgcGFja2V0IG9mZmxvYWRpbmcuIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgaXQgY2hlY2tzIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgZmxvdyBydWxlcy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhpcyBzZWN0aW9uPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhY2Nlc3NlZCBhdCB0aGlzIHBvaW50LCBsaWtlIHRoZSBmbG93IHRhYmxlIGVudHJpZXMgb3IgdGhlIHJ1bGUgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZTogaXMgaXQgYSBzaW1wbGUgbG9va3VwIG9yIG1vcmUgY29tcGxleCBsb2dpYyBpbnZvbHZlZD8gQXJlIHdlIGVmZmljaWVudGx5IHV0aWxpemluZyBhbnkgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZlYXR1cmVzIGF2YWlsYWJsZSBpbiB0aGUgbmV0d29yayBjYXJkLCBvciBkb2VzIGl0IGFwcGVhciB3ZSBhcmUgc29mdHdhcmUtYm91bmNpbmcgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB0aGUgTklDPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhpcyBldmFsdWF0aW9uIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHRcdGdvdG8gb3V0O1xuICA2NjpcdFxuICA2NzpcdFx0Y3QgPSBuZl9jdF9nZXQocGt0LVx1MDAzZXNrYiwgXHUwMDI2Y3RpbmZvKTtcbiAgNjg6XHRcdGlmICghY3QpXG4gIDY5Olx0XHRcdGdvdG8gb3V0O1xuICA3MDpcdFxuICA3MTpcdFx0c3dpdGNoIChjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pIHtcbiAgNzI6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4gIDczOlx0XHRcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXG4gIDc0Olx0XHRcdFx0XHRcdCAgc2l6ZW9mKF90Y3BoKSwgXHUwMDI2X3RjcGgpO1xuICA3NTpcdFx0XHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cdTAwM2VmaW4gfHwgdGNwaC1cdTAwM2Vyc3QgfHxcbiAgNzY6XHRcdFx0XHQgICAgICghbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjdCkgXHUwMDI2XHUwMDI2XG4gIDc3Olx0XHRcdFx0ICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKVxuICA3ODpcdFx0XHRcdGdvdG8gb3V0O1xuICA3OTpcdFx0XHRicmVhaztcbiAgODA6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4gIDgxOlx0XHRcdGJyZWFrO1xuICA4MjpcdCNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fR1JFXG4gIDgzOlx0XHRjYXNlIElQUFJPVE9fR1JFOiB7XG4gIDg0Olx0XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlO1xuICA4NTpcdFxuICA4NjpcdFx0XHRpZiAoY3QtXHUwMDNlc3RhdHVzIFx1MDAyNiBJUFNfTkFUX01BU0spXG4gIDg3Olx0XHRcdFx0Z290byBvdXQ7XG4gIDg4Olx0XHRcdHR1cGxlID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4gIDg5Olx0XHRcdC8qIE5vIHN1cHBvcnQgZm9yIEdSRSB2MSAqL1xuICA5MDpcdFx0XHRpZiAodHVwbGUtXHUwMDNlc3JjLnUuZ3JlLmtleSB8fCB0dXBsZS1cdTAwM2Vkc3QudS5ncmUua2V5KVxuICA5MTpcdFx0XHRcdGdvdG8gb3V0O1xuICA5MjpcdFx0XHRicmVhaztcbiAgOTM6XHRcdH1cbiAgOTQ6XHQjZW5kaWZcbiAgOTU6XHRcdGRlZmF1bHQ6XG4gIDk2Olx0XHRcdGdvdG8gb3V0O1xuICA5NzpcdFx0fVxuICA5ODpcdFxuICA5OTpcdFx0aWYgKG5mX2N0X2V4dF9leGlzdChjdCwgTkZfQ1RfRVhUX0hFTFBFUikgfHxcbiAxMDA6XHRcdCAgICBjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IChJUFNfU0VRX0FESlVTVCB8IElQU19OQVRfQ0xBU0gpKVxuIDEwMTpcdFx0XHRnb3RvIG91dDtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSlcbiAxMDQ6XHRcdFx0Z290byBvdXQ7XG4gMTA1Olx0XG4gMTA2Olx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChJUFNfT0ZGTE9BRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykpXG4gMTA3Olx0XHRcdGdvdG8gb3V0O1xuIDEwODpcdFxuIDEwOTpcdFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIDExMDpcdFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXHUwMDNlZmxvd3RhYmxlKSBcdTAwM2MgMClcbiAxMTE6XHRcdFx0Z290byBlcnJfZmxvd19yb3V0ZTtcbiAxMTI6XHRcbiAxMTM6XHRcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xuIDExNDpcdFx0aWYgKCFmbG93KVxuIDExNTpcdFx0XHRnb3RvIGVycl9mbG93X2FsbG9jO1xuIDExNjpcdFxuIDExNzpcdFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXHUwMDI2cm91dGUpO1xuIDExODpcdFx0aWYgKHRjcGgpXG4gMTE5Olx0XHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKCF0Y3BoIHx8ICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpXG4gMTIyOlx0XHRcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuIDEyMzpcdFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xuIDEyNDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxMjU6XHRcdFx0Z290byBlcnJfZmxvd19hZGQ7XG4gMTI2Olx0XG4gMTI3Olx0XHRyZXR1cm47XG4gMTI4Olx0XG4gMTI5Olx0ZXJyX2Zsb3dfYWRkOlxuIDEzMDpcdFx0Zmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7XG4gMTMxOlx0ZXJyX2Zsb3dfYWxsb2M6XG4gMTMyOlx0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVtkaXJdLmRzdCk7XG4gMTMzOlx0XHRkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpO1xuIDEzNDpcdGVycl9mbG93X3JvdXRlOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTEzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQgb2YgY29kZSwgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQqKgoKUmlnaHQsIHNvIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZnVuY3Rpb25pbmcsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCBhcm91bmQgbGluZSAxMTczLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAgZnVuY3Rpb24gbGl2ZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiBob3cgVENQIHBhY2tldHMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgZGlzc2VjdHMgdGhlIFRDUCBoZWFkZXIsIGFuYWx5emVzIHRoZSBmbGFncywgYW5kIGZpZ3VyZXMgb3V0IHRoZSBjb25uZWN0aW9uJiMzOTtzIHN0YXRlIHRyYW5zaXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoZXJlIOKAkyBob3cgaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgcGFja2V0IGlzIHBhcnQgb2YgYW4gZXN0YWJsaXNoZWQgZmxvdywgYSBuZXcgY29ubmVjdGlvbiBhdHRlbXB0LCBhIEZJTiwgb3IgYSBSU1QuIEl0JiMzOTtsbCBiZSBlc3NlbnRpYWwgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBrZWVwaW5nIHRyYWNrIG9mIHNlcXVlbmNlIG51bWJlcnMgYW5kIGFja25vd2xlZGdlbWVudHMsIHdoaWNoIGlzIGhvdyBUQ1AgZW5zdXJlcyByZWxpYWJsZSBkYXRhIHRyYW5zbWlzc2lvbiBhbmQgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvdyBtZSB0byBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjZcbjExNTE6XHRcdFx0ICAgIGRpciA9PSBJUF9DVF9ESVJfUkVQTFkpXG4xMTUyOlx0XHRcdFx0Y3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfYWNrID0gbnRvaGwodGgtXHUwMDNlYWNrX3NlcSk7XG4xMTUzOlx0XG4xMTU0Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuMTE1NTpcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuMTE1NjpcdFx0XHRcdFx0XHQgIFwmIzM0O3BhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1wmIzM0OyxcbjExNTc6XHRcdFx0XHRcdFx0ICBpbmRleCwgZGlyLFxuMTE1ODpcdFx0XHRcdFx0XHQgIHRjcF9jb25udHJhY2tfbmFtZXNbb2xkX3N0YXRlXSk7XG4xMTU5Olx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4xMTYwOlx0XHRjYXNlIFRDUF9DT05OVFJBQ0tfTUFYOlxuMTE2MTpcdFx0XHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcbjExNjI6XHRcdFx0ICogdGhlIFNZTi9BQ0sgZnJvbSB0aGUgc2VydmVyIGlzIGxvc3QsIHRoZSBjbGllbnQgbWF5IHRyYW5zbWl0XG4xMTYzOlx0XHRcdCAqIGEga2VlcC1hbGl2ZSBwYWNrZXQgd2hpbGUgaW4gU1lOX1NFTlQgc3RhdGUuIFRoaXMgbmVlZHMgdG9cbjExNjQ6XHRcdFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cbjExNjU6XHRcdFx0ICogZ2VuZXJhdGUgYSBuZXcgU1lOIHdpdGggdGhlIGNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyLlxuMTE2NjpcdFx0XHQgKi9cbjExNjc6XHRcdFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNiBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExNjg6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE2OTpcdFx0XHQgICAgY3QtXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbjExNzA6XHRcdFx0ICAgIGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cdTAwM2VzZXEpKSB7XG4xMTcxOlx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmZfY3RfdGNwOiBTWU4gcHJveHkgY2xpZW50IGtlZXAgYWxpdmVcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuMTE3MzpcdFx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4xMTc0Olx0XHRcdH1cbjExNzU6XHRcbjExNzY6XHRcdFx0LyogVGhlIGFuc3dlciB0byB0aGUgU1lOIG5ldmVyIHBhc3NlZCB0aGUgaG9zdCwgYXMgaGFwcGVuc1xuMTE3NzpcdFx0XHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxuMTE3ODpcdFx0XHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxuMTE3OTpcdFx0XHQgKiBvdmVyIGFzIGEgbWlkLXN0cmVhbSBwaWNrdXA6IGRlbGV0ZSB0aGUgZW50cnkgc28gdGhlIHBhY2tldFxuMTE4MDpcdFx0XHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXG4xMTgxOlx0XHRcdCAqIHBhY2tldCBpdHNlbGYuXG4xMTgyOlx0XHRcdCAqL1xuMTE4MzpcdFx0XHRpZiAodG4tXHUwMDNldGNwX2xvb3NlIFx1MDAyNlx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXHUwMDI2XHUwMDI2XG4xMTg0Olx0XHRcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcdTAwMjZcdTAwMjZcbjExODU6XHRcdFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFx1MDAyNlx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFx1MDAyNlx1MDAyNlxuMTE4NjpcdFx0XHQgICAgIXRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSBcdTAwMjZcdTAwMjZcbjExODc6XHRcdFx0ICAgIG50b2hsKHRoLVx1MDAzZXNlcSkgPT0gY3QtXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcbjExODg6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExODk6XHRcbjExOTA6XHRcdFx0XHRpZiAobmZfY3Rfa2lsbChjdCkpXG4xMTkxOlx0XHRcdFx0XHRyZXR1cm4gLU5GX1JFUEVBVDtcbjExOTI6XHRcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjExOTM6XHRcdFx0fVxuMTE5NDpcdFxuMTE5NTpcdFx0XHQvKiBJbnZhbGlkIHBhY2tldCAqL1xuMTE5NjpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbjExOTc6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbjExOTg6XHRcdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4xMTk5Olx0XHRcdFx0XHRcdCAgaW5kZXgsIGRpcixcbjEyMDA6XHRcdFx0XHRcdFx0ICB0Y3BfY29ubnRyYWNrX25hbWVzW29sZF9zdGF0ZV0pO1xuMTIwMTpcdFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbjEyMDI6XHRcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XG4xMjAzOlx0XHRcdC8qIFJGQzU5NjEgY29tcGxpYW5jZSBjYXVzZSBzdGFjayB0byBzZW5kIFwmIzM0O2NoYWxsZW5nZS1BQ0tcJiMzNDtcbjEyMDQ6XHRcdFx0ICogZS5nLiBpbiByZXNwb25zZSB0byBzcHVyaW91cyBTWU5zLiAgQ29ubnRyYWNrIE1VU1RcbjEyMDU6XHRcdFx0ICogbm90IGJlbGlldmUgdGhpcyBBQ0sgaXMgYWNraW5nIGxhc3QgRklOLlxuMTIwNjpcdFx0XHQgKi9cbjEyMDc6XHRcdFx0aWYgKG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0xBU1RfQUNLIFx1MDAyNlx1MDAyNlxuMTIwODpcdFx0XHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXHUwMDI2XHUwMDI2XG4xMjA5Olx0XHRcdCAgICBjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTU5CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZsb3cgT2ZmbG9hZCBMb2dpYyoqCgpSaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHRoZSBkZWNpc2lvbi1tYWtpbmcgbG9naWMgZm9yIGFjdHVhbGx5IG9mZmxvYWRpbmcgcGFja2V0cyBpcyBsb2NhdGVkLCBvciBzaG91bGQgYmUgbG9jYXRlZC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGUgcGFja2V0IGZvcndhcmRpbmcgcHJvY2VzcyB3aGVuIHRoZSBmbG93IG9mZmxvYWQgZmVhdHVyZSBpcyBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgdXNlZCBmb3IgYSBwYWNrZXQgdG8gcXVhbGlmeSBmb3IgYmVpbmcgb2ZmbG9hZGVkLiBXaGF0IGFyZSB0aGUga2V5IGNoZWNrcyBhcm91bmQgY29ubmVjdGlvbiBzdGF0ZSwgY29ubnRyYWNrLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1ldGFkYXRhLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGludGVncmF0ZSB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIGNhcGFiaWxpdGllcy4gQW55IGludGVyYWN0aW9uIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uLCBhbnkgc3VidGxlIGVkZ2UgY2FzZXMgaW4gdGhhdCBhcmVhLCBpcyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldOKAmXMgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHdoZXJlIHRoZSBsb2dpYyBtaWdodCBpbnRyb2R1Y2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdW5kZXIgaGlnaCBsb2FkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGRlc2lnbmVkOyBpZGVudGlmeSBwb3RlbnRpYWwgYnVncywgY29ybmVyIGNhc2VzLCBhbmQgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4gNDYxOlx0XG4gNDYyOlx0XHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXHUwMDI2dHVwbGUpIFx1MDAzYyAwKVxuIDQ2MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0NjQ6XHRcbiA0NjU6XHRcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFx1MDAyNnR1cGxlKTtcbiA0NjY6XHR9XG4gNDY3Olx0XG4gNDY4Olx0LyogVGhlIHJlcGx5IGRpcmVjdGlvbiBvZiBhIGZsb3cgb2ZmbG9hZGVkIGluIG9uZSBkaXJlY3Rpb24gb25seSBzdGF5cyBvbiB0aGVcbiA0Njk6XHQgKiBjbGFzc2ljIHBhdGggc28gdGhhdCBjb25udHJhY2sgc2VlcyBpdC4gT25jZSBjb25udHJhY2sgaGFzLCB0aGUgZmxvdyBpc1xuIDQ3MDpcdCAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXG4gNDcxOlx0ICovXG4gNDcyOlx0c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcbiA0NzQ6XHRcdFx0XHRcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXG4gNDc1Olx0e1xuIDQ3NjpcdFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XG4gNDc3Olx0XHQgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKSlcbiA0Nzg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0aWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Zmxvdy1cdTAwM2VjdC1cdTAwM2VzdGF0dXMpKSB7XG4gNDgxOlx0XHRcdHNldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcdTAwMjZmbG93LVx1MDAzZWZsYWdzKTtcbiA0ODI6XHRcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XG4gNDgzOlx0XHR9XG4gNDg0Olx0XG4gNDg1Olx0XHRyZXR1cm4gdHJ1ZTtcbiA0ODY6XHR9XG4gNDg3Olx0XG4gNDg4Olx0c3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIDQ4OTpcdFx0XHRcdFx0ICAgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcbiA0OTA6XHRcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcbiA0OTE6XHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4gNDkyOlx0e1xuIDQ5MzpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbiA0OTQ6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gNDk1Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbiA0OTY6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbiA0OTk6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4gNTAwOlx0XG4gNTAxOlx0XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuIDUwMjpcdFx0XHRyZXR1cm4gMDtcbiA1MDM6XHRcbiA1MDQ6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4gNTA1Olx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbiA1MDY6XHRcdFx0bXR1IC09IHNpemVvZigqaXBoKTtcbiA1MDc6XHRcbiA1MDg6XHRcdGlmICh1bmxpa2VseShuZl9mbG93X2V4Y2VlZHNfbXR1KHNrYiwgbXR1KSkpXG4gNTA5Olx0XHRcdHJldHVybiAwO1xuIDUxMDpcdFxuIDUxMTpcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0KTtcbiA1MTI6XHRcdHRob2ZmID0gKGlwaC1cdTAwM2VpaGwgKiA0KSAmIzQzOyBjdHgtXHUwMDNlb2Zmc2V0O1xuIDUxMzpcdFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXBoLVx1MDAzZXByb3RvY29sLCBza2IsIHRob2ZmKSlcbiA1MTQ6XHRcdFx0cmV0dXJuIDA7XG4gNTE1Olx0XG4gNTE2Olx0XHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFx1MDAyNnR1cGxlaGFzaC1cdTAwM2V0dXBsZSkpIHtcbiA1MTc6XHRcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuIDUxODpcdFx0XHRyZXR1cm4gMDtcbiA1MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgSVB2NiBPZmZsb2FkIHdpdGggYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgKioKCk9rYXksIEkmIzM5O20gYWxyZWFkeSBkaWdnaW5nIGludG8gb2ZmbG9hZCBwZXJmb3JtYW5jZSBhbmQgdHVuYWJsZXMsIHNvIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBvYnZpb3VzLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGFsbCByZWxldmFudCBwYXJhbWV0ZXJzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgc3BlY2lmaWMgc2V0dGluZyBJIG5lZWQgdG8gbG9vayBhdCBpcyBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBJUHY2IHBhY2tldCBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG9mZmxvYWQgbWVjaGFuaXNtLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IGFyY2hpdGVjdHVyZSBhbmQgd29ya2xvYWRzLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGlzIHRvIHBlcmZvcm1hbmNlIG1ldHJpY3MgYW5kIGxvb2sgZm9yIGFueSByZWQgZmxhZ3Mgb3Igb3B0aW1pemF0aW9ucyBJIGNhbiBtYWtlIHJlbGF0ZWQgdG8gdGhpcyBrZXkgcGFyYW1ldGVyLiBJdOKAmXMgYSBzdGFuZGFyZCBzYW5pdHkgY2hlY2ssIGJ1dCBvZnRlbiB0aGVzZSBzdWJ0bGUgc2V0dGluZ3MgY2FuIG1ha2Ugb3IgYnJlYWsgdGhlIHBlcmZvcm1hbmNlIG9mIGFkdmFuY2VkIGZlYXR1cmVzIGxpa2UgZmxvdyBvZmZsb2FkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg1Olx0fVxuMTA4NjpcdFxuMTA4NzpcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuMTA4ODpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuMTA4OTpcdFx0XHRcdFx0XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4xMDkwOlx0XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4xMDkxOlx0e1xuMTA5MjpcdFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbjEwOTM6XHRcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4xMDk0Olx0XHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcbjEwOTU6XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuMTA5NjpcdFxuMTA5NzpcdFx0ZGlyID0gdHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRpcjtcbjEwOTg6XHRcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XG4xMDk5Olx0XG4xMTAwOlx0XHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxuMTEwMTpcdFx0XHRyZXR1cm4gMDtcbjExMDI6XHRcbjExMDM6XHRcdG10dSA9IGZsb3ctXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICYjNDM7IGN0eC1cdTAwM2VvZmZzZXQ7XG4xMTA0Olx0XHRpZiAoZmxvdy1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcbjExMDU6XHRcdFx0bXR1IC09IHNpemVvZigqaXA2aCk7XG4xMTA2Olx0XG4xMTA3Olx0XHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxuMTEwODpcdFx0XHRyZXR1cm4gMDtcbjExMDk6XHRcbjExMTA6XHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgY3R4LVx1MDAzZW9mZnNldCk7XG4xMTExOlx0XHR0aG9mZiA9IHNpemVvZigqaXA2aCkgJiM0MzsgY3R4LVx1MDAzZW9mZnNldDtcbjExMTI6XHRcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXHUwMDNlbmV4dGhkciwgc2tiLCB0aG9mZikpXG4xMTEzOlx0XHRcdHJldHVybiAwO1xuMTExNDpcdFxuMTExNTpcdFx0aWYgKCFuZl9mbG93X2RzdF9jaGVjayhcdTAwMjZ0dXBsZWhhc2gtXHUwMDNldHVwbGUpKSB7XG4xMTE2Olx0XHRcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcbjExMTc6XHRcdFx0cmV0dXJuIDA7XG4xMTE4Olx0XHR9XG4xMTE5Olx0XG4xMTIwOlx0XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHRob2ZmICYjNDM7IGN0eC1cdTAwM2VoZHJzaXplKSlcbjExMjE6XHRcdFx0cmV0dXJuIC0xO1xuMTEyMjpcdFxuMTEyMzpcdFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgZmFsc2UpO1xuMTEyNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc5OQoJCQkJCQkJb3V0cHV0OiAyODIKCQkJCQkJCXRob3VnaHRzOiA1NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQ29uY2VybnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIEtNU0FOLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIGFzeW1tZXRyaWMgcm91dGluZywgYW5kIG1pZC1zdHJlYW0gcGlja3VwIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIFRDUCBjb25udHJhY2sgYW5kIGZsb3d0YWJsZSBvZmZsb2FkIG1lY2hhbmlzbXMuIFdlIGFyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBlc3RhYmxpc2hlZCBzdHJ1Y3R1cmVzIGFuZCBmbG93IGxvZ2ljLCBub3QgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGNhdXNlIGlzc3Vlcy4KCkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHk6IFRoZSBwYXRjaCBpbXBsZW1lbnRzIGhlbHBlciBmdW5jdGlvbnMgYW5kIGxvZ2ljIHdpdGhpbiBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCwgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYC4gVGhlc2UgY29tcG9uZW50cyBhcmUgZGVzaWduZWQgdG8gbWFuYWdlIFRDUCBjb25uZWN0aW9uIHN0YXRlcyB3aGVuIHRoZXJlJiMzOTtzIGFzeW1tZXRyaWMgcm91dGluZywgd2hlcmUgdGhlIHJlcGx5IHBhdGggaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGtub3duLCBvciB3aGVyZSBvZmZsb2FkaW5nIHRvIHRoZSBmbG93dGFibGUgaXMgZGVsYXllZC4gU3BlY2lmaWNhbGx5IHRoZSBtaWQtc3RyZWFtIHBpY2t1cCBsb2dpYywgZGVhbGluZyB3aXRoIGEgU1lOIGZyb20gdGhlIGNsaWVudCwgbm8gcmVwbHkgc2VlbiB5ZXQsIGFuZCB0aGVuIGFuIEFDSyBtYXRjaGluZyBhIHByZXZpb3VzbHkgc2VlbiBzZXF1ZW5jZSBudW1iZXIuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIE5ldGZpbHRlci9jb25udHJhY2sgdGVycml0b3J5LgoKTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiAxKSBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ7IDIpIGFsbCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gZXhpc3RpbmcgYGZsb3dgIGFuZCBgY3RgIHN0cnVjdHVyZXMsIHN1Y2ggYXMgYGZsb3ctJmd0O2ZsYWdzYCwgYGN0LSZndDtzdGF0dXNgLCBgY3QtJmd0O3Byb3RvLnRjcC5zdGF0ZWA7IDMpIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM7IGFuZCA0KSBubyBidWZmZXIgcGFyc2luZyBvciBib3VuZHMgbW9kaWZpY2F0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnl0ZXMuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJIGFtIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MuIEl04oCZcyBtb2RpZnlpbmcgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIHJvdXRpbmcgbG9naWMgd2l0aGluIHRoZSBlc3RhYmxpc2hlZCBOZXRmaWx0ZXIvY29ubnRyYWNrIGZyYW1ld29yay4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKHN0YXRlIHRyYW5zaXRpb25zLCBwYWNrZXQgZHJvcHMsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBudWxsIGRlcmVmcywgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcsIEtBU0FOLCBvciBMT0NLREVQLiBJIGZvdW5kIG5vIGV2aWRlbmNlIG9mIEtNU0FOIGNvbmNlcm5zLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSBhc3Nlc3NtZW50IGFuZCBzZW5kIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBhZGRzIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZCgpYCB0byBjaGVjayBmb3IgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb25zIGxhY2tpbmcgcmVwbHkgcGFja2V0cy5cbjIuIEl0IGludHJvZHVjZXMgYSBtaWQtc3RyZWFtIHBpY2t1cCBtZWNoYW5pc20gaW4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHdoZW4gdGhlIGxvb3NlIFRDUCBtb2RlIGlzIGVuYWJsZWQgYW5kIGEgcG9zdC1TWU4gQUNLIGlzIHJlY2VpdmVkIHdpdGhvdXQgYSByZXBseS5cbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbGwgc3RhdGUgZmxhZ3MgYW5kIHN0cnVjdCBmaWVsZHMgYWNjZXNzZWQgKGBjdC1cdTAwM2VzdGF0dXNgLCBgY3QtXHUwMDNlcHJvdG8udGNwLnN0YXRlYCwgYGZsb3ctXHUwMDNlZmxhZ3NgKSBiZWxvbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgY29ubnRyYWNrIGFuZCBmbG93IHRhYmxlIHN0cnVjdHVyZXMuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyAoc3VjaCBhcyBzdGF0ZSBtYWNoaW5lIGJ1Z3Mgb3IgcmVmZXJlbmNlL2xpZmV0aW1lIGlzc3VlcykgYXJlIGRldGVjdGFibGUgdGhyb3VnaCBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGZpbHRlciBjb25udHJhY2sgYW5kIG5mdGFibGVzIGZsb3d0YWJsZSBvZmZsb2FkIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGx5IHRyYWZmaWMgYnlwYXNzZXMgdGhlIHJvdXRlcikuIFNwZWNpZmljYWxseTpcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxuMy4gSXQgdXBkYXRlcyBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mdF9mbG93X29mZmxvYWQuY2AgdG8gc3VwcG9ydCB1bmlkaXJlY3Rpb25hbGx5IG9mZmxvYWRlZCBmbG93cyB1bnRpbCBiaWRpcmVjdGlvbmFsIHRyYWZmaWMgaXMgY29uZmlybWVkLlxuXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVx1MDAzZXN0YXR1c2AsIGBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyODozNS4wODEzODM1MjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODU5NzY5NjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIixcbiAgICBcIm5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgdG8gY2hlY2sgZm9yIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucyBsYWNraW5nIHJlcGx5IHBhY2tldHMuXFxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxcbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVxcdTAwM2VzdGF0dXNgLCBgY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZWAsIGBmbG93LVxcdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjg6MzUuMDgxMzkwMDU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY1MDY5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OGVmZTY5MjI3MWMxNjFiM2VhMWVlOWJmNjMxN2IwOTQxY2YwNGY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA5OjI4OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcXG5pbmRleCBmZGUyNDI3Y2ViOGZjLi5hNGUzZDllZDdhNjRjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcXG5AQCAtMjA4LDYgKzIwOCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmZfY29ubnRyYWNrX3RjcF9lc3RhYmxpc2hlZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXFxuIFxcdHJldHVybiBjdC1cXHUwMDNlcHJvdG8udGNwLnN0YXRlID09IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICAgIHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpO1xcbiB9XFxuK1xcbisvKiBBIGZsb3cgcGlja2VkIHVwIHdpdGhvdXQgaXRzIHJlcGx5IGNhbm5vdCBiZWNvbWUgYXNzdXJlZC4gKi9cXG4rc3RhdGljIGlubGluZSBib29sIG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG4re1xcbitcXHRyZXR1cm4gY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cyk7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjaWZkZWYgQ09ORklHX05GX0NUX1BST1RPX1NDVFBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xcbmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xcbkBAIC0xMTczLDYgKzExNzMsMjUgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LyogVGhlIGFuc3dlciB0byB0aGUgU1lOIG5ldmVyIHBhc3NlZCB0aGUgaG9zdCwgYXMgaGFwcGVuc1xcbitcXHRcXHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxcbitcXHRcXHQgKiBjb250aW51ZXMgZnJvbSB3aGVyZSBpdHMgU1lOIGxlZnQgb2ZmLiAgVGFrZSB0aGUgY29ubmVjdGlvblxcbitcXHRcXHQgKiBvdmVyIGFzIGEgbWlkLXN0cmVhbSBwaWNrdXA6IGRlbGV0ZSB0aGUgZW50cnkgc28gdGhlIHBhY2tldFxcbitcXHRcXHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXFxuK1xcdFxcdCAqIHBhY2tldCBpdHNlbGYuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodG4tXFx1MDAzZXRjcF9sb29zZSBcXHUwMDI2XFx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcXHUwMDI2XFx1MDAyNiBkaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG50b2hsKHRoLVxcdTAwM2VzZXEpID09IGN0LVxcdTAwM2Vwcm90by50Y3Auc2VlbltkaXJdLnRkX2VuZCkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0XFx0XFx0aWYgKG5mX2N0X2tpbGwoY3QpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLU5GX1JFUEVBVDtcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIEludmFsaWQgcGFja2V0ICovXFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5pbmRleCBjOGMyOWE5YTE2ODQ0Li5mMmNkNWMyYzUzNjVjIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5AQCAtNDY1LDYgKzQ2NSwyNiBAQCBuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdHJldHVybiBmbG93X29mZmxvYWRfbG9va3VwKGZsb3dfdGFibGUsIFxcdTAwMjZ0dXBsZSk7XFxuIH1cXG4gXFxuKy8qIFRoZSByZXBseSBkaXJlY3Rpb24gb2YgYSBmbG93IG9mZmxvYWRlZCBpbiBvbmUgZGlyZWN0aW9uIG9ubHkgc3RheXMgb24gdGhlXFxuKyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXFxuKyAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuK3tcXG4rXFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XFxuK1xcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFxcdTAwMjZmbG93LVxcdTAwM2VjdC1cXHUwMDNlc3RhdHVzKSkge1xcbitcXHRcXHRzZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG5AQCAtNDc4LDYgKzQ5OCw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuIFxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuIFxcbitcXHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuIFxcdFxcdG10dSAtPSBzaXplb2YoKmlwaCk7XFxuQEAgLTEwNzQsNiArMTA5Nyw5IEBAIHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4gXFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4gXFxuK1xcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0bXR1ID0gZmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuIFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4gXFx0XFx0bXR1IC09IHNpemVvZigqaXA2aCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG5pbmRleCAzMmI0MjgxMDM4ZGQzLi4wYjZiZThhYzNkMjRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcXG5AQCAtNzMsNyArNzMsOCBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHR0Y3BoID0gc2tiX2hlYWRlcl9wb2ludGVyKHBrdC1cXHUwMDNlc2tiLCBuZnRfdGhvZmYocGt0KSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzaXplb2YoX3RjcGgpLCBcXHUwMDI2X3RjcGgpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cXHUwMDNlZmluIHx8IHRjcGgtXFx1MDAzZXJzdCB8fFxcbi1cXHRcXHRcXHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXFxuK1xcdFxcdFxcdCAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgICAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5AQCAtMTE3LDcgKzExOCw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdGlmICh0Y3BoKVxcbiBcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gXFxuLVxcdF9fc2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuK1xcdGlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKVxcbitcXHRcXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9mbG93X2FkZDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9uZnRfZmxvd3RhYmxlLnNoXFxuaW5kZXggNDQ5YzUxOGJkOTQ3ZC4uNTE2YTU0NDI2NmYxYSAxMDA3NTVcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcXG5AQCAtNTE2LDYgKzUxNiw3OSBAQCBlbHNlXFxuIFxcdHJldD0xXFxuIGZpXFxuIFxcbisjIEFzeW1tZXRyaWMgcGF0aCB0ZXN0OlxcbisjIG5zMiBhbnN3ZXJzIG92ZXIgYSBkaXJlY3QgbGluaywgc28gbnNyMSBzZWVzIHRoZSBvcmlnaW5hbCBkaXJlY3Rpb24gb25seS5cXG4rIyBTdWNoIGEgY29ubmVjdGlvbiBuZXZlciBiZWNvbWVzIGFzc3VyZWQsIGJ1dCB0aGUgZmxvd3RhYmxlIGlzIGV4cGVjdGVkIHRvXFxuKyMgdGFrZSBvdmVyIHRoZSBkaXJlY3Rpb24gdGhhdCBuc3IxIGRvZXMgc2VlLlxcbitjaGVja19vcmlnX29mZmxvYWRlZCgpXFxuK3tcXG4rXFx0bG9jYWwgd2hhdD0kMVxcbitcXG4rXFx0bG9jYWwgb3JpZ1xcbitcXHRvcmlnPSQoaXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCByZXNldCBjb3VudGVyIGluZXQgZmlsdGVyIHJvdXRlZF9vcmlnIHwgZ3JlcCBwYWNrZXRzKVxcbitcXHRsb2NhbCBvcmlnX2NudD0ke29yaWcjKmJ5dGVzfVxcbitcXG4rXFx0bG9jYWwgZnNcXG4rXFx0ZnM9JChkdSAtc2IgXFxcIiRuc2luXFxcIilcXG4rXFx0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcXG4rXFxuK1xcdCMgdGhlIGZsb3d0YWJsZSB0YWtlcyBvdmVyIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0cywgc28gdGhlIGZvcndhcmRcXG4rXFx0IyBob29rIG11c3Qgc2VlIGEgc21hbGwgZnJhY3Rpb24gb2YgdGhlIHRyYW5zZmVycmVkIGZpbGUuXFxuK1xcdGlmIFsgXFxcIiRvcmlnX2NudFxcXCIgLWd0IFxcXCIkbWF4X29yaWdcXFwiIF07dGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAkd2hhdDogb3JpZ2luYWwgY291bnRlciAkb3JpZ19jbnQgZXhjZWVkcyBleHBlY3RlZCB2YWx1ZSAkbWF4X29yaWdcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFxuK1xcdGVjaG8gXFxcIlBBU1M6ICR3aGF0XFxcIlxcbit9XFxuK1xcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXFxuK3tcXG4rXFx0aXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zIFxcXCIkbnMxXFxcIiB0eXBlIHZldGggcGVlciBuYW1lIGV0aDEgbmV0bnMgXFxcIiRuczJcXFwiXFxuK1xcdGlwIC1uZXQgXFxcIiRuczFcXFwiIGFkZHIgYWRkIDEwLjAuOS45OS8yNCBkZXYgZXRoMVxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGFkZCAxMC4wLjkuOTgvMjQgZGV2IGV0aDFcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMVxcXCIgYWRkciBhZGQgZGVhZDo5Ojo5OS82NCBkZXYgZXRoMSBub2RhZFxcbitcXHRpcCAtbmV0IFxcXCIkbnMyXFxcIiBhZGRyIGFkZCBkZWFkOjk6Ojk4LzY0IGRldiBldGgxIG5vZGFkXFxuK1xcdGlwIC1uZXQgXFxcIiRuczFcXFwiIGxpbmsgc2V0IGV0aDEgdXBcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMlxcXCIgbGluayBzZXQgZXRoMSB1cFxcbitcXG4rXFx0IyBuczEga2VlcHMgc2VuZGluZyB0aHJvdWdoIG5zcjEsIG5zMiBhbnN3ZXJzIG9uIHRoZSBkaXJlY3QgbGluay5cXG4rXFx0aXAgLW5ldCBcXFwiJG5zMlxcXCIgcm91dGUgYWRkIDEwLjAuMS45OSB2aWEgMTAuMC45Ljk5IGRldiBldGgxXFxuK1xcdGlwIC02IC1uZXQgXFxcIiRuczJcXFwiIHJvdXRlIGFkZCBkZWFkOjE6Ojk5IHZpYSBkZWFkOjk6Ojk5IGRldiBldGgxXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnMxXFxcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zMlxcXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFxcdTAwM2UvZGV2L251bGxcXG4rXFxuK1xcdGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXFxcIiRuczFcXFwiIFxcXCIkbnMyXFxcIiAxIDQgMTAuMC4yLjk5IDEyMzQ1OyB0aGVuXFxuK1xcdFxcdGNoZWNrX29yaWdfb2ZmbG9hZGVkIFxcXCJmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgbGlzdCBydWxlc2V0IDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuc3IxXFxcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0aWYgdGVzdF90Y3BfZm9yd2FyZGluZyBcXFwiJG5zMVxcXCIgXFxcIiRuczJcXFwiIDEgNiBcXFwiW2RlYWQ6Mjo6OTldXFxcIiAxMjM0NTsgdGhlblxcbitcXHRcXHRjaGVja19vcmlnX29mZmxvYWRlZCBcXFwiSVB2NiBmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IElQdjYgZmxvdyBvZmZsb2FkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zcjFcXFwiIG5mdCBsaXN0IHJ1bGVzZXQgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRmaVxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJG5zMVxcXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0xXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRuczJcXFwiIHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxcbitcXG4rXFx0aXAgLW5ldCBcXFwiJG5zMVxcXCIgbGluayBkZWwgZXRoMVxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNyMVxcXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFxcdTAwM2UvZGV2L251bGxcXG4rfVxcbitcXG4rdGVzdF9hc3ltbWV0cmljX3BhdGhcXG4rXFxuICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbid0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZFxcbiAjIHdpbGwgZGVwZW5kIG9uIG5zMSBiZWluZyBtYXNxdWVyYWRlZCBpbiBuc3IxLlxcbiAjIGV4cGVjdCBuczEgaGFzIG5zcjEgYWRkcmVzcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjg6MzUuNzE4NjI5NjA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NDc4MDY1MTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Nvbm50cmFja190Y3BfcGFja2V0XCIsXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIixcbiAgICBcIm5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nIGxvZ2ljIHRvIHN1cHBvcnQgYXN5bW1ldHJpYyBUQ1AgZmxvd3MgKHdoZXJlIHJlcGxpZXMgYnlwYXNzIHRoZSBob3N0KS4gSXQgdXBkYXRlcyBUQ1AgY29ubnRyYWNrIHBhY2tldCBwcm9jZXNzaW5nIChuZl9jb25udHJhY2tfdGNwX3BhY2tldCkgdG8gaGFuZGxlIG1pZC1zdHJlYW0gcGlja3VwcyBmb3IgdW5yZXBsaWVkIGNvbm5lY3Rpb25zLCBhbmQgdXBkYXRlcyBmbG93IHRhYmxlIGV2YWx1YXRpb24gYW5kIGZvcndhcmRpbmcgKG5mdF9mbG93X29mZmxvYWRfZXZhbCwgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQsIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQpIHRvIGRlZmVyIGJpZGlyZWN0aW9uYWwgb2ZmbG9hZGluZyB1bnRpbCBjb25udHJhY2sgY29uZmlybXMgcmVwbHkgcGFja2V0cy4gVGhpcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBpcyB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZyB2aWEgbmV0d29yayBwYWNrZXQgY3JhZnRpbmcgYW5kIG5mdGFibGVzIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ4ZWZlNjkyMjcxYzE2MWIzZWExZWU5YmY2MzE3YjA5NDFjZjA0ZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOToyODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbmluZGV4IGZkZTI0MjdjZWI4ZmMuLmE0ZTNkOWVkN2E2NGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbkBAIC0yMDgsNiArMjA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPT0gVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gfVxuK1xuKy8qIEEgZmxvdyBwaWNrZWQgdXAgd2l0aG91dCBpdHMgcmVwbHkgY2Fubm90IGJlY29tZSBhc3N1cmVkLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4re1xuK1x0cmV0dXJuIGN0LVx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4rfVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMTczLDYgKzExNzMsMjUgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0XHR9XG4gXG4rXHRcdC8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnNcbitcdFx0ICogd2hlbiB0aGUgcmVwbHkgZGlyZWN0aW9uIHRha2VzIGFub3RoZXIgcGF0aCwgYW5kIHRoZSBjbGllbnRcbitcdFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cbitcdFx0ICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXRcbitcdFx0ICogY3JlYXRlcyBhIG5ldyBvbmUgdGhhdCBzZWVkcyB0aGUgdW5zZWVuIGRpcmVjdGlvbiBmcm9tIHRoZVxuK1x0XHQgKiBwYWNrZXQgaXRzZWxmLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRuLVx1MDAzZXRjcF9sb29zZSBcdTAwMjZcdTAwMjYgIW5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgb2xkX3N0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBudG9obCh0aC1cdTAwM2VzZXEpID09IGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXG4rXHRcdFx0aWYgKG5mX2N0X2tpbGwoY3QpKVxuK1x0XHRcdFx0cmV0dXJuIC1ORl9SRVBFQVQ7XG4rXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRcdH1cbitcbiBcdFx0LyogSW52YWxpZCBwYWNrZXQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTQ2NSw2ICs0NjUsMjYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuIH1cbiBcbisvKiBUaGUgcmVwbHkgZGlyZWN0aW9uIG9mIGEgZmxvdyBvZmZsb2FkZWQgaW4gb25lIGRpcmVjdGlvbiBvbmx5IHN0YXlzIG9uIHRoZVxuKyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXG4rICogb2ZmbG9hZGVkIGluIGJvdGggZGlyZWN0aW9ucy5cbisgKi9cbitzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbit7XG4rXHRpZiAoZGlyICE9IEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgfHxcbitcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZmbG93LVx1MDAzZWN0LVx1MDAzZXN0YXR1cykpIHtcbitcdFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuQEAgLTQ3OCw2ICs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwaCk7XG5AQCAtMTA3NCw2ICsxMDk3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDMuLjBiNmJlOGFjM2QyNGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbkBAIC03Myw3ICs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXG4gXHRcdFx0XHRcdCAgc2l6ZW9mKF90Y3BoKSwgXHUwMDI2X3RjcGgpO1xuIFx0XHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cdTAwM2VmaW4gfHwgdGNwaC1cdTAwM2Vyc3QgfHxcbi1cdFx0XHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXG4rXHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fVURQOlxuQEAgLTExNyw3ICsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuLVx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4rXHRpZiAoIXRjcGggfHwgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSlcbitcdFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9mbG93X2FkZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLjUxNmE1NDQyNjZmMWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTUxNiw2ICs1MTYsNzkgQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuKyMgQXN5bW1ldHJpYyBwYXRoIHRlc3Q6XG4rIyBuczIgYW5zd2VycyBvdmVyIGEgZGlyZWN0IGxpbmssIHNvIG5zcjEgc2VlcyB0aGUgb3JpZ2luYWwgZGlyZWN0aW9uIG9ubHkuXG4rIyBTdWNoIGEgY29ubmVjdGlvbiBuZXZlciBiZWNvbWVzIGFzc3VyZWQsIGJ1dCB0aGUgZmxvd3RhYmxlIGlzIGV4cGVjdGVkIHRvXG4rIyB0YWtlIG92ZXIgdGhlIGRpcmVjdGlvbiB0aGF0IG5zcjEgZG9lcyBzZWUuXG4rY2hlY2tfb3JpZ19vZmZsb2FkZWQoKVxuK3tcbitcdGxvY2FsIHdoYXQ9JDFcbitcbitcdGxvY2FsIG9yaWdcbitcdG9yaWc9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBpbmV0IGZpbHRlciByb3V0ZWRfb3JpZyB8IGdyZXAgcGFja2V0cylcbitcdGxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9XG4rXG4rXHRsb2NhbCBmc1xuK1x0ZnM9JChkdSAtc2IgXCIkbnNpblwiKVxuK1x0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcbitcbitcdCMgdGhlIGZsb3d0YWJsZSB0YWtlcyBvdmVyIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0cywgc28gdGhlIGZvcndhcmRcbitcdCMgaG9vayBtdXN0IHNlZSBhIHNtYWxsIGZyYWN0aW9uIG9mIHRoZSB0cmFuc2ZlcnJlZCBmaWxlLlxuK1x0aWYgWyBcIiRvcmlnX2NudFwiIC1ndCBcIiRtYXhfb3JpZ1wiIF07dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJHdoYXQ6IG9yaWdpbmFsIGNvdW50ZXIgJG9yaWdfY250IGV4Y2VlZHMgZXhwZWN0ZWQgdmFsdWUgJG1heF9vcmlnXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRlY2hvIFwiUEFTUzogJHdoYXRcIlxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXG4re1xuK1x0aXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyBcIiRuczJcIlxuK1x0aXAgLW5ldCBcIiRuczFcIiBhZGRyIGFkZCAxMC4wLjkuOTkvMjQgZGV2IGV0aDFcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgMTAuMC45Ljk4LzI0IGRldiBldGgxXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWRcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgZGVhZDo5Ojo5OC82NCBkZXYgZXRoMSBub2RhZFxuK1x0aXAgLW5ldCBcIiRuczFcIiBsaW5rIHNldCBldGgxIHVwXG4rXHRpcCAtbmV0IFwiJG5zMlwiIGxpbmsgc2V0IGV0aDEgdXBcbitcbitcdCMgbnMxIGtlZXBzIHNlbmRpbmcgdGhyb3VnaCBuc3IxLCBuczIgYW5zd2VycyBvbiB0aGUgZGlyZWN0IGxpbmsuXG4rXHRpcCAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCAxMC4wLjEuOTkgdmlhIDEwLjAuOS45OSBkZXYgZXRoMVxuK1x0aXAgLTYgLW5ldCBcIiRuczJcIiByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMVxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczFcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnMyXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwiJG5zMVwiIFwiJG5zMlwiIDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGxpc3QgcnVsZXNldCAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZmlcbitcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbitcbitcdGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJJUHY2IGZsb3cgb2ZmbG9hZGVkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcIlxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBsaXN0IHJ1bGVzZXQgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zMVwiIHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczJcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTFcbitcbitcdGlwIC1uZXQgXCIkbnMxXCIgbGluayBkZWwgZXRoMVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aFxuK1xuICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbid0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZFxuICMgd2lsbCBkZXBlbmQgb24gbnMxIGJlaW5nIG1hc3F1ZXJhZGVkIGluIG5zcjEuXG4gIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyODozNS43MTg2MzEzMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5ODg1NTQ1NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enosIHdoYXQgY29uZmlndXJhdGlvbnMgd2UnbGwgbmVlZCwgYW5kIHdoYXQgdGhlIGtleSBzeW1ib2xzIGFyZSB0byBmb2N1cyBvbi4gRmlyc3QsIGxldCdzIGRpZ2VzdCB0aGlzIGRpZmYuXG5cblRoZSBwcmltYXJ5IGFyZWEgb2YgaW50ZXJlc3QsIGJhc2VkIG9uIHRoZSBmaWxlIGNoYW5nZXMsIHNlZW1zIHRvIGJlIGFyb3VuZCBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyB0YWJsZSBvZmZsb2FkaW5nLiBJJ20gc2VlaW5nIGFkZGl0aW9ucyB0byBib3RoIHRoZSBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgKGBuZl9jb25udHJhY2tfbDRwcm90by5oYCBpbnRyb2R1Y2VzIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZGApIGFuZCB0aGUgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiAoYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGBuZnRfZmxvd19vZmZsb2FkLmNgKS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBoYW5kbGluZyBvZiB1bnJlcGxpZWQgVENQIGZsb3dzLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgYXN5bW1ldHJpYyBwYXRocywgYXMgaGludGVkIGluIGBuZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG5vdyBhdHRlbXB0aW5nIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGEgU1lOIG5ldmVyIGdldHMgYSByZXBseSBvbiB0aGUgaG9zdCB3aXRoIFwibG9vc2UgY29ubnRyYWNrXCIgYW5kIHRoZSBhZGRpdGlvbiBvZiBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZCgpYCBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgd2UgZGVhbCB3aXRoIHVucmVwbGllZCBmbG93cyBpbiB0aGUgb2ZmbG9hZCBjb250ZXh0LiBUaGUgaW5jbHVzaW9uIG9mIG5ldyB0ZXN0cyBpbiBgbmZ0X2Zsb3d0YWJsZS5zaGAgY29uZmlybXMgdGhpcyBhcmVhIG9mIGZvY3VzLlxuXG5UaGlzIHVucmVwbGllZCBmbG93IGhhbmRsaW5nIGlzIHdoZXJlIHRoZSBqdWljeSBidWdzIGFyZSBsaWtlbHkgdG8gYmUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIGZsb3cgb2ZmbG9hZCBhbmQga2lsbGluZyBjb25uZWN0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmZfY3Rfa2lsbChjdClgIGNhbGxzIGFuZCB0aGUgYmlkaXJlY3Rpb25hbCBmbGFnIGxvZ2ljIGluIGBuZnRfZmxvd19vZmZsb2FkX2V2YWwoKWAgd2l0aCBhIGZpbmUtdG9vdGggY29tYi4gSXQncyBsaWtlbHkgdGhhdCBvZmZsb2FkIGRlY2lzaW9ucyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBhcmUgb3V0IG9mIHN5bmMgb3Igc29tZSBpbnRlcm5hbCBzdGF0ZSBpcyBub3QgdXBkYXRlZCBjb3JyZWN0bHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBvZmZsb2FkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBUQ1AgY29ubmVjdGlvbiBzdGF0ZSBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGFyZWEgZm9yIGZ1enppbmcuIFNvLCBJIG5lZWQgdG8gZ2V0IGZhbWlsaWFyIHdpdGggYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgLCBhbmQgdGhlIGNoYW5nZXMgYXJvdW5kIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgpYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoKWAsIGFzIHdlbGwgYXMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoKWAuIEl0IHNlZW1zIHRoYXQgdGhlIG5ldyBmdW5jdGlvbnMgc3VjaCBhcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgYW5kIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIHdpbGwgYmUgY2VudHJhbCB0byB0aGF0LlxuXG5UbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCBpbnRvIHRoZSByZWxldmFudCBjb2RlIGNvbnRleHQgYW5kIHNwb3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjg6NDUuNjA0MTgwMjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2Mzk4MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ1Nz1uZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzEtICovXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NDcyOnN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy00NzMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTQ4OD1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy01MDAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6NTAxOlxcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNTAyLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM9MTA4Nz1zdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwOTktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTEwMDpcXHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExMDEtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI4OjQ4LjI2ODE2OTQ2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ3MDAzMDI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIENvbm5lY3Rpb24gVHJhY2tpbmcgYW5kIEZsb3cgT2ZmbG9hZCBNZWNoYW5pY3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlcmFjdHMgd2l0aCBmbG93IG9mZmxvYWQgaW4gdGhlIExpbnV4IGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNzMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB2aWV3IG9mIHRoZSBjb3JlIFRDUCBwcm90b2NvbC1zcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBGSU4tV0FJVCBzdGF0ZXMsIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUuIEkgZXhwZWN0IHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBsb2dpYyB0aGVyZSBhcm91bmQgdGhlIHZhcmlvdXMgdGltZXJzIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggZmxvdyBvZmZsb2FkLiBMZXQncyBjaGVjayBvdXQgYG5mdF9mbG93X29mZmxvYWQuY2AgYXJvdW5kIGxpbmUgNzMuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIE5ldGZpbHRlciBmbG93IG9mZmxvYWQgaW1wbGVtZW50YXRpb24gbGl2ZXMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGhhbmRvZmYgYmV0d2VlbiBjb25udHJhY2sgYW5kIG9mZmxvYWQsIHdoZW4gYW5kIGhvdyB0aGUgb2ZmbG9hZGluZyBpcyB0cmlnZ2VyZWQsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gc3Vic3lzdGVtcy4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgb2ZmbG9hZD8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgdXNlZD9cblxuRmluYWxseSwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgbmZfZmxvd190YWJsZV9pcC5jYC4gVGhpcyB3aWxsIGxpa2VseSBjb250YWluIHRoZSBJUC1zcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgZmxvdyB0YWJsZSwgYW5kIGJ5IHJlYWRpbmcgdGhpcyBJJ2xsIGJlIGFibGUgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCB0aGUgSVAgbGF5ZXIuIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGNvbnRhaW4gdGhlIGNvZGUgdGhhdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgb2ZmbG9hZGluZyB0byBhIG5ldHdvcmsgY2FyZCBhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGRpZmZlcmVudCBwaWVjZXMgY29tZSB0b2dldGhlci4gV2l0aCB0aGVzZSB0aHJlZSBsb2NhdGlvbnMgaW4gbWluZCwgSSBzaG91bGQgYmUgYWJsZSB0byByZWNvbnN0cnVjdCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgZXZlcnl0aGluZyB3b3JrcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI4OjU3LjczODIwNDEzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTYwOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19NQVg6XFxuMTE2MTpcXHRcXHRcXHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcXG4xMTYyOlxcdFxcdFxcdCAqIHRoZSBTWU4vQUNLIGZyb20gdGhlIHNlcnZlciBpcyBsb3N0LCB0aGUgY2xpZW50IG1heSB0cmFuc21pdFxcbjExNjM6XFx0XFx0XFx0ICogYSBrZWVwLWFsaXZlIHBhY2tldCB3aGlsZSBpbiBTWU5fU0VOVCBzdGF0ZS4gVGhpcyBuZWVkcyB0b1xcbjExNjQ6XFx0XFx0XFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cXG4xMTY1OlxcdFxcdFxcdCAqIGdlbmVyYXRlIGEgbmV3IFNZTiB3aXRoIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG51bWJlci5cXG4xMTY2OlxcdFxcdFxcdCAqL1xcbjExNjc6XFx0XFx0XFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFxcdTAwMjZcXHUwMDI2IG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UIFxcdTAwMjZcXHUwMDI2XFxuMTE2ODpcXHRcXHRcXHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXFx1MDAyNlxcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcXHUwMDI2XFx1MDAyNlxcbjExNjk6XFx0XFx0XFx0ICAgIGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFxcdTAwMjZcXHUwMDI2XFxuMTE3MDpcXHRcXHRcXHQgICAgY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cXHUwMDNlc2VxKSkge1xcbjExNzE6XFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3RjcDogU1lOIHByb3h5IGNsaWVudCBrZWVwIGFsaXZlXFxcXG5cXFwiKTtcXG4xMTcyOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHQvKiBUaGUgYW5zd2VyIHRvIHRoZSBTWU4gbmV2ZXIgcGFzc2VkIHRoZSBob3N0LCBhcyBoYXBwZW5zXFxuMTE3NzpcXHRcXHRcXHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxcbjExNzg6XFx0XFx0XFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cXG4xMTc5OlxcdFxcdFxcdCAqIG92ZXIgYXMgYSBtaWQtc3RyZWFtIHBpY2t1cDogZGVsZXRlIHRoZSBlbnRyeSBzbyB0aGUgcGFja2V0XFxuMTE4MDpcXHRcXHRcXHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXFxuMTE4MTpcXHRcXHRcXHQgKiBwYWNrZXQgaXRzZWxmLlxcbjExODI6XFx0XFx0XFx0ICovXFxuMTE4MzpcXHRcXHRcXHRpZiAodG4tXFx1MDAzZXRjcF9sb29zZSBcXHUwMDI2XFx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXFx1MDAyNlxcdTAwMjZcXG4xMTg0OlxcdFxcdFxcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcXHUwMDI2XFx1MDAyNlxcbjExODU6XFx0XFx0XFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFxcdTAwMjZcXHUwMDI2IGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwgXFx1MDAyNlxcdTAwMjZcXG4xMTg2OlxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4xMTg3OlxcdFxcdFxcdCAgICBudG9obCh0aC1cXHUwMDNlc2VxKSA9PSBjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcXG4xMTg4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdFxcdFxcdGlmIChuZl9jdF9raWxsKGN0KSlcXG4xMTkxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtTkZfUkVQRUFUO1xcbjExOTI6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTE5MzpcXHRcXHRcXHR9XFxuMTE5NDpcXHRcXG4xMTk1OlxcdFxcdFxcdC8qIEludmFsaWQgcGFja2V0ICovXFxuMTE5NjpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbjExOTc6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4xMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpbnZhbGlkLCBzdGF0ZSAlc1xcXCIsXFxuMTE5OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGluZGV4LCBkaXIsXFxuMTIwMDpcXHRcXHRcXHRcXHRcXHRcXHQgIHRjcF9jb25udHJhY2tfbmFtZXNbb2xkX3N0YXRlXSk7XFxuMTIwMTpcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4xMjAyOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XFxuMTIwMzpcXHRcXHRcXHQvKiBSRkM1OTYxIGNvbXBsaWFuY2UgY2F1c2Ugc3RhY2sgdG8gc2VuZCBcXFwiY2hhbGxlbmdlLUFDS1xcXCJcXG4xMjA0OlxcdFxcdFxcdCAqIGUuZy4gaW4gcmVzcG9uc2UgdG8gc3B1cmlvdXMgU1lOcy4gIENvbm50cmFjayBNVVNUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI4OjU3LjczODM2OTM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTY4NTExNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIG5mdF9mbG93X29mZmxvYWQuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGZvciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkLCByaWdodD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBvZmZsb2FkaW5nIG5ldHdvcmsgdHJhZmZpYyB0byBoYXJkd2FyZSwgcGFydGljdWxhcmx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlIGZsb3cgY2FjaGUgZW50cmllcywgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHNvZnR3YXJlIGZpbHRlciBhbmQgaGFyZHdhcmUgb2ZmbG9hZCwgYW5kIGhvdyB0aGUgZGVjaXNpb24gdG8gb2ZmbG9hZCBpcyBtYWRlIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBzdXNwZWN0IEknbGwgYmUgZm9jdXNlZCBvbiBob3cgdGhlIGBuZnRfZmxvd19vZmZsb2FkYCBob29rcyBmaXQgaW50byB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwcm90b2NvbHMgYW5kIHdoZXRoZXIgaXQgc3VwcG9ydHMgdGhpbmdzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZSBpbiB0aGUgb2ZmbG9hZCBkZWNpc2lvbnMuIFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB1bmRlcnBpbiB0aGUgb2ZmbG9hZCBwcm9jZXNzLCBhbmQgaG93IGl0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgaW1wb3J0YW50IHBhcnQgb2YgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MDAuMDk1MjIzNTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRjdCA9IG5mX2N0X2dldChwa3QtXFx1MDAzZXNrYiwgXFx1MDAyNmN0aW5mbyk7XFxuICA2ODpcXHRcXHRpZiAoIWN0KVxcbiAgNjk6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdHN3aXRjaCAoY3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSkge1xcbiAgNzI6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4gIDczOlxcdFxcdFxcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVxcdTAwM2Vza2IsIG5mdF90aG9mZihwa3QpLFxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzaXplb2YoX3RjcGgpLCBcXHUwMDI2X3RjcGgpO1xcbiAgNzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF0Y3BoIHx8IHRjcGgtXFx1MDAzZWZpbiB8fCB0Y3BoLVxcdTAwM2Vyc3QgfHxcXG4gIDc2OlxcdFxcdFxcdFxcdCAgICAgKCFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSBcXHUwMDI2XFx1MDAyNlxcbiAgNzc6XFx0XFx0XFx0XFx0ICAgICAgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSkpKVxcbiAgNzg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuICA3OTpcXHRcXHRcXHRicmVhaztcXG4gIDgwOlxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuICA4MTpcXHRcXHRcXHRicmVhaztcXG4gIDgyOlxcdCNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fR1JFXFxuICA4MzpcXHRcXHRjYXNlIElQUFJPVE9fR1JFOiB7XFxuICA4NDpcXHRcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0XFx0aWYgKGN0LVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBJUFNfTkFUX01BU0spXFxuICA4NzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDg4OlxcdFxcdFxcdHR1cGxlID0gXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcXG4gIDg5OlxcdFxcdFxcdC8qIE5vIHN1cHBvcnQgZm9yIEdSRSB2MSAqL1xcbiAgOTA6XFx0XFx0XFx0aWYgKHR1cGxlLVxcdTAwM2VzcmMudS5ncmUua2V5IHx8IHR1cGxlLVxcdTAwM2Vkc3QudS5ncmUua2V5KVxcbiAgOTE6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuICA5MjpcXHRcXHRcXHRicmVhaztcXG4gIDkzOlxcdFxcdH1cXG4gIDk0OlxcdCNlbmRpZlxcbiAgOTU6XFx0XFx0ZGVmYXVsdDpcXG4gIDk2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRpZiAobmZfY3RfZXh0X2V4aXN0KGN0LCBORl9DVF9FWFRfSEVMUEVSKSB8fFxcbiAxMDA6XFx0XFx0ICAgIGN0LVxcdTAwM2VzdGF0dXMgXFx1MDAyNiAoSVBTX1NFUV9BREpVU1QgfCBJUFNfTkFUX0NMQVNIKSlcXG4gMTAxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpXFxuIDEwNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoSVBTX09GRkxPQURfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykpXFxuIDEwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbiAxMTA6XFx0XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG4gMTExOlxcdFxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdGZsb3cgPSBmbG93X29mZmxvYWRfYWxsb2MoY3QpO1xcbiAxMTQ6XFx0XFx0aWYgKCFmbG93KVxcbiAxMTU6XFx0XFx0XFx0Z290byBlcnJfZmxvd19hbGxvYztcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0Zmxvd19vZmZsb2FkX3JvdXRlX2luaXQoZmxvdywgXFx1MDAyNnJvdXRlKTtcXG4gMTE4OlxcdFxcdGlmICh0Y3BoKVxcbiAxMTk6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX2N0X3RjcChjdCk7XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGlmICghdGNwaCB8fCAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKVxcbiAxMjI6XFx0XFx0XFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXFx1MDAyNmZsb3ctXFx1MDAzZWZsYWdzKTtcXG4gMTIzOlxcdFxcdHJldCA9IGZsb3dfb2ZmbG9hZF9hZGQoZmxvd3RhYmxlLCBmbG93KTtcXG4gMTI0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMjU6XFx0XFx0XFx0Z290byBlcnJfZmxvd19hZGQ7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHJldHVybjtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0ZXJyX2Zsb3dfYWRkOlxcbiAxMzA6XFx0XFx0Zmxvd19vZmZsb2FkX2ZyZWUoZmxvdyk7XFxuIDEzMTpcXHRlcnJfZmxvd19hbGxvYzpcXG4gMTMyOlxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlW2Rpcl0uZHN0KTtcXG4gMTMzOlxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLnR1cGxlWyFkaXJdLmRzdCk7XFxuIDEzNDpcXHRlcnJfZmxvd19yb3V0ZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MDAuMDk1MzcxNjM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1OTcyODcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYC4gSXQncyB3aGVyZSB0aGUgSVAtc3BlY2lmaWMgbG9naWMgZm9yIHRoZSBmbG93IHRhYmxlIGxpa2VseSByZXNpZGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgZmxvdyBrZXkgZ2VuZXJhdGlvbiBoYXBwZW5pbmcgaW4gdGhlcmUsIGFsb25nIHdpdGggdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIElQIHByb3RvY29sIGZhbWlseS4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGZsb3dzIGFyZSBoYW5kbGVkIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGBuZl9jb25udHJhY2tgIHN1YnN5c3RlbSBoYXBwZW5zLCBnaXZlbiB0aGF0IHRoZSBmbG93IHRhYmxlIGlzIG1lYW50IHRvIGJlIGEgaGlnaC1wZXJmb3JtYW5jZSBhbHRlcm5hdGl2ZSB0byB0cmFkaXRpb25hbCBjb25uZWN0aW9uIHRyYWNraW5nIGluIG1hbnkgY2FzZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgdmFyaW91cyBJUCBvcHRpb25zLCBmcmFnbWVudGF0aW9uLCBhbmQgb3RoZXIgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIGZsb3cgdGFibGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWxzIG9mIHRoaXMgZmlsZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgYW5kIGxpbWl0YXRpb25zIG9mIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzNSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MDMuMzU1MTAzMTA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0ICogb2ZmbG9hZGVkIGluIGJvdGggZGlyZWN0aW9ucy5cXG4gNDcxOlxcdCAqL1xcbiA0NzI6XFx0c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbiA0NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyxcXG4gNDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXIpXFxuIDQ3NTpcXHR7XFxuIDQ3NjpcXHRcXHRpZiAoZGlyICE9IEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgfHxcXG4gNDc3OlxcdFxcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuIDQ3ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdFxcdGlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFxcdTAwMjZmbG93LVxcdTAwM2VjdC1cXHUwMDNlc3RhdHVzKSkge1xcbiA0ODE6XFx0XFx0XFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncyk7XFxuIDQ4MjpcXHRcXHRcXHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCB0cnVlKTtcXG4gNDgzOlxcdFxcdH1cXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQ4NjpcXHR9XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gNDg5OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuIDQ5MDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxuIDQ5MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0OTI6XFx0e1xcbiA0OTM6XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG4gNDk0OlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIDQ5NTpcXHRcXHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcXG4gNDk2OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4gNDk5OlxcdFxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxuIDUwMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0bXR1ID0gZmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuIDUwNTpcXHRcXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuIDUwNjpcXHRcXHRcXHRtdHUgLT0gc2l6ZW9mKCppcGgpO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbiA1MDk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUxMDpcXHRcXG4gNTExOlxcdFxcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuIDUxMjpcXHRcXHR0aG9mZiA9IChpcGgtXFx1MDAzZWlobCAqIDQpICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuIDUxMzpcXHRcXHRpZiAobmZfZmxvd19zdGF0ZV9jaGVjayhmbG93LCBpcGgtXFx1MDAzZXByb3RvY29sLCBza2IsIHRob2ZmKSlcXG4gNTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MTU6XFx0XFxuIDUxNjpcXHRcXHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFxcdTAwMjZ0dXBsZWhhc2gtXFx1MDAzZXR1cGxlKSkge1xcbiA1MTc6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbiA1MTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUxOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjAzLjM1NTI1MjI3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDAyMzIxMzMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRmxvdyBPZmZsb2FkaW5nKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIGZsb3cgb2ZmbG9hZGluZy4gV2UndmUgYmVlbiBmb2N1c2luZyBvbiBJUHY0LCBidXQgZ2l2ZW4gdGhlIGN1cnJlbnQgbmV0d29yayBsYW5kc2NhcGUsIGl0J3MgYWJzb2x1dGVseSBjcnVjaWFsIHRvIGFsc28gZXhhbWluZSB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbi4gVGhlIGluaXRpYWwgZm9jdXMgbWlnaHQgaGF2ZSBiZWVuIG9uIElQdjQsIGdpdmVuIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9ucywgYnV0IHdlIGNhbid0IGFmZm9yZCB0byBpZ25vcmUgSVB2Ni4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSBjaGVjayBob3cgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGlzIGJlaGF2aW5nLiBJcyBpdCB3b3JraW5nIGFzIGV4cGVjdGVkPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHBvdGVudGlhbCBidWdzIGluIGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3IgaW1wbGVtZW50YXRpb24/IE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBpbXBvcnRhbnQgYW5kIHRoZXJlZm9yZSBJIHNob3VsZCBjaGVjayBpdC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZW5kLXRvLWVuZCBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eSwgYXMgSVB2NiBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgcHJldmFsZW50LiBJdCdzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGEgY29uc2lzdGVudCBhbmQgb3B0aW1pemVkIG5ldHdvcmtpbmcgZXhwZXJpZW5jZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToxMy4zNzg0Njg0MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4xMDg4OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuMTA4OTpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXFxuMTA5MDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEwOTE6XFx0e1xcbjEwOTI6XFx0XFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG4xMDkzOlxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuMTA5NDpcXHRcXHR1bnNpZ25lZCBpbnQgdGhvZmYsIG10dTtcXG4xMDk1OlxcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xcbjEwOTY6XFx0XFxuMTA5NzpcXHRcXHRkaXIgPSB0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLmRpcjtcXG4xMDk4OlxcdFxcdGZsb3cgPSBjb250YWluZXJfb2YodHVwbGVoYXNoLCBzdHJ1Y3QgZmxvd19vZmZsb2FkLCB0dXBsZWhhc2hbZGlyXSk7XFxuMTA5OTpcXHRcXG4xMTAwOlxcdFxcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXFxuMTEwMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTAyOlxcdFxcbjExMDM6XFx0XFx0bXR1ID0gZmxvdy1cXHUwMDNldHVwbGVoYXNoW2Rpcl0udHVwbGUubXR1ICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuMTEwNDpcXHRcXHRpZiAoZmxvdy1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXFxuMTEwNTpcXHRcXHRcXHRtdHUgLT0gc2l6ZW9mKCppcDZoKTtcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcXG4xMTA4OlxcdFxcdFxcdHJldHVybiAwO1xcbjExMDk6XFx0XFxuMTExMDpcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgY3R4LVxcdTAwM2VvZmZzZXQpO1xcbjExMTE6XFx0XFx0dGhvZmYgPSBzaXplb2YoKmlwNmgpICsgY3R4LVxcdTAwM2VvZmZzZXQ7XFxuMTExMjpcXHRcXHRpZiAobmZfZmxvd19zdGF0ZV9jaGVjayhmbG93LCBpcDZoLVxcdTAwM2VuZXh0aGRyLCBza2IsIHRob2ZmKSlcXG4xMTEzOlxcdFxcdFxcdHJldHVybiAwO1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRpZiAoIW5mX2Zsb3dfZHN0X2NoZWNrKFxcdTAwMjZ0dXBsZWhhc2gtXFx1MDAzZXR1cGxlKSkge1xcbjExMTY6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xcbjExMTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTExODpcXHRcXHR9XFxuMTExOTpcXHRcXG4xMTIwOlxcdFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgdGhvZmYgKyBjdHgtXFx1MDAzZWhkcnNpemUpKVxcbjExMjE6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCBmYWxzZSk7XFxuMTEyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MTMuMzc4NjIwNzY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NTM1NzQ3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgTmV0ZmlsdGVyL0Nvbm50cmFjay9GbG93dGFibGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZT8gRm9yIHRoZSBOZXRmaWx0ZXIsIGNvbm50cmFjaywgYW5kIGZsb3d0YWJsZSBzdWJzeXN0ZW1zICh0aGUgY29yZSBuZXR3b3JraW5nIHN0dWZmKSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgKnllcyouIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50IOKAkyBzb2NrZXRzLCB0dW4vdGFwLCB2ZXRoLCBuZXRsaW5rIChuZnRhYmxlcy9jb25udHJhY2spIGFyZSBhbGwgZWFzaWx5IGV4ZXJjaXNlZCBieSBzeXprYWxsZXIuIE5vIHByb2JsZW0gdGhlcmUuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0aGF0IGNhdGNoIG15IGF0dGVudGlvbi4gSW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIGRlYWxzIHdpdGggYXN5bW1ldHJpYyBwYXRocyBhbmQgbWlkLXN0cmVhbSBwaWNrdXBzIHdoZW4gdGhlIFNZTiByZXBseSBuZXZlciBldmVuIHRvdWNoZWQgdGhlIGhvc3QsIHBhcnRpY3VsYXJseSB3aGVuIGB0Y3BfbG9vc2VgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGVuLCBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY2AgYWxsb3dzIGZvciBvZmZsb2FkaW5nIHVucmVwbGllZCBUQ1AgZmxvd3Mgd2hpbGUgbWFuaXB1bGF0aW5nIHRoZSBgTkZfRkxPV19IV19CSURJUkVDVElPTkFMYCBmbGFnLiBBbmQgZmluYWxseSwgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKClgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgIHRvdWNoIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgLCB3aGljaCBpbnNwZWN0cyBhbmQgbW9kaWZpZXMgYE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTGAgd2hpbGUgY2FsbGluZyBgZmxvd19vZmZsb2FkX3JlZnJlc2goKWAuICBQbHVzLCB0aGVyZSdzIGEgbmV3IGlubGluZSBoZWxwZXIsIGBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZCgpYCBpbiBgaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhgLiBBbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZywgaW4gcGFydGljdWxhciBob3cgdGhleSBoYW5kbGUgVENQIGNvbm50cmFjayBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgZmxvd3RhYmxlIG9mZmxvYWQuXG5cblNvLCBpbiBteSBleHBlcnQgb3BpbmlvbiwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSXQncyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgZGVhbGluZyB3aXRoIFRDUCBjb25udHJhY2sgYW5kIGZsb3d0YWJsZSBvZmZsb2FkaW5n4oCUYSBoaWdoLXZhbHVlIHRhcmdldC5cblxuTm93LCB0byBtYWtlIHN1cmUgaXQncyBldmVuICpyZWFjaGFibGUqIGluIGEgdGFyZ2V0IHN5c3RlbSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgdG8gY29tcGlsZSBhbmQgYWN0dWFsbHkgZXhlY3V0ZSB0aGlzIGNvZGUuICBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AsIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNgIGFuZCBtYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgYXJlIGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToxNy44MzIxOTc3NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3MTYzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKG5mX2Zsb3dfdGFibGV8bmZ0X2Zsb3dfb2ZmbG9hZHxuZl9jb25udHJhY2tfcHJvdG9fdGNwKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NT1uZl9jb25udHJhY2steVxcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjY6XFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTctXFx0XFx0ICAgbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVxcdFxcdCs9IG5mdF9jdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXFx0Kz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcXHRcXHQrPSBuZnRfbGltaXQub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVxcdCs9IG5mdF9md2RfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcdCs9IG5mX2Zsb3dfdGFibGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQzOm5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ1OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NjpuZl9mbG93X3RhYmxlLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfUFJPQ0ZTKSArPSBuZl9mbG93X3RhYmxlX3Byb2Nmcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDctaWZlcSAoJChDT05GSUdfTkZfRkxPV19UQUJMRSksbSlcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0ODpuZl9mbG93X3RhYmxlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICs9IG5mX2Zsb3dfdGFibGVfYnBmLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0OS1lbHNlIGlmZXEgKCQoQ09ORklHX05GX0ZMT1dfVEFCTEUpLHkpXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTA6bmZfZmxvd190YWJsZS0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0gbmZfZmxvd190YWJsZV9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTUxLWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTItXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNTM6b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfSU5FVCkgKz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MTcuOTI4OTE5MzI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzY4OTc5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIGludmVzdGlnYXRpb24sIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmU6IE5ldHdvcmsgQ29ubmVjdGlvbiBUcmFja2luZyBcdTAwMjYgRmxvdyBPZmZsb2FkKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIEtjb25maWcgaHVudGluZy4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgZm91bmRhdGlvbiBmb3IgbmV0d29yayBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQuIEknbSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBkZWZpbml0aW9ucyBmb3IgYE5GX0NPTk5UUkFDS2AuIFRoYXQncyB0aGUgYmVkcm9jaywgcmlnaHQ/IFdpdGhvdXQgaXQsIHdlJ3JlIG5vdCBnb2luZyBhbnl3aGVyZS4gVGhlbiwgc2luY2Ugd2UncmUgcHJvYmFibHkgdGFsa2luZyBhYm91dCBzb21lIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBuZXdlciBuZXR3b3JraW5nIGZlYXR1cmVzLCBJJ2xsIG1vdmUgb24gdG8gYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3RhdGVmdWwgZmlyZXdhbGwgY2FwYWJpbGl0aWVzIGFuZCBhbnkgb2ZmbG9hZGluZyB0ZWNobmlxdWVzLiBGaW5hbGx5LCBJJ2xsIGRlZmluaXRlbHkgd2FudCB0byB2ZXJpZnkgYE5GX1RBQkxFU2Ag4oCTIHRoYXQncyB0aGUgZnJhbWV3b3JrIGZvciBkZWZpbmluZyB0aGUgcnVsZXMgYW5kIHBvbGljaWVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQgZnJhbWV3b3JrIGlzIHNldCBjb3JyZWN0bHksIHRvby4gSSdtIGVzc2VudGlhbGx5IHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcyBoZXJlLCBtYWtpbmcgc3VyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIGFyZSBpbiBwbGFjZSBhbmQgY29uZmlndXJlZCBhcyBJJ2QgZXhwZWN0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2Ugc2V0dGluZ3MgaXMga2V5IHRvIGludGVycHJldGluZyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgbmV0d29yayBzdGFjay4gSSdsbCBuZWVkIHRvIGFsc28gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgaW5jb21wYXRpYmlsaXRpZXMuIEl0J3MgYSBzeXN0ZW1hdGljIHByb2Nlc3MsIHJlYWxseSwgYnV0IGVzc2VudGlhbCBmb3IgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQ3LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6MjAuOTA1ODE5MTE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA2Nzk0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChORl9DT05OVFJBQ0t8TkZfRkxPV19UQUJMRXxORlRfRkxPV19PRkZMT0FEfE5GX1RBQkxFUylcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTcwMz1jb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjIxLjAxNjUwMzQ3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQyMzMyMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2Uga2VybmVsIG1vZHVsZXMsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0NPTk5UUkFDS2AsIGFyZSBjb25maWd1cmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGdvLXRvIHNvdXJjZSBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgZWFjaCBvZiB0aGVtLCBzeXN0ZW1hdGljYWxseSB3b3JraW5nIHRocm91Z2ggdGhlIG9wdGlvbnMgdG8gZ2V0IGEgZ29vZCBncmlwIG9uIHRoZWlyIHB1cnBvc2UgYW5kIHBvc3NpYmxlIGludGVycGxheS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGFueSBjaGFuZ2VzIG9yIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToyNS41NTg4MzgwNDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdGRlZmF1bHQgblxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIG1hdGNoaW5nIG9uIERDQ1AgZXh0ZW5zaW9uIGhlYWRlcnMuXFxuIDUwMzpcXHRcXG4gNTA0OlxcdGNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxuIDUwNTpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuIDUwNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXFxcIlxcbiA1MDc6XFx0XFx0aGVscFxcbiA1MDg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiZmxvd19vZmZsb2FkXFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG4gNTA5OlxcdFxcdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cXG4gNTEwOlxcdFxcbiA1MTE6XFx0Y29uZmlnIE5GVF9DT05OTElNSVRcXG4gNTEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm5saW1pdCBtb2R1bGVcXFwiXFxuIDUxMzpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA1MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gNTE1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDUxNjpcXHRcXHRoZWxwXFxuIDUxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjb25ubGltaXRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbiA1MTg6XFx0XFx0ICByYXRlbGltaXQgcnVsZSBtYXRjaGluZ3MgcGVyIGNvbm5lY3Rpb25zLlxcbiA1MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjI1LjU2MTA5MjY2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTczNzk1NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIGFuZCBLY29uZmlnIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBORl9GTE9XX1RBQkxFYCBvcHRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBgS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDcxMCwgZ2l2ZSBvciB0YWtlLCBhcyBhIGxpa2VseSBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0J3Mgd2hlcmUgY29yZSBuZXR3b3JrIGZlYXR1cmVzIGFyZSBvZnRlbiBkZWZpbmVkLCBhbmQgYE5GX0ZMT1dfVEFCTEVgIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBtYW5hZ2luZyBhbmQgYWNjZWxlcmF0aW5nIG5ldHdvcmsgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgcHJlc2VudC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSXMgaXQgbW9kdWxhcj8gQnVpbHQtaW4/IFdoYXQgYnVpbGQtdGltZSBvcHRpb25zIGFyZSBhdmFpbGFibGUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0vZG93bnN0cmVhbSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eSBpcyBoYW5kbGVkIGF0IHRoZSBjb25maWd1cmF0aW9uIHN0YWdlLCBhcyB0aGlzIHdpbGwgaW5mbHVlbmNlIGl0cyBiZWhhdmlvciBhbmQgYXZhaWxhYmlsaXR5IHdpdGhpbiB0aGUgc3lzdGVtLCBhcyB3ZWxsIGFzIGFueSB0cm91Ymxlc2hvb3RpbmcgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzYzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOToyOC4xMzQ4OTEyMTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFxuIDcwMTpcXHRlbmRpZiAjIE5GX1RBQkxFU1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxuIDcwNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4gNzA1OlxcdFxcdGRlcGVuZHMgb24gTkZfRkxPV19UQUJMRVxcbiA3MDY6XFx0XFx0aGVscFxcbiA3MDc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBzdXBwb3J0LlxcbiA3MDg6XFx0XFxuIDcwOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDcxMDpcXHRcXG4gNzExOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFXFxuIDcxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcbiA3MTM6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xcbiA3MTQ6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNzE1OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuIDcxNjpcXHRcXHRoZWxwXFxuIDcxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cXG4gNzE4OlxcdFxcbiA3MTk6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiA3MjA6XFx0XFxuIDcyMTpcXHRjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG4gNzIyOlxcdFxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcbiA3MjM6XFx0XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxuIDcyNDpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gNzI1OlxcdFxcdGhlbHBcXG4gNzI2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmb3IgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBzdGF0aXN0aWNzXFxuIDcyNzpcXHRcXHQgIHRvIGJlIHNob3duIGluIHByb2NmcyB1bmRlciBuZXQvbmV0ZmlsdGVyL25mX2Zsb3d0YWJsZS5cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0Y29uZmlnIE5FVEZJTFRFUl9YVEFCTEVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjI4LjEzNTAwNzgxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjYwMTk2ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGFyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZSBlc3NlbnRpYWwgb25lcyBhcmUgc2V0OiBgTkZfQ09OTlRSQUNLYCwgYE5GX1RBQkxFU2AsIGBORl9GTE9XX1RBQkxFYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBvdGhlciByZWxldmFudCBzeW1ib2xzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheSBoZXJlIGFzIHdlbGwuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBJIHNlZTpcblxuKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGA6IFRoaXMgb25lJ3MgaW4gYG5mX2Nvbm50cmFja19wcm90b190Y3AuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBtaWQtc3RyZWFtIHBhY2tldCBwaWNrdXAgYW5kIGRlYWwgd2l0aCBhc3ltbWV0cmljIHBhdGggc2l0dWF0aW9ucy5cbiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYDogSW4gYG5mdF9mbG93X29mZmxvYWQuY2AsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhpcyBpcyB0aGUgY29yZSBldmFsdWF0aW9uIGZ1bmN0aW9uLiBTZWVtcyBpdCBoYXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgb2ZmbG9hZGluZyB1bnJlcGxpZWQgVENQIGZsb3dzIGFuZCBjaGVja2luZyB0aGUgYmlkaXJlY3Rpb25hbCBmbGFnLlxuKiAgIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkYDogQSBuZXcgc3RhdGljIGZ1bmN0aW9uIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLiBUaGlzIGlzIGludHJpZ3Vpbmc7IGl0IHByb2JhYmx5IGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LlxuKiAgIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGA6IEFub3RoZXIgb25lIGluIGBuZl9mbG93X3RhYmxlX2lwLmNgLCBhbmQgaXQgY2FsbHMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgLlxuKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYDogQWxzbyBpbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgYW5kLCBhZ2FpbiwgaXQgY2FsbHMgYG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWRgLiBTbyBpdCBsb29rcyBsaWtlIHRoZXNlIGZvcndhcmQgZnVuY3Rpb25zIG5lZWQgdGhpcyBuZXcgcmVwbHkgaGFuZGxpbmcgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBmbG93cy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCB2aXNpYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gQXJlIHRoZXkgc3RhdGljLCBvciBhcmUgdGhleSBleHBvcnRlZD8gQXJlIHRoZXkgaW4gLmMgZmlsZXM/IEkgaGF2ZSB0byBrbm93IHdobyBjYW4gY2FsbCB3aG8uXG5cbiogICBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgOiBJdCdzIGEgbm9uLXN0YXRpYywgc28gaXQncyBnbG9iYWxseSB2aXNpYmxlLiBHb29kIHRvIGtub3cuXG4qICAgYG5mdF9mbG93X29mZmxvYWRfZXZhbGA6IFRoaXMgb25lJ3Mgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIHNjb3BlIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYC5cbiogICBgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZGA6IFRoaXMgb25lJ3MgYWxzbyBzdGF0aWMsIHJlc2lkaW5nIHdpdGhpbiBgbmZfZmxvd190YWJsZV9pcC5jYC5cbiogICBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgOiBUaGlzIG9uZSBpcyBzdGF0aWMgdG9vLCBhbmQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuXG4qICAgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgOiBhbmQgdGhpcyBvbmUgdG9vLCBhbHNvIHN0YXRpYyBhbmQgaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuXG5cbk9rYXksIGZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmRgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgdGhlc2UsIGFuZCB3aGljaCBvdGhlciBmdW5jdGlvbnMgYXJlIHRoZXkgY2FsbGluZyB3aXRoaW4gYG5mX2Zsb3dfdGFibGVfaXAuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGFuIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzICpyZWFsbHkqIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjM0Ljc5NTIwODQyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTc3NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfb2ZmbG9hZC4qZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NzI9c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ4ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTEwMjE9c3RhdGljIGludCBuZl9mbG93X3R1cGxlX2lwdjYoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEwODYtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTA4NzpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMDg4LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMjE5PW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMzgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIzOTpcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjQwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTozNS4xMDgzOTI1OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2NTY5NTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb25zaWRlcmVkIGFsbCByZWxldmFudCBmdW5jdGlvbnMuIEknbGwgYWRkIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCB0byB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gcmV2aWV3LCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5Ob3csIHdoaWNoIEZvY3VzU3ltYm9scyB3aWxsIGJlIHRoZSBtb3N0IGVmZmVjdGl2ZSBmb3IgZnV6emluZz8gQWZ0ZXIgcmV2aWV3aW5nLCBpdCdzIGNsZWFyIHRoZSBiZXN0IGNob2ljZXMgYXJlOlxuKiAgIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGBcbiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYFxuKiAgIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkYFxuKiAgIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZGBcbiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGBcbiogICBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgXG4qICAgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgXG5cblRoZXNlIGFyZSBhbGwgc3BlY2lmaWMgdG8gdGhlIG5ldGZpbHRlciBhbmQgZmxvd3RhYmxlIGNvZGUgcGF0aHMgdGhhdCB3ZXJlIGFjdHVhbGx5IG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCwgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cy4gVGhleSBhcmVuJ3QgZ2VuZXJpYyB1dGlsaXRpZXMuXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuIFRoZSByZWFzb25pbmcgaXM6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBoYW5kbGluZyBmb3IgYXN5bW1ldHJpYyByb3V0aW5nIGFuZCB1bnJlcGxpZWQgbWlkLXN0cmVhbSBUQ1AgY29ubmVjdGlvbnMgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBoYXJkd2FyZSBmbG93dGFibGUgb2ZmbG9hZCBtZWNoYW5pc21zLiBJdCBzcGVjaWZpY2FsbHkgYWx0ZXJzIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCB0byBoYW5kbGUgbWlkLXN0cmVhbSBjb25uZWN0aW9ucyB3aGVyZSBTWU4gcmVwbGllcyBieXBhc3MgdGhlIGhvc3QuIEFsc28sIGBuZnRfZmxvd19vZmZsb2FkX2V2YWwoKWAsIGBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCgpYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKClgIGFyZSB1cGRhdGVkIHVzaW5nIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIHRvIHN1cHBvcnQgdGhlIG9mZmxvYWRpbmcgb2YgdW5pZGlyZWN0aW9uYWwgVENQIGZsb3dzIHVudGlsIHRoZSByZXBseSBpcyBzZWVuLiBUaGlzIHJlcHJlc2VudHMgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBhY2Nlc3NpYmxlIGFuZCB0ZXN0YWJsZSB2aWEgbmV0d29yayBzb2NrZXRzIGFuZCBuZXRmaWx0ZXIvbmZ0YWJsZXMgcnVsZXMuXG5cbkknbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIEVuYWJsZUNvbmZpZ3M6IGBbXCJORl9DT05OVFJBQ0tcIiwgXCJORl9UQUJMRVNcIiwgXCJORl9GTE9XX1RBQkxFXCIsIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiXWAuXG5cblRoZSBmaW5hbCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgW1wibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIiwgXCJuZnRfZmxvd19vZmZsb2FkX2V2YWxcIiwgXCJuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkXCIsIFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIiwgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkXCJdYFxuXG5Pa2F5LCB3aXRoIGFsbCB0aGF0IGluIHBsYWNlLCBJJ20gcmVhZHkgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzcxLCJPdXRwdXRUb2tlbnMiOjI0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo0MC4zNzQwOTMwMDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxODM2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIixcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfZXZhbFwiLFxuICAgIFwibmZfZmxvd19yZXBseV91bm9mZmxvYWRlZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2ZvcndhcmRcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmbG93IHRhYmxlIG9mZmxvYWRpbmcgbG9naWMgdG8gc3VwcG9ydCBhc3ltbWV0cmljIFRDUCBmbG93cyAod2hlcmUgcmVwbGllcyBieXBhc3MgdGhlIGhvc3QpLiBJdCB1cGRhdGVzIFRDUCBjb25udHJhY2sgcGFja2V0IHByb2Nlc3NpbmcgKG5mX2Nvbm50cmFja190Y3BfcGFja2V0KSB0byBoYW5kbGUgbWlkLXN0cmVhbSBwaWNrdXBzIGZvciB1bnJlcGxpZWQgY29ubmVjdGlvbnMsIGFuZCB1cGRhdGVzIGZsb3cgdGFibGUgZXZhbHVhdGlvbiBhbmQgZm9yd2FyZGluZyAobmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsLCBuZl9mbG93X29mZmxvYWRfZm9yd2FyZCwgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZCkgdG8gZGVmZXIgYmlkaXJlY3Rpb25hbCBvZmZsb2FkaW5nIHVudGlsIGNvbm50cmFjayBjb25maXJtcyByZXBseSBwYWNrZXRzLiBUaGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGlzIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nIHZpYSBuZXR3b3JrIHBhY2tldCBjcmFmdGluZyBhbmQgbmZ0YWJsZXMgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiLFxuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsXCIsXG4gICAgXCJuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGZsb3cgdGFibGUgb2ZmbG9hZGluZyBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBsaWVzIGJ5cGFzcyB0aGUgaG9zdCkuIEl0IHVwZGF0ZXMgVENQIGNvbm50cmFjayBwYWNrZXQgcHJvY2Vzc2luZyAobmZfY29ubnRyYWNrX3RjcF9wYWNrZXQpIHRvIGhhbmRsZSBtaWQtc3RyZWFtIHBpY2t1cHMgZm9yIHVucmVwbGllZCBjb25uZWN0aW9ucywgYW5kIHVwZGF0ZXMgZmxvdyB0YWJsZSBldmFsdWF0aW9uIGFuZCBmb3J3YXJkaW5nIChuZnRfZmxvd19vZmZsb2FkX2V2YWwsIG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkLCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKSB0byBkZWZlciBiaWRpcmVjdGlvbmFsIG9mZmxvYWRpbmcgdW50aWwgY29ubnRyYWNrIGNvbmZpcm1zIHJlcGx5IHBhY2tldHMuIFRoaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgaXMgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcgdmlhIG5ldHdvcmsgcGFja2V0IGNyYWZ0aW5nIGFuZCBuZnRhYmxlcyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NDAuNDk5Mjg2NzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzE3OTc3OTkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjI5OjQwLjUwMDI2NDA0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzMTc4Nzk2NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgdG8gY2hlY2sgZm9yIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucyBsYWNraW5nIHJlcGx5IHBhY2tldHMuXFxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxcbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVxcdTAwM2VzdGF0dXNgLCBgY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZWAsIGBmbG93LVxcdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ4ZWZlNjkyMjcxYzE2MWIzZWExZWU5YmY2MzE3YjA5NDFjZjA0ZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOToyODozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbmluZGV4IGZkZTI0MjdjZWI4ZmMuLmE0ZTNkOWVkN2E2NGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcbkBAIC0yMDgsNiArMjA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbiBcdHJldHVybiBjdC1cdTAwM2Vwcm90by50Y3Auc3RhdGUgPT0gVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICB0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gfVxuK1xuKy8qIEEgZmxvdyBwaWNrZWQgdXAgd2l0aG91dCBpdHMgcmVwbHkgY2Fubm90IGJlY29tZSBhc3N1cmVkLiAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpXG4re1xuK1x0cmV0dXJuIGN0LVx1MDAzZXByb3RvLnRjcC5zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVEIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4rfVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbmluZGV4IGFkNmYxOTg2ZDUyYTYuLjMzNWIxMTMwMWE3OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbkBAIC0xMTczLDYgKzExNzMsMjUgQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0XHR9XG4gXG4rXHRcdC8qIFRoZSBhbnN3ZXIgdG8gdGhlIFNZTiBuZXZlciBwYXNzZWQgdGhlIGhvc3QsIGFzIGhhcHBlbnNcbitcdFx0ICogd2hlbiB0aGUgcmVwbHkgZGlyZWN0aW9uIHRha2VzIGFub3RoZXIgcGF0aCwgYW5kIHRoZSBjbGllbnRcbitcdFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cbitcdFx0ICogb3ZlciBhcyBhIG1pZC1zdHJlYW0gcGlja3VwOiBkZWxldGUgdGhlIGVudHJ5IHNvIHRoZSBwYWNrZXRcbitcdFx0ICogY3JlYXRlcyBhIG5ldyBvbmUgdGhhdCBzZWVkcyB0aGUgdW5zZWVuIGRpcmVjdGlvbiBmcm9tIHRoZVxuK1x0XHQgKiBwYWNrZXQgaXRzZWxmLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRuLVx1MDAzZXRjcF9sb29zZSBcdTAwMjZcdTAwMjYgIW5mY3Rfc3lucHJveHkoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgb2xkX3N0YXRlID09IFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmRleCA9PSBUQ1BfQUNLX1NFVCBcdTAwMjZcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBudG9obCh0aC1cdTAwM2VzZXEpID09IGN0LVx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXG4rXHRcdFx0aWYgKG5mX2N0X2tpbGwoY3QpKVxuK1x0XHRcdFx0cmV0dXJuIC1ORl9SRVBFQVQ7XG4rXHRcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRcdH1cbitcbiBcdFx0LyogSW52YWxpZCBwYWNrZXQgKi9cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4gXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuaW5kZXggYzhjMjlhOWExNjg0NC4uZjJjZDVjMmM1MzY1YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY1xuQEAgLTQ2NSw2ICs0NjUsMjYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXHUwMDI2dHVwbGUpO1xuIH1cbiBcbisvKiBUaGUgcmVwbHkgZGlyZWN0aW9uIG9mIGEgZmxvdyBvZmZsb2FkZWQgaW4gb25lIGRpcmVjdGlvbiBvbmx5IHN0YXlzIG9uIHRoZVxuKyAqIGNsYXNzaWMgcGF0aCBzbyB0aGF0IGNvbm50cmFjayBzZWVzIGl0LiBPbmNlIGNvbm50cmFjayBoYXMsIHRoZSBmbG93IGlzXG4rICogb2ZmbG9hZGVkIGluIGJvdGggZGlyZWN0aW9ucy5cbisgKi9cbitzdGF0aWMgYm9vbCBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgICAgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcilcbit7XG4rXHRpZiAoZGlyICE9IEZMT1dfT0ZGTE9BRF9ESVJfUkVQTFkgfHxcbitcdCAgICB0ZXN0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcdTAwMjZmbG93LVx1MDAzZWN0LVx1MDAzZXN0YXR1cykpIHtcbitcdFx0c2V0X2JpdChORl9GTE9XX0hXX0JJRElSRUNUSU9OQUwsIFx1MDAyNmZsb3ctXHUwMDNlZmxhZ3MpO1xuK1x0XHRmbG93X29mZmxvYWRfcmVmcmVzaChmbG93X3RhYmxlLCBmbG93LCB0cnVlKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuIFx0XHRcdFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuQEAgLTQ3OCw2ICs0OTgsOSBAQCBzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwaCk7XG5AQCAtMTA3NCw2ICsxMDk3LDkgQEAgc3RhdGljIGludCBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRkaXIgPSB0dXBsZWhhc2gtXHUwMDNldHVwbGUuZGlyO1xuIFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcbiBcbitcdGlmIChuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKGZsb3dfdGFibGUsIGZsb3csIGRpcikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0bXR1ID0gZmxvdy1cdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKGZsb3ctXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnR1bl9udW0pXG4gXHRcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbmluZGV4IDMyYjQyODEwMzhkZDMuLjBiNmJlOGFjM2QyNGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcbkBAIC03Myw3ICs3Myw4IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdHRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIocGt0LVx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXG4gXHRcdFx0XHRcdCAgc2l6ZW9mKF90Y3BoKSwgXHUwMDI2X3RjcGgpO1xuIFx0XHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cdTAwM2VmaW4gfHwgdGNwaC1cdTAwM2Vyc3QgfHxcbi1cdFx0XHQgICAgICFuZl9jb25udHJhY2tfdGNwX2VzdGFibGlzaGVkKGN0KSkpXG4rXHRcdFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElQUFJPVE9fVURQOlxuQEAgLTExNyw3ICsxMTgsOCBAQCBzdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0aWYgKHRjcGgpXG4gXHRcdGZsb3dfb2ZmbG9hZF9jdF90Y3AoY3QpO1xuIFxuLVx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4rXHRpZiAoIXRjcGggfHwgIW5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKGN0KSlcbitcdFx0X19zZXRfYml0KE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTCwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncyk7XG4gXHRyZXQgPSBmbG93X29mZmxvYWRfYWRkKGZsb3d0YWJsZSwgZmxvdyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9mbG93X2FkZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbmluZGV4IDQ0OWM1MThiZDk0N2QuLjUxNmE1NDQyNjZmMWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL25mdF9mbG93dGFibGUuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3d0YWJsZS5zaFxuQEAgLTUxNiw2ICs1MTYsNzkgQEAgZWxzZVxuIFx0cmV0PTFcbiBmaVxuIFxuKyMgQXN5bW1ldHJpYyBwYXRoIHRlc3Q6XG4rIyBuczIgYW5zd2VycyBvdmVyIGEgZGlyZWN0IGxpbmssIHNvIG5zcjEgc2VlcyB0aGUgb3JpZ2luYWwgZGlyZWN0aW9uIG9ubHkuXG4rIyBTdWNoIGEgY29ubmVjdGlvbiBuZXZlciBiZWNvbWVzIGFzc3VyZWQsIGJ1dCB0aGUgZmxvd3RhYmxlIGlzIGV4cGVjdGVkIHRvXG4rIyB0YWtlIG92ZXIgdGhlIGRpcmVjdGlvbiB0aGF0IG5zcjEgZG9lcyBzZWUuXG4rY2hlY2tfb3JpZ19vZmZsb2FkZWQoKVxuK3tcbitcdGxvY2FsIHdoYXQ9JDFcbitcbitcdGxvY2FsIG9yaWdcbitcdG9yaWc9JChpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlciBpbmV0IGZpbHRlciByb3V0ZWRfb3JpZyB8IGdyZXAgcGFja2V0cylcbitcdGxvY2FsIG9yaWdfY250PSR7b3JpZyMqYnl0ZXN9XG4rXG4rXHRsb2NhbCBmc1xuK1x0ZnM9JChkdSAtc2IgXCIkbnNpblwiKVxuK1x0bG9jYWwgbWF4X29yaWc9JCgoICR7ZnMlJS8qfSAvIDIgKSlcbitcbitcdCMgdGhlIGZsb3d0YWJsZSB0YWtlcyBvdmVyIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0cywgc28gdGhlIGZvcndhcmRcbitcdCMgaG9vayBtdXN0IHNlZSBhIHNtYWxsIGZyYWN0aW9uIG9mIHRoZSB0cmFuc2ZlcnJlZCBmaWxlLlxuK1x0aWYgWyBcIiRvcmlnX2NudFwiIC1ndCBcIiRtYXhfb3JpZ1wiIF07dGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJHdoYXQ6IG9yaWdpbmFsIGNvdW50ZXIgJG9yaWdfY250IGV4Y2VlZHMgZXhwZWN0ZWQgdmFsdWUgJG1heF9vcmlnXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRlY2hvIFwiUEFTUzogJHdoYXRcIlxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aCgpXG4re1xuK1x0aXAgbGluayBhZGQgbmFtZSBldGgxIG5ldG5zIFwiJG5zMVwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgZXRoMSBuZXRucyBcIiRuczJcIlxuK1x0aXAgLW5ldCBcIiRuczFcIiBhZGRyIGFkZCAxMC4wLjkuOTkvMjQgZGV2IGV0aDFcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgMTAuMC45Ljk4LzI0IGRldiBldGgxXG4rXHRpcCAtbmV0IFwiJG5zMVwiIGFkZHIgYWRkIGRlYWQ6OTo6OTkvNjQgZGV2IGV0aDEgbm9kYWRcbitcdGlwIC1uZXQgXCIkbnMyXCIgYWRkciBhZGQgZGVhZDo5Ojo5OC82NCBkZXYgZXRoMSBub2RhZFxuK1x0aXAgLW5ldCBcIiRuczFcIiBsaW5rIHNldCBldGgxIHVwXG4rXHRpcCAtbmV0IFwiJG5zMlwiIGxpbmsgc2V0IGV0aDEgdXBcbitcbitcdCMgbnMxIGtlZXBzIHNlbmRpbmcgdGhyb3VnaCBuc3IxLCBuczIgYW5zd2VycyBvbiB0aGUgZGlyZWN0IGxpbmsuXG4rXHRpcCAtbmV0IFwiJG5zMlwiIHJvdXRlIGFkZCAxMC4wLjEuOTkgdmlhIDEwLjAuOS45OSBkZXYgZXRoMVxuK1x0aXAgLTYgLW5ldCBcIiRuczJcIiByb3V0ZSBhZGQgZGVhZDoxOjo5OSB2aWEgZGVhZDo5Ojo5OSBkZXYgZXRoMVxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczFcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnMyXCIgc3lzY3RsIC1xIG5ldC5pcHY0LmlwX25vX3BtdHVfZGlzYz0wXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zcjFcIiBuZnQgcmVzZXQgY291bnRlcnMgdGFibGUgaW5ldCBmaWx0ZXIgXHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiB0ZXN0X3RjcF9mb3J3YXJkaW5nIFwiJG5zMVwiIFwiJG5zMlwiIDEgNCAxMC4wLjIuOTkgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJmbG93IG9mZmxvYWRlZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6IGZsb3cgb2ZmbG9hZCBmb3IgbnMxL25zMiB3aXRob3V0IHJlcGx5XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IGxpc3QgcnVsZXNldCAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZmlcbitcbitcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCByZXNldCBjb3VudGVycyB0YWJsZSBpbmV0IGZpbHRlciBcdTAwM2UvZGV2L251bGxcbitcbitcdGlmIHRlc3RfdGNwX2ZvcndhcmRpbmcgXCIkbnMxXCIgXCIkbnMyXCIgMSA2IFwiW2RlYWQ6Mjo6OTldXCIgMTIzNDU7IHRoZW5cbitcdFx0Y2hlY2tfb3JpZ19vZmZsb2FkZWQgXCJJUHY2IGZsb3cgb2ZmbG9hZGVkIGZvciBuczEvbnMyIHdpdGhvdXQgcmVwbHlcIlxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogSVB2NiBmbG93IG9mZmxvYWQgZm9yIG5zMS9uczIgd2l0aG91dCByZXBseVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGlwIG5ldG5zIGV4ZWMgXCIkbnNyMVwiIG5mdCBsaXN0IHJ1bGVzZXQgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zMVwiIHN5c2N0bCAtcSBuZXQuaXB2NC5pcF9ub19wbXR1X2Rpc2M9MVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuczJcIiBzeXNjdGwgLXEgbmV0LmlwdjQuaXBfbm9fcG10dV9kaXNjPTFcbitcbitcdGlwIC1uZXQgXCIkbnMxXCIgbGluayBkZWwgZXRoMVxuK1x0aXAgbmV0bnMgZXhlYyBcIiRuc3IxXCIgbmZ0IHJlc2V0IGNvdW50ZXJzIHRhYmxlIGluZXQgZmlsdGVyIFx1MDAzZS9kZXYvbnVsbFxuK31cbitcbit0ZXN0X2FzeW1tZXRyaWNfcGF0aFxuK1xuICMgZGVsZXRlIGRlZmF1bHQgcm91dGUsIGkuZS4gbnMyIHdvbid0IGJlIGFibGUgdG8gcmVhY2ggbnMxIGFuZFxuICMgd2lsbCBkZXBlbmQgb24gbnMxIGJlaW5nIG1hc3F1ZXJhZGVkIGluIG5zcjEuXG4gIyBleHBlY3QgbnMxIGhhcyBuc3IxIGFkZHJlc3MuXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo0MC41MDAyNjU3MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM2ODIxNjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgYXJlYXMgdGhhdCBLTVNBTiBuZWVkcyB0byBiZSBjb25jZXJuZWQgd2l0aC4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgcmFjZXMuXG5cbkZpcnN0LCBJIHNlZSBhIG5ldyBmdW5jdGlvbiwgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkYCwgYWRkZWQgaW4gYG5mX2Nvbm50cmFja19sNHByb3RvLmhgLiBJdCBsb29rcyBsaWtlIGl0J3MgY2hlY2tpbmcgZm9yIFRDUCBjb25uZWN0aW9ucyB0aGF0IGFyZSBlc3RhYmxpc2hlZCBidXQgaGF2ZW4ndCByZWNlaXZlZCBhIHJlcGx5LiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgc28gSSdsbCBrZWVwIGFuIGV5ZSBvbiBob3cgdGhpcyBpcyB1c2VkLiBUaGUga2V5IHBhcnQgaXMgdGhlIHN0YXRlIGNoZWNrIGFuZCB0aGUgYElQU19TRUVOX1JFUExZX0JJVGAuXG5cblRoZW4sIEknbSBub3RpbmcgY2hhbmdlcyBpbiBgbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYC4gVGhlcmUncyBhIG5ldyBjaGVjayB3aXRoaW4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHRoYXQgaW52b2x2ZXMgYHRjcF9sb29zZWAsIGBuZmN0X3N5bnByb3h5YCwgYW5kIHNlcXVlbmNlIG51bWJlciBjb21wYXJpc29ucy4gU3BlY2lmaWNhbGx5LCBpdCdzIGtpbGxpbmcgY29ubmVjdGlvbnMgYmFzZWQgb24gYSBTWU4tU0VOVCBzdGF0ZSBhbmQgc29tZSBUQ1Agc2VxdWVuY2UgbnVtYmVyIGNyaXRlcmlhIGlmIG5vIHJlcGx5IGlzIHNlZW4uIFRoaXMgaXMgYSBiaXQgY29tcGxleCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24gcG9zc2liaWxpdGllcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjb25kaXRpb25hbCBraWxsIG9wZXJhdGlvbi5cblxuTW92aW5nIG9udG8gYG5mX2Zsb3dfdGFibGVfaXAuY2AsIEkgc2VlIGBuZl9mbG93X3JlcGx5X3Vub2ZmbG9hZGVkKClgIGFuZCBjYWxscyB0byBpdCBpbiBgbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoKWAgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGRlYWxpbmcgd2l0aCBmbG93cyBhbmQgb2ZmbG9hZGluZywgYW5kIGl0J3MgY29uZGl0aW9uYWwgb24gdGhlIGBGTE9XX09GRkxPQURfRElSX1JFUExZYCBhbmQgdGhlIGBORl9GTE9XX0hXX0JJRElSRUNUSU9OQUxgIGZsYWcuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYElQU19BU1NVUkVEX0JJVGAgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgYmlkaXJlY3Rpb25hbCBmbG93LiBJIG11c3QgY29uZmlybSB0aGF0IGFsbCBmbGFnIG1hbmlwdWxhdGlvbnMgYW5kIG1lbW9yeSBhY2Nlc3NlcyBhcmUgc3luY2hyb25pemVkIGFuZCBzYWZlLlxuXG5GaW5hbGx5LCBpbiBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCwgYG5mdF9mbG93X29mZmxvYWRfZXZhbCgpYCBoYXMgbmV3IGxvZ2ljIHRoYXQgYWxsb3dzIHVucmVwbGllZCBUQ1AgY29ubmVjdGlvbnMgYW5kIGNvbmRpdGlvbmFsbHkgc2V0cyB0aGUgYE5GX0ZMT1dfSFdfQklESVJFQ1RJT05BTGAgZmxhZy4gVGhlIGNvbmRpdGlvbmFsIGNoZWNrIGFyb3VuZCBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpYCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgc3VidGxlIHN5bmNocm9uaXphdGlvbiBudWFuY2VzIHRoYXQgY291bGQgbGVhZCB0byBpc3N1ZXMuIEkgd2lsbCBhbHNvIGhhdmUgYSBjbG9zZSBsb29rIGF0IHRoZSB1c2FnZSBvZiBgX19zZXRfYml0YCB0byBtYWtlIHN1cmUgaXQncyBkb25lIGNvcnJlY3RseSBoZXJlLlxuXG5JJ20gYWxzbyBzZWVpbmcgYSBzZWxmdGVzdCBpbmNsdWRlZC4gVGhhdCdzIGdvb2QsIGJ1dCBpdCBkb2Vzbid0IHJlcGxhY2UgYSBkZXRhaWxlZCBtYW51YWwgYW5hbHlzaXMgb2YgdGhlIGNvZGUuIEkgd2lsbCByZXZpZXcgaXQgbGF0ZXIuXG5cblRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCBJJ2xsIHVzZSBgZ3JlcHBlcmAgKG9yIG15IHByZWZlcnJlZCB0b29sKSB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBtb3JlIGRlZXBseS4gSSBtaWdodCBhbHNvIGByZWFkLWZpbGVgIHRvIG1hbnVhbGx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBpbXBsaWNhdGlvbnMuIE15IG1haW4gY29uY2VybiBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZmxvdyBvZmZsb2FkIG1lY2hhbmlzbXMsIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIGNvZGUgY291bGQgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSB0aG9yb3VnaCBLTVNBTiByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo0OS44Njg0ODY2NDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NTg2MDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfZm9yd2FyZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz00NzI9c3RhdGljIGJvb2wgbmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjQ4ODpzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtNDg5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04ODc9bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo5MDc6XFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTkwOC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTAuMjI0MzU2OTQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4MTYyMDUxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipEaXZpbmcgaW50byBuZnRfZmxvd19vZmZsb2FkLmMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBuZnRfZmxvd19vZmZsb2FkLmNgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIGZsb3cgb2ZmbG9hZCBsb2dpYywgc28gdW5kZXJzdGFuZGluZyBob3cgaXQncyBldmFsdWF0aW5nIHJ1bGVzIGlzIGNydWNpYWwuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGZvciBwYWNrZXQgb2ZmbG9hZGluZy4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGNoZWNrcyBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIGZsb3cgcnVsZXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoaXMgc2VjdGlvbj8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWNjZXNzZWQgYXQgdGhpcyBwb2ludCwgbGlrZSB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzIG9yIHRoZSBydWxlIGNvbnRleHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmU6IGlzIGl0IGEgc2ltcGxlIGxvb2t1cCBvciBtb3JlIGNvbXBsZXggbG9naWMgaW52b2x2ZWQ/IEFyZSB3ZSBlZmZpY2llbnRseSB1dGlsaXppbmcgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmZWF0dXJlcyBhdmFpbGFibGUgaW4gdGhlIG5ldHdvcmsgY2FyZCwgb3IgZG9lcyBpdCBhcHBlYXIgd2UgYXJlIHNvZnR3YXJlLWJvdW5jaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdGhlIE5JQz8gSSdsbCBiZSBsb29raW5nIGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyB3aXRoaW4gdGhpcyBldmFsdWF0aW9uIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MDQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo1NC4wNDA1NjUxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjU6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGN0ID0gbmZfY3RfZ2V0KHBrdC1cXHUwMDNlc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG4gIDY4OlxcdFxcdGlmICghY3QpXFxuICA2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0c3dpdGNoIChjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtKSB7XFxuICA3MjpcXHRcXHRjYXNlIElQUFJPVE9fVENQOlxcbiAgNzM6XFx0XFx0XFx0dGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihwa3QtXFx1MDAzZXNrYiwgbmZ0X3Rob2ZmKHBrdCksXFxuICA3NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihfdGNwaCksIFxcdTAwMjZfdGNwaCk7XFxuICA3NTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC1cXHUwMDNlZmluIHx8IHRjcGgtXFx1MDAzZXJzdCB8fFxcbiAgNzY6XFx0XFx0XFx0XFx0ICAgICAoIW5mX2Nvbm50cmFja190Y3BfZXN0YWJsaXNoZWQoY3QpIFxcdTAwMjZcXHUwMDI2XFxuICA3NzpcXHRcXHRcXHRcXHQgICAgICAhbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoY3QpKSkpXFxuICA3ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDc5OlxcdFxcdFxcdGJyZWFrO1xcbiAgODA6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUDpcXG4gIDgxOlxcdFxcdFxcdGJyZWFrO1xcbiAgODI6XFx0I2lmZGVmIENPTkZJR19ORl9DVF9QUk9UT19HUkVcXG4gIDgzOlxcdFxcdGNhc2UgSVBQUk9UT19HUkU6IHtcXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRcXHRpZiAoY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19OQVRfTUFTSylcXG4gIDg3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgODg6XFx0XFx0XFx0dHVwbGUgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlO1xcbiAgODk6XFx0XFx0XFx0LyogTm8gc3VwcG9ydCBmb3IgR1JFIHYxICovXFxuICA5MDpcXHRcXHRcXHRpZiAodHVwbGUtXFx1MDAzZXNyYy51LmdyZS5rZXkgfHwgdHVwbGUtXFx1MDAzZWRzdC51LmdyZS5rZXkpXFxuICA5MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDkyOlxcdFxcdFxcdGJyZWFrO1xcbiAgOTM6XFx0XFx0fVxcbiAgOTQ6XFx0I2VuZGlmXFxuICA5NTpcXHRcXHRkZWZhdWx0OlxcbiAgOTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA5NzpcXHRcXHR9XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdGlmIChuZl9jdF9leHRfZXhpc3QoY3QsIE5GX0NUX0VYVF9IRUxQRVIpIHx8XFxuIDEwMDpcXHRcXHQgICAgY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IChJUFNfU0VRX0FESlVTVCB8IElQU19OQVRfQ0xBU0gpKVxcbiAxMDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmICghbmZfY3RfaXNfY29uZmlybWVkKGN0KSlcXG4gMTA0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRpZiAodGVzdF9hbmRfc2V0X2JpdChJUFNfT0ZGTE9BRF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4gMTA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxuIDExMDpcXHRcXHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXFx1MDAzZWZsb3d0YWJsZSkgXFx1MDAzYyAwKVxcbiAxMTE6XFx0XFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0ZmxvdyA9IGZsb3dfb2ZmbG9hZF9hbGxvYyhjdCk7XFxuIDExNDpcXHRcXHRpZiAoIWZsb3cpXFxuIDExNTpcXHRcXHRcXHRnb3RvIGVycl9mbG93X2FsbG9jO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRmbG93X29mZmxvYWRfcm91dGVfaW5pdChmbG93LCBcXHUwMDI2cm91dGUpO1xcbiAxMTg6XFx0XFx0aWYgKHRjcGgpXFxuIDExOTpcXHRcXHRcXHRmbG93X29mZmxvYWRfY3RfdGNwKGN0KTtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0XFx0aWYgKCF0Y3BoIHx8ICFuZl9jb25udHJhY2tfdGNwX3VucmVwbGllZChjdCkpXFxuIDEyMjpcXHRcXHRcXHRfX3NldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiAxMjM6XFx0XFx0cmV0ID0gZmxvd19vZmZsb2FkX2FkZChmbG93dGFibGUsIGZsb3cpO1xcbiAxMjQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDEyNTpcXHRcXHRcXHRnb3RvIGVycl9mbG93X2FkZDtcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0cmV0dXJuO1xcbiAxMjg6XFx0XFxuIDEyOTpcXHRlcnJfZmxvd19hZGQ6XFxuIDEzMDpcXHRcXHRmbG93X29mZmxvYWRfZnJlZShmbG93KTtcXG4gMTMxOlxcdGVycl9mbG93X2FsbG9jOlxcbiAxMzI6XFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpO1xcbiAxMzM6XFx0XFx0ZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTtcXG4gMTM0OlxcdGVycl9mbG93X3JvdXRlOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo1NC4wNDA3MDE5MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzAyNzA5MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBzbmlwcGV0IG9mIGNvZGUsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQqKlxuXG5SaWdodCwgc28gdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBpcyBmdW5jdGlvbmluZywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGBuZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgIGFyb3VuZCBsaW5lIDExNzMuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGZ1bmN0aW9uIGxpdmVzLCBhbmQgdGhhdCdzIHRoZSBoZWFydCBvZiBob3cgVENQIHBhY2tldHMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBkaXNzZWN0cyB0aGUgVENQIGhlYWRlciwgYW5hbHl6ZXMgdGhlIGZsYWdzLCBhbmQgZmlndXJlcyBvdXQgdGhlIGNvbm5lY3Rpb24ncyBzdGF0ZSB0cmFuc2l0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoZXJlIOKAkyBob3cgaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgcGFja2V0IGlzIHBhcnQgb2YgYW4gZXN0YWJsaXNoZWQgZmxvdywgYSBuZXcgY29ubmVjdGlvbiBhdHRlbXB0LCBhIEZJTiwgb3IgYSBSU1QuIEl0J2xsIGJlIGVzc2VudGlhbCB0byBzZWUgaG93IHRoZXkncmUga2VlcGluZyB0cmFjayBvZiBzZXF1ZW5jZSBudW1iZXJzIGFuZCBhY2tub3dsZWRnZW1lbnRzLCB3aGljaCBpcyBob3cgVENQIGVuc3VyZXMgcmVsaWFibGUgZGF0YSB0cmFuc21pc3Npb24gYW5kIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIGl0cyBlZmZpY2llbmN5IGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODExMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTYuNzQzNDMyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1MDpcXHRcXHRcXHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXFx1MDAyNlxcdTAwMjZcXG4xMTUxOlxcdFxcdFxcdCAgICBkaXIgPT0gSVBfQ1RfRElSX1JFUExZKVxcbjExNTI6XFx0XFx0XFx0XFx0Y3QtXFx1MDAzZXByb3RvLnRjcC5sYXN0X2FjayA9IG50b2hsKHRoLVxcdTAwM2VhY2tfc2VxKTtcXG4xMTUzOlxcdFxcbjExNTQ6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4xMTU1OlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuMTE1NjpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaWdub3JlZCwgc3RhdGUgJXNcXFwiLFxcbjExNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLFxcbjExNTg6XFx0XFx0XFx0XFx0XFx0XFx0ICB0Y3BfY29ubnRyYWNrX25hbWVzW29sZF9zdGF0ZV0pO1xcbjExNTk6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xMTYwOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19NQVg6XFxuMTE2MTpcXHRcXHRcXHQvKiBTcGVjaWFsIGNhc2UgZm9yIFNZTiBwcm94eTogd2hlbiB0aGUgU1lOIHRvIHRoZSBzZXJ2ZXIgb3JcXG4xMTYyOlxcdFxcdFxcdCAqIHRoZSBTWU4vQUNLIGZyb20gdGhlIHNlcnZlciBpcyBsb3N0LCB0aGUgY2xpZW50IG1heSB0cmFuc21pdFxcbjExNjM6XFx0XFx0XFx0ICogYSBrZWVwLWFsaXZlIHBhY2tldCB3aGlsZSBpbiBTWU5fU0VOVCBzdGF0ZS4gVGhpcyBuZWVkcyB0b1xcbjExNjQ6XFx0XFx0XFx0ICogYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBjb25udHJhY2sgZW50cnkgaW4gb3JkZXIgdG9cXG4xMTY1OlxcdFxcdFxcdCAqIGdlbmVyYXRlIGEgbmV3IFNZTiB3aXRoIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG51bWJlci5cXG4xMTY2OlxcdFxcdFxcdCAqL1xcbjExNjc6XFx0XFx0XFx0aWYgKG5mY3Rfc3lucHJveHkoY3QpIFxcdTAwMjZcXHUwMDI2IG9sZF9zdGF0ZSA9PSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UIFxcdTAwMjZcXHUwMDI2XFxuMTE2ODpcXHRcXHRcXHQgICAgaW5kZXggPT0gVENQX0FDS19TRVQgXFx1MDAyNlxcdTAwMjYgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCBcXHUwMDI2XFx1MDAyNlxcbjExNjk6XFx0XFx0XFx0ICAgIGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMIFxcdTAwMjZcXHUwMDI2XFxuMTE3MDpcXHRcXHRcXHQgICAgY3QtXFx1MDAzZXByb3RvLnRjcC5zZWVuW2Rpcl0udGRfZW5kIC0gMSA9PSBudG9obCh0aC1cXHUwMDNlc2VxKSkge1xcbjExNzE6XFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3RjcDogU1lOIHByb3h5IGNsaWVudCBrZWVwIGFsaXZlXFxcXG5cXFwiKTtcXG4xMTcyOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjExNzQ6XFx0XFx0XFx0fVxcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRcXHQvKiBUaGUgYW5zd2VyIHRvIHRoZSBTWU4gbmV2ZXIgcGFzc2VkIHRoZSBob3N0LCBhcyBoYXBwZW5zXFxuMTE3NzpcXHRcXHRcXHQgKiB3aGVuIHRoZSByZXBseSBkaXJlY3Rpb24gdGFrZXMgYW5vdGhlciBwYXRoLCBhbmQgdGhlIGNsaWVudFxcbjExNzg6XFx0XFx0XFx0ICogY29udGludWVzIGZyb20gd2hlcmUgaXRzIFNZTiBsZWZ0IG9mZi4gIFRha2UgdGhlIGNvbm5lY3Rpb25cXG4xMTc5OlxcdFxcdFxcdCAqIG92ZXIgYXMgYSBtaWQtc3RyZWFtIHBpY2t1cDogZGVsZXRlIHRoZSBlbnRyeSBzbyB0aGUgcGFja2V0XFxuMTE4MDpcXHRcXHRcXHQgKiBjcmVhdGVzIGEgbmV3IG9uZSB0aGF0IHNlZWRzIHRoZSB1bnNlZW4gZGlyZWN0aW9uIGZyb20gdGhlXFxuMTE4MTpcXHRcXHRcXHQgKiBwYWNrZXQgaXRzZWxmLlxcbjExODI6XFx0XFx0XFx0ICovXFxuMTE4MzpcXHRcXHRcXHRpZiAodG4tXFx1MDAzZXRjcF9sb29zZSBcXHUwMDI2XFx1MDAyNiAhbmZjdF9zeW5wcm94eShjdCkgXFx1MDAyNlxcdTAwMjZcXG4xMTg0OlxcdFxcdFxcdCAgICBvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19TWU5fU0VOVCBcXHUwMDI2XFx1MDAyNlxcbjExODU6XFx0XFx0XFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFxcdTAwMjZcXHUwMDI2IGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwgXFx1MDAyNlxcdTAwMjZcXG4xMTg2OlxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBcXHUwMDI2Y3QtXFx1MDAzZXN0YXR1cykgXFx1MDAyNlxcdTAwMjZcXG4xMTg3OlxcdFxcdFxcdCAgICBudG9obCh0aC1cXHUwMDNlc2VxKSA9PSBjdC1cXHUwMDNlcHJvdG8udGNwLnNlZW5bZGlyXS50ZF9lbmQpIHtcXG4xMTg4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdFxcdFxcdGlmIChuZl9jdF9raWxsKGN0KSlcXG4xMTkxOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtTkZfUkVQRUFUO1xcbjExOTI6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTE5MzpcXHRcXHRcXHR9XFxuMTE5NDpcXHRcXG4xMTk1OlxcdFxcdFxcdC8qIEludmFsaWQgcGFja2V0ICovXFxuMTE5NjpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbjExOTc6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4xMTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpbnZhbGlkLCBzdGF0ZSAlc1xcXCIsXFxuMTE5OTpcXHRcXHRcXHRcXHRcXHRcXHQgIGluZGV4LCBkaXIsXFxuMTIwMDpcXHRcXHRcXHRcXHRcXHRcXHQgIHRjcF9jb25udHJhY2tfbmFtZXNbb2xkX3N0YXRlXSk7XFxuMTIwMTpcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4xMjAyOlxcdFxcdGNhc2UgVENQX0NPTk5UUkFDS19USU1FX1dBSVQ6XFxuMTIwMzpcXHRcXHRcXHQvKiBSRkM1OTYxIGNvbXBsaWFuY2UgY2F1c2Ugc3RhY2sgdG8gc2VuZCBcXFwiY2hhbGxlbmdlLUFDS1xcXCJcXG4xMjA0OlxcdFxcdFxcdCAqIGUuZy4gaW4gcmVzcG9uc2UgdG8gc3B1cmlvdXMgU1lOcy4gIENvbm50cmFjayBNVVNUXFxuMTIwNTpcXHRcXHRcXHQgKiBub3QgYmVsaWV2ZSB0aGlzIEFDSyBpcyBhY2tpbmcgbGFzdCBGSU4uXFxuMTIwNjpcXHRcXHRcXHQgKi9cXG4xMjA3OlxcdFxcdFxcdGlmIChvbGRfc3RhdGUgPT0gVENQX0NPTk5UUkFDS19MQVNUX0FDSyBcXHUwMDI2XFx1MDAyNlxcbjEyMDg6XFx0XFx0XFx0ICAgIGluZGV4ID09IFRDUF9BQ0tfU0VUIFxcdTAwMjZcXHUwMDI2XFxuMTIwOTpcXHRcXHRcXHQgICAgY3QtXFx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciAhPSBkaXIgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTYuNzQzNjc1NzI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1ODcwNDQ4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGbG93IE9mZmxvYWQgTG9naWMqKlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZ3V0cyBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBpbXBsZW1lbnRhdGlvbi4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBgbmZfZmxvd190YWJsZV9pcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmRgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGRlY2lzaW9uLW1ha2luZyBsb2dpYyBmb3IgYWN0dWFsbHkgb2ZmbG9hZGluZyBwYWNrZXRzIGlzIGxvY2F0ZWQsIG9yIHNob3VsZCBiZSBsb2NhdGVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBwcm9jZXNzIHdoZW4gdGhlIGZsb3cgb2ZmbG9hZCBmZWF0dXJlIGlzIGVuYWJsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0ZXJpYSB1c2VkIGZvciBhIHBhY2tldCB0byBxdWFsaWZ5IGZvciBiZWluZyBvZmZsb2FkZWQuIFdoYXQgYXJlIHRoZSBrZXkgY2hlY2tzIGFyb3VuZCBjb25uZWN0aW9uIHN0YXRlLCBjb25udHJhY2ssIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWV0YWRhdGEuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBpbnRlZ3JhdGUgd2l0aCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEFueSBpbnRlcmFjdGlvbiB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYW55IHN1YnRsZSBlZGdlIGNhc2VzIGluIHRoYXQgYXJlYSwgaXMgd2hhdCBJJ20gbG9va2luZyBmb3IuIExldOKAmXMgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHdoZXJlIHRoZSBsb2dpYyBtaWdodCBpbnRyb2R1Y2UgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdW5kZXIgaGlnaCBsb2FkLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGRlc2lnbmVkOyBpZGVudGlmeSBwb3RlbnRpYWwgYnVncywgY29ybmVyIGNhc2VzLCBhbmQgYXJlYXMgb2YgY29uY2Vybi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU1OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6Mjk6NTkuMzMwNzI0MTMxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcXHUwMDI2dHVwbGUpIFxcdTAwM2MgMClcXG4gNDYzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcXHUwMDI2dHVwbGUpO1xcbiA0NjY6XFx0fVxcbiA0Njc6XFx0XFxuIDQ2ODpcXHQvKiBUaGUgcmVwbHkgZGlyZWN0aW9uIG9mIGEgZmxvdyBvZmZsb2FkZWQgaW4gb25lIGRpcmVjdGlvbiBvbmx5IHN0YXlzIG9uIHRoZVxcbiA0Njk6XFx0ICogY2xhc3NpYyBwYXRoIHNvIHRoYXQgY29ubnRyYWNrIHNlZXMgaXQuIE9uY2UgY29ubnRyYWNrIGhhcywgdGhlIGZsb3cgaXNcXG4gNDcwOlxcdCAqIG9mZmxvYWRlZCBpbiBib3RoIGRpcmVjdGlvbnMuXFxuIDQ3MTpcXHQgKi9cXG4gNDcyOlxcdHN0YXRpYyBib29sIG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4gNDczOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuIDQ3NDpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyKVxcbiA0NzU6XFx0e1xcbiA0NzY6XFx0XFx0aWYgKGRpciAhPSBGTE9XX09GRkxPQURfRElSX1JFUExZIHx8XFxuIDQ3NzpcXHRcXHQgICAgdGVzdF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpKVxcbiA0Nzg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHRpZiAodGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCBcXHUwMDI2Zmxvdy1cXHUwMDNlY3QtXFx1MDAzZXN0YXR1cykpIHtcXG4gNDgxOlxcdFxcdFxcdHNldF9iaXQoTkZfRkxPV19IV19CSURJUkVDVElPTkFMLCBcXHUwMDI2Zmxvdy1cXHUwMDNlZmxhZ3MpO1xcbiA0ODI6XFx0XFx0XFx0Zmxvd19vZmZsb2FkX3JlZnJlc2goZmxvd190YWJsZSwgZmxvdywgdHJ1ZSk7XFxuIDQ4MzpcXHRcXHR9XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdHJldHVybiB0cnVlO1xcbiA0ODY6XFx0fVxcbiA0ODc6XFx0XFxuIDQ4ODpcXHRzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIDQ4OTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxcbiA0OTA6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbiA0OTE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNDkyOlxcdHtcXG4gNDkzOlxcdFxcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XFxuIDQ5NDpcXHRcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93O1xcbiA0OTU6XFx0XFx0dW5zaWduZWQgaW50IHRob2ZmLCBtdHU7XFxuIDQ5NjpcXHRcXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0ZGlyID0gdHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kaXI7XFxuIDQ5OTpcXHRcXHRmbG93ID0gY29udGFpbmVyX29mKHR1cGxlaGFzaCwgc3RydWN0IGZsb3dfb2ZmbG9hZCwgdHVwbGVoYXNoW2Rpcl0pO1xcbiA1MDA6XFx0XFxuIDUwMTpcXHRcXHRpZiAobmZfZmxvd19yZXBseV91bm9mZmxvYWRlZChmbG93X3RhYmxlLCBmbG93LCBkaXIpKVxcbiA1MDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUwMzpcXHRcXG4gNTA0OlxcdFxcdG10dSA9IGZsb3ctXFx1MDAzZXR1cGxlaGFzaFtkaXJdLnR1cGxlLm10dSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbiA1MDU6XFx0XFx0aWYgKGZsb3ctXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS50dW5fbnVtKVxcbiA1MDY6XFx0XFx0XFx0bXR1IC09IHNpemVvZigqaXBoKTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0aWYgKHVubGlrZWx5KG5mX2Zsb3dfZXhjZWVkc19tdHUoc2tiLCBtdHUpKSlcXG4gNTA5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MTA6XFx0XFxuIDUxMTpcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgY3R4LVxcdTAwM2VvZmZzZXQpO1xcbiA1MTI6XFx0XFx0dGhvZmYgPSAoaXBoLVxcdTAwM2VpaGwgKiA0KSArIGN0eC1cXHUwMDNlb2Zmc2V0O1xcbiA1MTM6XFx0XFx0aWYgKG5mX2Zsb3dfc3RhdGVfY2hlY2soZmxvdywgaXBoLVxcdTAwM2Vwcm90b2NvbCwgc2tiLCB0aG9mZikpXFxuIDUxNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTE1OlxcdFxcbiA1MTY6XFx0XFx0aWYgKCFuZl9mbG93X2RzdF9jaGVjayhcXHUwMDI2dHVwbGVoYXNoLVxcdTAwM2V0dXBsZSkpIHtcXG4gNTE3OlxcdFxcdFxcdGZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTtcXG4gNTE4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOToyOTo1OS4zMzA4MTgzNDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE5MjQ4ODE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIElQdjYgT2ZmbG9hZCB3aXRoIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkYCoqXG5cbk9rYXksIEknbSBhbHJlYWR5IGRpZ2dpbmcgaW50byBvZmZsb2FkIHBlcmZvcm1hbmNlIGFuZCB0dW5hYmxlcywgc28gYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGluIHRoZSB3ZWVkcywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgb2J2aW91cy4gSXQncyBhIGdvb2QgcHJhY3RpY2UgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGFsbCByZWxldmFudCBwYXJhbWV0ZXJzLCBhbmQgaW4gdGhpcyBjYXNlLCB0aGUgc3BlY2lmaWMgc2V0dGluZyBJIG5lZWQgdG8gbG9vayBhdCBpcyBgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBJUHY2IHBhY2tldCBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIG9mZmxvYWQgbWVjaGFuaXNtLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG91ciBjdXJyZW50IGFyY2hpdGVjdHVyZSBhbmQgd29ya2xvYWRzLiBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoaXMgdG8gcGVyZm9ybWFuY2UgbWV0cmljcyBhbmQgbG9vayBmb3IgYW55IHJlZCBmbGFncyBvciBvcHRpbWl6YXRpb25zIEkgY2FuIG1ha2UgcmVsYXRlZCB0byB0aGlzIGtleSBwYXJhbWV0ZXIuIEl04oCZcyBhIHN0YW5kYXJkIHNhbml0eSBjaGVjaywgYnV0IG9mdGVuIHRoZXNlIHN1YnRsZSBzZXR0aW5ncyBjYW4gbWFrZSBvciBicmVhayB0aGUgcGVyZm9ybWFuY2Ugb2YgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZSBmbG93IG9mZmxvYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTozMDowMi41MjMzMTAwMjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4NTpcXHR9XFxuMTA4NjpcXHRcXG4xMDg3OlxcdHN0YXRpYyBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbjEwODg6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4xMDg5OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG4xMDkwOlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpXFxuMTA5MTpcXHR7XFxuMTA5MjpcXHRcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbjEwOTM6XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcXG4xMDk0OlxcdFxcdHVuc2lnbmVkIGludCB0aG9mZiwgbXR1O1xcbjEwOTU6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdGRpciA9IHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZGlyO1xcbjEwOTg6XFx0XFx0ZmxvdyA9IGNvbnRhaW5lcl9vZih0dXBsZWhhc2gsIHN0cnVjdCBmbG93X29mZmxvYWQsIHR1cGxlaGFzaFtkaXJdKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0aWYgKG5mX2Zsb3dfcmVwbHlfdW5vZmZsb2FkZWQoZmxvd190YWJsZSwgZmxvdywgZGlyKSlcXG4xMTAxOlxcdFxcdFxcdHJldHVybiAwO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRtdHUgPSBmbG93LVxcdTAwM2V0dXBsZWhhc2hbZGlyXS50dXBsZS5tdHUgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMTA0OlxcdFxcdGlmIChmbG93LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUudHVuX251bSlcXG4xMTA1OlxcdFxcdFxcdG10dSAtPSBzaXplb2YoKmlwNmgpO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRpZiAodW5saWtlbHkobmZfZmxvd19leGNlZWRzX210dShza2IsIG10dSkpKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBjdHgtXFx1MDAzZW9mZnNldCk7XFxuMTExMTpcXHRcXHR0aG9mZiA9IHNpemVvZigqaXA2aCkgKyBjdHgtXFx1MDAzZW9mZnNldDtcXG4xMTEyOlxcdFxcdGlmIChuZl9mbG93X3N0YXRlX2NoZWNrKGZsb3csIGlwNmgtXFx1MDAzZW5leHRoZHIsIHNrYiwgdGhvZmYpKVxcbjExMTM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdGlmICghbmZfZmxvd19kc3RfY2hlY2soXFx1MDAyNnR1cGxlaGFzaC1cXHUwMDNldHVwbGUpKSB7XFxuMTExNjpcXHRcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuMTExNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMTE4OlxcdFxcdH1cXG4xMTE5OlxcdFxcbjExMjA6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB0aG9mZiArIGN0eC1cXHUwMDNlaGRyc2l6ZSkpXFxuMTEyMTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuMTEyMjpcXHRcXG4xMTIzOlxcdFxcdGZsb3dfb2ZmbG9hZF9yZWZyZXNoKGZsb3dfdGFibGUsIGZsb3csIGZhbHNlKTtcXG4xMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTozMDowMi41MjM0MDU1NjNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNTU2MDIzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQ29uY2VybnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBLTVNBTi4gVGhlIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiBhc3ltbWV0cmljIHJvdXRpbmcsIGFuZCBtaWQtc3RyZWFtIHBpY2t1cCB3aXRoaW4gdGhlIE5ldGZpbHRlciBUQ1AgY29ubnRyYWNrIGFuZCBmbG93dGFibGUgb2ZmbG9hZCBtZWNoYW5pc21zLiBXZSBhcmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gZXN0YWJsaXNoZWQgc3RydWN0dXJlcyBhbmQgZmxvdyBsb2dpYywgbm90IHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IHN0cnVjdHVyZXMgdGhhdCBtaWdodCBjYXVzZSBpc3N1ZXMuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHk6IFRoZSBwYXRjaCBpbXBsZW1lbnRzIGhlbHBlciBmdW5jdGlvbnMgYW5kIGxvZ2ljIHdpdGhpbiBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAsIGBuZl9jb25udHJhY2tfdGNwX3BhY2tldCgpYCwgYG5mX2Zsb3dfdGFibGVfaXAuY2AsIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYC4gVGhlc2UgY29tcG9uZW50cyBhcmUgZGVzaWduZWQgdG8gbWFuYWdlIFRDUCBjb25uZWN0aW9uIHN0YXRlcyB3aGVuIHRoZXJlJ3MgYXN5bW1ldHJpYyByb3V0aW5nLCB3aGVyZSB0aGUgcmVwbHkgcGF0aCBpc24ndCBpbW1lZGlhdGVseSBrbm93biwgb3Igd2hlcmUgb2ZmbG9hZGluZyB0byB0aGUgZmxvd3RhYmxlIGlzIGRlbGF5ZWQuIFNwZWNpZmljYWxseSB0aGUgbWlkLXN0cmVhbSBwaWNrdXAgbG9naWMsIGRlYWxpbmcgd2l0aCBhIFNZTiBmcm9tIHRoZSBjbGllbnQsIG5vIHJlcGx5IHNlZW4geWV0LCBhbmQgdGhlbiBhbiBBQ0sgbWF0Y2hpbmcgYSBwcmV2aW91c2x5IHNlZW4gc2VxdWVuY2UgbnVtYmVyLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBOZXRmaWx0ZXIvY29ubnRyYWNrIHRlcnJpdG9yeS5cblxuTmV4dCwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYSwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiAxKSBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ7IDIpIGFsbCBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gZXhpc3RpbmcgYGZsb3dgIGFuZCBgY3RgIHN0cnVjdHVyZXMsIHN1Y2ggYXMgYGZsb3ctXHUwMDNlZmxhZ3NgLCBgY3QtXHUwMDNlc3RhdHVzYCwgYGN0LVx1MDAzZXByb3RvLnRjcC5zdGF0ZWA7IDMpIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM7IGFuZCA0KSBubyBidWZmZXIgcGFyc2luZyBvciBib3VuZHMgbW9kaWZpY2F0aW9ucyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnl0ZXMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkgYW0gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcy4gSXTigJlzIG1vZGlmeWluZyB0aGUgc3RhdGUgbWFjaGluZSBhbmQgcm91dGluZyBsb2dpYyB3aXRoaW4gdGhlIGVzdGFibGlzaGVkIE5ldGZpbHRlci9jb25udHJhY2sgZnJhbWV3b3JrLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3RhdGUgdHJhbnNpdGlvbnMsIHBhY2tldCBkcm9wcywgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG51bGwgZGVyZWZzLCBvciBsb2NraW5nIGlzc3VlcykgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGUgcmVhbG0gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZywgS0FTQU4sIG9yIExPQ0tERVAuIEkgZm91bmQgbm8gZXZpZGVuY2Ugb2YgS01TQU4gY29uY2VybnMuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gZmluYWxpemUgdGhlIGFzc2Vzc21lbnQgYW5kIHNlbmQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzk5LCJPdXRwdXRUb2tlbnMiOjI4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjMwOjEzLjY3OTAxMTEwN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0ZmlsdGVyIGNvbm50cmFjayBhbmQgbmZ0YWJsZXMgZmxvd3RhYmxlIG9mZmxvYWQgbG9naWMgdG8gc3VwcG9ydCBhc3ltbWV0cmljIFRDUCBmbG93cyAod2hlcmUgcmVwbHkgdHJhZmZpYyBieXBhc3NlcyB0aGUgcm91dGVyKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYG5mX2Nvbm50cmFja190Y3BfdW5yZXBsaWVkKClgIHRvIGNoZWNrIGZvciBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbnMgbGFja2luZyByZXBseSBwYWNrZXRzLlxcbjIuIEl0IGludHJvZHVjZXMgYSBtaWQtc3RyZWFtIHBpY2t1cCBtZWNoYW5pc20gaW4gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0KClgIHdoZW4gdGhlIGxvb3NlIFRDUCBtb2RlIGlzIGVuYWJsZWQgYW5kIGEgcG9zdC1TWU4gQUNLIGlzIHJlY2VpdmVkIHdpdGhvdXQgYSByZXBseS5cXG4zLiBJdCB1cGRhdGVzIGBuZl9mbG93X3RhYmxlX2lwLmNgIGFuZCBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCB0byBzdXBwb3J0IHVuaWRpcmVjdGlvbmFsbHkgb2ZmbG9hZGVkIGZsb3dzIHVudGlsIGJpZGlyZWN0aW9uYWwgdHJhZmZpYyBpcyBjb25maXJtZWQuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMgaW4gYSB3YXkgdGhhdCByZWFkcyB1bmluaXRpYWxpemVkIGJ5dGVzLiBBbGwgc3RhdGUgZmxhZ3MgYW5kIHN0cnVjdCBmaWVsZHMgYWNjZXNzZWQgKGBjdC1cXHUwMDNlc3RhdHVzYCwgYGN0LVxcdTAwM2Vwcm90by50Y3Auc3RhdGVgLCBgZmxvdy1cXHUwMDNlZmxhZ3NgKSBiZWxvbmcgdG8gZnVsbHkgaW5pdGlhbGl6ZWQgY29ubnRyYWNrIGFuZCBmbG93IHRhYmxlIHN0cnVjdHVyZXMuIEFueSBwb3RlbnRpYWwgZGVmZWN0cyAoc3VjaCBhcyBzdGF0ZSBtYWNoaW5lIGJ1Z3Mgb3IgcmVmZXJlbmNlL2xpZmV0aW1lIGlzc3VlcykgYXJlIGRldGVjdGFibGUgdGhyb3VnaCBzdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOZXRmaWx0ZXIgY29ubnRyYWNrIGFuZCBuZnRhYmxlcyBmbG93dGFibGUgb2ZmbG9hZCBsb2dpYyB0byBzdXBwb3J0IGFzeW1tZXRyaWMgVENQIGZsb3dzICh3aGVyZSByZXBseSB0cmFmZmljIGJ5cGFzc2VzIHRoZSByb3V0ZXIpLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgYWRkcyBgbmZfY29ubnRyYWNrX3RjcF91bnJlcGxpZWQoKWAgdG8gY2hlY2sgZm9yIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9ucyBsYWNraW5nIHJlcGx5IHBhY2tldHMuXFxuMi4gSXQgaW50cm9kdWNlcyBhIG1pZC1zdHJlYW0gcGlja3VwIG1lY2hhbmlzbSBpbiBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoKWAgd2hlbiB0aGUgbG9vc2UgVENQIG1vZGUgaXMgZW5hYmxlZCBhbmQgYSBwb3N0LVNZTiBBQ0sgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHJlcGx5LlxcbjMuIEl0IHVwZGF0ZXMgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZnRfZmxvd19vZmZsb2FkLmNgIHRvIHN1cHBvcnQgdW5pZGlyZWN0aW9uYWxseSBvZmZsb2FkZWQgZmxvd3MgdW50aWwgYmlkaXJlY3Rpb25hbCB0cmFmZmljIGlzIGNvbmZpcm1lZC5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcyBpbiBhIHdheSB0aGF0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIEFsbCBzdGF0ZSBmbGFncyBhbmQgc3RydWN0IGZpZWxkcyBhY2Nlc3NlZCAoYGN0LVxcdTAwM2VzdGF0dXNgLCBgY3QtXFx1MDAzZXByb3RvLnRjcC5zdGF0ZWAsIGBmbG93LVxcdTAwM2VmbGFnc2ApIGJlbG9uZyB0byBmdWxseSBpbml0aWFsaXplZCBjb25udHJhY2sgYW5kIGZsb3cgdGFibGUgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBkZWZlY3RzIChzdWNoIGFzIHN0YXRlIG1hY2hpbmUgYnVncyBvciByZWZlcmVuY2UvbGlmZXRpbWUgaXNzdWVzKSBhcmUgZGV0ZWN0YWJsZSB0aHJvdWdoIHN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[1] Phase: Succeeded StartedAt: 2026-09-10 09:30:42 +0000 UTC FinishedAt: 2026-09-10 09:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 09:30:42 +0000 UTC FinishedAt: 2026-09-10 09:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2] Phase: Succeeded StartedAt: 2026-09-10 09:30:42 +0000 UTC FinishedAt: 2026-09-10 13:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 09:30:42 +0000 UTC FinishedAt: 2026-09-10 13:17:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 09:30:42 +0000 UTC FinishedAt: 2026-09-10 09:31:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 09:30:42 +0000 UTC FinishedAt: 2026-09-10 09:30:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflow9x6b6/series-workflow9x6b6-convert-artifact-3640184445/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 09:31:03 +0000 UTC FinishedAt: 2026-09-10 09:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 09:31:03 +0000 UTC FinishedAt: 2026-09-10 09:49:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbc07231-95e4-4871-8705-10c53512a60d,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-workflow9x6b6/series-workflow9x6b6-convert-artifact-3640184445/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": "6c58ec5e-4d85-43de-9d34-86c4153ec11e", "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-workflow9x6b6/series-workflow9x6b6-build-action-66959283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 09:31:03 +0000 UTC FinishedAt: 2026-09-10 09:49:24 +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:*dbc07231-95e4-4871-8705-10c53512a60d,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-workflow9x6b6/series-workflow9x6b6-convert-artifact-3640184445/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": "6c58ec5e-4d85-43de-9d34-86c4153ec11e", "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-workflow9x6b6/series-workflow9x6b6-build-action-66959283/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 09:49:28 +0000 UTC FinishedAt: 2026-09-10 09:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 09:49:28 +0000 UTC FinishedAt: 2026-09-10 09:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 09:49:28 +0000 UTC FinishedAt: 2026-09-10 09:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 09:49:28 +0000 UTC FinishedAt: 2026-09-10 09:49:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflow9x6b6/series-workflow9x6b6-convert-artifact-1791849944/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 09:49:38 +0000 UTC FinishedAt: 2026-09-10 09:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 09:49:38 +0000 UTC FinishedAt: 2026-09-10 09:51:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c58ec5e-4d85-43de-9d34-86c4153ec11e,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-workflow9x6b6/series-workflow9x6b6-build-action-66959283/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-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 09:51:32 +0000 UTC FinishedAt: 2026-09-10 09:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 09:51:32 +0000 UTC FinishedAt: 2026-09-10 09:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 09:51:32 +0000 UTC FinishedAt: 2026-09-10 10:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 09:51:32 +0000 UTC FinishedAt: 2026-09-10 10:12:07 +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:*dbc07231-95e4-4871-8705-10c53512a60d,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-workflow9x6b6/series-workflow9x6b6-convert-artifact-1791849944/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": "e40b736a-50bf-4cc5-918b-c8995c70c045", "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-workflow9x6b6/series-workflow9x6b6-build-action-3547930436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 09:51:32 +0000 UTC FinishedAt: 2026-09-10 10:11:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbc07231-95e4-4871-8705-10c53512a60d,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-workflow9x6b6/series-workflow9x6b6-convert-artifact-1791849944/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": "e40b736a-50bf-4cc5-918b-c8995c70c045", "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-workflow9x6b6/series-workflow9x6b6-build-action-3547930436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 10:12:07 +0000 UTC FinishedAt: 2026-09-10 10:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 10:12:07 +0000 UTC FinishedAt: 2026-09-10 10:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 10:12:07 +0000 UTC FinishedAt: 2026-09-10 10:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 10:12:07 +0000 UTC FinishedAt: 2026-09-10 10:13:51 +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:*e40b736a-50bf-4cc5-918b-c8995c70c045,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-workflow9x6b6/series-workflow9x6b6-build-action-3547930436/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-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 10:14:01 +0000 UTC FinishedAt: 2026-09-10 13:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 10:14:01 +0000 UTC FinishedAt: 2026-09-10 13:17:01 +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":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"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:*6c58ec5e-4d85-43de-9d34-86c4153ec11e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e40b736a-50bf-4cc5-918b-c8995c70c045,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-workflow9x6b6/series-workflow9x6b6-build-action-66959283/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-workflow9x6b6/series-workflow9x6b6-build-action-3547930436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 10:14:01 +0000 UTC FinishedAt: 2026-09-10 10:14:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 10:14:01 +0000 UTC FinishedAt: 2026-09-10 10:14:06 +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":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"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-workflow9x6b6/series-workflow9x6b6-convert-artifact-1019716273/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 10:14:01 +0000 UTC FinishedAt: 2026-09-10 10:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 10:14:01 +0000 UTC FinishedAt: 2026-09-10 10:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 10:14:01 +0000 UTC FinishedAt: 2026-09-10 10:14:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 10:14:11 +0000 UTC FinishedAt: 2026-09-10 13:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9x6b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet","nft_flow_offload_eval","nf_flow_reply_unoffloaded","nf_flow_offload_forward","nf_flow_offload_ipv6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_TABLES","NF_FLOW_TABLE","NFT_FLOW_OFFLOAD"],"series_id":"0428d600-8922-4aba-8968-6eedab94415b","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 10:14:11 +0000 UTC FinishedAt: 2026-09-10 13:16:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c58ec5e-4d85-43de-9d34-86c4153ec11e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e40b736a-50bf-4cc5-918b-c8995c70c045,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-workflow9x6b6/series-workflow9x6b6-build-action-66959283/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-workflow9x6b6/series-workflow9x6b6-build-action-3547930436/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-workflow9x6b6/series-workflow9x6b6-convert-artifact-1019716273/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,}