Name: series-workflow99xmd Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 10:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[0] Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 07:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 07:07:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e06d371730b841ad8fe79ebfccf0def9470201f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e06d371730b841ad8fe79ebfccf0def9470201f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "3a9dfe85-515f-47c4-847d-716ca86c88ba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__rhashtable_init_noprof", "__rhltable_init_noprof", "rht_deferred_worker", "rhashtable_insert_slow" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "9e06d371730b841ad8fe79ebfccf0def9470201f", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcmhhc2h0YWJsZV9pbml0X25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3JobHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O3JodF9kZWZlcnJlZF93b3JrZXImIzM0OywKICAgICYjMzQ7cmhhc2h0YWJsZV9pbnNlcnRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBkYXRhIGJ1ZmZlcnMsIGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIHNlcmlhbGl6YXRpb24uXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Db25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2ZDY0YzFlZTYzYTY0YjhkZDI0NGI3ZjkwYTkwZDFkYjAyMGQ5NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5pbmRleCAwZTFiMTcyYTRmNmNiLi5hZmJjMTJiYTcxZjViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5AQCAtNzAsNiAmIzQzOzcwLDE0IEBAIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyB7XG4gXHRyaHRfb2JqX2NtcGZuX3RcdFx0b2JqX2NtcGZuO1xuIH07XG4gXG4mIzQzO3N0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyB7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2NrX2tleTtcbiYjNDM7XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5O1xuJiM0MztcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5O1xuJiM0MzsjZW5kaWZcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IHJoYXNodGFibGUgLSBIYXNoIHRhYmxlIGhhbmRsZVxuICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZVxuQEAgLTE0MSwyNCAmIzQzOzE0OSw3NyBAQCBzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIHtcbiBcbiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHQgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xuJiM0MztcdFx0ICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7XG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuJiM0MztcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1x0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcdTAwMjZfX2tleSk7XHRcdFx0XFxcbiYjNDM7XHRfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXHUwMDI2X19rZXlzKTtcdFx0XHRcXFxuIH0pXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlXG4mIzQzOyAqIEBodDpcdFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuJiM0MzsgKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbiYjNDM7ICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXG4mIzQzOyAqIGZpeGVkIGxlbmd0aCBrZXk6XG4mIzQzOyAqXG4mIzQzOyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xuJiM0MzsgKiBzdHJ1Y3QgdGVzdF9vYmoge1xuJiM0MzsgKlx0aW50XHRcdFx0a2V5O1xuJiM0MzsgKlx0dm9pZCAqXHRcdFx0bXlfbWVtYmVyO1xuJiM0MzsgKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4mIzQzOyAqIH07XG4mIzQzOyAqXG4mIzQzOyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4mIzQzOyAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuJiM0MzsgKlx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXG4mIzQzOyAqXHQua2V5X2xlbiA9IHNpemVvZihpbnQpLFxuJiM0MzsgKlx0Lmhhc2hmbiA9IGpoYXNoLFxuJiM0MzsgKiB9O1xuJiM0MzsgKlxuJiM0MzsgKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcbiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHtcbiYjNDM7ICpcdFsuLi5dXG4mIzQzOyAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbiYjNDM7ICogfTtcbiYjNDM7ICpcbiYjNDM7ICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXG4mIzQzOyAqIHtcbiYjNDM7ICpcdHN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTtcbiYjNDM7ICpcbiYjNDM7ICpcdHJldHVybiBbLi4uIGhhc2ggLi4uXTtcbiYjNDM7ICogfVxuJiM0MzsgKlxuJiM0MzsgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuJiM0MzsgKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbiYjNDM7ICpcdC5oYXNoZm4gPSBqaGFzaCxcbiYjNDM7ICpcdC5vYmpfaGFzaGZuID0gbXlfaGFzaF9mbixcbiYjNDM7ICogfTtcbiYjNDM7ICovXG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdCAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xuJiM0MztcdFx0ICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpO1xuICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuJiM0MztcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1x0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5KTtcdFx0XHRcXFxuJiM0MztcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbiB9KVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZVxuJiM0MzsgKiBAaGx0Olx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXG4mIzQzOyAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbiYjNDM7ICpcbiYjNDM7ICogSW5pdGlhbGl6ZXMgYSBuZXcgaGFzaCBsaXN0IHRhYmxlLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LlxuJiM0MzsgKi9cbiAjZGVmaW5lIHJobHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuICNlbmRpZiAvKiBfTElOVVhfUkhBU0hUQUJMRV9UWVBFU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuaW5kZXggNmM1ZTZkOWFjY2JhNy4uZWM4NTNjMWI5YWYzYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuQEAgLTMyOCw4ICYjNDM7MzI4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXHRiaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTtcbi1cdC8qIHN1YmNsYXNzIDAgaXMgdXNlZCBmb3IgLVx1MDAzZWxvY2sgYW5kIDEgZm9yIC1cdTAwM2VtdXRleC4gMiYjNDM7IGZvciBiaXRsb2NrcyAqL1xuLVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MmIzQzOzIsIDAsIE5VTEwsIF9USElTX0lQXyk7XG4mIzQzO1x0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MsIDAsIE5VTEwsIF9USElTX0lQXyk7XG4gXHRyZXR1cm4gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2xpYi9yaGFzaHRhYmxlLmMgYi9saWIvcmhhc2h0YWJsZS5jXG5pbmRleCA1ZGEwZTUzYThkNDIzLi45MThmMTVhMmFjNjkxIDEwMDY0NFxuLS0tIGEvbGliL3JoYXNodGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3JoYXNodGFibGUuY1xuQEAgLTQzMiw3ICYjNDM7NDMyLDcgQEAgc3RhdGljIHZvaWQgcmh0X2RlZmVycmVkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7XG4tXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZodC1cdTAwM2VtdXRleCwgMSk7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZodC1cdTAwM2VtdXRleCk7XG4gXG4gXHR0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtXHUwMDNldGJsLCBodCk7XG4gXHR0YmwgPSByaGFzaHRhYmxlX2xhc3RfdGFibGUoaHQsIHRibCk7XG5AQCAtMTEyMiw1MSAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpXG4gXHRyZXR1cm4gamhhc2gyKGtleSwgbGVuZ3RoLCBzZWVkKTtcbiB9XG4gXG4tLyoqXG4tICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlXG4tICogQGh0Olx0XHRoYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXG4tICogQHBhcmFtczpcdGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLSAqXG4tICogSW5pdGlhbGl6ZXMgYSBuZXcgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvblxuLSAqIHBhcmFtZXRlcnMuIEEgdGFibGUgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIHdpdGggYSB2YXJpYWJsZSBvclxuLSAqIGZpeGVkIGxlbmd0aCBrZXk6XG4tICpcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMTogRml4ZWQgbGVuZ3RoIGtleXNcbi0gKiBzdHJ1Y3QgdGVzdF9vYmoge1xuLSAqXHRpbnRcdFx0XHRrZXk7XG4tICpcdHZvaWQgKlx0XHRcdG15X21lbWJlcjtcbi0gKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4tICogfTtcbi0gKlxuLSAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4tICpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXG4tICpcdC5rZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBrZXkpLFxuLSAqXHQua2V5X2xlbiA9IHNpemVvZihpbnQpLFxuLSAqXHQuaGFzaGZuID0gamhhc2gsXG4tICogfTtcbi0gKlxuLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5c1xuLSAqIHN0cnVjdCB0ZXN0X29iaiB7XG4tICpcdFsuLi5dXG4tICpcdHN0cnVjdCByaGFzaF9oZWFkXHRub2RlO1xuLSAqIH07XG4tICpcbi0gKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0gKiB7XG4tICpcdHN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTtcbi0gKlxuLSAqXHRyZXR1cm4gWy4uLiBoYXNoIC4uLl07XG4tICogfVxuLSAqXG4tICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcbi0gKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbi0gKlx0Lmhhc2hmbiA9IGpoYXNoLFxuLSAqXHQub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sXG4tICogfTtcbi0gKi9cbiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbi1cdFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHQgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKVxuIHtcbiBcdHN0cnVjdCBidWNrZXRfdGFibGUgKnRibDtcbiBcdHNpemVfdCBzaXplO1xuQEAgLTExNzYsMTMgJiM0MzsxMTM0LDExIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG1lbXNldChodCwgMCwgc2l6ZW9mKCpodCkpO1xuLVx0LyogbXV0ZXhfbG9jayBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDEgKi9cbi1cdG11dGV4X2luaXRfd2l0aF9rZXkoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIGtleSk7XG4mIzQzO1x0bXV0ZXhfaW5pdF93aXRoX2tleShcdTAwMjZodC1cdTAwM2VtdXRleCwgXHUwMDI2a2V5cy1cdTAwM2VtdXRleF9rZXkpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aHQtXHUwMDNlbG9jayk7XG4tXHQvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi9cbi1cdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmh0LVx1MDAzZWxvY2ssIGtleSk7XG4mIzQzO1x0bG9ja2RlcF9zZXRfY2xhc3MoXHUwMDI2aHQtXHUwMDNlbG9jaywgXHUwMDI2a2V5cy1cdTAwM2Vsb2NrX2tleSk7XG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4tXHRodC1cdTAwM2Vsb2NrZGVwX2tleSA9IGtleTtcbiYjNDM7XHRodC1cdTAwM2Vsb2NrZGVwX2tleSA9IFx1MDAyNmtleXMtXHUwMDNlYnVja2V0X2tleTtcbiAjZW5kaWZcbiBcdG1lbWNweShcdTAwMjZodC1cdTAwM2VwLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7XG4gXG5AQCAtMTIzNiwyMiAmIzQzOzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XG4gXG4tLyoqXG4tICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXG4tICogQGhsdDpcdGhhc2ggbGlzdCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuLSAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0gKlxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cbi0gKlxuLSAqIFNlZSBkb2N1bWVudGF0aW9uIGZvciByaGFzaHRhYmxlX2luaXQuXG4tICovXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXkpO1xuJiM0MztcdGVyciA9IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihcdTAwMjZobHQtXHUwMDNlaHQsIHBhcmFtcywga2V5cyk7XG4gXHRobHQtXHUwMDNlaHQucmhsaXN0ID0gdHJ1ZTtcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3JoYXNodGFibGUuYyBiL2xpYi90ZXN0X3JoYXNodGFibGUuY1xuaW5kZXggODVhNjE1ZTc0NTkxMS4uYjc2N2EzOGE3NGY5NyAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3JoYXNodGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXG5AQCAtNDc3LDcgJiM0Mzs0NzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwcmludF9odChzdHJ1Y3QgcmhsdGFibGUgKnJobHQpXG4gXG4gXHRodCA9IFx1MDAyNnJobHQtXHUwMDNlaHQ7XG4gXHQvKiBUYWtlIHRoZSBtdXRleCB0byBhdm9pZCBSQ1Ugd2FybmluZyAqL1xuLVx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIDEpO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aHQtXHUwMDNlbXV0ZXgpO1xuIFx0dGJsID0gcmh0X2RlcmVmZXJlbmNlKGh0LVx1MDAzZXRibCwgaHQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGJsLVx1MDAzZXNpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcmhhc2h0YWJsZV9pbml0X25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3JobHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O3JodF9kZWZlcnJlZF93b3JrZXImIzM0OywKICAgICYjMzQ7cmhhc2h0YWJsZV9pbnNlcnRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgaW4gbGliL3JoYXNodGFibGUuYyBhbmQgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oLiBJdCBzZXBhcmF0ZXMgdGhlIHByZXZpb3VzbHkgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIG11dGV4LCBzcGlubG9jaywgYW5kIGJ1Y2tldCBiaXRsb2NrcyAoc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzKSwgYW5kIHVwZGF0ZXMgdGhlIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIHRoZSBidWNrZXQgYml0bG9jayBtYXAgYW5kIHRhYmxlIG11dGV4LiBTaW5jZSByaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIElQQywgYW5kIGZpbGVzeXN0ZW1zLCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlc2UgbG9ja2luZyBhbmQgYW5ub3RhdGlvbiBjaGFuZ2VzIGRvIG5vdCBjYXVzZSBsb2NrZGVwIHNwbGF0cyBvciB1bmNvdmVyIGxhdGVudCBsb2NrIG9yZGVyaW5nIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmQ2NGMxZWU2M2E2NGI4ZGQyNDRiN2Y5MGE5MGQxZGIwMjBkOTVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCkBAIC03MCw2ICYjNDM7NzAsMTQgQEAgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHsKIAlyaHRfb2JqX2NtcGZuX3QJCW9ial9jbXBmbjsKIH07CiAKJiM0MztzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOwlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBtdXRleF9rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5OwomIzQzOyNlbmRpZgomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCByaGFzaHRhYmxlIC0gSGFzaCB0YWJsZSBoYW5kbGUKICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZQpAQCAtMTQxLDI0ICYjNDM7MTQ5LDc3IEBAIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgewogCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwomIzQzOwkJICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7CiAjZGVmaW5lIHJoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcykJCQkJXAogKHsJCQkJCQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQkJXAomIzQzOwlzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5czsJCQlcCiAJCQkJCQkJCQlcCi0JX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXlzKTsJCQlcCiB9KQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZQomIzQzOyAqIEBodDoJCWhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWQKJiM0MzsgKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24KJiM0MzsgKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKJiM0MzsgKiBmaXhlZCBsZW5ndGgga2V5OgomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglpbnQJCQlrZXk7CiYjNDM7ICoJdm9pZCAqCQkJbXlfbWVtYmVyOwomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7CiYjNDM7ICoJLmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSwKJiM0MzsgKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKJiM0MzsgKgkua2V5X2xlbiA9IHNpemVvZihpbnQpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKiB9OwomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglbLi4uXQomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKQomIzQzOyAqIHsKJiM0MzsgKglzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7CiYjNDM7ICoKJiM0MzsgKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07CiYjNDM7ICogfQomIzQzOyAqCiYjNDM7ICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKJiM0MzsgKgkuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCiYjNDM7ICogfTsKJiM0MzsgKi8KICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpCiAKIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LAogCQkgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKJiM0MzsJCSAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTsKICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpCQkJCVwKICh7CQkJCQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJCVwKJiM0MzsJc3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7CQkJXAogCQkJCQkJCQkJXAotCV9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgJmFtcDtfX2tleXMpOwkJCVwKIH0pCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlCiYjNDM7ICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCiYjNDM7ICogQHBhcmFtczoJY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICoKJiM0MzsgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCiYjNDM7ICoKJiM0MzsgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LgomIzQzOyAqLwogI2RlZmluZSByaGx0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKQogCiAjZW5kaWYgLyogX0xJTlVYX1JIQVNIVEFCTEVfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAppbmRleCA2YzVlNmQ5YWNjYmE3Li5lYzg1M2MxYjlhZjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaApAQCAtMzI4LDggJiM0MzszMjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAliaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTsKLQkvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC0mZ3Q7bG9jayBhbmQgMSBmb3IgLSZndDttdXRleC4gMiYjNDM7IGZvciBiaXRsb2NrcyAqLwotCWxvY2tfYWNxdWlyZV9leGNsdXNpdmUoJmFtcDt0YmwtJmd0O2RlcF9tYXAsIHN1YmNsYXNzJiM0MzsyLCAwLCBOVUxMLCBfVEhJU19JUF8pOwomIzQzOwlsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKCZhbXA7dGJsLSZndDtkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9yaGFzaHRhYmxlLmMgYi9saWIvcmhhc2h0YWJsZS5jCmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0Ci0tLSBhL2xpYi9yaGFzaHRhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3JoYXNodGFibGUuYwpAQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCByaHRfZGVmZXJyZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlpbnQgZXJyID0gMDsKIAogCWh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAogCXRibCA9IHJodF9kZXJlZmVyZW5jZShodC0mZ3Q7dGJsLCBodCk7CiAJdGJsID0gcmhhc2h0YWJsZV9sYXN0X3RhYmxlKGh0LCB0YmwpOwpAQCAtMTEyMiw1MSAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpCiAJcmV0dXJuIGpoYXNoMihrZXksIGxlbmd0aCwgc2VlZCk7CiB9CiAKLS8qKgotICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlCi0gKiBAaHQ6CQloYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uCi0gKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKLSAqIGZpeGVkIGxlbmd0aCBrZXk6Ci0gKgotICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCi0gKiBzdHJ1Y3QgdGVzdF9vYmogewotICoJaW50CQkJa2V5OwotICoJdm9pZCAqCQkJbXlfbWVtYmVyOwotICoJc3RydWN0IHJoYXNoX2hlYWQJbm9kZTsKLSAqIH07Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKLSAqCS5rZXlfbGVuID0gc2l6ZW9mKGludCksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKiB9OwotICoKLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5cwotICogc3RydWN0IHRlc3Rfb2JqIHsKLSAqCVsuLi5dCi0gKglzdHJ1Y3Qgcmhhc2hfaGVhZAlub2RlOwotICogfTsKLSAqCi0gKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCkKLSAqIHsKLSAqCXN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTsKLSAqCi0gKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07Ci0gKiB9Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCi0gKiB9OwotICovCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKLQkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkgICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7CiAJc2l6ZV90IHNpemU7CkBAIC0xMTc2LDEzICYjNDM7MTEzNCwxMSBAQCBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQoaHQsIDAsIHNpemVvZigqaHQpKTsKLQkvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqLwotCW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsIGtleSk7CiYjNDM7CW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsICZhbXA7a2V5cy0mZ3Q7bXV0ZXhfa2V5KTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2h0LSZndDtsb2NrKTsKLQkvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi8KLQlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCBrZXkpOwomIzQzOwlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCAmYW1wO2tleXMtJmd0O2xvY2tfa2V5KTsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAotCWh0LSZndDtsb2NrZGVwX2tleSA9IGtleTsKJiM0MzsJaHQtJmd0O2xvY2tkZXBfa2V5ID0gJmFtcDtrZXlzLSZndDtidWNrZXRfa2V5OwogI2VuZGlmCiAJbWVtY3B5KCZhbXA7aHQtJmd0O3AsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKIApAQCAtMTIzNiwyMiAmIzQzOzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpOwogCi0vKioKLSAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZQotICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCi0gKgotICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC4KLSAqLwogaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsCiAJCQkgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKLQkJCSAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQomIzQzOwkJCSAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKCZhbXA7aGx0LSZndDtodCwgcGFyYW1zLCBrZXkpOwomIzQzOwllcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoJmFtcDtobHQtJmd0O2h0LCBwYXJhbXMsIGtleXMpOwogCWhsdC0mZ3Q7aHQucmhsaXN0ID0gdHJ1ZTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jCmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X3JoYXNodGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmMKQEAgLTQ3Nyw3ICYjNDM7NDc3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgcHJpbnRfaHQoc3RydWN0IHJobHRhYmxlICpyaGx0KQogCiAJaHQgPSAmYW1wO3JobHQtJmd0O2h0OwogCS8qIFRha2UgdGhlIG11dGV4IHRvIGF2b2lkIFJDVSB3YXJuaW5nICovCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAl0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtJmd0O3RibCwgaHQpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB0YmwtJmd0O3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcmhhc2h0YWJsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGdpdmVuIGEgcGF0Y2ggZm9yIHN5emthbGxlciBmdXp6aW5nLCBhbmQgbXkgZmlyc3Qgc3RlcCBpcyB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIHBhdGNoIHRvdWNoZXMgYHJoYXNodGFibGUtdHlwZXMuaGAsIGByaGFzaHRhYmxlLmhgLCBgcmhhc2h0YWJsZS5jYCwgYW5kIGB0ZXN0X3JoYXNodGFibGUuY2AsIHNvIGNsZWFybHkgdGhpcyBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCBmb3IgbXVsdGlwbGUgbG9ja3Mgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgc3RydWN0dXJlOiB0aGUgYG11dGV4YCwgdGhlIGdlbmVyaWMgYGxvY2tgLCBhbmQgYSBgbG9ja2RlcF9rZXlgIHVzZWQgYnkgYGRlcF9tYXBgLiBUaGlzIGNyZWF0ZXMgc29tZSBpbnRlcmVzdGluZyBsb2NrZGVwIGJlaGF2aW9yOiB0aGUgbXV0ZXggd2FzIGluaXRpYWxpemVkIHdpdGggc3ViY2xhc3MgMSwgdGhlIHNwaW5sb2NrIHdpdGggc3ViY2xhc3MgMCwgYW5kIGJpdGxvY2tzIHdpdGggc3ViY2xhc3NlcyAyJiM0MzsuIFRoZXJlIGFyZSBhbHNvIGNhbGxzIGxpa2UgYG11dGV4X2xvY2tfbmVzdGVkYCBpbiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgYW5kIGBwcmludF9odGAuCgpUaGUgcHJvcG9zZWQgY2hhbmdlIGludHJvZHVjZXMgYSBgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIHN0cnVjdCBjb250YWluaW5nIHNlcGFyYXRlIGBsb2NrX2tleWAsIGBtdXRleF9rZXlgLCBhbmQgYGJ1Y2tldF9rZXlgIG1lbWJlcnMuIENyaXRpY2FsbHksIHRoZXNlIGtleXMgYXJlIG5vdyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBwZXIgY2FsbGVyIG9mIGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYC4gVGhlIGNvZGUgdGhlbiBpbml0aWFsaXplcyB0aGUgcmVzcGVjdGl2ZSBsb2NrczogYG11dGV4X2luaXRfd2l0aF9rZXlgLCBgbG9ja2RlcF9zZXRfY2xhc3NgLCBhbmQgYXNzaWducyB0aGUgYGJ1Y2tldF9rZXlgLiBUaGlzIGF2b2lkcyB0aGUgcHJldmlvdXMgc2hhcmVkIGxvY2sgY2xhc3Mga2V5LCB3aGljaCBjcmVhdGVzIG1vcmUgcHJlY2lzZSBsb2NrZGVwIHRyYWNraW5nLgoKSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGRlY291cGxpbmcgdGhlIGxvY2sgY2xhc3Mga2V5cywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBsb2NrZGVwIGFuYWx5c2lzLiBJdCYjMzk7cyBhbHNvIG1vZGlmeWluZyBob3cgdGhlIGJpdGxvY2tzIGFyZSBhY3F1aXJlZCwgdXNpbmcgdGhlIGBzdWJjbGFzc2AgZGlyZWN0bHkgaW5zdGVhZCBvZiBgc3ViY2xhc3MgJiM0MzsgMmAuIEZ1cnRoZXJtb3JlLCBpdCYjMzk7cyBzaW1wbGlmeWluZyB0aGUgbG9jayBjYWxscyBpbiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgYW5kIGBwcmludF9odGAgdG8gYG11dGV4X2xvY2tgIGZyb20gYG11dGV4X2xvY2tfbmVzdGVkYC4KCk15IG5leHQgdGhvdWdodCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgb3Igc2ltaWxhciB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LiBTaW5jZSBJIGRvbiYjMzk7dCBoYXZlIGdpdCBvciBiYXNoLCBJIGNhbiYjMzk7dCB1c2UgYGdpdCBsb2dgIG9yIHNoZWxsIGNvbW1hbmRzIGRpcmVjdGx5LiBUaW1lIHRvIHVzZSBncmVwcGVyIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGVzZSBjYWxsZXJzLiBJIGNhbiB1c2UgdGhpcyB0b29sIHRvIGZpbmQgYWxsIGRpcmVjdCB1c2FnZXMgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBzZWUgc29tZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHRvIHNlZSBpZiB0aGlzIGxvY2tkZXAgcmVmYWN0b3JpbmcgaGFzIGFueSBkb2N1bWVudGVkIGJlbmVmaXRzLCBvciB3aGV0aGVyIGl0IHNpbXBseSBjb3JyZWN0cyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yaGFzaHRhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTQwPXN0cnVjdCByaGFzaHRhYmxlX2l0ZXIge1xuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE0OS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjE1MDppbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1MS1cdFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1Ni1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MTU3Olx0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1OC19KVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTEyMD1zdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpXG4tLVxubGliL3JoYXNodGFibGUuYy0xMTI0LVxubGliL3JoYXNodGFibGUuYzoxMTI1OmludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxubGliL3JoYXNodGFibGUuYy0xMTI2LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tLVxubGliL3JoYXNodGFibGUuYy0xMTkyLX1cbmxpYi9yaGFzaHRhYmxlLmM6MTE5MzpFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMTk0LVxubGliL3JoYXNodGFibGUuYz0xMTk1PWludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTIwMC1cbmxpYi9yaGFzaHRhYmxlLmM6MTIwMTpcdGVyciA9IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihcdTAwMjZobHQtXHUwMDNlaHQsIHBhcmFtcywga2V5cyk7XG5saWIvcmhhc2h0YWJsZS5jLTEyMDItXHRobHQtXHUwMDNlaHQucmhsaXN0ID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzcwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbjoKCioqRGlzc2VjdGluZyB0aGUgYHJoYXNodGFibGVfaW5pdGAgTWFjcm8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByaGFzaHRhYmxlX2luaXRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgYSBtYWNybyDigJMgY2xhc3NpYy4gSXQgZXhwYW5kcyBpbnRvIGEgY2FsbCB0byBgYWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpYC4gSSYjMzk7bSBhbHJlYWR5IGdldHRpbmcgYSBmZWVsIGZvciB0aGUgc2V0dXAuIGBhbGxvY19ob29rc2AgdXN1YWxseSBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGhvb2sgcmVnaXN0cmF0aW9uLCB3aGljaCBsaWtlbHkgdGllcyBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGhhc2ggdGFibGUuIERpZ2dpbmcgZGVlcGVyLCBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgaXRzZWxmIGxvb2tzIGludGVyZXN0aW5nLiBUaGUgYF9ub3Byb2ZgIHN1ZmZpeCBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGEgdmVyc2lvbiB0aGF0IHNraXBzIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O2Qgd2FudCB0byBrZWVwIGluIG1pbmQsIGVzcGVjaWFsbHkgaW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgY29kZS4KCk5vdyB0aGUgY3J1Y2lhbCBwYXJ0OiBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgZXhwYW5kcyB0byBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXlzKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVhbCBpbml0aWFsaXphdGlvbi4gYGh0YCBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSBoYW5kbGUgdG8gdGhlIHJoYXNodGFibGUgaXRzZWxmLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBwYXJhbXNgIGxpa2VseSBjb250cm9scyB0aGUgY29yZSBzZXR0aW5ncywgbGlrZSB0aGUgc2l6ZSBvciBvdGhlciBwYXJhbWV0ZXJzLCBhbmQgYCZhbXA7X19rZXlzYCBzdWdnZXN0cyBhIGtleSBzdHJ1Y3R1cmUgaXMgYXQgcGxheS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rZXlzYCBhbmQgdGhlIGZ1bGwgYXJndW1lbnQgbGlzdC4gSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIGNoZWNrIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFzIHdlbGwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsaXphdGlvbiB3b3JrIG11c3QgYmUgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JobHRhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTUwPWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwMy1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIwNDppbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwNS1cdFx0ICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMTAtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIxMTpcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIxMi19KVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMTk0LVxubGliL3JoYXNodGFibGUuYzoxMTk1OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxubGliL3JoYXNodGFibGUuYy0xMTk2LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTIwNC19XG5saWIvcmhhc2h0YWJsZS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGx0YWJsZV9pbml0X25vcHJvZik7XG5saWIvcmhhc2h0YWJsZS5jLTEyMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6CgoqKkRlbHZpbmcgaW50byB0aGUgcmhhc2h0YWJsZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGhvdyB0aGlzIGB0YmwtJmd0O2RlcF9tYXBgIGlzIGJlaW5nIHNldCB1cCB3aXRoaW4gdGhlIGByaGFzaHRhYmxlYCBsaWJyYXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi9yaGFzaHRhYmxlLmNgLiBMZXQmIzM5O3MgdXNlIHRoZSBzb3VyY2UsIEkgbWVhbiwgbGV0JiMzOTtzIHNlYXJjaCBpdC4gTXkgZmlyc3Qgc2VhcmNoIGtleXdvcmRzIGFyZSBlaXRoZXIgYGRlcF9tYXBgIG9yIGBsb2NrZGVwX2tleWAgd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgd2hlcmUgdGhpbmdzIGtpY2sgb2ZmLiBJJiMzOTttIGFmdGVyIHRoZSBpbml0aWFsIHNldHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3JoYXNodGFibGUuYz0xODc9c3RhdGljIHN0cnVjdCBidWNrZXRfdGFibGUgKmJ1Y2tldF90YWJsZV9hbGxvYyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4tLVxubGliL3JoYXNodGFibGUuYy0yMTAtXHQvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1xubGliL3JoYXNodGFibGUuYzoyMTE6XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNnRibC1cdTAwM2VkZXBfbWFwLCBcJiMzNDtyaGFzaHRhYmxlX2J1Y2tldFwmIzM0OywgaHQtXHUwMDNlbG9ja2RlcF9rZXksIDApO1xubGliL3JoYXNodGFibGUuYy0yMTItI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSByaGFzaHRhYmxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBiaXRsb2NrIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgcmhhc2h0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG5lc3RpbmcgbGV2ZWwuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IHRoYXQuIFJpZ2h0LCBsaW5lIDIxMCBvZiBgbGliL3JoYXNodGFibGUuY2A6ICYjMzQ7LyogYml0bG9ja3MgbXVzdCB1c2UgbmVzdGluZyBsZXZlbCAyIG9yIG1vcmUgKi8mIzM0OyDigJMgdGhhdCYjMzk7cyB0aGUga2V5LiBUbyBnZXQgdGhlIGZ1bGwgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NyBhbmQgZ28gdG8gbGluZSAyMjAgaW4gYGxpYi9yaGFzaHRhYmxlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBmZWVsIGZvciBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlc2UgbG9ja3MgYW5kIHdoeSB0aGUgbmVzdGluZyBsZXZlbCBpcyBjcml0aWNhbC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgZGVzaWduIGNob2ljZTsgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBlbnN1cmluZyBkZWFkbG9jayBhdm9pZGFuY2Ugb3IgcGVyaGFwcyBlZmZpY2llbnQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgdGFibGUmIzM5O3MgaW50ZXJuYWxzLiBJJiMzOTtsbCBmb2N1cyBvbiB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvZXMgdG8gd29yayBvdXQgdGhlIHJvbGUgb2YgdGhlIGJpdGxvY2tzIGF0IHRoYXQgbmVzdGluZyBkZXB0aC4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtsbCBiZSBhIHF1aWNrIGJ1dCB2aXRhbCBjaGVjayB0byBlbnN1cmUgdGhlIGRlc2lnbiBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvcmhhc2h0YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODc6XHRzdGF0aWMgc3RydWN0IGJ1Y2tldF90YWJsZSAqYnVja2V0X3RhYmxlX2FsbG9jKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbiAxODg6XHRcdFx0XHRcdFx0ICAgICAgIHNpemVfdCBuYnVja2V0cyxcbiAxODk6XHRcdFx0XHRcdFx0ICAgICAgIGdmcF90IGdmcClcbiAxOTA6XHR7XG4gMTkxOlx0XHRzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSBOVUxMO1xuIDE5MjpcdFx0c2l6ZV90IHNpemU7XG4gMTkzOlx0XHRpbnQgaTtcbiAxOTQ6XHRcbiAxOTU6XHRcdHRibCA9IGFsbG9jX2hvb2tzX3RhZyhodC1cdTAwM2VhbGxvY190YWcsXG4gMTk2Olx0XHRcdFx0a3ZtYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2Yoc3RydWN0X3NpemUodGJsLCBidWNrZXRzLCBuYnVja2V0cyksXG4gMTk3Olx0XHRcdFx0XHRcdCAgICAgMSwgZ2ZwfF9fR0ZQX1pFUk8sIE5VTUFfTk9fTk9ERSkpO1xuIDE5ODpcdFxuIDE5OTpcdFx0c2l6ZSA9IG5idWNrZXRzO1xuIDIwMDpcdFxuIDIwMTpcdFx0aWYgKHRibCA9PSBOVUxMIFx1MDAyNlx1MDAyNiAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSkge1xuIDIwMjpcdFx0XHR0YmwgPSBuZXN0ZWRfYnVja2V0X3RhYmxlX2FsbG9jKGh0LCBuYnVja2V0cywgZ2ZwKTtcbiAyMDM6XHRcdFx0bmJ1Y2tldHMgPSAwO1xuIDIwNDpcdFx0fVxuIDIwNTpcdFxuIDIwNjpcdFx0aWYgKHRibCA9PSBOVUxMKVxuIDIwNzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyMDg6XHRcbiAyMDk6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAyMTA6XHRcdC8qIGJpdGxvY2tzIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMiBvciBtb3JlICovXG4gMjExOlx0XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNnRibC1cdTAwM2VkZXBfbWFwLCBcJiMzNDtyaGFzaHRhYmxlX2J1Y2tldFwmIzM0OywgaHQtXHUwMDNlbG9ja2RlcF9rZXksIDApO1xuIDIxMjpcdCNlbmRpZlxuIDIxMzpcdFxuIDIxNDpcdFx0dGJsLVx1MDAzZXNpemUgPSBzaXplO1xuIDIxNTpcdFxuIDIxNjpcdFx0cmN1X2hlYWRfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcmN1KTtcbiAyMTc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRibC1cdTAwM2V3YWxrZXJzKTtcbiAyMTg6XHRcbiAyMTk6XHRcdHRibC1cdTAwM2VoYXNoX3JuZCA9IGdldF9yYW5kb21fdTMyKCk7XG4gMjIwOlx0XG4gMjIxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYnVja2V0czsgaSYjNDM7JiM0MzspXG4gMjIyOlx0XHRcdElOSVRfUkhUX05VTExTX0hFQUQodGJsLVx1MDAzZWJ1Y2tldHNbaV0pO1xuIDIyMzpcdFxuIDIyNDpcdFx0cmV0dXJuIHRibDtcbiAyMjU6XHR9XG4gMjI2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxODE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHJoYXNodGFibGUgTG9ja2RlcCBDaGFuZ2U6IFdvcnRoeSBvZiBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIGxvY2tkZXAga2V5IGhhbmRsaW5nIHdpdGhpbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgbXVsdGlwbGUgbG9ja2luZyBtZWNoYW5pc21zIChiaXRsb2Nrcywgc3BpbmxvY2tzLCBhbmQgbXV0ZXhlcykgd2VyZSBwcmV2aW91c2x5IHNoYXJpbmcgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCwgd2hpY2ggaXMgYSBsb2NrZGVwIG5vLW5vLiBOb3csIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRpc3RpbmN0IGtleXMgZm9yIGVhY2ggbG9jayB0eXBlLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBjaGFuZ2luZzogYG11dGV4X2xvY2tfbmVzdGVkYCBjYWxscyBhcmUgYmVpbmcgcmVwbGFjZWQgd2l0aCBzdGFuZGFyZCBgbXV0ZXhfbG9ja2AsIGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYCBjYWxscyBhcmUgdXBkYXRlZCwgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBub3cgdGFrZXMgYSBgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzYCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5YC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBzZXBhcmF0ZSBsb2NrIGNsYXNzZXMgdG8gcHJldmVudCBsb2NrZGVwIGNvbmZ1c2lvbiBhbmQgcG90ZW50aWFsIHdhcm5pbmdzIG9yIHNwbGF0cy4KCk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBgcmhhc2h0YWJsZWAgaXMgdXNlZCBldmVyeXdoZXJlIGluIHRoZSBrZXJuZWwhIFRoZSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gYSBjb3JlIGxpYnJhcnksIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgZGlyZWN0bHksIGFuZCBtb2RpZnlpbmcgbG9ja2RlcCBrZXlzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGtlcm5lbCYjMzk7cyBsb2NrZGVwIGluc3RydW1lbnRhdGlvbiBhbmQgY291bGQgZXhwb3NlIHN1YnRsZSBsb2NraW5nIGJ1Z3Mgb3IsIHdvcnNlLCBpbnRyb2R1Y2UgZGVhZGxvY2tzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgdGhlIGZ1enppbmcgY3JpdGVyaWEgZmxhZyBhcyBoaWdoLXByaW9yaXR5LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGNyaXRlcmlhOgoqICAgKipSZWFjaGFiaWxpdHkqKjogYHJoYXNodGFibGVgIGlzIHdpZGVseSB1c2VkLCBzbyBpdCYjMzk7cyBlYXNpbHkgcmVhY2hhYmxlLgoqICAgKipSZWZhY3RvcmluZyoqOiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBidXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBvZiAqbG9ja2luZyosIHdoaWNoIGlzIGNvcmUgYW5kIGNhbiBpbnRyb2R1Y2Ugc2VtYW50aWMgc2hpZnRzLgoqICAgKipBc3NlcnRpb25zL0NoZWNrcyoqOiBUaGUgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgbG9ja2RlcCwgd2hpY2ggaXMgYSBmb3JtIG9mIHJ1bnRpbWUgY2hlY2ssIGFuZCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGxvY2tkZXAgYXNzZXJ0aW9ucyBvciBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGV4aXN0aW5nIG9uZXMuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSwgdGhpcyAqbXVzdCogYmUgZnV6emVkLgoKTm93LCBmb3IgRm9jdXNTeW1ib2xzLCB3ZSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBwYXRjaCBoYXMgbW9kaWZpZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiogICBgbGliL3JoYXNodGFibGUuY2AgY29udGFpbnMgYHJodF9kZWZlcnJlZF93b3JrZXJgLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYC4KCldlIG5lZWQgdG8gYXZvaWQgdGhlICYjMzQ7dWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzJiMzNDsgLSBhbGxvY2F0aW5nL2ZyZWVpbmcgbWVtb3J5IG9yIGdlbmVyaWMgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYXJlIG91dC4gSG93ZXZlciwgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCBhcmUgc3BlY2lmaWMgZW50cnlwb2ludHMuIGByaHRfZGVmZXJyZWRfd29ya2VyYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBzcGVjaWZpYyB0byB0aGUgcmhhc2h0YWJsZSBmdW5jdGlvbmFsaXR5LiBUaGVzZSBhcmUgdGhlIHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQgdG8gcmVkdWNlIGZvY3VzIGRpbHV0aW9uLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhlcmNpc2UgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCB0byB0ZXN0IGlmIHdlIGNhbiBjYXVzZSBhbnkgbG9ja2RlcCBpc3N1ZXMgb3IgbWlzYmVoYXZpb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRfbG9ja19uZXN0ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKnJodF9idWNrZXRfaW5zZXJ0KFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMyMS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMyMjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMyMy1cdFx0XHRcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0zMzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0zMzgte1xuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg6MzM5Olx0cmV0dXJuIHJodF9sb2NrX25lc3RlZCh0YmwsIGJrdCwgMCk7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0zNDAtfVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MjQwPXN0YXRpYyBpbnQgcmhhc2h0YWJsZV9yZWhhc2hfb25lKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTI3Mi1cbmxpYi9yaGFzaHRhYmxlLmM6MjczOlx0ZmxhZ3MgPSByaHRfbG9ja19uZXN0ZWQobmV3X3RibCwgXHUwMDI2bmV3X3RibC1cdTAwM2VidWNrZXRzW25ld19oYXNoXSxcbmxpYi9yaGFzaHRhYmxlLmMtMjc0LVx0XHRcdFx0U0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYCBVc2FnZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzLCBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYC4gVGhlIGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgYSBnbG9iYWwgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5ICpldmVyeSogY2FsbHNpdGUgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgYSBjb21wcmVoZW5zaXZlIGxpc3Q7IG5vIHN0b25lIGxlZnQgdW50dXJuZWQuCgpGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSBzZWUgaG93IHdpZGVzcHJlYWQgdGhlaXIgdXNlIGlzLiBBIGJhc2ljIGNvdW50IHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLCBidXQgdGhlIGNvbnRleHQgb2YgZWFjaCBjYWxsc2l0ZSBpcyBnb2luZyB0byBiZSBmYXIgbW9yZSBpbmZvcm1hdGl2ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnM6IGFyZSB0aGV5IHByaW1hcmlseSB1c2VkIHdpdGhpbiBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtIG9yIGRyaXZlcj8gSXMgaXQgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBpcyB0aGlzIHJlbGF0ZWQgdG8gc29tZSBlc290ZXJpYyBmaWxlIHN5c3RlbSBmdW5jdGlvbmFsaXR5PyBXaGVyZSBhcmUgdGhlc2UgbmVzdGVkIGxvY2sgY2FsbHMgbG9jYXRlZCwgdGhhdCB3b3VsZCBnaXZlIG1lIGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gcHJldmVudCBkZWFkbG9jayBvciBmb3Igc29tZSBvdGhlciBwdXJwb3NlPwpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmNoaXRlY3R1cmUsIHNvIHNpbXBseSBsb29raW5nIGF0IHRoZSBjb3VudCBvZiBjYWxscyBpcyBvbmx5IGdvaW5nIHRvIGdldCBtZSBzbyBmYXIuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBlYWNoIGZ1bmN0aW9uLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGVkIGxvY2tpbmcgaGllcmFyY2hpZXMgb3IgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLiBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhbnkgc3VidGxlIGltcGxpY2F0aW9uczsgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgbG9ja3MgaW50ZXJyZWxhdGUgd2l0aCBvdGhlcnMgd2lsbCBiZSBjcml0aWNhbC4gVWx0aW1hdGVseSBJIGFtIGFmdGVyIGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBwdXJwb3NlLCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmVuZWZpdCBmcm9tIHJlZmluZW1lbnQgb3IgZnVydGhlciBleGFtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0X2xvY2tcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MzIyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByaHRfbG9ja19uZXN0ZWQoc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMzNC1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMzNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2soc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzM2LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIF9fcmN1ICoqYmt0KVxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oPTc1MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03NzctXHRwcHJldiA9IE5VTEw7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDo3Nzg6XHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc3OS1cbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0xMDQyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmhhc2h0YWJsZV9yZW1vdmVfZmFzdF9vbmUoXG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMTA1OC1cdHBwcmV2ID0gTlVMTDtcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjEwNTk6XHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEwNjAtXG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MTE5NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3JoYXNodGFibGVfcmVwbGFjZV9mYXN0KFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEyMTgtXHRwcHJldiA9IE5VTEw7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoxMjE5Olx0ZmxhZ3MgPSByaHRfbG9jayh0YmwsIGJrdCk7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0xMjIwLVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MjkyPXN0YXRpYyBpbnQgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW4oc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMzAxLVx0XHRyZXR1cm4gMDtcbmxpYi9yaGFzaHRhYmxlLmM6MzAyOlx0ZmxhZ3MgPSByaHRfbG9jayhvbGRfdGJsLCBia3QpO1xubGliL3JoYXNodGFibGUuYy0zMDMtXG4tLVxubGliL3JoYXNodGFibGUuYz02Mjg9c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTY1My1cbmxpYi9yaGFzaHRhYmxlLmM6NjU0Olx0XHRcdGZsYWdzID0gcmh0X2xvY2sodGJsLCBia3QpO1xubGliL3JoYXNodGFibGUuYy02NTUtXHRcdFx0ZGF0YSA9IHJoYXNodGFibGVfbG9va3VwX29uZShodCwgYmt0LCB0YmwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJoYXNodGFibGUgTG9jayBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHVzYWdlIG9mIGByaHRfbG9ja2AgYW5kIGByaHRfbG9ja19uZXN0ZWRgIHdpdGhpbiB0aGUgcmhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7dmUgcGlucG9pbnRlZCB0aGVpciBjYWxsc2l0ZXMgYXM6IGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgYHJodF9kZWZlcnJlZF93b3JrZXJgLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRob3V0IHRoZSBwcmVmaXguIENsZWFybHksIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgcmVoYXNoIGFuZCBkZWZlcnJlZCB3b3JrZXIgcGF0aHMgYXJlIGxvY2tpbmcgdXAsIGFzIG9uZSBtaWdodCBleHBlY3QuIEkmIzM5O20gYWxzbyBzZWVpbmcgbG9jayBhY3F1aXNpdGlvbiB3aXRoaW4gdGhlIG1haW4gaW5zZXJ0aW9uIHBhdGggYW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgoKSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIEkgaW1tZWRpYXRlbHkgc2VlIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGByaGFzaHRhYmxlX3RyeV9pbnNlcnRgIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdC4gTXkgdGhvdWdodHMgaW1tZWRpYXRlbHkgdHVybiB0byB0aGUgYGxpYi9yaGFzaHRhYmxlLmNgIHNvdXJjZSBjb2RlIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIHBvc3NpYmxlIGxvY2sgY29udGVudGlvbiBpbiB0aG9zZSBjYWxsaW5nIHBhdGhzLiBMZXQgbWUgY2hlY2sgd2hhdCBvdGhlciBmdW5jdGlvbnMgZnJvbSB0aGUgbGlicmFyeSBhcmUgY2FsbGluZyBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCBvciBhcmUgbm9uLXN0YXRpYy4gVGhpcyBjb3VsZCBpbGx1bWluYXRlIHdoZXJlIGNvbnRlbnRpb24gaXMgbW9zdCBsaWtlbHkgdG8gYXJpc2UuIFRoaXMgZ2l2ZXMgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgbG9ja2luZyBzdHJhdGVneSBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaGFzaHRhYmxlX3RyeV9pbnNlcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvcmhhc2h0YWJsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmM9NTgyPXN0YXRpYyBzdHJ1Y3QgYnVja2V0X3RhYmxlICpyaGFzaHRhYmxlX2luc2VydF9vbmUoXG4tLVxubGliL3JoYXNodGFibGUuYy02MjctXG5saWIvcmhhc2h0YWJsZS5jOjYyODpzdGF0aWMgdm9pZCAqcmhhc2h0YWJsZV90cnlfaW5zZXJ0KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5LFxubGliL3JoYXNodGFibGUuYy02MjktXHRcdFx0XHQgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9Njc5PXZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXG4tLVxubGliL3JoYXNodGFibGUuYy02ODUtXHRcdHJjdV9yZWFkX2xvY2soKTtcbmxpYi9yaGFzaHRhYmxlLmM6Njg2Olx0XHRkYXRhID0gcmhhc2h0YWJsZV90cnlfaW5zZXJ0KGh0LCBrZXksIG9iaik7XG5saWIvcmhhc2h0YWJsZS5jLTY4Ny1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDM3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBgcmhhc2h0YWJsZWAgTGlicmFyeSoqCgpPa2F5LCBzbyBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgdGhhdCBsaXZlcyByaWdodCB0aGVyZSBpbiBgbGliL3JoYXNodGFibGUuY2AuIE5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gdGhhdCBmaWxlPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGByaGFzaHRhYmxlX3dhbGtfaW5pdF9ub3Byb2ZgLCBgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95YCwgYHJobHRhYmxlX2luc2VydF9rZXlgLi4uIEkgbmVlZCB0byBzZWUgdGhlICplbnRpcmUqIGludGVyZmFjZSBvZmZlcmVkIGJ5IHRoaXMgcGFydCBvZiB0aGUgbGlicmFyeS4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYWxsIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBsaWIvcmhhc2h0YWJsZS5jYC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIGFuZCBjYXBhYmlsaXRpZXMgY29tcHJlaGVuc2l2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3JoYXNodGFibGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvcmhhc2h0YWJsZS5jPTQ5PWludCBsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKHN0cnVjdCByaGFzaHRhYmxlICpodClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTUyLX1cbmxpYi9yaGFzaHRhYmxlLmM6NTM6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZCk7XG5saWIvcmhhc2h0YWJsZS5jLTU0LVxubGliL3JoYXNodGFibGUuYz01NT1pbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCB1MzIgaGFzaClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTYyLX1cbmxpYi9yaGFzaHRhYmxlLmM6NjM6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQpO1xubGliL3JoYXNodGFibGUuYy02NC0jZWxzZVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9Njc5PXZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXG4tLVxubGliL3JoYXNodGFibGUuYy02OTEtfVxubGliL3JoYXNodGFibGUuYzo2OTI6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyk7XG5saWIvcmhhc2h0YWJsZS5jLTY5My1cbi0tXG5saWIvcmhhc2h0YWJsZS5jPTc3Mz12b2lkICpyaGFzaHRhYmxlX25leHRfa2V5KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqcHJldl9rZXkpXG4tLVxubGliL3JoYXNodGFibGUuYy03OTMtfVxubGliL3JoYXNodGFibGUuYzo3OTQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9uZXh0X2tleSk7XG5saWIvcmhhc2h0YWJsZS5jLTc5NS1cbi0tXG5saWIvcmhhc2h0YWJsZS5jPTgxNz12b2lkIHJoYXNodGFibGVfd2Fsa19lbnRlcihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXG4tLVxubGliL3JoYXNodGFibGUuYy04MzAtfVxubGliL3JoYXNodGFibGUuYzo4MzE6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX2VudGVyKTtcbmxpYi9yaGFzaHRhYmxlLmMtODMyLVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9ODM5PXZvaWQgcmhhc2h0YWJsZV93YWxrX2V4aXQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcilcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTg0NS19XG5saWIvcmhhc2h0YWJsZS5jOjg0NjpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfZXhpdCk7XG5saWIvcmhhc2h0YWJsZS5jLTg0Ny1cbi0tXG5saWIvcmhhc2h0YWJsZS5jPTg2Nj1pbnQgcmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXG4tLVxubGliL3JoYXNodGFibGUuYy05MjctfVxubGliL3JoYXNodGFibGUuYzo5Mjg6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKTtcbmxpYi9yaGFzaHRhYmxlLmMtOTI5LVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTAxMj12b2lkICpyaGFzaHRhYmxlX3dhbGtfbmV4dChzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTAzOS19XG5saWIvcmhhc2h0YWJsZS5jOjEwNDA6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX25leHQpO1xubGliL3JoYXNodGFibGUuYy0xMDQxLVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTA1MT12b2lkICpyaGFzaHRhYmxlX3dhbGtfcGVlayhzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTA3My19XG5saWIvcmhhc2h0YWJsZS5jOjEwNzQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3BlZWspO1xubGliL3JoYXNodGFibGUuYy0xMDc1LVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTA4Mz12b2lkIHJoYXNodGFibGVfd2Fsa19zdG9wKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXG4tLVxubGliL3JoYXNodGFibGUuYy0xMTAzLX1cbmxpYi9yaGFzaHRhYmxlLmM6MTEwNDpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfc3RvcCk7XG5saWIvcmhhc2h0YWJsZS5jLTExMDUtXG4tLVxubGliL3JoYXNodGFibGUuYz0xMTI1PWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTE5Mi19XG5saWIvcmhhc2h0YWJsZS5jOjExOTM6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcbmxpYi9yaGFzaHRhYmxlLmMtMTE5NC1cbmxpYi9yaGFzaHRhYmxlLmM9MTE5NT1pbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTEyMDQtfVxubGliL3JoYXNodGFibGUuYzoxMjA1OkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhsdGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMjA2LVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTI0Nj12b2lkIHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4tLVxubGliL3JoYXNodGFibGUuYy0xMjg4LX1cbmxpYi9yaGFzaHRhYmxlLmM6MTI4OTpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3kpO1xubGliL3JoYXNodGFibGUuYy0xMjkwLVxubGliL3JoYXNodGFibGUuYz0xMjkxPXZvaWQgcmhhc2h0YWJsZV9kZXN0cm95KHN0cnVjdCByaGFzaHRhYmxlICpodClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTEyOTQtfVxubGliL3JoYXNodGFibGUuYzoxMjk1OkVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfZGVzdHJveSk7XG5saWIvcmhhc2h0YWJsZS5jLTEyOTYtXG5saWIvcmhhc2h0YWJsZS5jPTEyOTc9c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKl9fcmh0X2J1Y2tldF9uZXN0ZWQoXG4tLVxubGliL3JoYXNodGFibGUuYy0xMzIzLX1cbmxpYi9yaGFzaHRhYmxlLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChfX3JodF9idWNrZXRfbmVzdGVkKTtcbmxpYi9yaGFzaHRhYmxlLmMtMTMyNS1cbmxpYi9yaGFzaHRhYmxlLmM9MTMyNj1zdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIF9fcmN1ICoqcmh0X2J1Y2tldF9uZXN0ZWQoXG4tLVxubGliL3JoYXNodGFibGUuYy0xMzM0LX1cbmxpYi9yaGFzaHRhYmxlLmM6MTMzNTpFWFBPUlRfU1lNQk9MX0dQTChyaHRfYnVja2V0X25lc3RlZCk7XG5saWIvcmhhc2h0YWJsZS5jLTEzMzYtXG5saWIvcmhhc2h0YWJsZS5jPTEzMzc9c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKnJodF9idWNrZXRfbmVzdGVkX2luc2VydChcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTEzNjMtfVxubGliL3JoYXNodGFibGUuYzoxMzY0OkVYUE9SVF9TWU1CT0xfR1BMKHJodF9idWNrZXRfbmVzdGVkX2luc2VydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODg1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTG9ja2luZyBJc3N1ZXMgaW4gYGxpYi9yaGFzaHRhYmxlLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdpdGhpbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcmVnaW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIGBsaWIvcmhhc2h0YWJsZS5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDQwIHRvIDY1LiBUaGUgY29kZSBpbiB0aGF0IHZpY2luaXR5IGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2NraW5nIHByaW1pdGl2ZXMgYXJlIGRlZmluZWQgb3IgdXRpbGl6ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhleSBhcmUgZW1wbG95aW5nIGxvY2sgZGVwZW5kZW5jeSBjaGVja2luZyBhbmQgc28gZm9ydGguIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gaG93IGBsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkYCBhbmQgYGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkYCBhcmUgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoYXQgc2VjdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBsb2NrZGVwIGNoZWNrcyBpcyBjcml0aWNhbCB0byBlbnN1cmluZyBsb2NrIG9yZGVyaW5nIGlzIGNvcnJlY3QsIHRvIGF2b2lkIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGR1ZSB0byBpbXByb3BlciBjb25jdXJyZW5jeSBjb250cm9sIGluIHRoYXQgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XHR1bmlvbiBuZXN0ZWRfdGFibGUgX19yY3UgKnRhYmxlO1xuICAzNjpcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqYnVja2V0O1xuICAzNzpcdH07XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIHUzMiBoZWFkX2hhc2hmbihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gIDQwOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXG4gIDQxOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqaGUpXG4gIDQyOlx0e1xuICA0MzpcdFx0cmV0dXJuIHJodF9oZWFkX2hhc2hmbihodCwgdGJsLCBoZSwgaHQtXHUwMDNlcCk7XG4gIDQ0Olx0fVxuICA0NTpcdFxuICA0NjpcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xuICA0NzpcdCNkZWZpbmUgQVNTRVJUX1JIVF9NVVRFWChIVCkgQlVHX09OKCFsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKEhUKSlcbiAgNDg6XHRcbiAgNDk6XHRpbnQgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXG4gIDUwOlx0e1xuICA1MTpcdFx0cmV0dXJuIChkZWJ1Z19sb2NrcykgPyBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgpIDogMTtcbiAgNTI6XHR9XG4gIDUzOlx0RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZCk7XG4gIDU0Olx0XG4gIDU1Olx0aW50IGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgdTMyIGhhc2gpXG4gIDU2Olx0e1xuICA1NzpcdFx0aWYgKCFkZWJ1Z19sb2NrcylcbiAgNTg6XHRcdFx0cmV0dXJuIDE7XG4gIDU5Olx0XHRpZiAodW5saWtlbHkodGJsLVx1MDAzZW5lc3QpKVxuICA2MDpcdFx0XHRyZXR1cm4gMTtcbiAgNjE6XHRcdHJldHVybiBiaXRfc3Bpbl9pc19sb2NrZWQoMCwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZ0YmwtXHUwMDNlYnVja2V0c1toYXNoXSk7XG4gIDYyOlx0fVxuICA2MzpcdEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKTtcbiAgNjQ6XHQjZWxzZVxuICA2NTpcdCNkZWZpbmUgQVNTRVJUX1JIVF9NVVRFWChIVClcbiAgNjY6XHQjZW5kaWZcbiAgNjc6XHRcbiAgNjg6XHRzdGF0aWMgaW5saW5lIHVuaW9uIG5lc3RlZF90YWJsZSAqbmVzdGVkX3RhYmxlX3RvcChcbiAgNjk6XHRcdGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibClcbiAgNzA6XHR7XG4gIDcxOlx0XHQvKiBUaGUgdG9wLWxldmVsIGJ1Y2tldCBlbnRyeSBkb2VzIG5vdCBuZWVkIFJDVSBwcm90ZWN0aW9uXG4gIDcyOlx0XHQgKiBiZWNhdXNlIGl0JiMzOTtzIHNldCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRibC1cdTAwM2VuZXN0LlxuICA3MzpcdFx0ICovXG4gIDc0Olx0XHRyZXR1cm4gKHZvaWQgKilyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRibC1cdTAwM2VidWNrZXRzWzBdLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBSaGFzaHRhYmxlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgcmhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBkaXJlY3RseSB0b3VjaGVkOiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLiBTdHJhaWdodGZvcndhcmQgaW5pdGlhbGl6YXRpb24gdHdlYWtzLCBpdCBzZWVtcy4gQW5kIHRoZSBjaGFuZ2UgdG8gYHJodF9kZWZlcnJlZF93b3JrZXJgIHdpdGggdGhhdCBgbXV0ZXhfbG9jaygmYW1wO2h0LSZndDttdXRleCk7YCBjYWxsIGlzIGludGVyZXN0aW5nOyBwcm9iYWJseSBzb21lIHN1YnRsZSBsb2NraW5nIHN0cmF0ZWd5IGFkanVzdG1lbnRzIHRoZXJlLgoKTm93LCB0aGF0IGByaHRfbG9ja19uZXN0ZWRgIG1vZGlmaWNhdGlvbiBpbiBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhgIGNhdGNoZXMgbXkgZXllLiBMb2NraW5nIHByaW1pdGl2ZXMgYXJlIGFsd2F5cyBzZW5zaXRpdmUsIGFuZCB0aGF0IGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYCBjYWxsIHdpdGggdGhlIGRlcGVuZGVuY3kgbWFwIHNldHVwLi4uIHRoYXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGRlYWRsb2NrIGF2b2lkYW5jZS4gU2luY2UgaXQmIzM5O3MgaW5saW5lLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgKnVzZSogaXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGByaGFzaHRhYmxlX2luc2VydF9zbG93YCBjYWxscyBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHJodF9sb2NrYC4gR290IGl0LiBBbHNvLCBgcmhhc2h0YWJsZV9yZWhhc2hfb25lYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgZGVmZXJyZWQgd29ya2VyIGByaHRfZGVmZXJyZWRfd29ya2VyYCwgZXhwbGljaXRseSBjYWxscyBgcmh0X2xvY2tfbmVzdGVkYC4gQW5kIG9mIGNvdXJzZSwgdGhlIGZhc3QtcGF0aCBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYHJoYXNodGFibGVfaW5zZXJ0X2Zhc3RgIGFuZCBgcmhhc2h0YWJsZV9yZW1vdmVfZmFzdGAgYXJlIGFsc28gZXhlcmNpc2luZyB0aGlzIGxvY2tpbmcgbWVjaGFuaXNtLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLiBJIGhhdmUgdG8gbG9vayBhdCB0aGUgKmNhbGxlcnMqIG9mIHRoZXNlIHBvdGVudGlhbGx5LWltcGFjdGVkIGZ1bmN0aW9ucywgbGlrZSBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AuIFdoYXQgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIGFyZSByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb25hbGl0eT8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB3aGVyZSBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEMgZmlsZXMuIFRpbWUgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmhhc2h0YWJsZV9pbnNlcnRfc2xvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0yMjg9c3RhdGljIGlubGluZSBpbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTIzNC1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjIzNTp2b2lkICpyaGFzaHRhYmxlX2luc2VydF9zbG93KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5LFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMjM2LVx0XHRcdCAgICAgc3RydWN0IHJoYXNoX2hlYWQgKm9iaik7XG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9NzUxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19yaGFzaHRhYmxlX2luc2VydF9mYXN0KFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc4My1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDo3ODQ6XHRcdHJldHVybiByaGFzaHRhYmxlX2luc2VydF9zbG93KGh0LCBrZXksIG9iaik7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03ODUtXHR9XG4tLVxubGliL3JoYXNodGFibGUuYz02Mjg9c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTY3OC1cbmxpYi9yaGFzaHRhYmxlLmM6Njc5OnZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXG5saWIvcmhhc2h0YWJsZS5jLTY4MC1cdFx0XHQgICAgIHN0cnVjdCByaGFzaF9oZWFkICpvYmopXG4tLVxubGliL3JoYXNodGFibGUuYy02OTEtfVxubGliL3JoYXNodGFibGUuYzo2OTI6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyk7XG5saWIvcmhhc2h0YWJsZS5jLTY5My1cbi0tXG5saWIvdGVzdF9yaGFzaHRhYmxlLmM9NTE5PXN0YXRpYyBpbnQgX19pbml0IHRlc3RfaW5zZXJ0X2R1cChzdHJ1Y3QgdGVzdF9vYmpfcmhsICpyaGxfdGVzdF9vYmplY3RzLFxuLS1cbmxpYi90ZXN0X3JoYXNodGFibGUuYy01NDItXHRcdGlmIChzbG93KSB7XG5saWIvdGVzdF9yaGFzaHRhYmxlLmM6NTQzOlx0XHRcdGVyciA9IFBUUl9FUlIocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhcdTAwMjZyaGx0LVx1MDAzZWh0LCBrZXksXG5saWIvdGVzdF9yaGFzaHRhYmxlLmMtNTQ0LVx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyaGxfdGVzdF9vYmplY3RzW2ldLmxpc3Rfbm9kZS5yaGVhZCkpO1xuLS1cbm5ldC9jb3JlL3hkcC5jPTI3MT1zdGF0aWMgc3RydWN0IHhkcF9tZW1fYWxsb2NhdG9yICpfX3hkcF9yZWdfbWVtX21vZGVsKHN0cnVjdCB4ZHBfbWVtX2luZm8gKm1lbSxcbi0tXG5uZXQvY29yZS94ZHAuYy0zMTQtXHQvKiBJbnNlcnQgYWxsb2NhdG9yIGludG8gSUQgbG9va3VwIHRhYmxlICovXG5uZXQvY29yZS94ZHAuYzozMTU6XHRwdHIgPSByaGFzaHRhYmxlX2luc2VydF9zbG93KG1lbV9pZF9odCwgXHUwMDI2aWQsIFx1MDAyNnhkcF9hbGxvYy1cdTAwM2Vub2RlKTtcbm5ldC9jb3JlL3hkcC5jLTMxNi1cdGlmIChJU19FUlIocHRyKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIGBsaWIvcmhhc2h0YWJsZS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBidWlsZCBwcm9jZXNzIG9mIGBsaWIvcmhhc2h0YWJsZS5jYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAuIEkmIzM5O2xsIGRpZyBpbnRvIGBsaWIvTWFrZWZpbGVgIGRpcmVjdGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHJoYXNodGFibGUub2AgaXMgY29uc3RydWN0ZWQsIHdoaWNoIHdpbGwgaW5ldml0YWJseSBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIGl0cyBpbmNsdXNpb24gYW5kIHBvdGVudGlhbGx5LCBhc3BlY3RzIG9mIGl0cyBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmhhc2h0YWJsZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZT01MT1vYmoteVx0JiM0Mzs9IGxvY2tyZWYub1xubGliL01ha2VmaWxlLTUyLVxubGliL01ha2VmaWxlOjUzOkNPTlRFWFRfQU5BTFlTSVNfcmhhc2h0YWJsZS5vIDo9IHlcbmxpYi9NYWtlZmlsZS01NC1cbmxpYi9NYWtlZmlsZT01NT1vYmoteSAmIzQzOz0gYmNkLm8gc29ydC5vIHBhcnNlci5vIGRlYnVnX2xvY2tzLm8gcmFuZG9tMzIubyBcXFxuLS1cbmxpYi9NYWtlZmlsZS01OC1cdCBic2VhcmNoLm8gZmluZF9iaXQubyBsbGlzdC5vIGx3cS5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXFxcbmxpYi9NYWtlZmlsZTo1OTpcdCBwZXJjcHUtcmVmY291bnQubyByaGFzaHRhYmxlLm8gYmFzZTY0Lm8gXFxcbmxpYi9NYWtlZmlsZS02MC1cdCBvbmNlLm8gcmVmY291bnQubyByY3VyZWYubyB1c2VyY29weS5vIGVycnNlcS5vIGJ1Y2tldF9sb2Nrcy5vIFxcXG4tLVxubGliL01ha2VmaWxlPTgzPW9iai0kKENPTkZJR19URVNUX1dPUktRVUVVRSkgJiM0Mzs9IHRlc3Rfd29ya3F1ZXVlLm9cbmxpYi9NYWtlZmlsZTo4NDpvYmotJChDT05GSUdfVEVTVF9SSEFTSFRBQkxFKSAmIzQzOz0gdGVzdF9yaGFzaHRhYmxlLm9cbmxpYi9NYWtlZmlsZS04NS1vYmotJChDT05GSUdfVEVTVF9TVEFUSUNfS0VZUykgJiM0Mzs9IHRlc3Rfc3RhdGljX2tleXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY0NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgcmhhc2h0YWJsZS5vYCBpcyBiYWtlZCByaWdodCBpbnRvIHRoZSBrZXJuZWwsIHdoaWNoIG1lYW5zIGFueSBjaGFuZ2VzIGhlcmUgYXJlIHByZXR0eSBpbXBhY3RmdWwuIEkmIzM5O20gc2VlaW5nIGEgYnVuY2ggb2YgbW9kaWZpY2F0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGFsbCBjZW50ZXJlZCBhcm91bmQgYGxvY2tkZXBgIGtleXMgYW5kIGxvY2tpbmcgc3ViY2xhc3Nlcy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUgaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oYCwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYCwgYW5kIGBsaWIvcmhhc2h0YWJsZS5jYC4KCkkgbm90aWNlIHRoaW5ncyBsaWtlIGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIGJlaW5nIGFkZGVkIHdpdGggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19MT0NLREVQYC4gVGhlcmUgYXJlIGFsc28gY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGxvY2tfYWNxdWlyZV9leGNsdXNpdmVgLCBgbG9ja2RlcF9zZXRfY2xhc3NgLCBhbmQgYGxvY2tkZXBfaW5pdF9tYXBgIHRoYXQgcmVmZXJlbmNlIHRoZXNlIGtleXMuIEl0JiMzOTtzIGFsbCB2ZXJ5IGNsZWFybHkgYWJvdXQgbG9jayBkZXBlbmRlbmN5IGFuYWx5c2lzIGFuZCBwcm92aW5nIGxvY2tpbmcgY29ycmVjdG5lc3MuCgpUaGUga2V5IGNvbmZpZ3MgdG8gbG9vayBhdCBoZXJlIGFyZSBkZWZpbml0ZWx5IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGxpYi9LY29uZmlnLmRlYnVnYCBvciBtYXliZSBga2VybmVsL2xvY2tpbmcvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlaXIgaW1wbGljYXRpb25zIGFyZS4gVGhpcyBpcyBhbGwgYWJvdXQgZW5oYW5jaW5nIHRoZSBrZXJuZWwmIzM5O3MgbG9jayBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTE9DS0RFUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FscGhhL0tjb25maWc9ODY9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gvYWxwaGEvS2NvbmZpZy04OC1cbmFyY2gvYWxwaGEvS2NvbmZpZzo4OTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL2FscGhhL0tjb25maWctOTAtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9hcmMvS2NvbmZpZz02PWNvbmZpZyBBUkNcbi0tXG5hcmNoL2FyYy9LY29uZmlnLTU3LVxuYXJjaC9hcmMvS2NvbmZpZzo1ODpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL2FyYy9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvYXJtL0tjb25maWc9MjI0PWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5hcmNoL2FybS9LY29uZmlnLTIyNy1cbmFyY2gvYXJtL0tjb25maWc6MjI4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvYXJtL0tjb25maWctMjI5LVx0Ym9vbFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0zMzA9Y29uZmlnIElMTEVHQUxfUE9JTlRFUl9WQUxVRVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0zMzMtXG5hcmNoL2FybTY0L0tjb25maWc6MzM0OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMzUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9jc2t5L0tjb25maWc9Mj1jb25maWcgQ1NLWVxuLS1cbmFyY2gvY3NreS9LY29uZmlnLTExMi1cbmFyY2gvY3NreS9LY29uZmlnOjExMzpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL2Nza3kvS2NvbmZpZy0xMTQtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9oZXhhZ29uL0tjb25maWc9NDY9Y29uZmlnIEhFWEFHT05fUEhZU19PRkZTRVRcbi0tXG5hcmNoL2hleGFnb24vS2NvbmZpZy01MC1cbmFyY2gvaGV4YWdvbi9LY29uZmlnOjUxOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvaGV4YWdvbi9LY29uZmlnLTUyLVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mjc2PWNvbmZpZyBMMV9DQUNIRV9TSElGVFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMjc5LVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoyODA6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0yODEtXHRib29sXG4tLVxuYXJjaC9taWNyb2JsYXplL0tjb25maWc9ODA9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gvbWljcm9ibGF6ZS9LY29uZmlnLTgyLVxuYXJjaC9taWNyb2JsYXplL0tjb25maWc6ODM6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9taWNyb2JsYXplL0tjb25maWctODQtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9taXBzL0tjb25maWc9Mjk5OD1lbmRtZW51XG5hcmNoL21pcHMvS2NvbmZpZy0yOTk5LVxuYXJjaC9taXBzL0tjb25maWc6MzAwMDpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL21pcHMvS2NvbmZpZy0zMDAxLVx0Ym9vbFxuLS1cbmFyY2gvb3BlbnJpc2MvS2NvbmZpZz02OD1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxuYXJjaC9vcGVucmlzYy9LY29uZmlnLTcwLVxuYXJjaC9vcGVucmlzYy9LY29uZmlnOjcxOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvb3BlbnJpc2MvS2NvbmZpZy03Mi1cdGRlZl9ib29sICB5XG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZz0xNjg9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gvcGFyaXNjL0tjb25maWctMTcwLVxuYXJjaC9wYXJpc2MvS2NvbmZpZzoxNzE6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0xNzItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTAxPWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xMDQtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxMDU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTA2LVx0Ym9vbFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0zNTE9Y29uZmlnIFBHVEFCTEVfTEVWRUxTXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTM1NS1cbmFyY2gvcmlzY3YvS2NvbmZpZzozNTY6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9yaXNjdi9LY29uZmlnLTM1Ny1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz01PWNvbmZpZyBDUFVfQklHX0VORElBTlxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTctXG5hcmNoL3MzOTAvS2NvbmZpZzo4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvczM5MC9LY29uZmlnLTktXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zaC9LY29uZmlnPTExMj1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxuYXJjaC9zaC9LY29uZmlnLTExNC1cbmFyY2gvc2gvS2NvbmZpZzoxMTU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9zaC9LY29uZmlnLTExNi1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3NwYXJjL0tjb25maWc9MTI1PWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctMTI4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjEyOTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL3NwYXJjL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbmFyY2gvdW0vS2NvbmZpZz02OT1jb25maWcgU0JVU1xuLS1cbmFyY2gvdW0vS2NvbmZpZy03MS1cbmFyY2gvdW0vS2NvbmZpZzo3Mjpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL3VtL0tjb25maWctNzMtXHRib29sXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0zNDg9Y29uZmlnIE9VVFBVVF9GT1JNQVRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTM1Mi1cbmFyY2gveDg2L0tjb25maWc6MzUzOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gveDg2L0tjb25maWctMzU0LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveHRlbnNhL0tjb25maWc9ODQ9Y29uZmlnIEhaXG4tLVxuYXJjaC94dGVuc2EvS2NvbmZpZy04Ny1cbmFyY2gveHRlbnNhL0tjb25maWc6ODg6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC94dGVuc2EvS2NvbmZpZy04OS1cdGRlZl9ib29sIHlcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0xNTMzPWNvbmZpZyBERUJVR19MT0NLX0FMTE9DXG4tLVxubGliL0tjb25maWcuZGVidWctMTU0Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjE1NDg6Y29uZmlnIExPQ0tERVBcbmxpYi9LY29uZmlnLmRlYnVnLTE1NDktXHRib29sXG4tLVxubGliL0tjb25maWcuZGVidWctMTU1NC1cbmxpYi9LY29uZmlnLmRlYnVnOjE1NTU6Y29uZmlnIExPQ0tERVBfU01BTExcbmxpYi9LY29uZmlnLmRlYnVnLTE1NTYtXHRib29sXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTU3LVxubGliL0tjb25maWcuZGVidWc6MTU1ODpjb25maWcgTE9DS0RFUF9CSVRTXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTU5LVx0aW50IFwmIzM0O1NpemUgZm9yIE1BWF9MT0NLREVQX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTE1NjUtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTY2OmNvbmZpZyBMT0NLREVQX0NIQUlOU19CSVRTXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTY3LVx0aW50IFwmIzM0O1NpemUgZm9yIE1BWF9MT0NLREVQX0NIQUlOUyAoYXMgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTU3My1cbmxpYi9LY29uZmlnLmRlYnVnOjE1NzQ6Y29uZmlnIExPQ0tERVBfU1RBQ0tfVFJBQ0VfQklUU1xubGliL0tjb25maWcuZGVidWctMTU3NS1cdGludCBcJiMzNDtTaXplIGZvciBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUyAoYXMgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTU4OC1cbmxpYi9LY29uZmlnLmRlYnVnOjE1ODk6Y29uZmlnIExPQ0tERVBfU1RBQ0tfVFJBQ0VfSEFTSF9CSVRTXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTkwLVx0aW50IFwmIzM0O1NpemUgZm9yIFNUQUNLX1RSQUNFX0hBU0hfU0laRSAoYXMgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTU5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjE1OTg6Y29uZmlnIExPQ0tERVBfQ0lSQ1VMQVJfUVVFVUVfQklUU1xubGliL0tjb25maWcuZGVidWctMTU5OS1cdGludCBcJiMzNDtTaXplIGZvciBlbGVtZW50cyBpbiBjaXJjdWxhcl9xdWV1ZSBzdHJ1Y3QgKGFzIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWJ1ZyBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbGliL0tjb25maWcuZGVidWdgIGFyb3VuZCBsaW5lIDE1NDguIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gZGVidWdnaW5nIGlzIGhpZGluZyBpbiB0aGF0IHNlY3Rpb24sIHByb2JhYmx5IGEgZmxhZywgZGVwZW5kZW5jeSwgb3IgYSBjb25kaXRpb25hbCBibG9jay4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUsIHBpbnBvaW50aW5nIHRoZSByaWdodCBLY29uZmlnIG9wdGlvbiBpcyBjcnVjaWFsIHRvIGVpdGhlciBlbmFibGUgYSBmZWF0dXJlIG9yIGRpYWdub3NlIGEgbWlzY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYSBrZXkgc3BvdCB0byBmaW5kIHJlbGF0ZWQgb3B0aW9ucyBvciB0byB1bmRlcnN0YW5kIGRlcGVuZGVuY2llcyBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4gTGV0IG1lIHB1bGwgdGhhdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUyMDpcdFx0IGV4Y2VwdGlvbiBvZiBzaW1wbHkgbm90IGFjcXVpcmluZyBhbGwgdGhlIHJlcXVpcmVkIGxvY2tzLlxuMTUyMTpcdFx0IE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgY2FuIGludHJvZHVjZSBzaWduaWZpY2FudCBvdmVyaGVhZCwgc29cbjE1MjI6XHRcdCBpdCByZWFsbHkgc2hvdWxkIG5vdCBiZSBlbmFibGVkIGluIGEgcHJvZHVjdGlvbiBvciBkaXN0cm8ga2VybmVsLFxuMTUyMzpcdFx0IGV2ZW4gYSBkZWJ1ZyBrZXJuZWwuICBJZiB5b3UgYXJlIGEgZHJpdmVyIHdyaXRlciwgZW5hYmxlIGl0LiAgSWZcbjE1MjQ6XHRcdCB5b3UgYXJlIGEgZGlzdHJvLCBkbyBub3QuXG4xNTI1Olx0XG4xNTI2Olx0Y29uZmlnIERFQlVHX1JXU0VNU1xuMTUyNzpcdFx0Ym9vbCBcJiMzNDtSVyBTZW1hcGhvcmUgZGVidWdnaW5nOiBiYXNpYyBjaGVja3NcJiMzNDtcbjE1Mjg6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuMTUyOTpcdFx0aGVscFxuMTUzMDpcdFx0ICBUaGlzIGRlYnVnZ2luZyBmZWF0dXJlIGFsbG93cyBtaXNtYXRjaGVkIHJ3IHNlbWFwaG9yZSBsb2Nrc1xuMTUzMTpcdFx0ICBhbmQgdW5sb2NrcyB0byBiZSBkZXRlY3RlZCBhbmQgcmVwb3J0ZWQuXG4xNTMyOlx0XG4xNTMzOlx0Y29uZmlnIERFQlVHX0xPQ0tfQUxMT0NcbjE1MzQ6XHRcdGJvb2wgXCYjMzQ7TG9jayBkZWJ1Z2dpbmc6IGRldGVjdCBpbmNvcnJlY3QgZnJlZWluZyBvZiBsaXZlIGxvY2tzXCYjMzQ7XG4xNTM1Olx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuMTUzNjpcdFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXG4xNTM3Olx0XHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxuMTUzODpcdFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xuMTUzOTpcdFx0c2VsZWN0IExPQ0tERVBcbjE1NDA6XHRcdGhlbHBcbjE1NDE6XHRcdCBUaGlzIGZlYXR1cmUgd2lsbCBjaGVjayB3aGV0aGVyIGFueSBoZWxkIGxvY2sgKHNwaW5sb2NrLCByd2xvY2ssXG4xNTQyOlx0XHQgbXV0ZXggb3IgcndzZW0pIGlzIGluY29ycmVjdGx5IGZyZWVkIGJ5IHRoZSBrZXJuZWwsIHZpYSBhbnkgb2YgdGhlXG4xNTQzOlx0XHQgbWVtb3J5LWZyZWVpbmcgcm91dGluZXMgKGtmcmVlKCksIGttZW1fY2FjaGVfZnJlZSgpLCBmcmVlX3BhZ2VzKCksXG4xNTQ0Olx0XHQgdmZyZWUoKSwgZXRjLiksIHdoZXRoZXIgYSBsaXZlIGxvY2sgaXMgaW5jb3JyZWN0bHkgcmVpbml0aWFsaXplZCB2aWFcbjE1NDU6XHRcdCBzcGluX2xvY2tfaW5pdCgpL211dGV4X2luaXQoKS9ldGMuLCBvciB3aGV0aGVyIHRoZXJlIGlzIGFueSBsb2NrXG4xNTQ2Olx0XHQgaGVsZCBkdXJpbmcgdGFzayBleGl0LlxuMTU0NzpcdFxuMTU0ODpcdGNvbmZpZyBMT0NLREVQXG4xNTQ5Olx0XHRib29sXG4xNTUwOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuMTU1MTpcdFx0c2VsZWN0IFNUQUNLVFJBQ0VcbjE1NTI6XHRcdHNlbGVjdCBLQUxMU1lNU1xuMTU1MzpcdFx0c2VsZWN0IEtBTExTWU1TX0FMTFxuMTU1NDpcdFxuMTU1NTpcdGNvbmZpZyBMT0NLREVQX1NNQUxMXG4xNTU2Olx0XHRib29sXG4xNTU3Olx0XG4xNTU4Olx0Y29uZmlnIExPQ0tERVBfQklUU1xuMTU1OTpcdFx0aW50IFwmIzM0O1NpemUgZm9yIE1BWF9MT0NLREVQX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuMTU2MDpcdFx0ZGVwZW5kcyBvbiBMT0NLREVQIFx1MDAyNlx1MDAyNiAhTE9DS0RFUF9TTUFMTFxuMTU2MTpcdFx0cmFuZ2UgMTAgMjRcbjE1NjI6XHRcdGRlZmF1bHQgMTVcbjE1NjM6XHRcdGhlbHBcbjE1NjQ6XHRcdCAgVHJ5IGluY3JlYXNpbmcgdGhpcyB2YWx1ZSBpZiB5b3UgaGl0IFwmIzM0O0JVRzogTUFYX0xPQ0tERVBfRU5UUklFUyB0b28gbG93IVwmIzM0OyBtZXNzYWdlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBMb2NraW5nIE1lY2hhbmlzbXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgdG93YXJkIHVuZGVyc3RhbmRpbmcgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvZGUuIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5IHdoYXQgY29uZGl0aW9uIG9yIHNldCBvZiBjb25kaXRpb25zIHRyaWdnZXJzIHRoZSBzZWxlY3Rpb24gb2YgZWl0aGVyIGBQUk9WRV9MT0NLSU5HYCBvciBgTE9DS0RFUGAuIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IHVsdGltYXRlbHkgZGV0ZXJtaW5lIHdoaWNoIGxvY2tpbmcgbWVjaGFuaXNtIGdldHMgYWN0aXZhdGVkLiBJdCYjMzk7cyBhYm91dCB0cmFjaW5nIHRoZSBsb2dpYyBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGJyYW5jaGluZyBwb2ludCBhbmQgaG93IHRoZSBzeXN0ZW0gY2hvb3NlcyBiZXR3ZWVuIHRoZXNlIHR3byBkaXN0aW5jdCBhcHByb2FjaGVzLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gc2VlIHdoeSBjZXJ0YWluIGRlY2lzaW9ucyBhcmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST1ZFX0xPQ0tJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MTQwMT1jb25maWcgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTE0MDUtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNDA2OmNvbmZpZyBQUk9WRV9MT0NLSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDA3LVx0Ym9vbCBcJiMzNDtMb2NrIGRlYnVnZ2luZzogcHJvdmUgbG9ja2luZyBjb3JyZWN0bmVzc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWJ1ZyBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MDYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbW9yZSBpbnRyaWNhdGUgZGVidWcgb3B0aW9ucyByZXNpZGUsIGFuZCBsaWtlbHkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zLCB0aGVpciBkZWZhdWx0cywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLiBGcm9tIHRoZXJlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgaW5jbHVkZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHkgaW50byB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGlmIG5lY2Vzc2FyeSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYWRkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDU6XHRcbjE0MDY6XHRjb25maWcgUFJPVkVfTE9DS0lOR1xuMTQwNzpcdFx0Ym9vbCBcJiMzNDtMb2NrIGRlYnVnZ2luZzogcHJvdmUgbG9ja2luZyBjb3JyZWN0bmVzc1wmIzM0O1xuMTQwODpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcbjE0MDk6XHRcdHNlbGVjdCBMT0NLREVQXG4xNDEwOlx0XHRzZWxlY3QgREVCVUdfU1BJTkxPQ0tcbjE0MTE6XHRcdHNlbGVjdCBERUJVR19NVVRFWEVTIGlmICFQUkVFTVBUX1JUXG4xNDEyOlx0XHRzZWxlY3QgREVCVUdfUlRfTVVURVhFUyBpZiBSVF9NVVRFWEVTXG4xNDEzOlx0XHRzZWxlY3QgREVCVUdfUldTRU1TIGlmICFQUkVFTVBUX1JUXG4xNDE0Olx0XHRzZWxlY3QgREVCVUdfV1dfTVVURVhfU0xPV1BBVEhcbjE0MTU6XHRcdHNlbGVjdCBERUJVR19MT0NLX0FMTE9DXG4xNDE2Olx0XHRzZWxlY3QgUFJFRU1QVF9DT1VOVCBpZiAhQVJDSF9OT19QUkVFTVBUXG4xNDE3Olx0XHRzZWxlY3QgVFJBQ0VfSVJRRkxBR1NcbjE0MTg6XHRcdGRlZmF1bHQgblxuMTQxOTpcdFx0aGVscFxuMTQyMDpcdFx0IFRoaXMgZmVhdHVyZSBlbmFibGVzIHRoZSBrZXJuZWwgdG8gcHJvdmUgdGhhdCBhbGwgbG9ja2luZ1xuMTQyMTpcdFx0IHRoYXQgb2NjdXJzIGluIHRoZSBrZXJuZWwgcnVudGltZSBpcyBtYXRoZW1hdGljYWxseVxuMTQyMjpcdFx0IGNvcnJlY3Q6IHRoYXQgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlIGNvdWxkIGFuIGFyYml0cmFyeSAoYW5kXG4xNDIzOlx0XHQgbm90IHlldCB0cmlnZ2VyZWQpIGNvbWJpbmF0aW9uIG9mIG9ic2VydmVkIGxvY2tpbmdcbjE0MjQ6XHRcdCBzZXF1ZW5jZXMgKG9uIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgQ1BVcywgcnVubmluZyBhblxuMTQyNTpcdFx0IGFyYml0cmFyeSBudW1iZXIgb2YgdGFza3MgYW5kIGludGVycnVwdCBjb250ZXh0cykgY2F1c2UgYVxuMTQyNjpcdFx0IGRlYWRsb2NrLlxuMTQyNzpcdFxuMTQyODpcdFx0IEluIHNob3J0LCB0aGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUga2VybmVsIHRvIHJlcG9ydCBsb2NraW5nXG4xNDI5Olx0XHQgcmVsYXRlZCBkZWFkbG9ja3MgYmVmb3JlIHRoZXkgYWN0dWFsbHkgb2NjdXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJ1bWluYXRpb25zIG9uIFJoYXNodGFibGUgYW5kIExvY2tkZXAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgcmhhc2h0YWJsZWAgaW1wbGVtZW50YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBMT0NLREVQYCBhbmQgYFBST1ZFX0xPQ0tJTkdgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFBST1ZFX0xPQ0tJTkdgIGltcGxpY2l0bHkgcHVsbHMgaW4gYExPQ0tERVBgLCBhbmQgYERFQlVHX0xPQ0tfQUxMT0NgIGRvZXMgdGhlIHNhbWUuICBUaGF0IHNlZW1zIGxvZ2ljYWwuICBBbmQgYERFQlVHX0xPQ0tfQUxMT0NgIGFsc28gZHJhZ3MgaW4gYExPQ0tERVBgIC0gdGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgdGhlc2UgZGVidWcgYWlkcy4KCk15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBDT05GSUdfVEVTVF9SSEFTSFRBQkxFYCBzaW5jZSBpdCYjMzk7cyBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgKm1pZ2h0KiBiZSByZWxldmFudC4gQnV0IHdhaXQsIGBDT05GSUdfVEVTVF9SSEFTSFRBQkxFYCBpcyBqdXN0IGZvciBzZWxmLXRlc3RzISBUaGF0JiMzOTtzIG5vdCB3aGF0IFN5emthbGxlciBpcyBsb29raW5nIGF0OyBpdCBkZWFscyB3aXRoIHN5c2NhbGxzIGFuZCBub3JtYWwgZXhlY3V0aW9uIHBhdGhzLiAgU28sIG5vLiBJIGNhbiBzYWZlbHkgaWdub3JlIHRoYXQuCgpOb3csIGByaGFzaHRhYmxlYCBpdHNlbGYgaXMgYSBidWlsdC1pbiBrZXJuZWwgY29tcG9uZW50LiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBBbmQsIGFoIHllcywgaGVyZSBpdCBpczogYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCBhcmUgd2hhdCBhY3R1YWxseSAqZW5hYmxlKiB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nIGZvciB0aGUgcmhhc2h0YWJsZSBrZXlzOyBzcGVjaWZpY2FsbHkgYmVjYXVzZSBgI2lmZGVmIENPTkZJR19MT0NLREVQYCBndWFyZHMgdGhvc2Ugc2VjdGlvbnMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTG9va2luZyBpbiBgcmhhc2h0YWJsZS10eXBlcy5oYCBJIGNhbiBzZWUgdGhpczoKCmBgYGMKc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIHsKI2lmZGVmIENPTkZJR19MT0NLREVQCglzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7CglzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5OwoJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1Y2tldF9rZXk7CiNlbmRpZgp9OwpgYGAKClRoaXMgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGNvbWUgdG9nZXRoZXIuICBBbmQgdGhlbiwgaW4gYGxpYi9yaGFzaHRhYmxlLmNgOgoKYGBgYwojaWZkZWYgQ09ORklHX0xPQ0tERVAKCWh0LSZndDtsb2NrZGVwX2tleSA9ICZhbXA7a2V5cy0mZ3Q7YnVja2V0X2tleTsKI2VuZGlmCmBgYAoKYGh0LSZndDtsb2NrZGVwX2tleWAgaXMgYXNzaWduZWQgKm9ubHkqIHdoZW4gYENPTkZJR19MT0NLREVQYCBpcyBkZWZpbmVkLiBUaGlzIGlzIHdoYXQmIzM5O3MgcHJvdmlkaW5nIHRoZSBrZXkgaW5mb3JtYXRpb24uCgpGdXJ0aGVybW9yZSwgaW4gYGJ1Y2tldF90YWJsZV9hbGxvY2A6CgpgYGBjCiNpZmRlZiBDT05GSUdfTE9DS0RFUAoJLyogYml0bG9ja3MgbXVzdCB1c2UgbmVzdGluZyBsZXZlbCAyIG9yIG1vcmUgKi8KCWxvY2tkZXBfaW5pdF9tYXAoJmFtcDt0YmwtJmd0O2RlcF9tYXAsICYjMzQ7cmhhc2h0YWJsZV9idWNrZXQmIzM0OywgaHQtJmd0O2xvY2tkZXBfa2V5LCAwKTsKI2VuZGlmCmBgYAoKSGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludDogIGB0YmwtJmd0O2RlcF9tYXBgIGlzIGluaXRpYWxpemVkICpvbmx5KiB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBsb2NrIGRlcGVuZGVuY3kgdHJhY2tpbmcgcmVsaWVzIG9uIGBMT0NLREVQYC4KCkFuZCwgZmluYWxseSwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYDoKCmBgYGMKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsCgkJCQkJc3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCwKCQkJCQl1bnNpZ25lZCBpbnQgc3ViY2xhc3MpCnsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwoJYml0X3NwaW5fbG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWJ1Y2tldCk7Cglsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKCZhbXA7dGJsLSZndDtkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTsKCXJldHVybiBmbGFnczsKfQpgYGAKCkxvb2tpbmcgYXQgYHJodF9sb2NrX25lc3RlZGAsIHRoZSBjYWxsIHRvIGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYCAqZXhwbGljaXRseSogdXNlcyBgdGJsLSZndDtkZXBfbWFwYC4gIEFuZCwgZ29pbmcgYmFjayB0byB0aGUgZGVmaW5pdGlvbiwgYHRibC0mZ3Q7ZGVwX21hcGAgaXMgb25seSBwcmVzZW50IHdoZW4gYENPTkZJR19MT0NLREVQYCBpcyBlbmFibGVkLgoKVGhlcmVmb3JlLCB0aGUgcHJlc2VuY2Ugb2YgYExPQ0tERVBgICpkaXJlY3RseSogaW1wYWN0cyB0aGUgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgcmhhc2h0YWJsZSBjb2RlISBJdCBhZGRzIHRoZSBsb2NrIGRlcGVuZGVuY3kgdHJhY2tpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBsaWNhdGlvbnMuIEFuZCBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBmdWxsIGBzdHJ1Y3QgYnVja2V0X3RhYmxlYCBkZWZpbml0aW9uIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcF9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTYwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYHN0cnVjdCBidWNrZXRfdGFibGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBidWNrZXRfdGFibGVgLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBzb21lIGtpbmQgb2YgaGFzaCB0YWJsZSBvciBzaW1pbGFyIGRhdGEgc3RydWN0dXJlLCBhbmQgdGhlIGBidWNrZXRfdGFibGVgIGlzIGNlbnRyYWwgdG8gaXRzIGltcGxlbWVudGF0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogaXQmIzM5O3MgZGVmaW5lZC4gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBzcGVjaWZpYyBzb3VyY2UgZmlsZT8gSWYgSSBoYXZlIHNvbWUgY29udGV4dCAtIHdoaWNoIHByb2plY3QgSSBhbSBpbiAtIEkgY291bGQgZ3Vlc3MuIEJ1dCB3aXRob3V0IGl0LCBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgZGlnZ2luZy4gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzLiBgZ3JlcGAsIGBmaW5kYCwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBtYXliZSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIG9yIHNlbWFudGljIGFuYWx5c2lzLCBpcyB0aGUgaW1tZWRpYXRlIGRpcmVjdGlvbiBJJiMzOTtsbCBnby4gTXkgb2JqZWN0aXZlPyBMb2NhdGUgdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24sIHByZWZlcmFibHkgaW5jbHVkaW5nIGFueSByZWxldmFudCBjb21tZW50cywgdHlwZWRlZnMsIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gQXJtZWQgd2l0aCB0aGF0LCBJIGNhbiBnZXQgZG93biB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYnVja2V0X3RhYmxlIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD00Nz1zdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIHt9O1xuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc1LSAqL1xuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg6NzY6c3RydWN0IGJ1Y2tldF90YWJsZSB7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03Ny1cdHVuc2lnbmVkIGludFx0XHRzaXplO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDUxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHNwZWNpZmllZCBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byBgcmhhc2h0YWJsZS5oYCDigJMgTGluZXMgNzUtMTAwKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDc1LTEwMCBvZiBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSByZXNpemFibGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGByaGFzaHRhYmxlYCBzdHJ1Y3QgaXRzZWxmIGRlZmluZWQsIGFsb25nIHdpdGggbWF5YmUgcmVsYXRlZCBzdHJ1Y3RzIGxpa2UgYnVja2V0IGhlYWRzLCBub2RlIHN0cnVjdHVyZXMsIG9yIG1ldGFkYXRhIGZvciBoYXNoIGtleSBtYW5hZ2VtZW50LiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIGZpbmRpbmcgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGhhc2gga2V5IHN0cnVjdHVyZSwgYW5kIHBvc3NpYmxlIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVsYXRpbmcgdG8ga2V5IGxvb2t1cHMsIGluc2VydGlvbnMsIGFuZCBkZWxldGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHN0YXJ0cywgc28gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBiYXNpY3MuIExvb2tpbmcgZm9yd2FyZCB0byBnZXR0aW5nIHRvIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhlc2UgdGFibGVzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdCAqL1xuICA3NjpcdHN0cnVjdCBidWNrZXRfdGFibGUge1xuICA3NzpcdFx0dW5zaWduZWQgaW50XHRcdHNpemU7XG4gIDc4Olx0XHR1bnNpZ25lZCBpbnRcdFx0bmVzdDtcbiAgNzk6XHRcdHUzMlx0XHRcdGhhc2hfcm5kO1xuICA4MDpcdFx0c3RydWN0IGxpc3RfaGVhZFx0d2Fsa2VycztcbiAgODE6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gIDgyOlx0XG4gIDgzOlx0XHRzdHJ1Y3QgYnVja2V0X3RhYmxlIF9fcmN1ICpmdXR1cmVfdGJsO1xuICA4NDpcdFxuICA4NTpcdFx0c3RydWN0IGxvY2tkZXBfbWFwXHRkZXBfbWFwO1xuICA4NjpcdFxuICA4NzpcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqYnVja2V0c1tdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gIDg4Olx0fTtcbiAgODk6XHRcbiAgOTA6XHQvKlxuICA5MTpcdCAqIE5VTExTX01BUktFUigpIGV4cGVjdHMgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGxvd1xuICA5MjpcdCAqIGJpdHMgbW9zdGx5IGxpa2VseSB0byBiZSBzaWduaWZpY2FudCwgYW5kIGl0IGRpc2NhcmRzXG4gIDkzOlx0ICogdGhlIG1zYi5cbiAgOTQ6XHQgKiBXZSBnaXZlIGl0IGFuIGFkZHJlc3MsIGluIHdoaWNoIHRoZSBib3R0b20gYml0IGlzXG4gIDk1Olx0ICogYWx3YXlzIDAsIGFuZCB0aGUgbXNiIG1pZ2h0IGJlIHNpZ25pZmljYW50LlxuICA5NjpcdCAqIFNvIHdlIHNoaWZ0IHRoZSBhZGRyZXNzIGRvd24gb25lIGJpdCB0byBhbGlnbiB3aXRoXG4gIDk3Olx0ICogZXhwZWN0YXRpb25zIGFuZCBhdm9pZCBsb3NpbmcgYSBzaWduaWZpY2FudCBiaXQuXG4gIDk4Olx0ICpcbiAgOTk6XHQgKiBXZSBuZXZlciBzdG9yZSB0aGUgTlVMTFNfTUFSS0VSIGluIHRoZSBoYXNoIHRhYmxlXG4gMTAwOlx0ICogaXRzZWxmIGFzIHdlIG5lZWQgdGhlIGxzYiBmb3IgbG9ja2luZy5cbiAxMDE6XHQgKiBJbnN0ZWFkIHdlIHN0b3JlIGEgTlVMTFxuIDEwMjpcdCAqL1xuIDEwMzpcdCNkZWZpbmVcdFJIVF9OVUxMU19NQVJLRVIocHRyKVx0XFxcbiAxMDQ6XHRcdCgodm9pZCAqKU5VTExTX01BUktFUigoKHVuc2lnbmVkIGxvbmcpIChwdHIpKSBcdTAwM2VcdTAwM2UgMSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiByaGFzaHRhYmxlIExvY2sgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbG9jayBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nLiBJIHNlZSB0aGF0IHRoZSBgYnVja2V0X3RhYmxlYCBzdHJ1Y3QgaGFzIGEgYGxvY2tkZXBfbWFwYCB3aGljaCB0cmFja3MgZGVwZW5kZW5jaWVzLCBidXQgaXQmIzM5O3Mgb25seSBhY3RpdmUgaWYgYENPTkZJR19MT0NLREVQYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzeW1ib2xzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBSZW1lbWJlcmluZyB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCBpbnN0ZWFkIHRhcmdldCBmZWF0dXJlLXNwZWNpZmljIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHByZXNlbnQgYSBjaGFsbGVuZ2UsIHNvIEkgbmVlZCB0byBpZGVudGlmeSBub24tc3RhdGljIGNhbGxlcnMgdGhhdCBleGVyY2lzZSB0aGVtLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjaGFuZ2VkIG9yIGVudHJ5cG9pbnQgZnVuY3Rpb25zIGluIGBsaWIvcmhhc2h0YWJsZS5jYC4gSSBmb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgLCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAsIGFuZCBgcmh0X2RlZmVycmVkX3dvcmtlcmAuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGZpbGUsIGFuZCBJJiMzOTt2ZSBsb29rZWQgaW50byBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgc2V2ZXJhbCByZWhhc2hpbmcgZnVuY3Rpb25zLCBsaWtlIGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV9yZWhhc2hfdGFibGVgLCBhbmQgYHJoYXNodGFibGVfcmVoYXNoX2FsbG9jYCBhcmUgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgbWVhbnMgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWRkcmVzc2FibGUgc3ltYm9scy4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgKm5vdCogaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgd29yayBxdWV1ZSwgbWFraW5nIGl0IGEgdmFsaWQgc3ltYm9sIGluIGB2bWxpbnV4YC4gVGhlIG90aGVyIHR3byAoYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCkgYXJlIEVYUE9SVF9TWU1CT0xfR1BMLCBzbyBhcmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLgoKYHJoYXNodGFibGVfaW5zZXJ0X3Nsb3dgIGl0c2VsZiBjYWxscyBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgd2hpY2ggaW4gdHVybiBjYWxscyBgcmh0X2xvY2tgLiBgcmh0X2xvY2tgIGlzIHdoZXJlIHRoZSBsb2NraW5nIG9jY3VycyBhbmQgaXMgc3RhdGljIGlubGluZSBpbiBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoaXMsIHdoaWNoIHdpbGwgbGV0IG1lIGdldCBhdCB0aGUgbG9jay4gTG9va2luZyBhdCBgcmh0X2xvY2tfbmVzdGVkYCB3aGljaCBgcmh0X2xvY2tgIGNhbGxzLCBJIHNlZSB0aGF0IHdpdGhpbiBgbGliL3JoYXNodGFibGUuY2A6IGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgIGFuZCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gIGNhbGwgbmVzdGVkIHZlcnNpb25zIG9mIHRoZSBsb2NrLiBBbHNvLCBgcmh0X2RlZmVycmVkX3dvcmtlcmAgY2FsbHMgYHJoYXNodGFibGVfcmVoYXNoX3RhYmxlYCwgd2hpY2ggY2FsbHMgYm90aCBvZiB0aG9zZSBmdW5jdGlvbnMsIGFuZCBhbHNvIHRha2VzIGEgbXV0ZXggbG9jayBiZWZvcmUgdGhhdC4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95YCB0YWtlcyBhbnkgbG9ja3MsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDY6XHR2b2lkIHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4xMjQ3Olx0XHRcdFx0XHQgdm9pZCAoKmZyZWVfZm4pKHZvaWQgKnB0ciwgdm9pZCAqYXJnKSxcbjEyNDg6XHRcdFx0XHRcdCB2b2lkICphcmcpXG4xMjQ5Olx0e1xuMTI1MDpcdFx0c3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCAqbmV4dF90Ymw7XG4xMjUxOlx0XHR1bnNpZ25lZCBpbnQgaTtcbjEyNTI6XHRcbjEyNTM6XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2aHQtXHUwMDNlcnVuX2lycV93b3JrKTtcbjEyNTQ6XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2aHQtXHUwMDNlcnVuX3dvcmspO1xuMTI1NTpcdFxuMTI1NjpcdFx0LypcbjEyNTc6XHRcdCAqIERvIE5PVCB0YWtlIGh0LVx1MDAzZW11dGV4IGhlcmUuIFRoZSByZWhhc2ggd29ya2VyIGVzdGFibGlzaGVzXG4xMjU4Olx0XHQgKiBodC1cdTAwM2VtdXRleCAtXHUwMDNlIGZzX3JlY2xhaW0gdmlhIEdGUF9LRVJORUwgYnVja2V0IGFsbG9jYXRpb24gdW5kZXJcbjEyNTk6XHRcdCAqIHRoZSBtdXRleDsgY2FsbGVycyBvbiB0aGUgcmVjbGFpbSBwYXRoIChlLmcuIHNpbXBsZV94YXR0cl9odF9mcmVlKClcbjEyNjA6XHRcdCAqIGZyb20gZXZpY3QoKSB1bmRlciB0aGUgZGNhY2hlIHNocmlua2VyIGZvciBzaG1lbS9rZXJuZnMvcGlkZnNcbjEyNjE6XHRcdCAqIGlub2Rlcykgd291bGQgb3RoZXJ3aXNlIGNsb3NlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuMTI2MjpcdFx0ICogZnNfcmVjbGFpbSAtXHUwMDNlIGh0LVx1MDAzZW11dGV4LlxuMTI2MzpcdFx0ICovXG4xMjY0Olx0XHR0YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGh0LVx1MDAzZXRibCk7XG4xMjY1Olx0cmVzdGFydDpcbjEyNjY6XHRcdGlmIChmcmVlX2ZuKSB7XG4xMjY3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRibC1cdTAwM2VzaXplOyBpJiM0MzsmIzQzOykge1xuMTI2ODpcdFx0XHRcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xuMTI2OTpcdFxuMTI3MDpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMTI3MTpcdFx0XHRcdGZvciAocG9zID0gcmh0X3B0cl9leGNsdXNpdmUocmh0X2J1Y2tldCh0YmwsIGkpKSxcbjEyNzI6XHRcdFx0XHQgICAgIG5leHQgPSAhcmh0X2lzX2FfbnVsbHMocG9zKSA/XG4xMjczOlx0XHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLVx1MDAzZW5leHQpIDogTlVMTDtcbjEyNzQ6XHRcdFx0XHQgICAgICFyaHRfaXNfYV9udWxscyhwb3MpO1xuMTI3NTpcdFx0XHRcdCAgICAgcG9zID0gbmV4dCxcbjEyNzY6XHRcdFx0XHQgICAgIG5leHQgPSAhcmh0X2lzX2FfbnVsbHMocG9zKSA/XG4xMjc3Olx0XHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLVx1MDAzZW5leHQpIDogTlVMTClcbjEyNzg6XHRcdFx0XHRcdHJoYXNodGFibGVfZnJlZV9vbmUoaHQsIHBvcywgZnJlZV9mbiwgYXJnKTtcbjEyNzk6XHRcdFx0fVxuMTI4MDpcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0bmV4dF90YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHRibC1cdTAwM2VmdXR1cmVfdGJsKTtcbjEyODM6XHRcdGJ1Y2tldF90YWJsZV9mcmVlKHRibCk7XG4xMjg0Olx0XHRpZiAobmV4dF90YmwpIHtcbjEyODU6XHRcdFx0dGJsID0gbmV4dF90Ymw7XG4xMjg2Olx0XHRcdGdvdG8gcmVzdGFydDtcbjEyODc6XHRcdH1cbjEyODg6XHR9XG4xMjg5Olx0RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KTtcbjEyOTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1OTYKCQkJCQkJCW91dHB1dDogMjE1CgkJCQkJCQl0aG91Z2h0czogMTE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFJhdGlvbmFsZTogUmhhc2h0YWJsZSBMb2NraW5nICZhbXA7IExvY2tkZXAqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoaXMgcGF0Y2ggdG91Y2hpbmcgYGxpYi9yaGFzaHRhYmxlLmNgLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb21tZW50IGluIGByaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3lgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUsIGhpZ2hsaWdodGluZyB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiByaGFzaHRhYmxlJiMzOTtzIGxvY2tpbmcsIGBmc19yZWNsYWltYCwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcgZm9yIGxvY2tkZXAsIGFuZCBpdCBtZWFucyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzIGluIGhvdyB3ZSB0YXJnZXQgdGhpcy4KClRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiByZWZhY3RvcmluZyB0aGUgbG9ja2RlcCBrZXkgaW5pdGlhbGl6YXRpb24sIGdvaW5nIGZyb20gYSBzaW5nbGUgc2hhcmVkIGtleSB0byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzLiAgSXQgYWxzbyByZWNvbmZpZ3VyZXMgdGhlIGxvY2sgbmVzdGluZyBzdWJjbGFzc2VzIGZvciBgdGJsLSZndDtkZXBfbWFwYCBhbmQgYGh0LSZndDttdXRleGAuIFRoaXMgaXMgYWxsIGFib3V0IGxvY2sgdmFsaWRhdGlvbiwgYW5kIGFueXRoaW5nIHRoYXQgbWVzc2VzIHdpdGggbG9ja2RlcCBpbiBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbGlrZSBgcmhhc2h0YWJsZWAgKnNjcmVhbXMqICYjMzQ7d29ydGggZnV6emluZy4mIzM0OyBSaGFzaHRhYmxlcyBhcmUgZXZlcnl3aGVyZSDigJMgbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIElQQywgeW91IG5hbWUgaXQg4oCTIHNvIGFueSBsb2NraW5nIHJlZ3Jlc3Npb24gaGVyZSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGRvd25zdHJlYW0gaW1wYWN0LgoKUmVnYXJkaW5nIHJlbGV2YW50IGNvbmZpZ3MsIHRoZSBjaGFuZ2VkIGNvZGUgdXRpbGl6ZXMgYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCwgd2hpY2ggaXMgc3RhbmRhcmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gYGxpYi9yaGFzaHRhYmxlLmNgIGlzIGFsd2F5cyBidWlsdCwgc28gd2UgY2FuIHJlbGlhYmx5IGluY2x1ZGUgdGhlc2UuICBTaW5jZSBgUFJPVkVfTE9DS0lOR2AgaW1wbGljaXRseSBpbmNsdWRlcyBgTE9DS0RFUGAsIHdlJiMzOTtyZSBzb2xpZCB0aGVyZS4KCk5vdywgZm9yIHN5bWJvbCBzZWxlY3Rpb24sIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGluIGBsaWIvcmhhc2h0YWJsZS5jYDogYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAsIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCwgYW5kIGByaHRfZGVmZXJyZWRfd29ya2VyYC4gSSBrbm93IHRoYXQgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGlzIGEgbWFjcm8sIGJ1dCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgIGFyZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMuIEkmIzM5O3ZlIGFsc28gaW5jbHVkZWQgYHJoYXNodGFibGVfaW5zZXJ0X3Nsb3dgIGJlY2F1c2UgaXQgZXhlcmNpc2VzIGluc2VydGlvbiBhbmQgdGhlIGJ1Y2tldCBiaXRsb2NrIGxvZ2ljIGFuZCBjYWxscyBgcmh0X2xvY2tgLiBJIGJyaWVmbHkgY2hlY2tlZCBgbGliL3Rlc3Rfcmhhc2h0YWJsZS5jYCwgYnV0IHRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBpc29sYXRlZCB0byBhIHRlc3QgbW9kdWxlJiMzOTtzIGBwcmludF9odGAgZnVuY3Rpb24sIGFuZCBub3QgY3JpdGljYWwgZm9yIG91ciBzeXprYWxsZXIgZm9jdXMuCgpTbyB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbnMgd2l0aGluIHRoZSByaGFzaHRhYmxlIGNvZGUsIGRpcmVjdGx5IGltcGFjdGluZyBsb2NrIHZhbGlkYXRpb24uIEFueSBzdWJ0bGUgZXJyb3IgaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBleHBvc2UgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIHVuZGVyIGxvY2tkZXAuIFRoYXQmIzM5O3Mgd2h5IEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoZXNlIHNldHRpbmdzIGZvciB0aGUgZnV6emluZyBydW46CgoqICAgKipXb3J0aEZ1enppbmcqKjogdHJ1ZQoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyAoYGxpYi9yaGFzaHRhYmxlLmNgIGFuZCBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oYCkuIFNwZWNpZmljYWxseSwgaXQgc2VwYXJhdGVzIHRoZSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgaGFzaCB0YWJsZSBtdXRleCwgc3BpbmxvY2ssIGFuZCBidWNrZXQgYml0bG9ja3MgKGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgKSwgYW5kIGFkanVzdHMgdGhlIGxvY2tkZXAgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgYHRibC0mZ3Q7ZGVwX21hcGAgYW5kIGBodC0mZ3Q7bXV0ZXhgLiBSaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zLCBhbmQgSVBDLiBDaGFuZ2VzIGluIGxvY2tkZXAgYW5ub3RhdGlvbnMgYW5kIGxvY2tpbmcgcnVsZXMgZGlyZWN0bHkgaW1wYWN0IGxvY2sgdmFsaWRhdGlvbiBhbmQgY2FuIGV4cG9zZSBsYXRlbnQgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIHVuZGVyIGxvY2tkZXAuCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFsmIzM0O1BST1ZFXF9MT0NLSU5HJiMzNDssICYjMzQ7TE9DS0RFUCYjMzQ7XQoqICAgKipGb2N1c1N5bWJvbHMqKjogXFsmIzM0O1xfXF9yaGFzaHRhYmxlXF9pbml0XF9ub3Byb2YmIzM0OywgJiMzNDtcX1xfcmhsdGFibGVcX2luaXRcX25vcHJvZiYjMzQ7LCAmIzM0O3JodFxfZGVmZXJyZWRcX3dvcmtlciYjMzQ7LCAmIzM0O3JoYXNodGFibGVcX2luc2VydFxfc2xvdyYjMzQ7XQoKV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIHZlcmlmaWVkLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgdGhlIHJlc3VsdHMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fcmhsdGFibGVfaW5pdF9ub3Byb2YmIzM0OywKICAgICYjMzQ7cmh0X2RlZmVycmVkX3dvcmtlciYjMzQ7LAogICAgJiMzNDtyaGFzaHRhYmxlX2luc2VydF9zbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fcmhsdGFibGVfaW5pdF9ub3Byb2YmIzM0OywKICAgICYjMzQ7cmh0X2RlZmVycmVkX3dvcmtlciYjMzQ7LAogICAgJiMzNDtyaGFzaHRhYmxlX2luc2VydF9zbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBkYXRhIGJ1ZmZlcnMsIGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIHNlcmlhbGl6YXRpb24uXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Db25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmQ2NGMxZWU2M2E2NGI4ZGQyNDRiN2Y5MGE5MGQxZGIwMjBkOTVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCkBAIC03MCw2ICYjNDM7NzAsMTQgQEAgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHsKIAlyaHRfb2JqX2NtcGZuX3QJCW9ial9jbXBmbjsKIH07CiAKJiM0MztzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOwlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBtdXRleF9rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5OwomIzQzOyNlbmRpZgomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCByaGFzaHRhYmxlIC0gSGFzaCB0YWJsZSBoYW5kbGUKICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZQpAQCAtMTQxLDI0ICYjNDM7MTQ5LDc3IEBAIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgewogCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwomIzQzOwkJICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7CiAjZGVmaW5lIHJoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcykJCQkJXAogKHsJCQkJCQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQkJXAomIzQzOwlzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5czsJCQlcCiAJCQkJCQkJCQlcCi0JX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXlzKTsJCQlcCiB9KQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZQomIzQzOyAqIEBodDoJCWhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWQKJiM0MzsgKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24KJiM0MzsgKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKJiM0MzsgKiBmaXhlZCBsZW5ndGgga2V5OgomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglpbnQJCQlrZXk7CiYjNDM7ICoJdm9pZCAqCQkJbXlfbWVtYmVyOwomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7CiYjNDM7ICoJLmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSwKJiM0MzsgKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKJiM0MzsgKgkua2V5X2xlbiA9IHNpemVvZihpbnQpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKiB9OwomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglbLi4uXQomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKQomIzQzOyAqIHsKJiM0MzsgKglzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7CiYjNDM7ICoKJiM0MzsgKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07CiYjNDM7ICogfQomIzQzOyAqCiYjNDM7ICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKJiM0MzsgKgkuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCiYjNDM7ICogfTsKJiM0MzsgKi8KICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpCiAKIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LAogCQkgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKJiM0MzsJCSAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTsKICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpCQkJCVwKICh7CQkJCQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJCVwKJiM0MzsJc3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7CQkJXAogCQkJCQkJCQkJXAotCV9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgJmFtcDtfX2tleXMpOwkJCVwKIH0pCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlCiYjNDM7ICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCiYjNDM7ICogQHBhcmFtczoJY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICoKJiM0MzsgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCiYjNDM7ICoKJiM0MzsgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LgomIzQzOyAqLwogI2RlZmluZSByaGx0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKQogCiAjZW5kaWYgLyogX0xJTlVYX1JIQVNIVEFCTEVfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAppbmRleCA2YzVlNmQ5YWNjYmE3Li5lYzg1M2MxYjlhZjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaApAQCAtMzI4LDggJiM0MzszMjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAliaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTsKLQkvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC0mZ3Q7bG9jayBhbmQgMSBmb3IgLSZndDttdXRleC4gMiYjNDM7IGZvciBiaXRsb2NrcyAqLwotCWxvY2tfYWNxdWlyZV9leGNsdXNpdmUoJmFtcDt0YmwtJmd0O2RlcF9tYXAsIHN1YmNsYXNzJiM0MzsyLCAwLCBOVUxMLCBfVEhJU19JUF8pOwomIzQzOwlsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKCZhbXA7dGJsLSZndDtkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9yaGFzaHRhYmxlLmMgYi9saWIvcmhhc2h0YWJsZS5jCmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0Ci0tLSBhL2xpYi9yaGFzaHRhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3JoYXNodGFibGUuYwpAQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCByaHRfZGVmZXJyZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlpbnQgZXJyID0gMDsKIAogCWh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAogCXRibCA9IHJodF9kZXJlZmVyZW5jZShodC0mZ3Q7dGJsLCBodCk7CiAJdGJsID0gcmhhc2h0YWJsZV9sYXN0X3RhYmxlKGh0LCB0YmwpOwpAQCAtMTEyMiw1MSAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpCiAJcmV0dXJuIGpoYXNoMihrZXksIGxlbmd0aCwgc2VlZCk7CiB9CiAKLS8qKgotICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlCi0gKiBAaHQ6CQloYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uCi0gKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKLSAqIGZpeGVkIGxlbmd0aCBrZXk6Ci0gKgotICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCi0gKiBzdHJ1Y3QgdGVzdF9vYmogewotICoJaW50CQkJa2V5OwotICoJdm9pZCAqCQkJbXlfbWVtYmVyOwotICoJc3RydWN0IHJoYXNoX2hlYWQJbm9kZTsKLSAqIH07Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKLSAqCS5rZXlfbGVuID0gc2l6ZW9mKGludCksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKiB9OwotICoKLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5cwotICogc3RydWN0IHRlc3Rfb2JqIHsKLSAqCVsuLi5dCi0gKglzdHJ1Y3Qgcmhhc2hfaGVhZAlub2RlOwotICogfTsKLSAqCi0gKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCkKLSAqIHsKLSAqCXN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTsKLSAqCi0gKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07Ci0gKiB9Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCi0gKiB9OwotICovCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKLQkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkgICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7CiAJc2l6ZV90IHNpemU7CkBAIC0xMTc2LDEzICYjNDM7MTEzNCwxMSBAQCBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQoaHQsIDAsIHNpemVvZigqaHQpKTsKLQkvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqLwotCW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsIGtleSk7CiYjNDM7CW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsICZhbXA7a2V5cy0mZ3Q7bXV0ZXhfa2V5KTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2h0LSZndDtsb2NrKTsKLQkvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi8KLQlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCBrZXkpOwomIzQzOwlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCAmYW1wO2tleXMtJmd0O2xvY2tfa2V5KTsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAotCWh0LSZndDtsb2NrZGVwX2tleSA9IGtleTsKJiM0MzsJaHQtJmd0O2xvY2tkZXBfa2V5ID0gJmFtcDtrZXlzLSZndDtidWNrZXRfa2V5OwogI2VuZGlmCiAJbWVtY3B5KCZhbXA7aHQtJmd0O3AsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKIApAQCAtMTIzNiwyMiAmIzQzOzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpOwogCi0vKioKLSAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZQotICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCi0gKgotICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC4KLSAqLwogaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsCiAJCQkgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKLQkJCSAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQomIzQzOwkJCSAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKCZhbXA7aGx0LSZndDtodCwgcGFyYW1zLCBrZXkpOwomIzQzOwllcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoJmFtcDtobHQtJmd0O2h0LCBwYXJhbXMsIGtleXMpOwogCWhsdC0mZ3Q7aHQucmhsaXN0ID0gdHJ1ZTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jCmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X3JoYXNodGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmMKQEAgLTQ3Nyw3ICYjNDM7NDc3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgcHJpbnRfaHQoc3RydWN0IHJobHRhYmxlICpyaGx0KQogCiAJaHQgPSAmYW1wO3JobHQtJmd0O2h0OwogCS8qIFRha2UgdGhlIG11dGV4IHRvIGF2b2lkIFJDVSB3YXJuaW5nICovCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAl0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtJmd0O3RibCwgaHQpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB0YmwtJmd0O3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHJoYXNodGFibGUgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGNoYW5nZXMuCgpUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBsb2NrZGVwIGFuZCBpbml0aWFsaXphdGlvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgcmhhc2h0YWJsZS10eXBlcy5oYCwgYHJoYXNodGFibGUuaGAsIGByaGFzaHRhYmxlLmNgLCBhbmQgdGhlIHRlc3QgZmlsZSBgdGVzdF9yaGFzaHRhYmxlLmNgLgoKRmlyc3QsIGByaGFzaHRhYmxlLXR5cGVzLmhgIGludHJvZHVjZXMgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AsIHdoaWNoIGFwcGVhcnMgdG8gZW5jYXBzdWxhdGUgbG9ja2RlcCBrZXlzIGZvciB0aGUgcmhhc2h0YWJsZSYjMzk7cyBsb2Nrcy4gSXQgdXNlcyBgQ09ORklHX0xPQ0tERVBgIGd1YXJkcywgc28gaXQmIzM5O3MgY29uZGl0aW9uYWwuIFRoZSBpbml0aWFsaXphdGlvbiBtYWNyb3MsIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAsIGFyZSB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBgc3RydWN0YCBhbmQgYSBzdGF0aWMgaW5zdGFuY2Ugb2YgaXQgKGBfX2tleXNgKS4gVGhlIGRvY3VtZW50YXRpb24gbW92ZSBpcyBqdXN0IGEgY29kZSBvcmdhbml6YXRpb24gY2hhbmdlLCBzbyB0aGF0JiMzOTtzIG5vdCBjcml0aWNhbCBmb3Igbm93LiBUaGUgc2FtZSBjaGFuZ2VzIG9jY3VyIGZvciBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmAuCgpUaGVuLCBgcmhhc2h0YWJsZS5oYCBpcyBjaGFuZ2luZyB0aGUgYHJodF9sb2NrX25lc3RlZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlIHdhcyBhbiBvZmYtYnktb25lIGVycm9yIHdpdGggdGhlIGBzdWJjbGFzc2AgYXJndW1lbnQgZm9yIGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgYHN1YmNsYXNzYCAwIGFuZCAxIGFyZSB1c2VkIGZvciB0aGUgdGFibGUgbG9jayBhbmQgbXV0ZXggcmVzcGVjdGl2ZWx5LCBhbmQgMiYjNDM7IGlzIHVzZWQgZm9yIGJpdGxvY2tzLiBTaW5jZSBsb2NrZGVwIGtleXMgYXJlIG5vdyBleHBsaWNpdGx5IGRlZmluZWQgZm9yIGxvY2ssIG11dGV4LCBhbmQgYnVja2V0IChiaXRsb2NrKSwgdGhlcmUgaXMgbm8gcmVhc29uIGZvciB0aGUgYCYjNDM7MmAgYW55bW9yZS4gVGhpcyBpcyBhIGdvb2QgZml4LgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gYGxpYi9yaGFzaHRhYmxlLmNgLiAgYHJodF9kZWZlcnJlZF93b3JrZXJgIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSByZWd1bGFyIGBtdXRleF9sb2NrYCBpbnN0ZWFkIG9mIHRoZSBuZXN0ZWQgdmVyc2lvbi4gVGhlIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHNpZ25pZmljYW50bHkuIEl0IG5vdyB0YWtlcyB0aGF0IGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXNgIGFuZCB1c2VzIGl0IHRvIGluaXRpYWxpemUgdGhlIG11dGV4IHdpdGggYG11dGV4X2luaXRfd2l0aF9rZXlgLCBzZXRzIHRoZSBsb2NrIGNsYXNzIHZpYSBgbG9ja2RlcF9zZXRfY2xhc3NgLCBhbmQgc2V0cyBgaHQtJmd0O2xvY2tkZXBfa2V5YC4gVGhlIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCBmdW5jdGlvbiBpcyBub3cgcGFzc2luZyBga2V5c2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWFsIHBvdGVudGlhbCBmb3IgaXNzdWVzLCBhbmQgdGh1cyBmdXp6aW5nIG5lZWRzLCB3aWxsIGxpZS4gVGhlIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgY2hhbmdlcyBhcmUgbmV3LgoKRmluYWxseSwgaW4gYGxpYi90ZXN0X3JoYXNodGFibGUuY2AsIHRoZSBgbXV0ZXhfbG9ja2AgaXMgc2ltcGxpZmllZCwgY29uc2lzdGVudCB3aXRoIHRoZSBwcmV2aW91cyBjaGFuZ2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCB0aGVzZSBjaGFuZ2VzICpjb3VsZCogaW50cm9kdWNlIHN1YnRsZSBsb2NrZGVwIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIHVzZSBvZiB0aGUgbG9ja2RlcCBrZXlzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgY2FsbGVycyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgcGVydmFzaXZlIHRoZXNlIG5ldyBwYXJhbWV0ZXJzIGFyZSBhbmQgaWYgdGhlIGByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgY291bGQgYmUgdW5pbml0aWFsaXplZC4gQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBhIGZ1bGwgS01TQU4gZnV6emluZyBzZXNzaW9uLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIGBfX3JoYXNodGFibGVfaW5pdGAgYW5kIGBfX3JobHRhYmxlX2luaXRgIGNhbGxzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXkgYXJlIHVzZWQuIEEgc3RhdGljIGFuYWx5c2lzICpzaG91bGQqIGJlIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGEgcmVhbCBLTVNBTiByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JoYXNodGFibGVfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaD0xNDA9c3RydWN0IHJoYXNodGFibGVfaXRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTQ5LVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MTUwOmludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTUxLVx0XHQgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU2LVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoxNTc6XHRfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXHUwMDI2X19rZXlzKTtcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU4LX0pXG4tLVxubGliL3JoYXNodGFibGUuYz0xMTIwPXN0YXRpYyB1MzIgcmhhc2h0YWJsZV9qaGFzaDIoY29uc3Qgdm9pZCAqa2V5LCB1MzIgbGVuZ3RoLCB1MzIgc2VlZClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTExMjQtXG5saWIvcmhhc2h0YWJsZS5jOjExMjU6aW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG5saWIvcmhhc2h0YWJsZS5jLTExMjYtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTExOTItfVxubGliL3JoYXNodGFibGUuYzoxMTkzOkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXG5saWIvcmhhc2h0YWJsZS5jPTExOTU9aW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4tLVxubGliL3JoYXNodGFibGUuYy0xMjAwLVxubGliL3JoYXNodGFibGUuYzoxMjAxOlx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXlzKTtcbmxpYi9yaGFzaHRhYmxlLmMtMTIwMi1cdGhsdC1cdTAwM2VodC5yaGxpc3QgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYF9fcmhsdGFibGVfaW5pdGAgQ2FsbHMqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgX19yaGx0YWJsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gdHJ5aW5nIHRvIGFzY2VydGFpbiBpcyB0aGUgc2NvcGUgb2YgaXRzIHVzYWdlLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiAqd2hlcmUqIGFuZCAqaG93KiB0aGlzIGlzIGJlaW5nIHVzZWQuIFJpZ2h0IG5vdywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgb3RoZXIgbG9jYXRpb25zIHdoZXJlIGBfX3JobHRhYmxlX2luaXRgIGlzIGJlaW5nIGNhbGxlZCBiZXNpZGVzIHRoZSBvbmVzIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZj8mIzM0Oy4gVGhpcyBpcyBiYXNpYyBkdWUgZGlsaWdlbmNlLiBJZGVudGlmeWluZyBhbGwgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGluZmx1ZW5jZSwgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIG9mIGNvdXJzZSwgZm9yIGRlYnVnZ2luZyBhbmQgcmVmYWN0b3JpbmcgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JobHRhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTUwPWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwMy1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIwNDppbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwNS1cdFx0ICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMTAtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIxMTpcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIxMi19KVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMTk0LVxubGliL3JoYXNodGFibGUuYzoxMTk1OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxubGliL3JoYXNodGFibGUuYy0xMTk2LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTIwNC19XG5saWIvcmhhc2h0YWJsZS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGx0YWJsZV9pbml0X25vcHJvZik7XG5saWIvcmhhc2h0YWJsZS5jLTEyMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSByaGFzaHRhYmxlIEluaXRpYWxpemF0aW9uIGFuZCBMb2NrZGVwIEtleXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJoYXNodGFibGVfaW5pdGAgb3IgYHJobHRhYmxlX2luaXRgIG1hY3JvLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCBkZWNsYXJlcyBhIGBzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztgLiBUaGF0IGBzdGF0aWNgIHF1YWxpZmllciBpcyB0aGUga2V5IGhlcmUuIEl0IG1lYW5zIHRoaXMgYF9fa2V5c2AgdmFyaWFibGUgaXMgZ29pbmcgdG8gbGFuZCBpbiBlaXRoZXIgdGhlIEJTUyBvciB0aGUgZGF0YSBzZWN0aW9uLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtsbCBiZSB6ZXJvLWluaXRpYWxpemVkLiBOb3csIGtub3dpbmcgd2hhdCBJIGRvIGFib3V0IGxvY2tkZXAsIHRob3NlICYjMzQ7bG9ja2RlcCBrZXlzJiMzNDsgYXJlIGJhc2ljYWxseSBqdXN0IHBsYWNlaG9sZGVyIGFkZHJlc3NlcyBmb3IgdGhlIGxvY2tkZXAgbWFjaGluZXJ5LiBUaGUgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgaXRzZWxmIOKAkyBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSDigJMgaXMgZWl0aGVyIGFuIGVtcHR5IHN0cnVjdCBvciBhIGR1bW15LCBzbyBsb2NrZGVwIGlzIHJlYWxseSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlICphZGRyZXNzKiBvZiBpdC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc3RydWN0IGxvY2tfY2xhc3Nfa2V5YCBkZWZpbml0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIG15IG1lbW9yeSBpcyBzZXJ2aW5nIG1lIGNvcnJlY3RseSBoZXJlLiBJIGp1c3Qgd2FudCB0byB2ZXJpZnkgaG93IHRoZSBrZXkgc3RydWN0IGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBsb2NrX2NsYXNzX2tleSBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg9NzA9c3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC03NC0vKiBoYXNoX2VudHJ5IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQga2V5cy4gKi9cbmluY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oOjc1OnN0cnVjdCBsb2NrX2NsYXNzX2tleSB7XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC03Ni1cdHVuaW9uIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaD0yMDY9c3RydWN0IGhlbGRfbG9jayB7XG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgtMjY0LSAqL1xuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg6MjY1OnN0cnVjdCBsb2NrX2NsYXNzX2tleSB7IH07XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC0yNjYtXG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oLTUtXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC9sb2NrZGVwLmg6NjpzdHJ1Y3QgbG9ja19jbGFzc19rZXkge1xudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oLTctXHR1bnNpZ25lZCBpbnQgYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyMQoJCQkJCQkJb3V0cHV0OiAyNDgKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgcmhhc2h0YWJsZSBMb2NrZGVwIENoYW5nZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBhZnRlciByZXZpZXdpbmcgdGhlc2UgY2hhbmdlcyB0byB0aGUgYHJoYXNodGFibGVgIGxvY2tkZXAgYW5ub3RhdGlvbnMuIEl0JiMzOTtzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGxvY2tkZXAgaW1wbGVtZW50YXRpb24uIEJlZm9yZSwgdGhleSB3ZXJlIGF3a3dhcmRseSBzaGFyaW5nIGEgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgYWNyb3NzIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jay4gVGhhdCBmb3JjZWQgc29tZSBwcmV0dHkgbWVzc3kgc3ViY2xhc3MgbmVzdGluZyB0cmlja3MgdXNpbmcgYHN1YmNsYXNzJiM0MzsyYCBhbmQgc3BlY2lmaWMgYG11dGV4X2xvY2tfbmVzdGVkYCBjYWxscy4gRnJhbmtseSwgaXQgd2FzIGEgYml0IG9mIGEgaGFjay4KCk5vdywgd2UgaGF2ZSBhIHByb3BlciBgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCB3aGljaCBjbGVhbmx5IGRlZmluZXMgdGhyZWUgc2VwYXJhdGUgYGxvY2tfY2xhc3Nfa2V5c2A6IGBsb2NrX2tleWAsIGBtdXRleF9rZXlgLCBhbmQgYGJ1Y2tldF9rZXlgLiBUaGlzIGlzICptdWNoKiBjbGVhbmVyOyBlYWNoIGxvY2sgZ2V0cyBpdHMgb3duIGRlZGljYXRlZCBrZXkuIEkmIzM5O20gZ2xhZCB0byBzZWUgdGhhdCBjb21wbGV4aXR5IHJlZHVjZWQuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNvdXJjZSBvZiBwcm9ibGVtcy4gQnV0IGFmdGVyIGxvb2tpbmcgYXQgaXQgY2xvc2VseSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGFuIGlzc3VlIGhlcmUuIFRoZSBrZXlzIGFyZSBzdGF0aWNhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztgLCBtZWFuaW5nIHRoZXkgcmVzaWRlIGluIHRoZSBCU1Mgc2VjdGlvbiBhbmQgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBsb2FkZXIsIHNvIHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlIG9ubHkgZXZlciB1c2luZyB0aGUgKmFkZHJlc3MqIG9mIHRoZXNlIGtleXMgKGUuZy4sIGAmYW1wO2tleXMtJmd0O211dGV4X2tleWApIGZvciB0aGUgbG9ja2RlcCBtYWNoaW5lcnksIHNvIG5vIGFjdHVhbCBkYXRhIGlzIGV2ZXIgY29waWVkIG9yIHJlYWQgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBUaGVyZSYjMzk7cyBubyBtZW1vcnkgYWxsb2NhdGlvbiBpbnZvbHZlZCwgbm8gY2hhbmdlcyB0byBidWZmZXIgbG9naWMsIGFuZCBubyByZWFkcyBvciBicmFuY2hlcyBiYXNlZCBvbiBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBDcml0aWNhbGx5LCBhbnkgbG9ja2luZyBidWdzIG9yIGRlYWRsb2NrcyAqd291bGQqIGJlIGNhdWdodCBieSBMT0NLREVQLCB3aGljaCBpcyB1c3VhbGx5IHBhcnQgb2Ygc3RhbmRhcmQgS0FTQU4gY29uZmlndXJhdGlvbnMgYW55d2F5LgoKU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoaXMgcmV2aWV3LCB0aGlzIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgaWRlbnRpZnlpbmcgbWVtb3J5IGlzc3VlcywgYnV0IHRoZSBwcmltYXJ5IGNvbmNlcm4gd2l0aCB0aGVzZSBjaGFuZ2VzIGlzIGxvY2tkZXAgYW5ub3RhdGlvbnMuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoZXJlYXMgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcGVydGluZW50LiBTaW5jZSB0aGUgbG9ja2RlcCBjaGFuZ2UgaXMgdGhlIG1haW4gZHJpdmVyIGFuZCBLTVNBTiBpc24mIzM5O3QgZGVzaWduZWQgdG8gZmluZCBsb2NrZGVwIGlzc3VlcywgdGhpcyBpcyBhbGwgZ29vZC4gVGhpcyBwYXRjaCBpcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2RlcCBhbm5vdGF0aW9ucyB3aXRoaW4gcmhhc2h0YWJsZSBieSBpbnRyb2R1Y2luZyBgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCB0byBwcm92aWRlIGRpc3RpbmN0IGBsb2NrX2NsYXNzX2tleWAgc3RydWN0dXJlcyBmb3IgdGhlIHNwaW5sb2NrLCBtdXRleCwgYW5kIGJ1Y2tldCBiaXRsb2NrIChyZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHNoYXJpbmcgYSBzaW5nbGUgbG9ja2RlcCBrZXkgd2l0aCBtYW51YWwgc3ViY2xhc3Mgb2Zmc2V0cykuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gbG9ja2RlcCB0cmFja2luZyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgZXZhbHVhdGVkIGluIGJyYW5jaGluZyBsb2dpYy4gVGhlIGxvY2tkZXAga2V5cyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgdmFyaWFibGVzIGluc2lkZSBtYWNybyB3cmFwcGVycyAoYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgcmhsdGFibGVfaW5pdF9ub3Byb2ZgKSwgcmVzaWRpbmcgaW4gQlNTLlxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIGRhdGEgYnVmZmVycywgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgc2VyaWFsaXphdGlvbi5cbjMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBsb2NraW5nIGhpZXJhcmNoeSBhbmQgY2xhc3MgYXNzaWdubWVudHMgYXJlIHRyYWNrZWQgZGlyZWN0bHkgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgY29uZmlndXJhdGlvbnMuXG5cbkNvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBkYXRhIGJ1ZmZlcnMsIGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIHNlcmlhbGl6YXRpb24uXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Db25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjIwLjg3NTUwMTI3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTMyMjg0NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJMT0NLREVQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJfX3JobHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJyaHRfZGVmZXJyZWRfd29ya2VyXCIsXG4gICAgXCJyaGFzaHRhYmxlX2luc2VydF9zbG93XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwIGFubm90YXRpb25zIHdpdGhpbiByaGFzaHRhYmxlIGJ5IGludHJvZHVjaW5nIGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIHRvIHByb3ZpZGUgZGlzdGluY3QgYGxvY2tfY2xhc3Nfa2V5YCBzdHJ1Y3R1cmVzIGZvciB0aGUgc3BpbmxvY2ssIG11dGV4LCBhbmQgYnVja2V0IGJpdGxvY2sgKHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2Ygc2hhcmluZyBhIHNpbmdsZSBsb2NrZGVwIGtleSB3aXRoIG1hbnVhbCBzdWJjbGFzcyBvZmZzZXRzKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBldmFsdWF0ZWQgaW4gYnJhbmNoaW5nIGxvZ2ljLiBUaGUgbG9ja2RlcCBrZXlzIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCB2YXJpYWJsZXMgaW5zaWRlIG1hY3JvIHdyYXBwZXJzIChgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmApLCByZXNpZGluZyBpbiBCU1MuXFxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIGRhdGEgYnVmZmVycywgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgc2VyaWFsaXphdGlvbi5cXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxcblxcbkNvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgaW4gbGliL3JoYXNodGFibGUuYyBhbmQgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oLiBJdCBzZXBhcmF0ZXMgdGhlIHByZXZpb3VzbHkgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIG11dGV4LCBzcGlubG9jaywgYW5kIGJ1Y2tldCBiaXRsb2NrcyAoc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzKSwgYW5kIHVwZGF0ZXMgdGhlIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIHRoZSBidWNrZXQgYml0bG9jayBtYXAgYW5kIHRhYmxlIG11dGV4LiBTaW5jZSByaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIElQQywgYW5kIGZpbGVzeXN0ZW1zLCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlc2UgbG9ja2luZyBhbmQgYW5ub3RhdGlvbiBjaGFuZ2VzIGRvIG5vdCBjYXVzZSBsb2NrZGVwIHNwbGF0cyBvciB1bmNvdmVyIGxhdGVudCBsb2NrIG9yZGVyaW5nIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjIwLjg3NTUzNDE0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTUwODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ2ZDY0YzFlZTYzYTY0YjhkZDI0NGI3ZjkwYTkwZDFkYjAyMGQ5NWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxcbmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxcbkBAIC03MCw2ICs3MCwxNCBAQCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMge1xcbiBcXHRyaHRfb2JqX2NtcGZuX3RcXHRcXHRvYmpfY21wZm47XFxuIH07XFxuIFxcbitzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMge1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rXFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5O1xcbitcXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5O1xcbitcXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnVja2V0X2tleTtcXG4rI2VuZGlmXFxuK307XFxuK1xcbiAvKipcXG4gICogc3RydWN0IHJoYXNodGFibGUgLSBIYXNoIHRhYmxlIGhhbmRsZVxcbiAgKiBAdGJsOiBCdWNrZXQgdGFibGVcXG5AQCAtMTQxLDI0ICsxNDksNzcgQEAgc3RydWN0IHJoYXNodGFibGVfaXRlciB7XFxuIFxcbiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi1cXHRcXHQgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xcbitcXHRcXHQgICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTtcXG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMpXFx0XFx0XFx0XFx0XFxcXFxcbiAoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1xcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXFx1MDAyNl9fa2V5KTtcXHRcXHRcXHRcXFxcXFxuK1xcdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuIH0pXFxuK1xcbisvKipcXG4rICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlXFxuKyAqIEBodDpcXHRcXHRoYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXFxuKyAqIEBwYXJhbXM6XFx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cXG4rICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXFxuKyAqIGZpeGVkIGxlbmd0aCBrZXk6XFxuKyAqXFxuKyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xcbisgKiBzdHJ1Y3QgdGVzdF9vYmoge1xcbisgKlxcdGludFxcdFxcdFxcdGtleTtcXG4rICpcXHR2b2lkICpcXHRcXHRcXHRteV9tZW1iZXI7XFxuKyAqXFx0c3RydWN0IHJoYXNoX2hlYWRcXHRub2RlO1xcbisgKiB9O1xcbisgKlxcbisgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xcbisgKlxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXFxuKyAqXFx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXFxuKyAqXFx0LmtleV9sZW4gPSBzaXplb2YoaW50KSxcXG4rICpcXHQuaGFzaGZuID0gamhhc2gsXFxuKyAqIH07XFxuKyAqXFxuKyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5c1xcbisgKiBzdHJ1Y3QgdGVzdF9vYmoge1xcbisgKlxcdFsuLi5dXFxuKyAqXFx0c3RydWN0IHJoYXNoX2hlYWRcXHRub2RlO1xcbisgKiB9O1xcbisgKlxcbisgKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG4rICoge1xcbisgKlxcdHN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTtcXG4rICpcXG4rICpcXHRyZXR1cm4gWy4uLiBoYXNoIC4uLl07XFxuKyAqIH1cXG4rICpcXG4rICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcXG4rICpcXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxcbisgKlxcdC5oYXNoZm4gPSBqaGFzaCxcXG4rICpcXHQub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sXFxuKyAqIH07XFxuKyAqL1xcbiAjZGVmaW5lIHJoYXNodGFibGVfaW5pdCguLi4pXFx0YWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuIFxcbiBpbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcXG4gXFx0XFx0ICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tXFx0XFx0ICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XFxuK1xcdFxcdCAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTtcXG4gI2RlZmluZSByaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcylcXHRcXHRcXHRcXHRcXFxcXFxuICh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5O1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFxcdTAwMjZfX2tleSk7XFx0XFx0XFx0XFxcXFxcbitcXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuIH0pXFxuK1xcbisvKipcXG4rICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXFxuKyAqIEBobHQ6XFx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXFxuKyAqIEBwYXJhbXM6XFx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cXG4rICpcXG4rICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC5cXG4rICovXFxuICNkZWZpbmUgcmhsdGFibGVfaW5pdCguLi4pXFx0YWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9SSEFTSFRBQkxFX1RZUEVTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxcbmluZGV4IDZjNWU2ZDlhY2NiYTcuLmVjODUzYzFiOWFmM2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxcbkBAIC0zMjgsOCArMzI4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXFxuIFxcbiBcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIFxcdGJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilidWNrZXQpO1xcbi1cXHQvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC1cXHUwMDNlbG9jayBhbmQgMSBmb3IgLVxcdTAwM2VtdXRleC4gMisgZm9yIGJpdGxvY2tzICovXFxuLVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUoXFx1MDAyNnRibC1cXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MrMiwgMCwgTlVMTCwgX1RISVNfSVBfKTtcXG4rXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcXHUwMDI2dGJsLVxcdTAwM2VkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTtcXG4gXFx0cmV0dXJuIGZsYWdzO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9saWIvcmhhc2h0YWJsZS5jIGIvbGliL3JoYXNodGFibGUuY1xcbmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0XFxuLS0tIGEvbGliL3JoYXNodGFibGUuY1xcbisrKyBiL2xpYi9yaGFzaHRhYmxlLmNcXG5AQCAtNDMyLDcgKzQzMiw3IEBAIHN0YXRpYyB2b2lkIHJodF9kZWZlcnJlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7XFxuLVxcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZodC1cXHUwMDNlbXV0ZXgsIDEpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZodC1cXHUwMDNlbXV0ZXgpO1xcbiBcXG4gXFx0dGJsID0gcmh0X2RlcmVmZXJlbmNlKGh0LVxcdTAwM2V0YmwsIGh0KTtcXG4gXFx0dGJsID0gcmhhc2h0YWJsZV9sYXN0X3RhYmxlKGh0LCB0YmwpO1xcbkBAIC0xMTIyLDUxICsxMTIyLDkgQEAgc3RhdGljIHUzMiByaGFzaHRhYmxlX2poYXNoMihjb25zdCB2b2lkICprZXksIHUzMiBsZW5ndGgsIHUzMiBzZWVkKVxcbiBcXHRyZXR1cm4gamhhc2gyKGtleSwgbGVuZ3RoLCBzZWVkKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZVxcbi0gKiBAaHQ6XFx0XFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxcbi0gKiBAcGFyYW1zOlxcdGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xcbi0gKlxcbi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uXFxuLSAqIHBhcmFtZXRlcnMuIEEgdGFibGUgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIHdpdGggYSB2YXJpYWJsZSBvclxcbi0gKiBmaXhlZCBsZW5ndGgga2V5Olxcbi0gKlxcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMTogRml4ZWQgbGVuZ3RoIGtleXNcXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcXG4tICpcXHRpbnRcXHRcXHRcXHRrZXk7XFxuLSAqXFx0dm9pZCAqXFx0XFx0XFx0bXlfbWVtYmVyO1xcbi0gKlxcdHN0cnVjdCByaGFzaF9oZWFkXFx0bm9kZTtcXG4tICogfTtcXG4tICpcXG4tICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcXG4tICpcXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxcbi0gKlxcdC5rZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBrZXkpLFxcbi0gKlxcdC5rZXlfbGVuID0gc2l6ZW9mKGludCksXFxuLSAqXFx0Lmhhc2hmbiA9IGpoYXNoLFxcbi0gKiB9O1xcbi0gKlxcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcXG4tICpcXHRbLi4uXVxcbi0gKlxcdHN0cnVjdCByaGFzaF9oZWFkXFx0bm9kZTtcXG4tICogfTtcXG4tICpcXG4tICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXFxuLSAqIHtcXG4tICpcXHRzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7XFxuLSAqXFxuLSAqXFx0cmV0dXJuIFsuLi4gaGFzaCAuLi5dO1xcbi0gKiB9XFxuLSAqXFxuLSAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XFxuLSAqXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcXG4tICpcXHQuaGFzaGZuID0gamhhc2gsXFxuLSAqXFx0Lm9ial9oYXNoZm4gPSBteV9oYXNoX2ZuLFxcbi0gKiB9O1xcbi0gKi9cXG4gaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tXFx0XFx0ICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7XFxuIFxcdHNpemVfdCBzaXplO1xcbkBAIC0xMTc2LDEzICsxMTM0LDExIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdG1lbXNldChodCwgMCwgc2l6ZW9mKCpodCkpO1xcbi1cXHQvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqL1xcbi1cXHRtdXRleF9pbml0X3dpdGhfa2V5KFxcdTAwMjZodC1cXHUwMDNlbXV0ZXgsIGtleSk7XFxuK1xcdG11dGV4X2luaXRfd2l0aF9rZXkoXFx1MDAyNmh0LVxcdTAwM2VtdXRleCwgXFx1MDAyNmtleXMtXFx1MDAzZW11dGV4X2tleSk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZodC1cXHUwMDNlbG9jayk7XFxuLVxcdC8qIHNwaW5fbG9jayBjYW4gdXNlIG5lc3RpbmcgbGV2ZWwgMCAqL1xcbi1cXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2aHQtXFx1MDAzZWxvY2ssIGtleSk7XFxuK1xcdGxvY2tkZXBfc2V0X2NsYXNzKFxcdTAwMjZodC1cXHUwMDNlbG9jaywgXFx1MDAyNmtleXMtXFx1MDAzZWxvY2tfa2V5KTtcXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXFxuLVxcdGh0LVxcdTAwM2Vsb2NrZGVwX2tleSA9IGtleTtcXG4rXFx0aHQtXFx1MDAzZWxvY2tkZXBfa2V5ID0gXFx1MDAyNmtleXMtXFx1MDAzZWJ1Y2tldF9rZXk7XFxuICNlbmRpZlxcbiBcXHRtZW1jcHkoXFx1MDAyNmh0LVxcdTAwM2VwLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7XFxuIFxcbkBAIC0xMjM2LDIyICsxMTkyLDEzIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XFxuIFxcbi0vKipcXG4tICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXFxuLSAqIEBobHQ6XFx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXFxuLSAqIEBwYXJhbXM6XFx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXFxuLSAqXFxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cXG4tICpcXG4tICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC5cXG4tICovXFxuIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbiBcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tXFx0XFx0XFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFxcdTAwMjZobHQtXFx1MDAzZWh0LCBwYXJhbXMsIGtleSk7XFxuK1xcdGVyciA9IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihcXHUwMDI2aGx0LVxcdTAwM2VodCwgcGFyYW1zLCBrZXlzKTtcXG4gXFx0aGx0LVxcdTAwM2VodC5yaGxpc3QgPSB0cnVlO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3JoYXNodGFibGUuYyBiL2xpYi90ZXN0X3JoYXNodGFibGUuY1xcbmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXFxuKysrIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXFxuQEAgLTQ3Nyw3ICs0NzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwcmludF9odChzdHJ1Y3QgcmhsdGFibGUgKnJobHQpXFxuIFxcbiBcXHRodCA9IFxcdTAwMjZyaGx0LVxcdTAwM2VodDtcXG4gXFx0LyogVGFrZSB0aGUgbXV0ZXggdG8gYXZvaWQgUkNVIHdhcm5pbmcgKi9cXG4tXFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNmh0LVxcdTAwM2VtdXRleCwgMSk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmh0LVxcdTAwM2VtdXRleCk7XFxuIFxcdHRibCA9IHJodF9kZXJlZmVyZW5jZShodC1cXHUwMDNldGJsLCBodCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YmwtXFx1MDAzZXNpemU7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3Qgcmhhc2hfaGVhZCAqcG9zLCAqbmV4dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MjIuNTgyMDgxNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNDkyOTU5MTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJMT0NLREVQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJfX3JobHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJyaHRfZGVmZXJyZWRfd29ya2VyXCIsXG4gICAgXCJyaGFzaHRhYmxlX2luc2VydF9zbG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGxvY2tkZXAgY2xhc3NpZmljYXRpb24gZm9yIHJoYXNodGFibGVzIGluIGxpYi9yaGFzaHRhYmxlLmMgYW5kIGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZSouaC4gSXQgc2VwYXJhdGVzIHRoZSBwcmV2aW91c2x5IHNoYXJlZCBsb2NrZGVwIGtleSBpbnRvIGRpc3RpbmN0IGtleXMgZm9yIHRoZSBtdXRleCwgc3BpbmxvY2ssIGFuZCBidWNrZXQgYml0bG9ja3MgKHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyksIGFuZCB1cGRhdGVzIHRoZSBuZXN0aW5nIHN1YmNsYXNzZXMgdXNlZCB3aGVuIGFjcXVpcmluZyB0aGUgYnVja2V0IGJpdGxvY2sgbWFwIGFuZCB0YWJsZSBtdXRleC4gU2luY2Ugcmhhc2h0YWJsZXMgYXJlIGhlYXZpbHkgdXNlZCBhY3Jvc3MgY29yZSBuZXR3b3JraW5nLCBJUEMsIGFuZCBmaWxlc3lzdGVtcywgZnV6emluZyB3aXRoIGxvY2tkZXAgZW5hYmxlZCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZXNlIGxvY2tpbmcgYW5kIGFubm90YXRpb24gY2hhbmdlcyBkbyBub3QgY2F1c2UgbG9ja2RlcCBzcGxhdHMgb3IgdW5jb3ZlciBsYXRlbnQgbG9jayBvcmRlcmluZyB2aW9sYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2ZDY0YzFlZTYzYTY0YjhkZDI0NGI3ZjkwYTkwZDFkYjAyMGQ5NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMjoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbkBAIC03MCw2ICs3MCwxNCBAQCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMge1xuIFx0cmh0X29ial9jbXBmbl90XHRcdG9ial9jbXBmbjtcbiB9O1xuIFxuK3N0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyB7XG4rI2lmZGVmIENPTkZJR19MT0NLREVQXG4rXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7XG4rXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5O1xuK1x0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1Y2tldF9rZXk7XG4rI2VuZGlmXG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3Qgcmhhc2h0YWJsZSAtIEhhc2ggdGFibGUgaGFuZGxlXG4gICogQHRibDogQnVja2V0IHRhYmxlXG5AQCAtMTQxLDI0ICsxNDksNzcgQEAgc3RydWN0IHJoYXNodGFibGVfaXRlciB7XG4gXG4gaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi1cdFx0ICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTtcbitcdFx0ICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7XG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuK1x0c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFx1MDAyNl9fa2V5KTtcdFx0XHRcXFxuK1x0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbiB9KVxuK1xuKy8qKlxuKyAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZVxuKyAqIEBodDpcdFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuKyAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbisgKlxuKyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbisgKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3JcbisgKiBmaXhlZCBsZW5ndGgga2V5OlxuKyAqXG4rICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzXG4rICogc3RydWN0IHRlc3Rfb2JqIHtcbisgKlx0aW50XHRcdFx0a2V5O1xuKyAqXHR2b2lkICpcdFx0XHRteV9tZW1iZXI7XG4rICpcdHN0cnVjdCByaGFzaF9oZWFkXHRub2RlO1xuKyAqIH07XG4rICpcbisgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuKyAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuKyAqXHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSxcbisgKlx0LmtleV9sZW4gPSBzaXplb2YoaW50KSxcbisgKlx0Lmhhc2hmbiA9IGpoYXNoLFxuKyAqIH07XG4rICpcbisgKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcbisgKiBzdHJ1Y3QgdGVzdF9vYmoge1xuKyAqXHRbLi4uXVxuKyAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbisgKiB9O1xuKyAqXG4rICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXG4rICoge1xuKyAqXHRzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7XG4rICpcbisgKlx0cmV0dXJuIFsuLi4gaGFzaCAuLi5dO1xuKyAqIH1cbisgKlxuKyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4rICpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXG4rICpcdC5oYXNoZm4gPSBqaGFzaCxcbisgKlx0Lm9ial9oYXNoZm4gPSBteV9oYXNoX2ZuLFxuKyAqIH07XG4rICovXG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdCAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xuK1x0XHQgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7XG4gI2RlZmluZSByaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcylcdFx0XHRcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTtcdFx0XHRcdFxcXG4rXHRzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcdTAwMjZfX2tleSk7XHRcdFx0XFxcbitcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbiB9KVxuK1xuKy8qKlxuKyAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZVxuKyAqIEBobHQ6XHRoYXNoIGxpc3QgdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbisgKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4rICpcbisgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuXG4rICpcbisgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LlxuKyAqL1xuICNkZWZpbmUgcmhsdGFibGVfaW5pdCguLi4pXHRhbGxvY19ob29rcyhyaGx0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9SSEFTSFRBQkxFX1RZUEVTX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG5pbmRleCA2YzVlNmQ5YWNjYmE3Li5lYzg1M2MxYjlhZjNhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG5AQCAtMzI4LDggKzMyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByaHRfbG9ja19uZXN0ZWQoc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0Yml0X3NwaW5fbG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWJ1Y2tldCk7XG4tXHQvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC1cdTAwM2Vsb2NrIGFuZCAxIGZvciAtXHUwMDNlbXV0ZXguIDIrIGZvciBiaXRsb2NrcyAqL1xuLVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MrMiwgMCwgTlVMTCwgX1RISVNfSVBfKTtcbitcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUoXHUwMDI2dGJsLVx1MDAzZWRlcF9tYXAsIHN1YmNsYXNzLCAwLCBOVUxMLCBfVEhJU19JUF8pO1xuIFx0cmV0dXJuIGZsYWdzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9saWIvcmhhc2h0YWJsZS5jIGIvbGliL3JoYXNodGFibGUuY1xuaW5kZXggNWRhMGU1M2E4ZDQyMy4uOTE4ZjE1YTJhYzY5MSAxMDA2NDRcbi0tLSBhL2xpYi9yaGFzaHRhYmxlLmNcbisrKyBiL2xpYi9yaGFzaHRhYmxlLmNcbkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIHZvaWQgcmh0X2RlZmVycmVkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7XG4tXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZodC1cdTAwM2VtdXRleCwgMSk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmh0LVx1MDAzZW11dGV4KTtcbiBcbiBcdHRibCA9IHJodF9kZXJlZmVyZW5jZShodC1cdTAwM2V0YmwsIGh0KTtcbiBcdHRibCA9IHJoYXNodGFibGVfbGFzdF90YWJsZShodCwgdGJsKTtcbkBAIC0xMTIyLDUxICsxMTIyLDkgQEAgc3RhdGljIHUzMiByaGFzaHRhYmxlX2poYXNoMihjb25zdCB2b2lkICprZXksIHUzMiBsZW5ndGgsIHUzMiBzZWVkKVxuIFx0cmV0dXJuIGpoYXNoMihrZXksIGxlbmd0aCwgc2VlZCk7XG4gfVxuIFxuLS8qKlxuLSAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZVxuLSAqIEBodDpcdFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuLSAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0gKlxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbi0gKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3Jcbi0gKiBmaXhlZCBsZW5ndGgga2V5OlxuLSAqXG4tICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcbi0gKlx0aW50XHRcdFx0a2V5O1xuLSAqXHR2b2lkICpcdFx0XHRteV9tZW1iZXI7XG4tICpcdHN0cnVjdCByaGFzaF9oZWFkXHRub2RlO1xuLSAqIH07XG4tICpcbi0gKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuLSAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuLSAqXHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSxcbi0gKlx0LmtleV9sZW4gPSBzaXplb2YoaW50KSxcbi0gKlx0Lmhhc2hmbiA9IGpoYXNoLFxuLSAqIH07XG4tICpcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcbi0gKiBzdHJ1Y3QgdGVzdF9vYmoge1xuLSAqXHRbLi4uXVxuLSAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbi0gKiB9O1xuLSAqXG4tICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXG4tICoge1xuLSAqXHRzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7XG4tICpcbi0gKlx0cmV0dXJuIFsuLi4gaGFzaCAuLi5dO1xuLSAqIH1cbi0gKlxuLSAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4tICpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXG4tICpcdC5oYXNoZm4gPSBqaGFzaCxcbi0gKlx0Lm9ial9oYXNoZm4gPSBteV9oYXNoX2ZuLFxuLSAqIH07XG4tICovXG4gaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4tXHRcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi1cdFx0ICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxuK1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0ICAgICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpXG4ge1xuIFx0c3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsO1xuIFx0c2l6ZV90IHNpemU7XG5AQCAtMTE3NiwxMyArMTEzNCwxMSBAQCBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRtZW1zZXQoaHQsIDAsIHNpemVvZigqaHQpKTtcbi1cdC8qIG11dGV4X2xvY2sgbXVzdCB1c2UgbmVzdGluZyBsZXZlbCAxICovXG4tXHRtdXRleF9pbml0X3dpdGhfa2V5KFx1MDAyNmh0LVx1MDAzZW11dGV4LCBrZXkpO1xuK1x0bXV0ZXhfaW5pdF93aXRoX2tleShcdTAwMjZodC1cdTAwM2VtdXRleCwgXHUwMDI2a2V5cy1cdTAwM2VtdXRleF9rZXkpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aHQtXHUwMDNlbG9jayk7XG4tXHQvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi9cbi1cdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmh0LVx1MDAzZWxvY2ssIGtleSk7XG4rXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZodC1cdTAwM2Vsb2NrLCBcdTAwMjZrZXlzLVx1MDAzZWxvY2tfa2V5KTtcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbi1cdGh0LVx1MDAzZWxvY2tkZXBfa2V5ID0ga2V5O1xuK1x0aHQtXHUwMDNlbG9ja2RlcF9rZXkgPSBcdTAwMjZrZXlzLVx1MDAzZWJ1Y2tldF9rZXk7XG4gI2VuZGlmXG4gXHRtZW1jcHkoXHUwMDI2aHQtXHUwMDNlcCwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpO1xuIFxuQEAgLTEyMzYsMjIgKzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XG4gXG4tLyoqXG4tICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXG4tICogQGhsdDpcdGhhc2ggbGlzdCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuLSAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0gKlxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cbi0gKlxuLSAqIFNlZSBkb2N1bWVudGF0aW9uIGZvciByaGFzaHRhYmxlX2luaXQuXG4tICovXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4rXHRcdFx0ICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoXHUwMDI2aGx0LVx1MDAzZWh0LCBwYXJhbXMsIGtleSk7XG4rXHRlcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoXHUwMDI2aGx0LVx1MDAzZWh0LCBwYXJhbXMsIGtleXMpO1xuIFx0aGx0LVx1MDAzZWh0LnJobGlzdCA9IHRydWU7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9saWIvdGVzdF9yaGFzaHRhYmxlLmMgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmNcbmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9yaGFzaHRhYmxlLmNcbisrKyBiL2xpYi90ZXN0X3JoYXNodGFibGUuY1xuQEAgLTQ3Nyw3ICs0NzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwcmludF9odChzdHJ1Y3QgcmhsdGFibGUgKnJobHQpXG4gXG4gXHRodCA9IFx1MDAyNnJobHQtXHUwMDNlaHQ7XG4gXHQvKiBUYWtlIHRoZSBtdXRleCB0byBhdm9pZCBSQ1Ugd2FybmluZyAqL1xuLVx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIDEpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZodC1cdTAwM2VtdXRleCk7XG4gXHR0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtXHUwMDNldGJsLCBodCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YmwtXHUwMDNlc2l6ZTsgaSsrKSB7XG4gXHRcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MjIuNTgyMDgzNzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjUwNDUxMTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBmb3Igc3l6a2FsbGVyIGZ1enppbmcsIGFuZCBteSBmaXJzdCBzdGVwIGlzIHRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gVGhpcyBwYXRjaCB0b3VjaGVzIGByaGFzaHRhYmxlLXR5cGVzLmhgLCBgcmhhc2h0YWJsZS5oYCwgYHJoYXNodGFibGUuY2AsIGFuZCBgdGVzdF9yaGFzaHRhYmxlLmNgLCBzbyBjbGVhcmx5IHRoaXMgaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIGNoYW5nZS5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCBmb3IgbXVsdGlwbGUgbG9ja3Mgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgc3RydWN0dXJlOiB0aGUgYG11dGV4YCwgdGhlIGdlbmVyaWMgYGxvY2tgLCBhbmQgYSBgbG9ja2RlcF9rZXlgIHVzZWQgYnkgYGRlcF9tYXBgLiBUaGlzIGNyZWF0ZXMgc29tZSBpbnRlcmVzdGluZyBsb2NrZGVwIGJlaGF2aW9yOiB0aGUgbXV0ZXggd2FzIGluaXRpYWxpemVkIHdpdGggc3ViY2xhc3MgMSwgdGhlIHNwaW5sb2NrIHdpdGggc3ViY2xhc3MgMCwgYW5kIGJpdGxvY2tzIHdpdGggc3ViY2xhc3NlcyAyKy4gVGhlcmUgYXJlIGFsc28gY2FsbHMgbGlrZSBgbXV0ZXhfbG9ja19uZXN0ZWRgIGluIGByaHRfZGVmZXJyZWRfd29ya2VyYCBhbmQgYHByaW50X2h0YC5cblxuVGhlIHByb3Bvc2VkIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCBzdHJ1Y3QgY29udGFpbmluZyBzZXBhcmF0ZSBgbG9ja19rZXlgLCBgbXV0ZXhfa2V5YCwgYW5kIGBidWNrZXRfa2V5YCBtZW1iZXJzLiBDcml0aWNhbGx5LCB0aGVzZSBrZXlzIGFyZSBub3cgc3RhdGljYWxseSBhbGxvY2F0ZWQgcGVyIGNhbGxlciBvZiBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmAuIFRoZSBjb2RlIHRoZW4gaW5pdGlhbGl6ZXMgdGhlIHJlc3BlY3RpdmUgbG9ja3M6IGBtdXRleF9pbml0X3dpdGhfa2V5YCwgYGxvY2tkZXBfc2V0X2NsYXNzYCwgYW5kIGFzc2lnbnMgdGhlIGBidWNrZXRfa2V5YC4gVGhpcyBhdm9pZHMgdGhlIHByZXZpb3VzIHNoYXJlZCBsb2NrIGNsYXNzIGtleSwgd2hpY2ggY3JlYXRlcyBtb3JlIHByZWNpc2UgbG9ja2RlcCB0cmFja2luZy5cblxuSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGRlY291cGxpbmcgdGhlIGxvY2sgY2xhc3Mga2V5cywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBsb2NrZGVwIGFuYWx5c2lzLiBJdCdzIGFsc28gbW9kaWZ5aW5nIGhvdyB0aGUgYml0bG9ja3MgYXJlIGFjcXVpcmVkLCB1c2luZyB0aGUgYHN1YmNsYXNzYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdWJjbGFzcyArIDJgLiBGdXJ0aGVybW9yZSwgaXQncyBzaW1wbGlmeWluZyB0aGUgbG9jayBjYWxscyBpbiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgYW5kIGBwcmludF9odGAgdG8gYG11dGV4X2xvY2tgIGZyb20gYG11dGV4X2xvY2tfbmVzdGVkYC5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBvciBzaW1pbGFyIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCdzIGNydWNpYWwgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdC4gU2luY2UgSSBkb24ndCBoYXZlIGdpdCBvciBiYXNoLCBJIGNhbid0IHVzZSBgZ2l0IGxvZ2Agb3Igc2hlbGwgY29tbWFuZHMgZGlyZWN0bHkuIFRpbWUgdG8gdXNlIGdyZXBwZXIgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgZm9yIHRoZXNlIGNhbGxlcnMuIEkgY2FuIHVzZSB0aGlzIHRvb2wgdG8gZmluZCBhbGwgZGlyZWN0IHVzYWdlcyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHksIEknbGwgc2VlIHNvbWUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhpcyBsb2NrZGVwIHJlZmFjdG9yaW5nIGhhcyBhbnkgZG9jdW1lbnRlZCBiZW5lZml0cywgb3Igd2hldGhlciBpdCBzaW1wbHkgY29ycmVjdHMgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MzUuMDg2NTk4MTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzYyMjUyNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yaGFzaHRhYmxlX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTQwPXN0cnVjdCByaGFzaHRhYmxlX2l0ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTQ5LVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjE1MDppbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0xNTEtXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoxNTc6XFx0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFxcdTAwMjZfX2tleXMpO1xcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0xNTgtfSlcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTEyMD1zdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTExMjQtXFxubGliL3JoYXNodGFibGUuYzoxMTI1OmludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbmxpYi9yaGFzaHRhYmxlLmMtMTEyNi1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMTkyLX1cXG5saWIvcmhhc2h0YWJsZS5jOjExOTM6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXFxubGliL3JoYXNodGFibGUuYz0xMTk1PWludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMjAwLVxcbmxpYi9yaGFzaHRhYmxlLmM6MTIwMTpcXHRlcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoXFx1MDAyNmhsdC1cXHUwMDNlaHQsIHBhcmFtcywga2V5cyk7XFxubGliL3JoYXNodGFibGUuYy0xMjAyLVxcdGhsdC1cXHUwMDNlaHQucmhsaXN0ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MzcuNzIyODI3ODI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTM5OTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQncyBnb2luZyBvbjpcblxuKipEaXNzZWN0aW5nIHRoZSBgcmhhc2h0YWJsZV9pbml0YCBNYWNybyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByaGFzaHRhYmxlX2luaXRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQncyBhIG1hY3JvIOKAkyBjbGFzc2ljLiBJdCBleHBhbmRzIGludG8gYSBjYWxsIHRvIGBhbGxvY19ob29rcyhyaGFzaHRhYmxlX2luaXRfbm9wcm9mKF9fVkFfQVJHU19fKSlgLiBJJ20gYWxyZWFkeSBnZXR0aW5nIGEgZmVlbCBmb3IgdGhlIHNldHVwLiBgYWxsb2NfaG9va3NgIHVzdWFsbHkgaW5kaWNhdGVzIHNvbWUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBob29rIHJlZ2lzdHJhdGlvbiwgd2hpY2ggbGlrZWx5IHRpZXMgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBoYXNoIHRhYmxlLiBEaWdnaW5nIGRlZXBlciwgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGl0c2VsZiBsb29rcyBpbnRlcmVzdGluZy4gVGhlIGBfbm9wcm9mYCBzdWZmaXggc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBhIHZlcnNpb24gdGhhdCBza2lwcyBwZXJmb3JtYW5jZSBwcm9maWxpbmcsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ2Qgd2FudCB0byBrZWVwIGluIG1pbmQsIGVzcGVjaWFsbHkgaW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgY29kZS5cblxuTm93IHRoZSBjcnVjaWFsIHBhcnQ6IGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBleHBhbmRzIHRvIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXHUwMDI2X19rZXlzKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVhbCBpbml0aWFsaXphdGlvbi4gYGh0YCBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSBoYW5kbGUgdG8gdGhlIHJoYXNodGFibGUgaXRzZWxmLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBwYXJhbXNgIGxpa2VseSBjb250cm9scyB0aGUgY29yZSBzZXR0aW5ncywgbGlrZSB0aGUgc2l6ZSBvciBvdGhlciBwYXJhbWV0ZXJzLCBhbmQgYFx1MDAyNl9fa2V5c2Agc3VnZ2VzdHMgYSBrZXkgc3RydWN0dXJlIGlzIGF0IHBsYXkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rZXlzYCBhbmQgdGhlIGZ1bGwgYXJndW1lbnQgbGlzdC4gSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gY2hlY2sgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYXMgd2VsbCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgaW5pdGlhbGl6YXRpb24gd29yayBtdXN0IGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjo0MC40OTIyMzEwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM0NzIxMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmhsdGFibGVfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaD0xNTA9aW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMDMtXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MjA0OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwNS1cXHRcXHQgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMjEwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoyMTE6XFx0X19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgXFx1MDAyNl9fa2V5cyk7XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIxMi19KVxcbi0tXFxubGliL3JoYXNodGFibGUuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XFxubGliL3JoYXNodGFibGUuYy0xMTk0LVxcbmxpYi9yaGFzaHRhYmxlLmM6MTE5NTppbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcXG5saWIvcmhhc2h0YWJsZS5jLTExOTYtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEyMDQtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTIwNTpFWFBPUlRfU1lNQk9MX0dQTChfX3JobHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTEyMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjQyLjkyNjk1NzUzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDIwNTI0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgcmhhc2h0YWJsZSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgaG93IHRoaXMgYHRibC1cdTAwM2VkZXBfbWFwYCBpcyBiZWluZyBzZXQgdXAgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgbGlicmFyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi9yaGFzaHRhYmxlLmNgLiBMZXQncyB1c2UgdGhlIHNvdXJjZSwgSSBtZWFuLCBsZXQncyBzZWFyY2ggaXQuIE15IGZpcnN0IHNlYXJjaCBrZXl3b3JkcyBhcmUgZWl0aGVyIGBkZXBfbWFwYCBvciBgbG9ja2RlcF9rZXlgIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIHdoZXJlIHRoaW5ncyBraWNrIG9mZi4gSSdtIGFmdGVyIHRoZSBpbml0aWFsIHNldHVwLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjQ1LjcyOTAxMTczMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQxMTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3JoYXNodGFibGUuYz0xODc9c3RhdGljIHN0cnVjdCBidWNrZXRfdGFibGUgKmJ1Y2tldF90YWJsZV9hbGxvYyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTIxMC1cXHQvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1xcbmxpYi9yaGFzaHRhYmxlLmM6MjExOlxcdGxvY2tkZXBfaW5pdF9tYXAoXFx1MDAyNnRibC1cXHUwMDNlZGVwX21hcCwgXFxcInJoYXNodGFibGVfYnVja2V0XFxcIiwgaHQtXFx1MDAzZWxvY2tkZXBfa2V5LCAwKTtcXG5saWIvcmhhc2h0YWJsZS5jLTIxMi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDUuODEwNDI4MDY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxNDM2NTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIHJoYXNodGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUuLi4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGJpdGxvY2sgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSByaGFzaHRhYmxlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbmVzdGluZyBsZXZlbC4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgdGhhdC4gUmlnaHQsIGxpbmUgMjEwIG9mIGBsaWIvcmhhc2h0YWJsZS5jYDogXCIvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1wiIOKAkyB0aGF0J3MgdGhlIGtleS4gVG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NyBhbmQgZ28gdG8gbGluZSAyMjAgaW4gYGxpYi9yaGFzaHRhYmxlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBmZWVsIGZvciBob3cgdGhleSdyZSBoYW5kbGluZyB0aGVzZSBsb2NrcyBhbmQgd2h5IHRoZSBuZXN0aW5nIGxldmVsIGlzIGNyaXRpY2FsLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGRlc2lnbiBjaG9pY2U7IGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBlbnN1cmluZyBkZWFkbG9jayBhdm9pZGFuY2Ugb3IgcGVyaGFwcyBlZmZpY2llbnQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgdGFibGUncyBpbnRlcm5hbHMuIEknbGwgZm9jdXMgb24gd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzIHRvIHdvcmsgb3V0IHRoZSByb2xlIG9mIHRoZSBiaXRsb2NrcyBhdCB0aGF0IG5lc3RpbmcgZGVwdGguIFRoaXMgbG9va3MgbGlrZSBpdCdsbCBiZSBhIHF1aWNrIGJ1dCB2aXRhbCBjaGVjayB0byBlbnN1cmUgdGhlIGRlc2lnbiBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjQ4LjYyNDc5NTU3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvcmhhc2h0YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NzpcXHRzdGF0aWMgc3RydWN0IGJ1Y2tldF90YWJsZSAqYnVja2V0X3RhYmxlX2FsbG9jKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4gMTg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ1Y2tldHMsXFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwKVxcbiAxOTA6XFx0e1xcbiAxOTE6XFx0XFx0c3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsID0gTlVMTDtcXG4gMTkyOlxcdFxcdHNpemVfdCBzaXplO1xcbiAxOTM6XFx0XFx0aW50IGk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdHRibCA9IGFsbG9jX2hvb2tzX3RhZyhodC1cXHUwMDNlYWxsb2NfdGFnLFxcbiAxOTY6XFx0XFx0XFx0XFx0a3ZtYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2Yoc3RydWN0X3NpemUodGJsLCBidWNrZXRzLCBuYnVja2V0cyksXFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIDEsIGdmcHxfX0dGUF9aRVJPLCBOVU1BX05PX05PREUpKTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0c2l6ZSA9IG5idWNrZXRzO1xcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHRpZiAodGJsID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpIHtcXG4gMjAyOlxcdFxcdFxcdHRibCA9IG5lc3RlZF9idWNrZXRfdGFibGVfYWxsb2MoaHQsIG5idWNrZXRzLCBnZnApO1xcbiAyMDM6XFx0XFx0XFx0bmJ1Y2tldHMgPSAwO1xcbiAyMDQ6XFx0XFx0fVxcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAodGJsID09IE5VTEwpXFxuIDIwNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0I2lmZGVmIENPTkZJR19MT0NLREVQXFxuIDIxMDpcXHRcXHQvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1xcbiAyMTE6XFx0XFx0bG9ja2RlcF9pbml0X21hcChcXHUwMDI2dGJsLVxcdTAwM2VkZXBfbWFwLCBcXFwicmhhc2h0YWJsZV9idWNrZXRcXFwiLCBodC1cXHUwMDNlbG9ja2RlcF9rZXksIDApO1xcbiAyMTI6XFx0I2VuZGlmXFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdHRibC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdHJjdV9oZWFkX2luaXQoXFx1MDAyNnRibC1cXHUwMDNlcmN1KTtcXG4gMjE3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ0YmwtXFx1MDAzZXdhbGtlcnMpO1xcbiAyMTg6XFx0XFxuIDIxOTpcXHRcXHR0YmwtXFx1MDAzZWhhc2hfcm5kID0gZ2V0X3JhbmRvbV91MzIoKTtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5idWNrZXRzOyBpKyspXFxuIDIyMjpcXHRcXHRcXHRJTklUX1JIVF9OVUxMU19IRUFEKHRibC1cXHUwMDNlYnVja2V0c1tpXSk7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdHJldHVybiB0Ymw7XFxuIDIyNTpcXHR9XFxuIDIyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDguNjI0ODg0MDczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2ODEyMTIyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHJoYXNodGFibGUgTG9ja2RlcCBDaGFuZ2U6IFdvcnRoeSBvZiBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIGxvY2tkZXAga2V5IGhhbmRsaW5nIHdpdGhpbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgbXVsdGlwbGUgbG9ja2luZyBtZWNoYW5pc21zIChiaXRsb2Nrcywgc3BpbmxvY2tzLCBhbmQgbXV0ZXhlcykgd2VyZSBwcmV2aW91c2x5IHNoYXJpbmcgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCwgd2hpY2ggaXMgYSBsb2NrZGVwIG5vLW5vLiBOb3csIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRpc3RpbmN0IGtleXMgZm9yIGVhY2ggbG9jayB0eXBlLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb2RlJ3MgY2hhbmdpbmc6IGBtdXRleF9sb2NrX25lc3RlZGAgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIHdpdGggc3RhbmRhcmQgYG11dGV4X2xvY2tgLCBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAgY2FsbHMgYXJlIHVwZGF0ZWQsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgbm93IHRha2VzIGEgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5c2AgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleWAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygc2VwYXJhdGUgbG9jayBjbGFzc2VzIHRvIHByZXZlbnQgbG9ja2RlcCBjb25mdXNpb24gYW5kIHBvdGVudGlhbCB3YXJuaW5ncyBvciBzcGxhdHMuXG5cbk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBgcmhhc2h0YWJsZWAgaXMgdXNlZCBldmVyeXdoZXJlIGluIHRoZSBrZXJuZWwhIFRoZSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gYSBjb3JlIGxpYnJhcnksIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgZGlyZWN0bHksIGFuZCBtb2RpZnlpbmcgbG9ja2RlcCBrZXlzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGtlcm5lbCdzIGxvY2tkZXAgaW5zdHJ1bWVudGF0aW9uIGFuZCBjb3VsZCBleHBvc2Ugc3VidGxlIGxvY2tpbmcgYnVncyBvciwgd29yc2UsIGludHJvZHVjZSBkZWFkbG9ja3MuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCB0aGUgZnV6emluZyBjcml0ZXJpYSBmbGFnIGFzIGhpZ2gtcHJpb3JpdHkuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNyaXRlcmlhOlxuKiAgICoqUmVhY2hhYmlsaXR5Kio6IGByaGFzaHRhYmxlYCBpcyB3aWRlbHkgdXNlZCwgc28gaXQncyBlYXNpbHkgcmVhY2hhYmxlLlxuKiAgICoqUmVmYWN0b3JpbmcqKjogSXQncyBhIHJlZmFjdG9yaW5nLCBidXQgaXQncyBhIHJlZmFjdG9yaW5nIG9mICpsb2NraW5nKiwgd2hpY2ggaXMgY29yZSBhbmQgY2FuIGludHJvZHVjZSBzZW1hbnRpYyBzaGlmdHMuXG4qICAgKipBc3NlcnRpb25zL0NoZWNrcyoqOiBUaGUgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgbG9ja2RlcCwgd2hpY2ggaXMgYSBmb3JtIG9mIHJ1bnRpbWUgY2hlY2ssIGFuZCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGxvY2tkZXAgYXNzZXJ0aW9ucyBvciBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGV4aXN0aW5nIG9uZXMuXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzICptdXN0KiBiZSBmdXp6ZWQuXG5cbk5vdywgZm9yIEZvY3VzU3ltYm9scywgd2UgbmVlZCB0byBiZSBwcmVjaXNlLiBUaGUgcGF0Y2ggaGFzIG1vZGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuKiAgIGBsaWIvcmhhc2h0YWJsZS5jYCBjb250YWlucyBgcmh0X2RlZmVycmVkX3dvcmtlcmAsIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLlxuXG5XZSBuZWVkIHRvIGF2b2lkIHRoZSBcInViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1wiIC0gYWxsb2NhdGluZy9mcmVlaW5nIG1lbW9yeSBvciBnZW5lcmljIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFyZSBvdXQuIEhvd2V2ZXIsIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgYXJlIHNwZWNpZmljIGVudHJ5cG9pbnRzLiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gc3BlY2lmaWMgdG8gdGhlIHJoYXNodGFibGUgZnVuY3Rpb25hbGl0eS4gVGhlc2UgYXJlIHRoZSBzeW1ib2xzIHdlIG5lZWQgdG8gdGFyZ2V0IHRvIHJlZHVjZSBmb2N1cyBkaWx1dGlvbi4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGV4ZXJjaXNlIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgdG8gdGVzdCBpZiB3ZSBjYW4gY2F1c2UgYW55IGxvY2tkZXAgaXNzdWVzIG9yIG1pc2JlaGF2aW9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzowNS40MzcwMTc3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NzUyOTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRfbG9ja19uZXN0ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKnJodF9idWNrZXRfaW5zZXJ0KFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzIxLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMyMjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0zMjMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oPTMzNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2soc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzM4LXtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDozMzk6XFx0cmV0dXJuIHJodF9sb2NrX25lc3RlZCh0YmwsIGJrdCwgMCk7XFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzQwLX1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MjQwPXN0YXRpYyBpbnQgcmhhc2h0YWJsZV9yZWhhc2hfb25lKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMjcyLVxcbmxpYi9yaGFzaHRhYmxlLmM6MjczOlxcdGZsYWdzID0gcmh0X2xvY2tfbmVzdGVkKG5ld190YmwsIFxcdTAwMjZuZXdfdGJsLVxcdTAwM2VidWNrZXRzW25ld19oYXNoXSxcXG5saWIvcmhhc2h0YWJsZS5jLTI3NC1cXHRcXHRcXHRcXHRTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjA3LjcxNDU1Mjk3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MTI3NzEzNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHJodF9sb2NrYCBhbmQgYHJodF9sb2NrX25lc3RlZGAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzLCBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYC4gVGhlIGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgYSBnbG9iYWwgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgKmV2ZXJ5KiBjYWxsc2l0ZSBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UuIEknbSBnb2luZyB0byB3YW50IGEgY29tcHJlaGVuc2l2ZSBsaXN0OyBubyBzdG9uZSBsZWZ0IHVudHVybmVkLlxuXG5Gcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBob3cgd2lkZXNwcmVhZCB0aGVpciB1c2UgaXMuIEEgYmFzaWMgY291bnQgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUsIGJ1dCB0aGUgY29udGV4dCBvZiBlYWNoIGNhbGxzaXRlIGlzIGdvaW5nIHRvIGJlIGZhciBtb3JlIGluZm9ybWF0aXZlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zOiBhcmUgdGhleSBwcmltYXJpbHkgdXNlZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSBvciBkcml2ZXI/IElzIGl0IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgb3IgaXMgdGhpcyByZWxhdGVkIHRvIHNvbWUgZXNvdGVyaWMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25hbGl0eT8gV2hlcmUgYXJlIHRoZXNlIG5lc3RlZCBsb2NrIGNhbGxzIGxvY2F0ZWQsIHRoYXQgd291bGQgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2Ygd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgZGVhZGxvY2sgb3IgZm9yIHNvbWUgb3RoZXIgcHVycG9zZT9cbkknbGwgYWxzbyBrZWVwIGluIG1pbmQgdGhhdCBJJ20gZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmNoaXRlY3R1cmUsIHNvIHNpbXBseSBsb29raW5nIGF0IHRoZSBjb3VudCBvZiBjYWxscyBpcyBvbmx5IGdvaW5nIHRvIGdldCBtZSBzbyBmYXIuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIGVhY2ggZnVuY3Rpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHJlbGF0ZWQgbG9ja2luZyBoaWVyYXJjaGllcyBvciBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMuIEkgY2FuJ3QgYWZmb3JkIHRvIG1pc3MgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnM7IHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGxvY2tzIGludGVycmVsYXRlIHdpdGggb3RoZXJzIHdpbGwgYmUgY3JpdGljYWwuIFVsdGltYXRlbHkgSSBhbSBhZnRlciBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgcHVycG9zZSwgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlbmVmaXQgZnJvbSByZWZpbmVtZW50IG9yIGZ1cnRoZXIgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjQ0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTYuODQyMjcwMTUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczNDgwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodF9sb2NrXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MzIyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByaHRfbG9ja19uZXN0ZWQoc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzM0LVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMzNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2soc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMzNi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKipia3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD03NTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX3JoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03NzctXFx0cHByZXYgPSBOVUxMO1xcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjc3ODpcXHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03NzktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0xMDQyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmhhc2h0YWJsZV9yZW1vdmVfZmFzdF9vbmUoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0xMDU4LVxcdHBwcmV2ID0gTlVMTDtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoxMDU5OlxcdGZsYWdzID0gcmh0X2xvY2sodGJsLCBia3QpO1xcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEwNjAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0xMTk1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmhhc2h0YWJsZV9yZXBsYWNlX2Zhc3QoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0xMjE4LVxcdHBwcmV2ID0gTlVMTDtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoxMjE5OlxcdGZsYWdzID0gcmh0X2xvY2sodGJsLCBia3QpO1xcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEyMjAtXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTI5Mj1zdGF0aWMgaW50IHJoYXNodGFibGVfcmVoYXNoX2NoYWluKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMzAxLVxcdFxcdHJldHVybiAwO1xcbmxpYi9yaGFzaHRhYmxlLmM6MzAyOlxcdGZsYWdzID0gcmh0X2xvY2sob2xkX3RibCwgYmt0KTtcXG5saWIvcmhhc2h0YWJsZS5jLTMwMy1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9NjI4PXN0YXRpYyB2b2lkICpyaGFzaHRhYmxlX3RyeV9pbnNlcnQoc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTY1My1cXG5saWIvcmhhc2h0YWJsZS5jOjY1NDpcXHRcXHRcXHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcXG5saWIvcmhhc2h0YWJsZS5jLTY1NS1cXHRcXHRcXHRkYXRhID0gcmhhc2h0YWJsZV9sb29rdXBfb25lKGh0LCBia3QsIHRibCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTkuMzE1NzU1NzIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3NjAzMjc3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJoYXNodGFibGUgTG9jayBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSB1c2FnZSBvZiBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYCB3aXRoaW4gdGhlIHJoYXNodGFibGUgaW1wbGVtZW50YXRpb24uIEkndmUgcGlucG9pbnRlZCB0aGVpciBjYWxsc2l0ZXMgYXM6IGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgYHJodF9kZWZlcnJlZF93b3JrZXJgLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRob3V0IHRoZSBwcmVmaXguIENsZWFybHksIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgcmVoYXNoIGFuZCBkZWZlcnJlZCB3b3JrZXIgcGF0aHMgYXJlIGxvY2tpbmcgdXAsIGFzIG9uZSBtaWdodCBleHBlY3QuIEknbSBhbHNvIHNlZWluZyBsb2NrIGFjcXVpc2l0aW9uIHdpdGhpbiB0aGUgbWFpbiBpbnNlcnRpb24gcGF0aCBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIGltbWVkaWF0ZWx5IHNlZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuIE15IHRob3VnaHRzIGltbWVkaWF0ZWx5IHR1cm4gdG8gdGhlIGBsaWIvcmhhc2h0YWJsZS5jYCBzb3VyY2UgY29kZSB0byBmdWxseSBhcHByZWNpYXRlIHRoZSBwb3NzaWJsZSBsb2NrIGNvbnRlbnRpb24gaW4gdGhvc2UgY2FsbGluZyBwYXRocy4gTGV0IG1lIGNoZWNrIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGZyb20gdGhlIGxpYnJhcnkgYXJlIGNhbGxpbmcgYHJoYXNodGFibGVfdHJ5X2luc2VydGAgb3IgYXJlIG5vbi1zdGF0aWMuIFRoaXMgY291bGQgaWxsdW1pbmF0ZSB3aGVyZSBjb250ZW50aW9uIGlzIG1vc3QgbGlrZWx5IHRvIGFyaXNlLiBUaGlzIGdpdmVzIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MzYuOTE5MDM1MjEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU4NTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaGFzaHRhYmxlX3RyeV9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3JoYXNodGFibGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvcmhhc2h0YWJsZS5jPTU4Mj1zdGF0aWMgc3RydWN0IGJ1Y2tldF90YWJsZSAqcmhhc2h0YWJsZV9pbnNlcnRfb25lKFxcbi0tXFxubGliL3JoYXNodGFibGUuYy02MjctXFxubGliL3JoYXNodGFibGUuYzo2Mjg6c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG5saWIvcmhhc2h0YWJsZS5jLTYyOS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKVxcbi0tXFxubGliL3JoYXNodGFibGUuYz02Nzk9dm9pZCAqcmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtNjg1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvcmhhc2h0YWJsZS5jOjY4NjpcXHRcXHRkYXRhID0gcmhhc2h0YWJsZV90cnlfaW5zZXJ0KGh0LCBrZXksIG9iaik7XFxubGliL3JoYXNodGFibGUuYy02ODctXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjM3LjAwMjYyNzI3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDMxNTc5ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgYHJoYXNodGFibGVgIExpYnJhcnkqKlxuXG5Pa2F5LCBzbyBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgdGhhdCBsaXZlcyByaWdodCB0aGVyZSBpbiBgbGliL3JoYXNodGFibGUuY2AuIE5vdywgbGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUuIEkgbmVlZCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZnJvbSB0aGF0IGZpbGU/IEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBgcmhhc2h0YWJsZV93YWxrX2luaXRfbm9wcm9mYCwgYHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveWAsIGByaGx0YWJsZV9pbnNlcnRfa2V5YC4uLiBJIG5lZWQgdG8gc2VlIHRoZSAqZW50aXJlKiBpbnRlcmZhY2Ugb2ZmZXJlZCBieSB0aGlzIHBhcnQgb2YgdGhlIGxpYnJhcnkuIEl0J3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYWxsIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBsaWIvcmhhc2h0YWJsZS5jYC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIGFuZCBjYXBhYmlsaXRpZXMgY29tcHJlaGVuc2l2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjM5LjAzNDIxMTQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE2ODUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3JoYXNodGFibGUuYz00OT1pbnQgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTUyLX1cXG5saWIvcmhhc2h0YWJsZS5jOjUzOkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tkZXBfcmh0X211dGV4X2lzX2hlbGQpO1xcbmxpYi9yaGFzaHRhYmxlLmMtNTQtXFxubGliL3JoYXNodGFibGUuYz01NT1pbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCB1MzIgaGFzaClcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtNjItfVxcbmxpYi9yaGFzaHRhYmxlLmM6NjM6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQpO1xcbmxpYi9yaGFzaHRhYmxlLmMtNjQtI2Vsc2VcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9Njc5PXZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTY5MS19XFxubGliL3JoYXNodGFibGUuYzo2OTI6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyk7XFxubGliL3JoYXNodGFibGUuYy02OTMtXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTc3Mz12b2lkICpyaGFzaHRhYmxlX25leHRfa2V5KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqcHJldl9rZXkpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTc5My19XFxubGliL3JoYXNodGFibGUuYzo3OTQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9uZXh0X2tleSk7XFxubGliL3JoYXNodGFibGUuYy03OTUtXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTgxNz12b2lkIHJoYXNodGFibGVfd2Fsa19lbnRlcihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTgzMC19XFxubGliL3JoYXNodGFibGUuYzo4MzE6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX2VudGVyKTtcXG5saWIvcmhhc2h0YWJsZS5jLTgzMi1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9ODM5PXZvaWQgcmhhc2h0YWJsZV93YWxrX2V4aXQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcilcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtODQ1LX1cXG5saWIvcmhhc2h0YWJsZS5jOjg0NjpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfZXhpdCk7XFxubGliL3JoYXNodGFibGUuYy04NDctXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTg2Nj1pbnQgcmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTkyNy19XFxubGliL3JoYXNodGFibGUuYzo5Mjg6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKTtcXG5saWIvcmhhc2h0YWJsZS5jLTkyOS1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTAxMj12b2lkICpyaGFzaHRhYmxlX3dhbGtfbmV4dChzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMDM5LX1cXG5saWIvcmhhc2h0YWJsZS5jOjEwNDA6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX25leHQpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTA0MS1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTA1MT12b2lkICpyaGFzaHRhYmxlX3dhbGtfcGVlayhzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMDczLX1cXG5saWIvcmhhc2h0YWJsZS5jOjEwNzQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3BlZWspO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTA3NS1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTA4Mz12b2lkIHJoYXNodGFibGVfd2Fsa19zdG9wKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTExMDMtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTEwNDpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfc3RvcCk7XFxubGliL3JoYXNodGFibGUuYy0xMTA1LVxcbi0tXFxubGliL3JoYXNodGFibGUuYz0xMTI1PWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMTkyLX1cXG5saWIvcmhhc2h0YWJsZS5jOjExOTM6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXFxubGliL3JoYXNodGFibGUuYz0xMTk1PWludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMjA0LX1cXG5saWIvcmhhc2h0YWJsZS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGx0YWJsZV9pbml0X25vcHJvZik7XFxubGliL3JoYXNodGFibGUuYy0xMjA2LVxcbi0tXFxubGliL3JoYXNodGFibGUuYz0xMjQ2PXZvaWQgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTI4OC19XFxubGliL3JoYXNodGFibGUuYzoxMjg5OkVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveSk7XFxubGliL3JoYXNodGFibGUuYy0xMjkwLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTI5MT12b2lkIHJoYXNodGFibGVfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEyOTQtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTI5NTpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX2Rlc3Ryb3kpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTI5Ni1cXG5saWIvcmhhc2h0YWJsZS5jPTEyOTc9c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKl9fcmh0X2J1Y2tldF9uZXN0ZWQoXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEzMjMtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChfX3JodF9idWNrZXRfbmVzdGVkKTtcXG5saWIvcmhhc2h0YWJsZS5jLTEzMjUtXFxubGliL3JoYXNodGFibGUuYz0xMzI2PXN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKipyaHRfYnVja2V0X25lc3RlZChcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTMzNC19XFxubGliL3JoYXNodGFibGUuYzoxMzM1OkVYUE9SVF9TWU1CT0xfR1BMKHJodF9idWNrZXRfbmVzdGVkKTtcXG5saWIvcmhhc2h0YWJsZS5jLTEzMzYtXFxubGliL3JoYXNodGFibGUuYz0xMzM3PXN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKipyaHRfYnVja2V0X25lc3RlZF9pbnNlcnQoXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEzNjMtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTM2NDpFWFBPUlRfU1lNQk9MX0dQTChyaHRfYnVja2V0X25lc3RlZF9pbnNlcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzozOS4xMTQzODkyODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk1NDQ0ODM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTG9ja2luZyBJc3N1ZXMgaW4gYGxpYi9yaGFzaHRhYmxlLmNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgaW1wbGVtZW50YXRpb24sIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyByZWdpb24uIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbGliL3JoYXNodGFibGUuY2AsIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyA0MCB0byA2NS4gVGhlIGNvZGUgaW4gdGhhdCB2aWNpbml0eSBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBkZWZpbmVkIG9yIHV0aWxpemVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXkgYXJlIGVtcGxveWluZyBsb2NrIGRlcGVuZGVuY3kgY2hlY2tpbmcgYW5kIHNvIGZvcnRoLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIGhvdyBgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZGAgYW5kIGBsb2NrZGVwX3JodF9idWNrZXRfaXNfaGVsZGAgYXJlIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGF0IHNlY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgbG9ja2RlcCBjaGVja3MgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgbG9jayBvcmRlcmluZyBpcyBjb3JyZWN0LCB0byBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBiZWhhdmlvciBkdWUgdG8gaW1wcm9wZXIgY29uY3VycmVuY3kgY29udHJvbCBpbiB0aGF0IGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo0NC4wNjg4NDExOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFx0dW5pb24gbmVzdGVkX3RhYmxlIF9fcmN1ICp0YWJsZTtcXG4gIDM2OlxcdFxcdHN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKmJ1Y2tldDtcXG4gIDM3OlxcdH07XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyB1MzIgaGVhZF9oYXNoZm4oc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbiAgNDA6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcXG4gIDQxOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqaGUpXFxuICA0MjpcXHR7XFxuICA0MzpcXHRcXHRyZXR1cm4gcmh0X2hlYWRfaGFzaGZuKGh0LCB0YmwsIGhlLCBodC1cXHUwMDNlcCk7XFxuICA0NDpcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbiAgNDc6XFx0I2RlZmluZSBBU1NFUlRfUkhUX01VVEVYKEhUKSBCVUdfT04oIWxvY2tkZXBfcmh0X211dGV4X2lzX2hlbGQoSFQpKVxcbiAgNDg6XFx0XFxuICA0OTpcXHRpbnQgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXFxuICA1MDpcXHR7XFxuICA1MTpcXHRcXHRyZXR1cm4gKGRlYnVnX2xvY2tzKSA/IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2aHQtXFx1MDAzZW11dGV4KSA6IDE7XFxuICA1MjpcXHR9XFxuICA1MzpcXHRFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0aW50IGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgdTMyIGhhc2gpXFxuICA1NjpcXHR7XFxuICA1NzpcXHRcXHRpZiAoIWRlYnVnX2xvY2tzKVxcbiAgNTg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuICA1OTpcXHRcXHRpZiAodW5saWtlbHkodGJsLVxcdTAwM2VuZXN0KSlcXG4gIDYwOlxcdFxcdFxcdHJldHVybiAxO1xcbiAgNjE6XFx0XFx0cmV0dXJuIGJpdF9zcGluX2lzX2xvY2tlZCgwLCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZ0YmwtXFx1MDAzZWJ1Y2tldHNbaGFzaF0pO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQpO1xcbiAgNjQ6XFx0I2Vsc2VcXG4gIDY1OlxcdCNkZWZpbmUgQVNTRVJUX1JIVF9NVVRFWChIVClcXG4gIDY2OlxcdCNlbmRpZlxcbiAgNjc6XFx0XFxuICA2ODpcXHRzdGF0aWMgaW5saW5lIHVuaW9uIG5lc3RlZF90YWJsZSAqbmVzdGVkX3RhYmxlX3RvcChcXG4gIDY5OlxcdFxcdGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibClcXG4gIDcwOlxcdHtcXG4gIDcxOlxcdFxcdC8qIFRoZSB0b3AtbGV2ZWwgYnVja2V0IGVudHJ5IGRvZXMgbm90IG5lZWQgUkNVIHByb3RlY3Rpb25cXG4gIDcyOlxcdFxcdCAqIGJlY2F1c2UgaXQncyBzZXQgYXQgdGhlIHNhbWUgdGltZSBhcyB0YmwtXFx1MDAzZW5lc3QuXFxuICA3MzpcXHRcXHQgKi9cXG4gIDc0OlxcdFxcdHJldHVybiAodm9pZCAqKXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGJsLVxcdTAwM2VidWNrZXRzWzBdLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6NDQuMDY4OTg0MzY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2ODgzNTQ0MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgUmhhc2h0YWJsZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHRoZSByaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGRpcmVjdGx5IHRvdWNoZWQ6IGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAuIFN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsaXphdGlvbiB0d2Vha3MsIGl0IHNlZW1zLiBBbmQgdGhlIGNoYW5nZSB0byBgcmh0X2RlZmVycmVkX3dvcmtlcmAgd2l0aCB0aGF0IGBtdXRleF9sb2NrKFx1MDAyNmh0LVx1MDAzZW11dGV4KTtgIGNhbGwgaXMgaW50ZXJlc3Rpbmc7IHByb2JhYmx5IHNvbWUgc3VidGxlIGxvY2tpbmcgc3RyYXRlZ3kgYWRqdXN0bWVudHMgdGhlcmUuXG5cbk5vdywgdGhhdCBgcmh0X2xvY2tfbmVzdGVkYCBtb2RpZmljYXRpb24gaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYCBjYXRjaGVzIG15IGV5ZS4gTG9ja2luZyBwcmltaXRpdmVzIGFyZSBhbHdheXMgc2Vuc2l0aXZlLCBhbmQgdGhhdCBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAgY2FsbCB3aXRoIHRoZSBkZXBlbmRlbmN5IG1hcCBzZXR1cC4uLiB0aGF0IGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBkZWFkbG9jayBhdm9pZGFuY2UuIFNpbmNlIGl0J3MgaW5saW5lLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgKnVzZSogaXQuXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgY2FsbHMgYHJoYXNodGFibGVfdHJ5X2luc2VydGAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGByaHRfbG9ja2AuIEdvdCBpdC4gQWxzbywgYHJoYXNodGFibGVfcmVoYXNoX29uZWAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRlZmVycmVkIHdvcmtlciBgcmh0X2RlZmVycmVkX3dvcmtlcmAsIGV4cGxpY2l0bHkgY2FsbHMgYHJodF9sb2NrX25lc3RlZGAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBmYXN0LXBhdGggaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGByaGFzaHRhYmxlX2luc2VydF9mYXN0YCBhbmQgYHJoYXNodGFibGVfcmVtb3ZlX2Zhc3RgIGFyZSBhbHNvIGV4ZXJjaXNpbmcgdGhpcyBsb2NraW5nIG1lY2hhbmlzbS5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLiBJIGhhdmUgdG8gbG9vayBhdCB0aGUgKmNhbGxlcnMqIG9mIHRoZXNlIHBvdGVudGlhbGx5LWltcGFjdGVkIGZ1bmN0aW9ucywgbGlrZSBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AuIFdoYXQgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIGFyZSByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb25hbGl0eT8gSXQncyB0aW1lIHRvIGNoZWNrIHdoZXJlIGByaGFzaHRhYmxlX2luc2VydF9zbG93YCBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBDIGZpbGVzLiBUaW1lIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6MjAuOTUyNTMyODAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM3MjM0MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJoYXNodGFibGVfaW5zZXJ0X3Nsb3dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MjI4PXN0YXRpYyBpbmxpbmUgaW50IGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoyMzU6dm9pZCAqcmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0yMzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oPTc1MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc4My1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDo3ODQ6XFx0XFx0cmV0dXJuIHJoYXNodGFibGVfaW5zZXJ0X3Nsb3coaHQsIGtleSwgb2JqKTtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03ODUtXFx0fVxcbi0tXFxubGliL3JoYXNodGFibGUuYz02Mjg9c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtNjc4LVxcbmxpYi9yaGFzaHRhYmxlLmM6Njc5OnZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXFxubGliL3JoYXNodGFibGUuYy02ODAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy02OTEtfVxcbmxpYi9yaGFzaHRhYmxlLmM6NjkyOkVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfaW5zZXJ0X3Nsb3cpO1xcbmxpYi9yaGFzaHRhYmxlLmMtNjkzLVxcbi0tXFxubGliL3Rlc3Rfcmhhc2h0YWJsZS5jPTUxOT1zdGF0aWMgaW50IF9faW5pdCB0ZXN0X2luc2VydF9kdXAoc3RydWN0IHRlc3Rfb2JqX3JobCAqcmhsX3Rlc3Rfb2JqZWN0cyxcXG4tLVxcbmxpYi90ZXN0X3JoYXNodGFibGUuYy01NDItXFx0XFx0aWYgKHNsb3cpIHtcXG5saWIvdGVzdF9yaGFzaHRhYmxlLmM6NTQzOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhcXHUwMDI2cmhsdC1cXHUwMDNlaHQsIGtleSxcXG5saWIvdGVzdF9yaGFzaHRhYmxlLmMtNTQ0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJobF90ZXN0X29iamVjdHNbaV0ubGlzdF9ub2RlLnJoZWFkKSk7XFxuLS1cXG5uZXQvY29yZS94ZHAuYz0yNzE9c3RhdGljIHN0cnVjdCB4ZHBfbWVtX2FsbG9jYXRvciAqX194ZHBfcmVnX21lbV9tb2RlbChzdHJ1Y3QgeGRwX21lbV9pbmZvICptZW0sXFxuLS1cXG5uZXQvY29yZS94ZHAuYy0zMTQtXFx0LyogSW5zZXJ0IGFsbG9jYXRvciBpbnRvIElEIGxvb2t1cCB0YWJsZSAqL1xcbm5ldC9jb3JlL3hkcC5jOjMxNTpcXHRwdHIgPSByaGFzaHRhYmxlX2luc2VydF9zbG93KG1lbV9pZF9odCwgXFx1MDAyNmlkLCBcXHUwMDI2eGRwX2FsbG9jLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS94ZHAuYy0zMTYtXFx0aWYgKElTX0VSUihwdHIpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjIzLjU4OTc4MjI0NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjgxMjk5MDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBgbGliL3JoYXNodGFibGUuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBidWlsZCBwcm9jZXNzIG9mIGBsaWIvcmhhc2h0YWJsZS5jYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAuIEknbGwgZGlnIGludG8gYGxpYi9NYWtlZmlsZWAgZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcmhhc2h0YWJsZS5vYCBpcyBjb25zdHJ1Y3RlZCwgd2hpY2ggd2lsbCBpbmV2aXRhYmx5IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBLY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbiBhbmQgcG90ZW50aWFsbHksIGFzcGVjdHMgb2YgaXRzIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjQwLjQwMjc3NTM5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3Mzk3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJoYXNodGFibGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvTWFrZWZpbGU9NTE9b2JqLXlcXHQrPSBsb2NrcmVmLm9cXG5saWIvTWFrZWZpbGUtNTItXFxubGliL01ha2VmaWxlOjUzOkNPTlRFWFRfQU5BTFlTSVNfcmhhc2h0YWJsZS5vIDo9IHlcXG5saWIvTWFrZWZpbGUtNTQtXFxubGliL01ha2VmaWxlPTU1PW9iai15ICs9IGJjZC5vIHNvcnQubyBwYXJzZXIubyBkZWJ1Z19sb2Nrcy5vIHJhbmRvbTMyLm8gXFxcXFxcbi0tXFxubGliL01ha2VmaWxlLTU4LVxcdCBic2VhcmNoLm8gZmluZF9iaXQubyBsbGlzdC5vIGx3cS5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXFxcXFxcbmxpYi9NYWtlZmlsZTo1OTpcXHQgcGVyY3B1LXJlZmNvdW50Lm8gcmhhc2h0YWJsZS5vIGJhc2U2NC5vIFxcXFxcXG5saWIvTWFrZWZpbGUtNjAtXFx0IG9uY2UubyByZWZjb3VudC5vIHJjdXJlZi5vIHVzZXJjb3B5Lm8gZXJyc2VxLm8gYnVja2V0X2xvY2tzLm8gXFxcXFxcbi0tXFxubGliL01ha2VmaWxlPTgzPW9iai0kKENPTkZJR19URVNUX1dPUktRVUVVRSkgKz0gdGVzdF93b3JrcXVldWUub1xcbmxpYi9NYWtlZmlsZTo4NDpvYmotJChDT05GSUdfVEVTVF9SSEFTSFRBQkxFKSArPSB0ZXN0X3JoYXNodGFibGUub1xcbmxpYi9NYWtlZmlsZS04NS1vYmotJChDT05GSUdfVEVTVF9TVEFUSUNfS0VZUykgKz0gdGVzdF9zdGF0aWNfa2V5cy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjQwLjUyMDE4MjA4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTI5NzQ1MDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGByaGFzaHRhYmxlLm9gIGlzIGJha2VkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCwgd2hpY2ggbWVhbnMgYW55IGNoYW5nZXMgaGVyZSBhcmUgcHJldHR5IGltcGFjdGZ1bC4gSSdtIHNlZWluZyBhIGJ1bmNoIG9mIG1vZGlmaWNhdGlvbnMsIGFuZCB0aGV5J3JlIGFsbCBjZW50ZXJlZCBhcm91bmQgYGxvY2tkZXBgIGtleXMgYW5kIGxvY2tpbmcgc3ViY2xhc3Nlcy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUgaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oYCwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYCwgYW5kIGBsaWIvcmhhc2h0YWJsZS5jYC5cblxuSSBub3RpY2UgdGhpbmdzIGxpa2UgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgYmVpbmcgYWRkZWQgd2l0aCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX0xPQ0tERVBgLiBUaGVyZSBhcmUgYWxzbyBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAsIGBsb2NrZGVwX3NldF9jbGFzc2AsIGFuZCBgbG9ja2RlcF9pbml0X21hcGAgdGhhdCByZWZlcmVuY2UgdGhlc2Uga2V5cy4gSXQncyBhbGwgdmVyeSBjbGVhcmx5IGFib3V0IGxvY2sgZGVwZW5kZW5jeSBhbmFseXNpcyBhbmQgcHJvdmluZyBsb2NraW5nIGNvcnJlY3RuZXNzLlxuXG5UaGUga2V5IGNvbmZpZ3MgdG8gbG9vayBhdCBoZXJlIGFyZSBkZWZpbml0ZWx5IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AuIEknbGwgbmVlZCB0byBjaGVjayBgbGliL0tjb25maWcuZGVidWdgIG9yIG1heWJlIGBrZXJuZWwvbG9ja2luZy9LY29uZmlnYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgZW5hYmxlZCBhbmQgd2hhdCB0aGVpciBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIGlzIGFsbCBhYm91dCBlbmhhbmNpbmcgdGhlIGtlcm5lbCdzIGxvY2sgZGVidWdnaW5nIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6NTUuODE3NjM1ODg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg0ODQ3NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMT0NLREVQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYWxwaGEvS2NvbmZpZz04Nj1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL2FscGhhL0tjb25maWctODgtXFxuYXJjaC9hbHBoYS9LY29uZmlnOjg5OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL2FscGhhL0tjb25maWctOTAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9hcmMvS2NvbmZpZz02PWNvbmZpZyBBUkNcXG4tLVxcbmFyY2gvYXJjL0tjb25maWctNTctXFxuYXJjaC9hcmMvS2NvbmZpZzo1ODpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9hcmMvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL2FybS9LY29uZmlnPTIyND1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTIyNy1cXG5hcmNoL2FybS9LY29uZmlnOjIyODpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9hcm0vS2NvbmZpZy0yMjktXFx0Ym9vbFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTMzMD1jb25maWcgSUxMRUdBTF9QT0lOVEVSX1ZBTFVFXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMzMzLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzozMzQ6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMzUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWc9Mj1jb25maWcgQ1NLWVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMTEyLVxcbmFyY2gvY3NreS9LY29uZmlnOjExMzpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9jc2t5L0tjb25maWctMTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvaGV4YWdvbi9LY29uZmlnPTQ2PWNvbmZpZyBIRVhBR09OX1BIWVNfT0ZGU0VUXFxuLS1cXG5hcmNoL2hleGFnb24vS2NvbmZpZy01MC1cXG5hcmNoL2hleGFnb24vS2NvbmZpZzo1MTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9oZXhhZ29uL0tjb25maWctNTItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yNzY9Y29uZmlnIEwxX0NBQ0hFX1NISUZUXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTI3OS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjI4MDpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0yODEtXFx0Ym9vbFxcbi0tXFxuYXJjaC9taWNyb2JsYXplL0tjb25maWc9ODA9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxuYXJjaC9taWNyb2JsYXplL0tjb25maWctODItXFxuYXJjaC9taWNyb2JsYXplL0tjb25maWc6ODM6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvbWljcm9ibGF6ZS9LY29uZmlnLTg0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI5OTg9ZW5kbWVudVxcbmFyY2gvbWlwcy9LY29uZmlnLTI5OTktXFxuYXJjaC9taXBzL0tjb25maWc6MzAwMDpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9taXBzL0tjb25maWctMzAwMS1cXHRib29sXFxuLS1cXG5hcmNoL29wZW5yaXNjL0tjb25maWc9Njg9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxuYXJjaC9vcGVucmlzYy9LY29uZmlnLTcwLVxcbmFyY2gvb3BlbnJpc2MvS2NvbmZpZzo3MTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9vcGVucmlzYy9LY29uZmlnLTcyLVxcdGRlZl9ib29sICB5XFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTE2OD1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTE3MC1cXG5hcmNoL3BhcmlzYy9LY29uZmlnOjE3MTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0xNzItXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTAxPWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEwNC1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxMDU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEwNi1cXHRib29sXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MzUxPWNvbmZpZyBQR1RBQkxFX0xFVkVMU1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTM1NS1cXG5hcmNoL3Jpc2N2L0tjb25maWc6MzU2OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3Jpc2N2L0tjb25maWctMzU3LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTU9Y29uZmlnIENQVV9CSUdfRU5ESUFOXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03LVxcbmFyY2gvczM5MC9LY29uZmlnOjg6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvczM5MC9LY29uZmlnLTktXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTExMj1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL3NoL0tjb25maWctMTE0LVxcbmFyY2gvc2gvS2NvbmZpZzoxMTU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvc2gvS2NvbmZpZy0xMTYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTEyNT1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMTI4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoxMjk6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvc3BhcmMvS2NvbmZpZy0xMzAtXFx0Ym9vbFxcbi0tXFxuYXJjaC91bS9LY29uZmlnPTY5PWNvbmZpZyBTQlVTXFxuLS1cXG5hcmNoL3VtL0tjb25maWctNzEtXFxuYXJjaC91bS9LY29uZmlnOjcyOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3VtL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0zNDg9Y29uZmlnIE9VVFBVVF9GT1JNQVRcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMzUyLVxcbmFyY2gveDg2L0tjb25maWc6MzUzOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3g4Ni9LY29uZmlnLTM1NC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3h0ZW5zYS9LY29uZmlnPTg0PWNvbmZpZyBIWlxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZy04Ny1cXG5hcmNoL3h0ZW5zYS9LY29uZmlnOjg4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3h0ZW5zYS9LY29uZmlnLTg5LVxcdGRlZl9ib29sIHlcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTE1MzM9Y29uZmlnIERFQlVHX0xPQ0tfQUxMT0NcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE1NDctXFxubGliL0tjb25maWcuZGVidWc6MTU0ODpjb25maWcgTE9DS0RFUFxcbmxpYi9LY29uZmlnLmRlYnVnLTE1NDktXFx0Ym9vbFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTU1NC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTU1OmNvbmZpZyBMT0NLREVQX1NNQUxMXFxubGliL0tjb25maWcuZGVidWctMTU1Ni1cXHRib29sXFxubGliL0tjb25maWcuZGVidWctMTU1Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTU4OmNvbmZpZyBMT0NLREVQX0JJVFNcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTU5LVxcdGludCBcXFwiU2l6ZSBmb3IgTUFYX0xPQ0tERVBfRU5UUklFUyAoYXMgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTU2NS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTY2OmNvbmZpZyBMT0NLREVQX0NIQUlOU19CSVRTXFxubGliL0tjb25maWcuZGVidWctMTU2Ny1cXHRpbnQgXFxcIlNpemUgZm9yIE1BWF9MT0NLREVQX0NIQUlOUyAoYXMgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTU3My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTc0OmNvbmZpZyBMT0NLREVQX1NUQUNLX1RSQUNFX0JJVFNcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTc1LVxcdGludCBcXFwiU2l6ZSBmb3IgTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE1ODgtXFxubGliL0tjb25maWcuZGVidWc6MTU4OTpjb25maWcgTE9DS0RFUF9TVEFDS19UUkFDRV9IQVNIX0JJVFNcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTkwLVxcdGludCBcXFwiU2l6ZSBmb3IgU1RBQ0tfVFJBQ0VfSEFTSF9TSVpFIChhcyBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTk3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjE1OTg6Y29uZmlnIExPQ0tERVBfQ0lSQ1VMQVJfUVVFVUVfQklUU1xcbmxpYi9LY29uZmlnLmRlYnVnLTE1OTktXFx0aW50IFxcXCJTaXplIGZvciBlbGVtZW50cyBpbiBjaXJjdWxhcl9xdWV1ZSBzdHJ1Y3QgKGFzIE50aCBwb3dlciBvZiAyKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6NTguMTAyNDkwNDc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczNjg2MzUwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlYnVnIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYXJvdW5kIGxpbmUgMTU0OC4gSSd2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIGRlYnVnZ2luZyBpcyBoaWRpbmcgaW4gdGhhdCBzZWN0aW9uLCBwcm9iYWJseSBhIGZsYWcsIGRlcGVuZGVuY3ksIG9yIGEgY29uZGl0aW9uYWwgYmxvY2suIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUsIHBpbnBvaW50aW5nIHRoZSByaWdodCBLY29uZmlnIG9wdGlvbiBpcyBjcnVjaWFsIHRvIGVpdGhlciBlbmFibGUgYSBmZWF0dXJlIG9yIGRpYWdub3NlIGEgbWlzY29uZmlndXJhdGlvbi4gSXQncyBhIGtleSBzcG90IHRvIGZpbmQgcmVsYXRlZCBvcHRpb25zIG9yIHRvIHVuZGVyc3RhbmQgZGVwZW5kZW5jaWVzIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBMZXQgbWUgcHVsbCB0aGF0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjA1LjQ3MTEyODcwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUyMDpcXHRcXHQgZXhjZXB0aW9uIG9mIHNpbXBseSBub3QgYWNxdWlyaW5nIGFsbCB0aGUgcmVxdWlyZWQgbG9ja3MuXFxuMTUyMTpcXHRcXHQgTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBjYW4gaW50cm9kdWNlIHNpZ25pZmljYW50IG92ZXJoZWFkLCBzb1xcbjE1MjI6XFx0XFx0IGl0IHJlYWxseSBzaG91bGQgbm90IGJlIGVuYWJsZWQgaW4gYSBwcm9kdWN0aW9uIG9yIGRpc3RybyBrZXJuZWwsXFxuMTUyMzpcXHRcXHQgZXZlbiBhIGRlYnVnIGtlcm5lbC4gIElmIHlvdSBhcmUgYSBkcml2ZXIgd3JpdGVyLCBlbmFibGUgaXQuICBJZlxcbjE1MjQ6XFx0XFx0IHlvdSBhcmUgYSBkaXN0cm8sIGRvIG5vdC5cXG4xNTI1OlxcdFxcbjE1MjY6XFx0Y29uZmlnIERFQlVHX1JXU0VNU1xcbjE1Mjc6XFx0XFx0Ym9vbCBcXFwiUlcgU2VtYXBob3JlIGRlYnVnZ2luZzogYmFzaWMgY2hlY2tzXFxcIlxcbjE1Mjg6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4xNTI5OlxcdFxcdGhlbHBcXG4xNTMwOlxcdFxcdCAgVGhpcyBkZWJ1Z2dpbmcgZmVhdHVyZSBhbGxvd3MgbWlzbWF0Y2hlZCBydyBzZW1hcGhvcmUgbG9ja3NcXG4xNTMxOlxcdFxcdCAgYW5kIHVubG9ja3MgdG8gYmUgZGV0ZWN0ZWQgYW5kIHJlcG9ydGVkLlxcbjE1MzI6XFx0XFxuMTUzMzpcXHRjb25maWcgREVCVUdfTE9DS19BTExPQ1xcbjE1MzQ6XFx0XFx0Ym9vbCBcXFwiTG9jayBkZWJ1Z2dpbmc6IGRldGVjdCBpbmNvcnJlY3QgZnJlZWluZyBvZiBsaXZlIGxvY2tzXFxcIlxcbjE1MzU6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcbjE1MzY6XFx0XFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXFxuMTUzNzpcXHRcXHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxcbjE1Mzg6XFx0XFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xcbjE1Mzk6XFx0XFx0c2VsZWN0IExPQ0tERVBcXG4xNTQwOlxcdFxcdGhlbHBcXG4xNTQxOlxcdFxcdCBUaGlzIGZlYXR1cmUgd2lsbCBjaGVjayB3aGV0aGVyIGFueSBoZWxkIGxvY2sgKHNwaW5sb2NrLCByd2xvY2ssXFxuMTU0MjpcXHRcXHQgbXV0ZXggb3IgcndzZW0pIGlzIGluY29ycmVjdGx5IGZyZWVkIGJ5IHRoZSBrZXJuZWwsIHZpYSBhbnkgb2YgdGhlXFxuMTU0MzpcXHRcXHQgbWVtb3J5LWZyZWVpbmcgcm91dGluZXMgKGtmcmVlKCksIGttZW1fY2FjaGVfZnJlZSgpLCBmcmVlX3BhZ2VzKCksXFxuMTU0NDpcXHRcXHQgdmZyZWUoKSwgZXRjLiksIHdoZXRoZXIgYSBsaXZlIGxvY2sgaXMgaW5jb3JyZWN0bHkgcmVpbml0aWFsaXplZCB2aWFcXG4xNTQ1OlxcdFxcdCBzcGluX2xvY2tfaW5pdCgpL211dGV4X2luaXQoKS9ldGMuLCBvciB3aGV0aGVyIHRoZXJlIGlzIGFueSBsb2NrXFxuMTU0NjpcXHRcXHQgaGVsZCBkdXJpbmcgdGFzayBleGl0LlxcbjE1NDc6XFx0XFxuMTU0ODpcXHRjb25maWcgTE9DS0RFUFxcbjE1NDk6XFx0XFx0Ym9vbFxcbjE1NTA6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcbjE1NTE6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0VcXG4xNTUyOlxcdFxcdHNlbGVjdCBLQUxMU1lNU1xcbjE1NTM6XFx0XFx0c2VsZWN0IEtBTExTWU1TX0FMTFxcbjE1NTQ6XFx0XFxuMTU1NTpcXHRjb25maWcgTE9DS0RFUF9TTUFMTFxcbjE1NTY6XFx0XFx0Ym9vbFxcbjE1NTc6XFx0XFxuMTU1ODpcXHRjb25maWcgTE9DS0RFUF9CSVRTXFxuMTU1OTpcXHRcXHRpbnQgXFxcIlNpemUgZm9yIE1BWF9MT0NLREVQX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVxcXCJcXG4xNTYwOlxcdFxcdGRlcGVuZHMgb24gTE9DS0RFUCBcXHUwMDI2XFx1MDAyNiAhTE9DS0RFUF9TTUFMTFxcbjE1NjE6XFx0XFx0cmFuZ2UgMTAgMjRcXG4xNTYyOlxcdFxcdGRlZmF1bHQgMTVcXG4xNTYzOlxcdFxcdGhlbHBcXG4xNTY0OlxcdFxcdCAgVHJ5IGluY3JlYXNpbmcgdGhpcyB2YWx1ZSBpZiB5b3UgaGl0IFxcXCJCVUc6IE1BWF9MT0NLREVQX0VOVFJJRVMgdG9vIGxvdyFcXFwiIG1lc3NhZ2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjA1LjQ3MTM2MDU1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTM1MTI4NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBMb2NraW5nIE1lY2hhbmlzbXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZCB1bmRlcnN0YW5kaW5nIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGF0IGNvbmRpdGlvbiBvciBzZXQgb2YgY29uZGl0aW9ucyB0cmlnZ2VycyB0aGUgc2VsZWN0aW9uIG9mIGVpdGhlciBgUFJPVkVfTE9DS0lOR2Agb3IgYExPQ0tERVBgLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGtleSB2YXJpYWJsZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IGRldGVybWluZSB3aGljaCBsb2NraW5nIG1lY2hhbmlzbSBnZXRzIGFjdGl2YXRlZC4gSXQncyBhYm91dCB0cmFjaW5nIHRoZSBsb2dpYyBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGJyYW5jaGluZyBwb2ludCBhbmQgaG93IHRoZSBzeXN0ZW0gY2hvb3NlcyBiZXR3ZWVuIHRoZXNlIHR3byBkaXN0aW5jdCBhcHByb2FjaGVzLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBzZWUgd2h5IGNlcnRhaW4gZGVjaXNpb25zIGFyZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg3NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6MTIuNjA2NDkxMjA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg4NzY3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUk9WRV9MT0NLSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTE0MDE9Y29uZmlnIExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE0MDUtXFxubGliL0tjb25maWcuZGVidWc6MTQwNjpjb25maWcgUFJPVkVfTE9DS0lOR1xcbmxpYi9LY29uZmlnLmRlYnVnLTE0MDctXFx0Ym9vbCBcXFwiTG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjE0Ljg5NTI2NjYwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjAwMDY5ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWJ1ZyBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgbGliL0tjb25maWcuZGVidWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTQwNi4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIG1vcmUgaW50cmljYXRlIGRlYnVnIG9wdGlvbnMgcmVzaWRlLCBhbmQgbGlrZWx5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zLCB0aGVpciBkZWZhdWx0cywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCB3aGVyZSB0aGV5J3JlIHVzZWQuIEZyb20gdGhlcmUsIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBpbmNsdWRlcywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSBpbnRvIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgaWYgbmVjZXNzYXJ5LCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6MjMuMDk1MzM5NDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDU6XFx0XFxuMTQwNjpcXHRjb25maWcgUFJPVkVfTE9DS0lOR1xcbjE0MDc6XFx0XFx0Ym9vbCBcXFwiTG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcXFwiXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXFxuMTQwOTpcXHRcXHRzZWxlY3QgTE9DS0RFUFxcbjE0MTA6XFx0XFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXFxuMTQxMTpcXHRcXHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxcbjE0MTI6XFx0XFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xcbjE0MTM6XFx0XFx0c2VsZWN0IERFQlVHX1JXU0VNUyBpZiAhUFJFRU1QVF9SVFxcbjE0MTQ6XFx0XFx0c2VsZWN0IERFQlVHX1dXX01VVEVYX1NMT1dQQVRIXFxuMTQxNTpcXHRcXHRzZWxlY3QgREVCVUdfTE9DS19BTExPQ1xcbjE0MTY6XFx0XFx0c2VsZWN0IFBSRUVNUFRfQ09VTlQgaWYgIUFSQ0hfTk9fUFJFRU1QVFxcbjE0MTc6XFx0XFx0c2VsZWN0IFRSQUNFX0lSUUZMQUdTXFxuMTQxODpcXHRcXHRkZWZhdWx0IG5cXG4xNDE5OlxcdFxcdGhlbHBcXG4xNDIwOlxcdFxcdCBUaGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUga2VybmVsIHRvIHByb3ZlIHRoYXQgYWxsIGxvY2tpbmdcXG4xNDIxOlxcdFxcdCB0aGF0IG9jY3VycyBpbiB0aGUga2VybmVsIHJ1bnRpbWUgaXMgbWF0aGVtYXRpY2FsbHlcXG4xNDIyOlxcdFxcdCBjb3JyZWN0OiB0aGF0IHVuZGVyIG5vIGNpcmN1bXN0YW5jZSBjb3VsZCBhbiBhcmJpdHJhcnkgKGFuZFxcbjE0MjM6XFx0XFx0IG5vdCB5ZXQgdHJpZ2dlcmVkKSBjb21iaW5hdGlvbiBvZiBvYnNlcnZlZCBsb2NraW5nXFxuMTQyNDpcXHRcXHQgc2VxdWVuY2VzIChvbiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIENQVXMsIHJ1bm5pbmcgYW5cXG4xNDI1OlxcdFxcdCBhcmJpdHJhcnkgbnVtYmVyIG9mIHRhc2tzIGFuZCBpbnRlcnJ1cHQgY29udGV4dHMpIGNhdXNlIGFcXG4xNDI2OlxcdFxcdCBkZWFkbG9jay5cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0XFx0IEluIHNob3J0LCB0aGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUga2VybmVsIHRvIHJlcG9ydCBsb2NraW5nXFxuMTQyOTpcXHRcXHQgcmVsYXRlZCBkZWFkbG9ja3MgYmVmb3JlIHRoZXkgYWN0dWFsbHkgb2NjdXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjIzLjA5NTY0NjE4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTc5MDQyNDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJ1bWluYXRpb25zIG9uIFJoYXNodGFibGUgYW5kIExvY2tkZXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgTE9DS0RFUGAgYW5kIGBQUk9WRV9MT0NLSU5HYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBQUk9WRV9MT0NLSU5HYCBpbXBsaWNpdGx5IHB1bGxzIGluIGBMT0NLREVQYCwgYW5kIGBERUJVR19MT0NLX0FMTE9DYCBkb2VzIHRoZSBzYW1lLiAgVGhhdCBzZWVtcyBsb2dpY2FsLiAgQW5kIGBERUJVR19MT0NLX0FMTE9DYCBhbHNvIGRyYWdzIGluIGBMT0NLREVQYCAtIHRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgdGhlc2UgZGVidWcgYWlkcy5cblxuTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgYENPTkZJR19URVNUX1JIQVNIVEFCTEVgIHNpbmNlIGl0J3MgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQuIEJ1dCB3YWl0LCBgQ09ORklHX1RFU1RfUkhBU0hUQUJMRWAgaXMganVzdCBmb3Igc2VsZi10ZXN0cyEgVGhhdCdzIG5vdCB3aGF0IFN5emthbGxlciBpcyBsb29raW5nIGF0OyBpdCBkZWFscyB3aXRoIHN5c2NhbGxzIGFuZCBub3JtYWwgZXhlY3V0aW9uIHBhdGhzLiAgU28sIG5vLiBJIGNhbiBzYWZlbHkgaWdub3JlIHRoYXQuXG5cbk5vdywgYHJoYXNodGFibGVgIGl0c2VsZiBpcyBhIGJ1aWx0LWluIGtlcm5lbCBjb21wb25lbnQuIFRoYXQncyBhIGtleSBwb2ludC4gQW5kLCBhaCB5ZXMsIGhlcmUgaXQgaXM6IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgYXJlIHdoYXQgYWN0dWFsbHkgKmVuYWJsZSogdGhlIGxvY2sgZGVwZW5kZW5jeSB0cmFja2luZyBmb3IgdGhlIHJoYXNodGFibGUga2V5czsgc3BlY2lmaWNhbGx5IGJlY2F1c2UgYCNpZmRlZiBDT05GSUdfTE9DS0RFUGAgZ3VhcmRzIHRob3NlIHNlY3Rpb25zLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gTG9va2luZyBpbiBgcmhhc2h0YWJsZS10eXBlcy5oYCBJIGNhbiBzZWUgdGhpczpcblxuYGBgY1xuc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIHtcbiNpZmRlZiBDT05GSUdfTE9DS0RFUFxuXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7XG5cdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtdXRleF9rZXk7XG5cdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5O1xuI2VuZGlmXG59O1xuYGBgXG5cblRoaXMgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGNvbWUgdG9nZXRoZXIuICBBbmQgdGhlbiwgaW4gYGxpYi9yaGFzaHRhYmxlLmNgOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX0xPQ0tERVBcblx0aHQtXHUwMDNlbG9ja2RlcF9rZXkgPSBcdTAwMjZrZXlzLVx1MDAzZWJ1Y2tldF9rZXk7XG4jZW5kaWZcbmBgYFxuXG5gaHQtXHUwMDNlbG9ja2RlcF9rZXlgIGlzIGFzc2lnbmVkICpvbmx5KiB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZGVmaW5lZC4gVGhpcyBpcyB3aGF0J3MgcHJvdmlkaW5nIHRoZSBrZXkgaW5mb3JtYXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBpbiBgYnVja2V0X3RhYmxlX2FsbG9jYDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19MT0NLREVQXG5cdC8qIGJpdGxvY2tzIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMiBvciBtb3JlICovXG5cdGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2dGJsLVx1MDAzZWRlcF9tYXAsIFwicmhhc2h0YWJsZV9idWNrZXRcIiwgaHQtXHUwMDNlbG9ja2RlcF9rZXksIDApO1xuI2VuZGlmXG5gYGBcblxuSGVyZSdzIHRoZSBjcnVjaWFsIHBvaW50OiAgYHRibC1cdTAwM2VkZXBfbWFwYCBpcyBpbml0aWFsaXplZCAqb25seSogd2hlbiBgQ09ORklHX0xPQ0tERVBgIGlzIGVuYWJsZWQuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nIHJlbGllcyBvbiBgTE9DS0RFUGAuXG5cbkFuZCwgZmluYWxseSwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYDpcblxuYGBgY1xuc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXG5cdFx0XHRcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCxcblx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXG57XG5cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5cblx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuXHRiaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTtcblx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MsIDAsIE5VTEwsIF9USElTX0lQXyk7XG5cdHJldHVybiBmbGFncztcbn1cbmBgYFxuXG5Mb29raW5nIGF0IGByaHRfbG9ja19uZXN0ZWRgLCB0aGUgY2FsbCB0byBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAgKmV4cGxpY2l0bHkqIHVzZXMgYHRibC1cdTAwM2VkZXBfbWFwYC4gIEFuZCwgZ29pbmcgYmFjayB0byB0aGUgZGVmaW5pdGlvbiwgYHRibC1cdTAwM2VkZXBfbWFwYCBpcyBvbmx5IHByZXNlbnQgd2hlbiBgQ09ORklHX0xPQ0tERVBgIGlzIGVuYWJsZWQuXG5cblRoZXJlZm9yZSwgdGhlIHByZXNlbmNlIG9mIGBMT0NLREVQYCAqZGlyZWN0bHkqIGltcGFjdHMgdGhlIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIHJoYXNodGFibGUgY29kZSEgSXQgYWRkcyB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wbGljYXRpb25zLiBBbmQgbm93IEkgbmVlZCB0byBjaGVjayB0aGUgZnVsbCBgc3RydWN0IGJ1Y2tldF90YWJsZWAgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNToyOS4wNzQ2OTI3MDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjAwMDU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNToyOS4xNTc5MDc2NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTUyMjI1MTA5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIGBzdHJ1Y3QgYnVja2V0X3RhYmxlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBidWNrZXRfdGFibGVgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gd29ya2luZyB3aXRoIHNvbWUga2luZCBvZiBoYXNoIHRhYmxlIG9yIHNpbWlsYXIgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB0aGUgYGJ1Y2tldF90YWJsZWAgaXMgY2VudHJhbCB0byBpdHMgaW1wbGVtZW50YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCdzIGRlZmluZWQuIElzIGl0IGluIGEgaGVhZGVyIGZpbGU/IEEgc3BlY2lmaWMgc291cmNlIGZpbGU/IElmIEkgaGF2ZSBzb21lIGNvbnRleHQgLSB3aGljaCBwcm9qZWN0IEkgYW0gaW4gLSBJIGNvdWxkIGd1ZXNzLiBCdXQgd2l0aG91dCBpdCwgSSdsbCBuZWVkIHRvIGRvIHNvbWUgZGlnZ2luZy4gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzLiBgZ3JlcGAsIGBmaW5kYCwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBtYXliZSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIG9yIHNlbWFudGljIGFuYWx5c2lzLCBpcyB0aGUgaW1tZWRpYXRlIGRpcmVjdGlvbiBJJ2xsIGdvLiBNeSBvYmplY3RpdmU/IExvY2F0ZSB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiwgcHJlZmVyYWJseSBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGNvbW1lbnRzLCB0eXBlZGVmcywgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYnVpbGRpbmcgYmxvY2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEFybWVkIHdpdGggdGhhdCwgSSBjYW4gZ2V0IGRvd24gdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTo0NC4zODA0MjEzMzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDYwMTcyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJ1Y2tldF90YWJsZSBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD00Nz1zdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIHt9O1xcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtNzUtICovXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg6NzY6c3RydWN0IGJ1Y2tldF90YWJsZSB7XFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtNzctXFx0dW5zaWduZWQgaW50XFx0XFx0c2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6NDYuOTI2NDQzNTgxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMDExODY3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBzcGVjaWZpZWQgbGluZXMgb2YgY29kZTpcblxuKipEaXZpbmcgaW50byBgcmhhc2h0YWJsZS5oYCDigJMgTGluZXMgNzUtMTAwKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyA3NS0xMDAgb2YgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYC4gSSdtIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSByZXNpemFibGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgYHJoYXNodGFibGVgIHN0cnVjdCBpdHNlbGYgZGVmaW5lZCwgYWxvbmcgd2l0aCBtYXliZSByZWxhdGVkIHN0cnVjdHMgbGlrZSBidWNrZXQgaGVhZHMsIG5vZGUgc3RydWN0dXJlcywgb3IgbWV0YWRhdGEgZm9yIGhhc2gga2V5IG1hbmFnZW1lbnQuIEknbSBhbHNvIGFudGljaXBhdGluZyBmaW5kaW5nIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBoYXNoIGtleSBzdHJ1Y3R1cmUsIGFuZCBwb3NzaWJsZSBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0aW5nIHRvIGtleSBsb29rdXBzLCBpbnNlcnRpb25zLCBhbmQgZGVsZXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMsIHNvIEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgYmFzaWNzLiBMb29raW5nIGZvcndhcmQgdG8gZ2V0dGluZyB0byB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHRoZXNlIHRhYmxlcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTo1Ni45MzgzMTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHQgKi9cXG4gIDc2OlxcdHN0cnVjdCBidWNrZXRfdGFibGUge1xcbiAgNzc6XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0c2l6ZTtcXG4gIDc4OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG5lc3Q7XFxuICA3OTpcXHRcXHR1MzJcXHRcXHRcXHRoYXNoX3JuZDtcXG4gIDgwOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR3YWxrZXJzO1xcbiAgODE6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1O1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRzdHJ1Y3QgYnVja2V0X3RhYmxlIF9fcmN1ICpmdXR1cmVfdGJsO1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRzdHJ1Y3QgbG9ja2RlcF9tYXBcXHRkZXBfbWFwO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRzdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIF9fcmN1ICpidWNrZXRzW10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4gIDg4OlxcdH07XFxuICA4OTpcXHRcXG4gIDkwOlxcdC8qXFxuICA5MTpcXHQgKiBOVUxMU19NQVJLRVIoKSBleHBlY3RzIGEgaGFzaCB2YWx1ZSB3aXRoIHRoZSBsb3dcXG4gIDkyOlxcdCAqIGJpdHMgbW9zdGx5IGxpa2VseSB0byBiZSBzaWduaWZpY2FudCwgYW5kIGl0IGRpc2NhcmRzXFxuICA5MzpcXHQgKiB0aGUgbXNiLlxcbiAgOTQ6XFx0ICogV2UgZ2l2ZSBpdCBhbiBhZGRyZXNzLCBpbiB3aGljaCB0aGUgYm90dG9tIGJpdCBpc1xcbiAgOTU6XFx0ICogYWx3YXlzIDAsIGFuZCB0aGUgbXNiIG1pZ2h0IGJlIHNpZ25pZmljYW50LlxcbiAgOTY6XFx0ICogU28gd2Ugc2hpZnQgdGhlIGFkZHJlc3MgZG93biBvbmUgYml0IHRvIGFsaWduIHdpdGhcXG4gIDk3OlxcdCAqIGV4cGVjdGF0aW9ucyBhbmQgYXZvaWQgbG9zaW5nIGEgc2lnbmlmaWNhbnQgYml0LlxcbiAgOTg6XFx0ICpcXG4gIDk5OlxcdCAqIFdlIG5ldmVyIHN0b3JlIHRoZSBOVUxMU19NQVJLRVIgaW4gdGhlIGhhc2ggdGFibGVcXG4gMTAwOlxcdCAqIGl0c2VsZiBhcyB3ZSBuZWVkIHRoZSBsc2IgZm9yIGxvY2tpbmcuXFxuIDEwMTpcXHQgKiBJbnN0ZWFkIHdlIHN0b3JlIGEgTlVMTFxcbiAxMDI6XFx0ICovXFxuIDEwMzpcXHQjZGVmaW5lXFx0UkhUX05VTExTX01BUktFUihwdHIpXFx0XFxcXFxcbiAxMDQ6XFx0XFx0KCh2b2lkICopTlVMTFNfTUFSS0VSKCgodW5zaWduZWQgbG9uZykgKHB0cikpIFxcdTAwM2VcXHUwMDNlIDEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTo1Ni45Mzg0NTk1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NDI1OTAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gcmhhc2h0YWJsZSBMb2NrIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBsb2NrIGRlcGVuZGVuY2llcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGByaGFzaHRhYmxlYCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGZ1enppbmcuIEkgc2VlIHRoYXQgdGhlIGBidWNrZXRfdGFibGVgIHN0cnVjdCBoYXMgYSBgbG9ja2RlcF9tYXBgIHdoaWNoIHRyYWNrcyBkZXBlbmRlbmNpZXMsIGJ1dCBpdCdzIG9ubHkgYWN0aXZlIGlmIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIFJlbWVtYmVyaW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgYW5kIGluc3RlYWQgdGFyZ2V0IGZlYXR1cmUtc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgcHJlc2VudCBhIGNoYWxsZW5nZSwgc28gSSBuZWVkIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgY2FsbGVycyB0aGF0IGV4ZXJjaXNlIHRoZW0uXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY2hhbmdlZCBvciBlbnRyeXBvaW50IGZ1bmN0aW9ucyBpbiBgbGliL3JoYXNodGFibGUuY2AuIEkgZm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgYHJodF9kZWZlcnJlZF93b3JrZXJgLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZmlsZSwgYW5kIEkndmUgbG9va2VkIGludG8gYHJoYXNodGFibGVfaW5zZXJ0X3Nsb3dgLiBJJ3ZlIG5vdGVkIHRoYXQgc2V2ZXJhbCByZWhhc2hpbmcgZnVuY3Rpb25zLCBsaWtlIGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV9yZWhhc2hfdGFibGVgLCBhbmQgYHJoYXNodGFibGVfcmVoYXNoX2FsbG9jYCBhcmUgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgbWVhbnMgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWRkcmVzc2FibGUgc3ltYm9scy4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgKm5vdCogaW5saW5lZCBiZWNhdXNlIGl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSB3b3JrIHF1ZXVlLCBtYWtpbmcgaXQgYSB2YWxpZCBzeW1ib2wgaW4gYHZtbGludXhgLiBUaGUgb3RoZXIgdHdvIChgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgKSBhcmUgRVhQT1JUX1NZTUJPTF9HUEwsIHNvIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUuXG5cbmByaGFzaHRhYmxlX2luc2VydF9zbG93YCBpdHNlbGYgY2FsbHMgYHJoYXNodGFibGVfdHJ5X2luc2VydGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJodF9sb2NrYC4gYHJodF9sb2NrYCBpcyB3aGVyZSB0aGUgbG9ja2luZyBvY2N1cnMgYW5kIGlzIHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCB0aGlzLCB3aGljaCB3aWxsIGxldCBtZSBnZXQgYXQgdGhlIGxvY2suIExvb2tpbmcgYXQgYHJodF9sb2NrX25lc3RlZGAgd2hpY2ggYHJodF9sb2NrYCBjYWxscywgSSBzZWUgdGhhdCB3aXRoaW4gYGxpYi9yaGFzaHRhYmxlLmNgOiBgcmhhc2h0YWJsZV9yZWhhc2hfb25lYCBhbmQgYHJoYXNodGFibGVfcmVoYXNoX2NoYWluYCBjYWxsIG5lc3RlZCB2ZXJzaW9ucyBvZiB0aGUgbG9jay4gQWxzbywgYHJodF9kZWZlcnJlZF93b3JrZXJgIGNhbGxzIGByaGFzaHRhYmxlX3JlaGFzaF90YWJsZWAsIHdoaWNoIGNhbGxzIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zLCBhbmQgYWxzbyB0YWtlcyBhIG11dGV4IGxvY2sgYmVmb3JlIHRoYXQuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95YCB0YWtlcyBhbnkgbG9ja3MsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjowMi44ODEwNTM5NDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0NixcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI0NjpcXHR2b2lkIHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuMTI0NzpcXHRcXHRcXHRcXHRcXHQgdm9pZCAoKmZyZWVfZm4pKHZvaWQgKnB0ciwgdm9pZCAqYXJnKSxcXG4xMjQ4OlxcdFxcdFxcdFxcdFxcdCB2b2lkICphcmcpXFxuMTI0OTpcXHR7XFxuMTI1MDpcXHRcXHRzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsICpuZXh0X3RibDtcXG4xMjUxOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbjEyNTI6XFx0XFxuMTI1MzpcXHRcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZodC1cXHUwMDNlcnVuX2lycV93b3JrKTtcXG4xMjU0OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmh0LVxcdTAwM2VydW5fd29yayk7XFxuMTI1NTpcXHRcXG4xMjU2OlxcdFxcdC8qXFxuMTI1NzpcXHRcXHQgKiBEbyBOT1QgdGFrZSBodC1cXHUwMDNlbXV0ZXggaGVyZS4gVGhlIHJlaGFzaCB3b3JrZXIgZXN0YWJsaXNoZXNcXG4xMjU4OlxcdFxcdCAqIGh0LVxcdTAwM2VtdXRleCAtXFx1MDAzZSBmc19yZWNsYWltIHZpYSBHRlBfS0VSTkVMIGJ1Y2tldCBhbGxvY2F0aW9uIHVuZGVyXFxuMTI1OTpcXHRcXHQgKiB0aGUgbXV0ZXg7IGNhbGxlcnMgb24gdGhlIHJlY2xhaW0gcGF0aCAoZS5nLiBzaW1wbGVfeGF0dHJfaHRfZnJlZSgpXFxuMTI2MDpcXHRcXHQgKiBmcm9tIGV2aWN0KCkgdW5kZXIgdGhlIGRjYWNoZSBzaHJpbmtlciBmb3Igc2htZW0va2VybmZzL3BpZGZzXFxuMTI2MTpcXHRcXHQgKiBpbm9kZXMpIHdvdWxkIG90aGVyd2lzZSBjbG9zZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3lcXG4xMjYyOlxcdFxcdCAqIGZzX3JlY2xhaW0gLVxcdTAwM2UgaHQtXFx1MDAzZW11dGV4LlxcbjEyNjM6XFx0XFx0ICovXFxuMTI2NDpcXHRcXHR0YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGh0LVxcdTAwM2V0YmwpO1xcbjEyNjU6XFx0cmVzdGFydDpcXG4xMjY2OlxcdFxcdGlmIChmcmVlX2ZuKSB7XFxuMTI2NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGJsLVxcdTAwM2VzaXplOyBpKyspIHtcXG4xMjY4OlxcdFxcdFxcdFxcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xcbjEyNjk6XFx0XFxuMTI3MDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMjcxOlxcdFxcdFxcdFxcdGZvciAocG9zID0gcmh0X3B0cl9leGNsdXNpdmUocmh0X2J1Y2tldCh0YmwsIGkpKSxcXG4xMjcyOlxcdFxcdFxcdFxcdCAgICAgbmV4dCA9ICFyaHRfaXNfYV9udWxscyhwb3MpID9cXG4xMjczOlxcdFxcdFxcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLVxcdTAwM2VuZXh0KSA6IE5VTEw7XFxuMTI3NDpcXHRcXHRcXHRcXHQgICAgICFyaHRfaXNfYV9udWxscyhwb3MpO1xcbjEyNzU6XFx0XFx0XFx0XFx0ICAgICBwb3MgPSBuZXh0LFxcbjEyNzY6XFx0XFx0XFx0XFx0ICAgICBuZXh0ID0gIXJodF9pc19hX251bGxzKHBvcykgP1xcbjEyNzc6XFx0XFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtXFx1MDAzZW5leHQpIDogTlVMTClcXG4xMjc4OlxcdFxcdFxcdFxcdFxcdHJoYXNodGFibGVfZnJlZV9vbmUoaHQsIHBvcywgZnJlZV9mbiwgYXJnKTtcXG4xMjc5OlxcdFxcdFxcdH1cXG4xMjgwOlxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0bmV4dF90YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHRibC1cXHUwMDNlZnV0dXJlX3RibCk7XFxuMTI4MzpcXHRcXHRidWNrZXRfdGFibGVfZnJlZSh0YmwpO1xcbjEyODQ6XFx0XFx0aWYgKG5leHRfdGJsKSB7XFxuMTI4NTpcXHRcXHRcXHR0YmwgPSBuZXh0X3RibDtcXG4xMjg2OlxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4xMjg3OlxcdFxcdH1cXG4xMjg4OlxcdH1cXG4xMjg5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveSk7XFxuMTI5MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MDIuODgxMjE0NTU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NDg1NjA4MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUmF0aW9uYWxlOiBSaGFzaHRhYmxlIExvY2tpbmcgXHUwMDI2IExvY2tkZXAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGlzIHBhdGNoIHRvdWNoaW5nIGBsaWIvcmhhc2h0YWJsZS5jYCwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb21tZW50IGluIGByaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3lgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUsIGhpZ2hsaWdodGluZyB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiByaGFzaHRhYmxlJ3MgbG9ja2luZywgYGZzX3JlY2xhaW1gLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnIGZvciBsb2NrZGVwLCBhbmQgaXQgbWVhbnMgd2UgbmVlZCB0byBiZSBleHRyYSBjYXV0aW91cyBpbiBob3cgd2UgdGFyZ2V0IHRoaXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiByZWZhY3RvcmluZyB0aGUgbG9ja2RlcCBrZXkgaW5pdGlhbGl6YXRpb24sIGdvaW5nIGZyb20gYSBzaW5nbGUgc2hhcmVkIGtleSB0byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzLiAgSXQgYWxzbyByZWNvbmZpZ3VyZXMgdGhlIGxvY2sgbmVzdGluZyBzdWJjbGFzc2VzIGZvciBgdGJsLVx1MDAzZWRlcF9tYXBgIGFuZCBgaHQtXHUwMDNlbXV0ZXhgLiBUaGlzIGlzIGFsbCBhYm91dCBsb2NrIHZhbGlkYXRpb24sIGFuZCBhbnl0aGluZyB0aGF0IG1lc3NlcyB3aXRoIGxvY2tkZXAgaW4gYSBjb3JlIGRhdGEgc3RydWN0dXJlIGxpa2UgYHJoYXNodGFibGVgICpzY3JlYW1zKiBcIndvcnRoIGZ1enppbmcuXCIgUmhhc2h0YWJsZXMgYXJlIGV2ZXJ5d2hlcmUg4oCTIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zLCBJUEMsIHlvdSBuYW1lIGl0IOKAkyBzbyBhbnkgbG9ja2luZyByZWdyZXNzaW9uIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBkb3duc3RyZWFtIGltcGFjdC5cblxuUmVnYXJkaW5nIHJlbGV2YW50IGNvbmZpZ3MsIHRoZSBjaGFuZ2VkIGNvZGUgdXRpbGl6ZXMgYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCwgd2hpY2ggaXMgc3RhbmRhcmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gYGxpYi9yaGFzaHRhYmxlLmNgIGlzIGFsd2F5cyBidWlsdCwgc28gd2UgY2FuIHJlbGlhYmx5IGluY2x1ZGUgdGhlc2UuICBTaW5jZSBgUFJPVkVfTE9DS0lOR2AgaW1wbGljaXRseSBpbmNsdWRlcyBgTE9DS0RFUGAsIHdlJ3JlIHNvbGlkIHRoZXJlLlxuXG5Ob3csIGZvciBzeW1ib2wgc2VsZWN0aW9uLCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGluIGBsaWIvcmhhc2h0YWJsZS5jYDogYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAsIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCwgYW5kIGByaHRfZGVmZXJyZWRfd29ya2VyYC4gSSBrbm93IHRoYXQgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGlzIGEgbWFjcm8sIGJ1dCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgIGFyZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMuIEkndmUgYWxzbyBpbmNsdWRlZCBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgYmVjYXVzZSBpdCBleGVyY2lzZXMgaW5zZXJ0aW9uIGFuZCB0aGUgYnVja2V0IGJpdGxvY2sgbG9naWMgYW5kIGNhbGxzIGByaHRfbG9ja2AuIEkgYnJpZWZseSBjaGVja2VkIGBsaWIvdGVzdF9yaGFzaHRhYmxlLmNgLCBidXQgdGhlIGNoYW5nZXMgdGhlcmUgYXJlIGlzb2xhdGVkIHRvIGEgdGVzdCBtb2R1bGUncyBgcHJpbnRfaHRgIGZ1bmN0aW9uLCBhbmQgbm90IGNyaXRpY2FsIGZvciBvdXIgc3l6a2FsbGVyIGZvY3VzLlxuXG5TbyB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbnMgd2l0aGluIHRoZSByaGFzaHRhYmxlIGNvZGUsIGRpcmVjdGx5IGltcGFjdGluZyBsb2NrIHZhbGlkYXRpb24uIEFueSBzdWJ0bGUgZXJyb3IgaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBleHBvc2UgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIHVuZGVyIGxvY2tkZXAuIFRoYXQncyB3aHkgSSdtIGNvbmZpZGVudCBhYm91dCB0aGVzZSBzZXR0aW5ncyBmb3IgdGhlIGZ1enppbmcgcnVuOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogdHJ1ZVxuKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgKGBsaWIvcmhhc2h0YWJsZS5jYCBhbmQgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZSouaGApLiBTcGVjaWZpY2FsbHksIGl0IHNlcGFyYXRlcyB0aGUgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIGhhc2ggdGFibGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCksIGFuZCBhZGp1c3RzIHRoZSBsb2NrZGVwIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIGB0YmwtXHUwMDNlZGVwX21hcGAgYW5kIGBodC1cdTAwM2VtdXRleGAuIFJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBJUEMuIENoYW5nZXMgaW4gbG9ja2RlcCBhbm5vdGF0aW9ucyBhbmQgbG9ja2luZyBydWxlcyBkaXJlY3RseSBpbXBhY3QgbG9jayB2YWxpZGF0aW9uIGFuZCBjYW4gZXhwb3NlIGxhdGVudCBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMgdW5kZXIgbG9ja2RlcC5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFxbXCJQUk9WRVxcX0xPQ0tJTkdcIiwgXCJMT0NLREVQXCJdXG4qICAgKipGb2N1c1N5bWJvbHMqKjogXFxbXCJcXF9cXF9yaGFzaHRhYmxlXFxfaW5pdFxcX25vcHJvZlwiLCBcIlxcX1xcX3JobHRhYmxlXFxfaW5pdFxcX25vcHJvZlwiLCBcInJodFxcX2RlZmVycmVkXFxfd29ya2VyXCIsIFwicmhhc2h0YWJsZVxcX2luc2VydFxcX3Nsb3dcIl1cblxuV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIHZlcmlmaWVkLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTk2LCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjoxNy4zNjY4MjU5NDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ4NDE3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZcIixcbiAgICBcIl9fcmhsdGFibGVfaW5pdF9ub3Byb2ZcIixcbiAgICBcInJodF9kZWZlcnJlZF93b3JrZXJcIixcbiAgICBcInJoYXNodGFibGVfaW5zZXJ0X3Nsb3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgaW4gbGliL3JoYXNodGFibGUuYyBhbmQgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oLiBJdCBzZXBhcmF0ZXMgdGhlIHByZXZpb3VzbHkgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIG11dGV4LCBzcGlubG9jaywgYW5kIGJ1Y2tldCBiaXRsb2NrcyAoc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzKSwgYW5kIHVwZGF0ZXMgdGhlIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIHRoZSBidWNrZXQgYml0bG9jayBtYXAgYW5kIHRhYmxlIG11dGV4LiBTaW5jZSByaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIElQQywgYW5kIGZpbGVzeXN0ZW1zLCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlc2UgbG9ja2luZyBhbmQgYW5ub3RhdGlvbiBjaGFuZ2VzIGRvIG5vdCBjYXVzZSBsb2NrZGVwIHNwbGF0cyBvciB1bmNvdmVyIGxhdGVudCBsb2NrIG9yZGVyaW5nIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcmhhc2h0YWJsZV9pbml0X25vcHJvZlwiLFxuICAgIFwiX19yaGx0YWJsZV9pbml0X25vcHJvZlwiLFxuICAgIFwicmh0X2RlZmVycmVkX3dvcmtlclwiLFxuICAgIFwicmhhc2h0YWJsZV9pbnNlcnRfc2xvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MTcuNTExNjc3MDk4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY4NjY2MDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjE3LjUxMjE2NTM3OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY4Njg2MTY2NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwIGFubm90YXRpb25zIHdpdGhpbiByaGFzaHRhYmxlIGJ5IGludHJvZHVjaW5nIGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIHRvIHByb3ZpZGUgZGlzdGluY3QgYGxvY2tfY2xhc3Nfa2V5YCBzdHJ1Y3R1cmVzIGZvciB0aGUgc3BpbmxvY2ssIG11dGV4LCBhbmQgYnVja2V0IGJpdGxvY2sgKHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2Ygc2hhcmluZyBhIHNpbmdsZSBsb2NrZGVwIGtleSB3aXRoIG1hbnVhbCBzdWJjbGFzcyBvZmZzZXRzKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBldmFsdWF0ZWQgaW4gYnJhbmNoaW5nIGxvZ2ljLiBUaGUgbG9ja2RlcCBrZXlzIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCB2YXJpYWJsZXMgaW5zaWRlIG1hY3JvIHdyYXBwZXJzIChgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmApLCByZXNpZGluZyBpbiBCU1MuXFxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIGRhdGEgYnVmZmVycywgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgc2VyaWFsaXphdGlvbi5cXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxcblxcbkNvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NmQ2NGMxZWU2M2E2NGI4ZGQyNDRiN2Y5MGE5MGQxZGIwMjBkOTVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5pbmRleCAwZTFiMTcyYTRmNmNiLi5hZmJjMTJiYTcxZjViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5AQCAtNzAsNiArNzAsMTQgQEAgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHtcbiBcdHJodF9vYmpfY21wZm5fdFx0XHRvYmpfY21wZm47XG4gfTtcbiBcbitzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMge1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK1x0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5O1xuK1x0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IG11dGV4X2tleTtcbitcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5O1xuKyNlbmRpZlxuK307XG4rXG4gLyoqXG4gICogc3RydWN0IHJoYXNodGFibGUgLSBIYXNoIHRhYmxlIGhhbmRsZVxuICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZVxuQEAgLTE0MSwyNCArMTQ5LDc3IEBAIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIge1xuIFxuIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuIFx0XHQgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XG4rXHRcdCAgICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpO1xuICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zKVx0XHRcdFx0XFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5O1x0XHRcdFx0XFxcbitcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1x0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcdTAwMjZfX2tleSk7XHRcdFx0XFxcbitcdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcdTAwMjZfX2tleXMpO1x0XHRcdFxcXG4gfSlcbitcbisvKipcbisgKiByaGFzaHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggdGFibGVcbisgKiBAaHQ6XHRcdGhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbisgKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4rICpcbisgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uXG4rICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXG4rICogZml4ZWQgbGVuZ3RoIGtleTpcbisgKlxuKyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xuKyAqIHN0cnVjdCB0ZXN0X29iaiB7XG4rICpcdGludFx0XHRcdGtleTtcbisgKlx0dm9pZCAqXHRcdFx0bXlfbWVtYmVyO1xuKyAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbisgKiB9O1xuKyAqXG4rICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcbisgKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbisgKlx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXG4rICpcdC5rZXlfbGVuID0gc2l6ZW9mKGludCksXG4rICpcdC5oYXNoZm4gPSBqaGFzaCxcbisgKiB9O1xuKyAqXG4rICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzXG4rICogc3RydWN0IHRlc3Rfb2JqIHtcbisgKlx0Wy4uLl1cbisgKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4rICogfTtcbisgKlxuKyAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxuKyAqIHtcbisgKlx0c3RydWN0IHRlc3Rfb2JqICpvYmogPSBkYXRhO1xuKyAqXG4rICpcdHJldHVybiBbLi4uIGhhc2ggLi4uXTtcbisgKiB9XG4rICpcbisgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuKyAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuKyAqXHQuaGFzaGZuID0gamhhc2gsXG4rICpcdC5vYmpfaGFzaGZuID0gbXlfaGFzaF9mbixcbisgKiB9O1xuKyAqL1xuICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0KC4uLilcdGFsbG9jX2hvb2tzKHJoYXNodGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxuIFx0XHQgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHQgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTtcbitcdFx0ICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpO1xuICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuK1x0c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0X19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgXHUwMDI2X19rZXkpO1x0XHRcdFxcXG4rXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcdTAwMjZfX2tleXMpO1x0XHRcdFxcXG4gfSlcbitcbisvKipcbisgKiByaGx0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIGxpc3QgdGFibGVcbisgKiBAaGx0Olx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXG4rICogQHBhcmFtczpcdGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuKyAqXG4rICogSW5pdGlhbGl6ZXMgYSBuZXcgaGFzaCBsaXN0IHRhYmxlLlxuKyAqXG4rICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC5cbisgKi9cbiAjZGVmaW5lIHJobHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuICNlbmRpZiAvKiBfTElOVVhfUkhBU0hUQUJMRV9UWVBFU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuaW5kZXggNmM1ZTZkOWFjY2JhNy4uZWM4NTNjMWI5YWYzYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuQEAgLTMyOCw4ICszMjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilidWNrZXQpO1xuLVx0Lyogc3ViY2xhc3MgMCBpcyB1c2VkIGZvciAtXHUwMDNlbG9jayBhbmQgMSBmb3IgLVx1MDAzZW11dGV4LiAyKyBmb3IgYml0bG9ja3MgKi9cbi1cdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUoXHUwMDI2dGJsLVx1MDAzZWRlcF9tYXAsIHN1YmNsYXNzKzIsIDAsIE5VTEwsIF9USElTX0lQXyk7XG4rXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKFx1MDAyNnRibC1cdTAwM2VkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTtcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbGliL3JoYXNodGFibGUuYyBiL2xpYi9yaGFzaHRhYmxlLmNcbmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0XG4tLS0gYS9saWIvcmhhc2h0YWJsZS5jXG4rKysgYi9saWIvcmhhc2h0YWJsZS5jXG5AQCAtNDMyLDcgKzQzMiw3IEBAIHN0YXRpYyB2b2lkIHJodF9kZWZlcnJlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRodCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgcmhhc2h0YWJsZSwgcnVuX3dvcmspO1xuLVx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIDEpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZodC1cdTAwM2VtdXRleCk7XG4gXG4gXHR0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtXHUwMDNldGJsLCBodCk7XG4gXHR0YmwgPSByaGFzaHRhYmxlX2xhc3RfdGFibGUoaHQsIHRibCk7XG5AQCAtMTEyMiw1MSArMTEyMiw5IEBAIHN0YXRpYyB1MzIgcmhhc2h0YWJsZV9qaGFzaDIoY29uc3Qgdm9pZCAqa2V5LCB1MzIgbGVuZ3RoLCB1MzIgc2VlZClcbiBcdHJldHVybiBqaGFzaDIoa2V5LCBsZW5ndGgsIHNlZWQpO1xuIH1cbiBcbi0vKipcbi0gKiByaGFzaHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggdGFibGVcbi0gKiBAaHQ6XHRcdGhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbi0gKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tICpcbi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uXG4tICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXG4tICogZml4ZWQgbGVuZ3RoIGtleTpcbi0gKlxuLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xuLSAqIHN0cnVjdCB0ZXN0X29iaiB7XG4tICpcdGludFx0XHRcdGtleTtcbi0gKlx0dm9pZCAqXHRcdFx0bXlfbWVtYmVyO1xuLSAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbi0gKiB9O1xuLSAqXG4tICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcbi0gKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbi0gKlx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXG4tICpcdC5rZXlfbGVuID0gc2l6ZW9mKGludCksXG4tICpcdC5oYXNoZm4gPSBqaGFzaCxcbi0gKiB9O1xuLSAqXG4tICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcbi0gKlx0Wy4uLl1cbi0gKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4tICogfTtcbi0gKlxuLSAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxuLSAqIHtcbi0gKlx0c3RydWN0IHRlc3Rfb2JqICpvYmogPSBkYXRhO1xuLSAqXG4tICpcdHJldHVybiBbLi4uIGhhc2ggLi4uXTtcbi0gKiB9XG4tICpcbi0gKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuLSAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuLSAqXHQuaGFzaGZuID0gamhhc2gsXG4tICpcdC5vYmpfaGFzaGZuID0gbXlfaGFzaF9mbixcbi0gKiB9O1xuLSAqL1xuIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLVx0XHQgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuK1x0XHRcdCAgICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKVxuIHtcbiBcdHN0cnVjdCBidWNrZXRfdGFibGUgKnRibDtcbiBcdHNpemVfdCBzaXplO1xuQEAgLTExNzYsMTMgKzExMzQsMTEgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0bWVtc2V0KGh0LCAwLCBzaXplb2YoKmh0KSk7XG4tXHQvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqL1xuLVx0bXV0ZXhfaW5pdF93aXRoX2tleShcdTAwMjZodC1cdTAwM2VtdXRleCwga2V5KTtcbitcdG11dGV4X2luaXRfd2l0aF9rZXkoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIFx1MDAyNmtleXMtXHUwMDNlbXV0ZXhfa2V5KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh0LVx1MDAzZWxvY2spO1xuLVx0Lyogc3Bpbl9sb2NrIGNhbiB1c2UgbmVzdGluZyBsZXZlbCAwICovXG4tXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZodC1cdTAwM2Vsb2NrLCBrZXkpO1xuK1x0bG9ja2RlcF9zZXRfY2xhc3MoXHUwMDI2aHQtXHUwMDNlbG9jaywgXHUwMDI2a2V5cy1cdTAwM2Vsb2NrX2tleSk7XG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4tXHRodC1cdTAwM2Vsb2NrZGVwX2tleSA9IGtleTtcbitcdGh0LVx1MDAzZWxvY2tkZXBfa2V5ID0gXHUwMDI2a2V5cy1cdTAwM2VidWNrZXRfa2V5O1xuICNlbmRpZlxuIFx0bWVtY3B5KFx1MDAyNmh0LVx1MDAzZXAsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbkBAIC0xMjM2LDIyICsxMTkyLDEzIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xuIFxuLS8qKlxuLSAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZVxuLSAqIEBobHQ6XHRoYXNoIGxpc3QgdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbi0gKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tICpcbi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuXG4tICpcbi0gKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LlxuLSAqL1xuIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHRcdCAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxuK1x0XHRcdCAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXkpO1xuK1x0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXlzKTtcbiBcdGhsdC1cdTAwM2VodC5yaGxpc3QgPSB0cnVlO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXG5pbmRleCA4NWE2MTVlNzQ1OTExLi5iNzY3YTM4YTc0Zjk3IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXG4rKysgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmNcbkBAIC00NzcsNyArNDc3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgcHJpbnRfaHQoc3RydWN0IHJobHRhYmxlICpyaGx0KVxuIFxuIFx0aHQgPSBcdTAwMjZyaGx0LVx1MDAzZWh0O1xuIFx0LyogVGFrZSB0aGUgbXV0ZXggdG8gYXZvaWQgUkNVIHdhcm5pbmcgKi9cbi1cdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNmh0LVx1MDAzZW11dGV4LCAxKTtcbitcdG11dGV4X2xvY2soXHUwMDI2aHQtXHUwMDNlbXV0ZXgpO1xuIFx0dGJsID0gcmh0X2RlcmVmZXJlbmNlKGh0LVx1MDAzZXRibCwgaHQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGJsLVx1MDAzZXNpemU7IGkrKykge1xuIFx0XHRzdHJ1Y3Qgcmhhc2hfaGVhZCAqcG9zLCAqbmV4dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjE3LjUxMjE2NjU0OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTQzNzUxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcmhhc2h0YWJsZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHJoYXNodGFibGUgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgY2hhbmdlcy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGByaGFzaHRhYmxlYCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbG9ja2RlcCBhbmQgaW5pdGlhbGl6YXRpb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYHJoYXNodGFibGUtdHlwZXMuaGAsIGByaGFzaHRhYmxlLmhgLCBgcmhhc2h0YWJsZS5jYCwgYW5kIHRoZSB0ZXN0IGZpbGUgYHRlc3Rfcmhhc2h0YWJsZS5jYC5cblxuRmlyc3QsIGByaGFzaHRhYmxlLXR5cGVzLmhgIGludHJvZHVjZXMgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AsIHdoaWNoIGFwcGVhcnMgdG8gZW5jYXBzdWxhdGUgbG9ja2RlcCBrZXlzIGZvciB0aGUgcmhhc2h0YWJsZSdzIGxvY2tzLiBJdCB1c2VzIGBDT05GSUdfTE9DS0RFUGAgZ3VhcmRzLCBzbyBpdCdzIGNvbmRpdGlvbmFsLiBUaGUgaW5pdGlhbGl6YXRpb24gbWFjcm9zLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgLCBhcmUgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgYHN0cnVjdGAgYW5kIGEgc3RhdGljIGluc3RhbmNlIG9mIGl0IChgX19rZXlzYCkuIFRoZSBkb2N1bWVudGF0aW9uIG1vdmUgaXMganVzdCBhIGNvZGUgb3JnYW5pemF0aW9uIGNoYW5nZSwgc28gdGhhdCdzIG5vdCBjcml0aWNhbCBmb3Igbm93LiBUaGUgc2FtZSBjaGFuZ2VzIG9jY3VyIGZvciBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmAuXG5cblRoZW4sIGByaGFzaHRhYmxlLmhgIGlzIGNoYW5naW5nIHRoZSBgcmh0X2xvY2tfbmVzdGVkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgd2FzIGFuIG9mZi1ieS1vbmUgZXJyb3Igd2l0aCB0aGUgYHN1YmNsYXNzYCBhcmd1bWVudCBmb3IgYGxvY2tfYWNxdWlyZV9leGNsdXNpdmVgLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBgc3ViY2xhc3NgIDAgYW5kIDEgYXJlIHVzZWQgZm9yIHRoZSB0YWJsZSBsb2NrIGFuZCBtdXRleCByZXNwZWN0aXZlbHksIGFuZCAyKyBpcyB1c2VkIGZvciBiaXRsb2Nrcy4gU2luY2UgbG9ja2RlcCBrZXlzIGFyZSBub3cgZXhwbGljaXRseSBkZWZpbmVkIGZvciBsb2NrLCBtdXRleCwgYW5kIGJ1Y2tldCAoYml0bG9jayksIHRoZXJlIGlzIG5vIHJlYXNvbiBmb3IgdGhlIGArMmAgYW55bW9yZS4gVGhpcyBpcyBhIGdvb2QgZml4LlxuXG5UaGUgbWVhdCBvZiB0aGUgY2hhbmdlcyBzZWVtcyB0byBiZSBpbiBgbGliL3JoYXNodGFibGUuY2AuICBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgdXBkYXRlZCB0byB1c2UgdGhlIHJlZ3VsYXIgYG11dGV4X2xvY2tgIGluc3RlYWQgb2YgdGhlIG5lc3RlZCB2ZXJzaW9uLiBUaGUgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgZnVuY3Rpb24gaXMgYmVpbmcgbW9kaWZpZWQgc2lnbmlmaWNhbnRseS4gSXQgbm93IHRha2VzIHRoYXQgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5c2AgYW5kIHVzZXMgaXQgdG8gaW5pdGlhbGl6ZSB0aGUgbXV0ZXggd2l0aCBgbXV0ZXhfaW5pdF93aXRoX2tleWAsIHNldHMgdGhlIGxvY2sgY2xhc3MgdmlhIGBsb2NrZGVwX3NldF9jbGFzc2AsIGFuZCBzZXRzIGBodC1cdTAwM2Vsb2NrZGVwX2tleWAuIFRoZSBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgZnVuY3Rpb24gaXMgbm93IHBhc3NpbmcgYGtleXNgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVhbCBwb3RlbnRpYWwgZm9yIGlzc3VlcywgYW5kIHRodXMgZnV6emluZyBuZWVkcywgd2lsbCBsaWUuIFRoZSBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgIGNoYW5nZXMgYXJlIG5ldy5cblxuRmluYWxseSwgaW4gYGxpYi90ZXN0X3JoYXNodGFibGUuY2AsIHRoZSBgbXV0ZXhfbG9ja2AgaXMgc2ltcGxpZmllZCwgY29uc2lzdGVudCB3aXRoIHRoZSBwcmV2aW91cyBjaGFuZ2UuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUsIHRoZXNlIGNoYW5nZXMgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlIGxvY2tkZXAgaXNzdWVzIG9yIHVuaW5pdGlhbGl6ZWQgdXNlIG9mIHRoZSBsb2NrZGVwIGtleXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBjYWxsZXJzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBzZWUgaG93IHBlcnZhc2l2ZSB0aGVzZSBuZXcgcGFyYW1ldGVycyBhcmUgYW5kIGlmIHRoZSBgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIEJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgSSdsbCBgZ3JlcGAgZm9yIGBfX3JoYXNodGFibGVfaW5pdGAgYW5kIGBfX3JobHRhYmxlX2luaXRgIGNhbGxzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXkgYXJlIHVzZWQuIEEgc3RhdGljIGFuYWx5c2lzICpzaG91bGQqIGJlIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGEgcmVhbCBLTVNBTiByaXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MjUuNjU1OTIzNDI5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIwMTMwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmhhc2h0YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oPTE0MD1zdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE0OS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoxNTA6aW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTUxLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MTU3OlxcdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU4LX0pXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTExMjA9c3RhdGljIHUzMiByaGFzaHRhYmxlX2poYXNoMihjb25zdCB2b2lkICprZXksIHUzMiBsZW5ndGgsIHUzMiBzZWVkKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMTI0LVxcbmxpYi9yaGFzaHRhYmxlLmM6MTEyNTppbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG5saWIvcmhhc2h0YWJsZS5jLTExMjYtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTE5Mi19XFxubGliL3JoYXNodGFibGUuYzoxMTkzOkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XFxubGliL3JoYXNodGFibGUuYy0xMTk0LVxcbmxpYi9yaGFzaHRhYmxlLmM9MTE5NT1pbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTIwMC1cXG5saWIvcmhhc2h0YWJsZS5jOjEyMDE6XFx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFxcdTAwMjZobHQtXFx1MDAzZWh0LCBwYXJhbXMsIGtleXMpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTIwMi1cXHRobHQtXFx1MDAzZWh0LnJobGlzdCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjI3Ljg3NjA2MTE3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyOTA1MzI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX3JobHRhYmxlX2luaXRgIENhbGxzKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBfX3JobHRhYmxlX2luaXRgIGZ1bmN0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSdtIHRyeWluZyB0byBhc2NlcnRhaW4gaXMgdGhlIHNjb3BlIG9mIGl0cyB1c2FnZS4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBpcyBiZWluZyB1c2VkLiBSaWdodCBub3csIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgXCJBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyB3aGVyZSBgX19yaGx0YWJsZV9pbml0YCBpcyBiZWluZyBjYWxsZWQgYmVzaWRlcyB0aGUgb25lcyBJJ20gYWxyZWFkeSBhd2FyZSBvZj9cIi4gVGhpcyBpcyBiYXNpYyBkdWUgZGlsaWdlbmNlLiBJZGVudGlmeWluZyBhbGwgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgaW5mbHVlbmNlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgb2YgY291cnNlLCBmb3IgZGVidWdnaW5nIGFuZCByZWZhY3RvcmluZyBkb3duIHRoZSBsaW5lLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjozMy4xNjY1OTY3NzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzUyNzU5NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yaGx0YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oPTE1MD1pbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwMy1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoyMDQ6aW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMjA1LVxcdFxcdCAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMTAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIxMTpcXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMjEyLX0pXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTExOTM9RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXFxubGliL3JoYXNodGFibGUuYzoxMTk1OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbmxpYi9yaGFzaHRhYmxlLmMtMTE5Ni1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTIwNC19XFxubGliL3JoYXNodGFibGUuYzoxMjA1OkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhsdGFibGVfaW5pdF9ub3Byb2YpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTIwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MzUuNDQxODgwODI1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4MTQ4MDM2ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcmhhc2h0YWJsZSBJbml0aWFsaXphdGlvbiBhbmQgTG9ja2RlcCBLZXlzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcmhhc2h0YWJsZV9pbml0YCBvciBgcmhsdGFibGVfaW5pdGAgbWFjcm8sIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgaXQgZGVjbGFyZXMgYSBgc3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7YC4gVGhhdCBgc3RhdGljYCBxdWFsaWZpZXIgaXMgdGhlIGtleSBoZXJlLiBJdCBtZWFucyB0aGlzIGBfX2tleXNgIHZhcmlhYmxlIGlzIGdvaW5nIHRvIGxhbmQgaW4gZWl0aGVyIHRoZSBCU1Mgb3IgdGhlIGRhdGEgc2VjdGlvbiwgYW5kIGltcG9ydGFudGx5LCBpdCdsbCBiZSB6ZXJvLWluaXRpYWxpemVkLiBOb3csIGtub3dpbmcgd2hhdCBJIGRvIGFib3V0IGxvY2tkZXAsIHRob3NlIFwibG9ja2RlcCBrZXlzXCIgYXJlIGJhc2ljYWxseSBqdXN0IHBsYWNlaG9sZGVyIGFkZHJlc3NlcyBmb3IgdGhlIGxvY2tkZXAgbWFjaGluZXJ5LiBUaGUgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgaXRzZWxmIOKAkyBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSDigJMgaXMgZWl0aGVyIGFuIGVtcHR5IHN0cnVjdCBvciBhIGR1bW15LCBzbyBsb2NrZGVwIGlzIHJlYWxseSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlICphZGRyZXNzKiBvZiBpdC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc3RydWN0IGxvY2tfY2xhc3Nfa2V5YCBkZWZpbml0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIG15IG1lbW9yeSBpcyBzZXJ2aW5nIG1lIGNvcnJlY3RseSBoZXJlLiBJIGp1c3Qgd2FudCB0byB2ZXJpZnkgaG93IHRoZSBrZXkgc3RydWN0IGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6MTMuNTg5OTM2NzQ4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUzMzM0ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBsb2NrX2NsYXNzX2tleSBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaD03MD1zdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgtNzQtLyogaGFzaF9lbnRyeSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGtleXMuICovXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg6NzU6c3RydWN0IGxvY2tfY2xhc3Nfa2V5IHtcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC03Ni1cXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaD0yMDY9c3RydWN0IGhlbGRfbG9jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC0yNjQtICovXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg6MjY1OnN0cnVjdCBsb2NrX2NsYXNzX2tleSB7IH07XFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgtMjY2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oLTUtXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oOjY6c3RydWN0IGxvY2tfY2xhc3Nfa2V5IHtcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC9sb2NrZGVwLmgtNy1cXHR1bnNpZ25lZCBpbnQgYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6MTYuMTQzMjc4NDY0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMDU1MDIxODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHJoYXNodGFibGUgTG9ja2RlcCBDaGFuZ2VzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QgYWZ0ZXIgcmV2aWV3aW5nIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGByaGFzaHRhYmxlYCBsb2NrZGVwIGFubm90YXRpb25zLiBJdCdzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGxvY2tkZXAgaW1wbGVtZW50YXRpb24uIEJlZm9yZSwgdGhleSB3ZXJlIGF3a3dhcmRseSBzaGFyaW5nIGEgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgYWNyb3NzIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jay4gVGhhdCBmb3JjZWQgc29tZSBwcmV0dHkgbWVzc3kgc3ViY2xhc3MgbmVzdGluZyB0cmlja3MgdXNpbmcgYHN1YmNsYXNzKzJgIGFuZCBzcGVjaWZpYyBgbXV0ZXhfbG9ja19uZXN0ZWRgIGNhbGxzLiBGcmFua2x5LCBpdCB3YXMgYSBiaXQgb2YgYSBoYWNrLlxuXG5Ob3csIHdlIGhhdmUgYSBwcm9wZXIgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2Agd2hpY2ggY2xlYW5seSBkZWZpbmVzIHRocmVlIHNlcGFyYXRlIGBsb2NrX2NsYXNzX2tleXNgOiBgbG9ja19rZXlgLCBgbXV0ZXhfa2V5YCwgYW5kIGBidWNrZXRfa2V5YC4gVGhpcyBpcyAqbXVjaCogY2xlYW5lcjsgZWFjaCBsb2NrIGdldHMgaXRzIG93biBkZWRpY2F0ZWQga2V5LiBJJ20gZ2xhZCB0byBzZWUgdGhhdCBjb21wbGV4aXR5IHJlZHVjZWQuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgcHJvYmxlbXMuIEJ1dCBhZnRlciBsb29raW5nIGF0IGl0IGNsb3NlbHksIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGFuIGlzc3VlIGhlcmUuIFRoZSBrZXlzIGFyZSBzdGF0aWNhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztgLCBtZWFuaW5nIHRoZXkgcmVzaWRlIGluIHRoZSBCU1Mgc2VjdGlvbiBhbmQgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBsb2FkZXIsIHNvIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBvbmx5IGV2ZXIgdXNpbmcgdGhlICphZGRyZXNzKiBvZiB0aGVzZSBrZXlzIChlLmcuLCBgXHUwMDI2a2V5cy1cdTAwM2VtdXRleF9rZXlgKSBmb3IgdGhlIGxvY2tkZXAgbWFjaGluZXJ5LCBzbyBubyBhY3R1YWwgZGF0YSBpcyBldmVyIGNvcGllZCBvciByZWFkIHRoYXQgY291bGQgYmUgdW5pbml0aWFsaXplZC4gVGhlcmUncyBubyBtZW1vcnkgYWxsb2NhdGlvbiBpbnZvbHZlZCwgbm8gY2hhbmdlcyB0byBidWZmZXIgbG9naWMsIGFuZCBubyByZWFkcyBvciBicmFuY2hlcyBiYXNlZCBvbiBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBDcml0aWNhbGx5LCBhbnkgbG9ja2luZyBidWdzIG9yIGRlYWRsb2NrcyAqd291bGQqIGJlIGNhdWdodCBieSBMT0NLREVQLCB3aGljaCBpcyB1c3VhbGx5IHBhcnQgb2Ygc3RhbmRhcmQgS0FTQU4gY29uZmlndXJhdGlvbnMgYW55d2F5LlxuXG5TbywgaW4gc3VtbWFyeSwgYmFzZWQgb24gdGhpcyByZXZpZXcsIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgaWRlbnRpZnlpbmcgbWVtb3J5IGlzc3VlcywgYnV0IHRoZSBwcmltYXJ5IGNvbmNlcm4gd2l0aCB0aGVzZSBjaGFuZ2VzIGlzIGxvY2tkZXAgYW5ub3RhdGlvbnMuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoZXJlYXMgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcGVydGluZW50LiBTaW5jZSB0aGUgbG9ja2RlcCBjaGFuZ2UgaXMgdGhlIG1haW4gZHJpdmVyIGFuZCBLTVNBTiBpc24ndCBkZXNpZ25lZCB0byBmaW5kIGxvY2tkZXAgaXNzdWVzLCB0aGlzIGlzIGFsbCBnb29kLiBUaGlzIHBhdGNoIGlzIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIxLCJPdXRwdXRUb2tlbnMiOjI0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoyNi4xOTgzMDY3NzZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gbG9ja2RlcCB0cmFja2luZyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cXG4yLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgZGF0YSBidWZmZXJzLCBhbGxvY2F0aW9ucywgYm91bmRzIGNoZWNrcywgb3IgZGF0YSBzZXJpYWxpemF0aW9uLlxcbjMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBsb2NraW5nIGhpZXJhcmNoeSBhbmQgY2xhc3MgYXNzaWdubWVudHMgYXJlIHRyYWNrZWQgZGlyZWN0bHkgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgY29uZmlndXJhdGlvbnMuXFxuXFxuQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gbG9ja2RlcCB0cmFja2luZyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cXG4yLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgZGF0YSBidWZmZXJzLCBhbGxvY2F0aW9ucywgYm91bmRzIGNoZWNrcywgb3IgZGF0YSBzZXJpYWxpemF0aW9uLlxcbjMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBsb2NraW5nIGhpZXJhcmNoeSBhbmQgY2xhc3MgYXNzaWdubWVudHMgYXJlIHRyYWNrZWQgZGlyZWN0bHkgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgY29uZmlndXJhdGlvbnMuXFxuXFxuQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow99xmd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 06:16:59 +0000 UTC FinishedAt: 2026-09-15 07:07:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e06d371730b841ad8fe79ebfccf0def9470201f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e06d371730b841ad8fe79ebfccf0def9470201f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "3a9dfe85-515f-47c4-847d-716ca86c88ba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__rhashtable_init_noprof", "__rhltable_init_noprof", "rht_deferred_worker", "rhashtable_insert_slow" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "9e06d371730b841ad8fe79ebfccf0def9470201f", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcmhhc2h0YWJsZV9pbml0X25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3JobHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O3JodF9kZWZlcnJlZF93b3JrZXImIzM0OywKICAgICYjMzQ7cmhhc2h0YWJsZV9pbnNlcnRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBkYXRhIGJ1ZmZlcnMsIGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIHNlcmlhbGl6YXRpb24uXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Db25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2ZDY0YzFlZTYzYTY0YjhkZDI0NGI3ZjkwYTkwZDFkYjAyMGQ5NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5pbmRleCAwZTFiMTcyYTRmNmNiLi5hZmJjMTJiYTcxZjViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5AQCAtNzAsNiAmIzQzOzcwLDE0IEBAIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyB7XG4gXHRyaHRfb2JqX2NtcGZuX3RcdFx0b2JqX2NtcGZuO1xuIH07XG4gXG4mIzQzO3N0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyB7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2NrX2tleTtcbiYjNDM7XHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5O1xuJiM0MztcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5O1xuJiM0MzsjZW5kaWZcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IHJoYXNodGFibGUgLSBIYXNoIHRhYmxlIGhhbmRsZVxuICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZVxuQEAgLTE0MSwyNCAmIzQzOzE0OSw3NyBAQCBzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIHtcbiBcbiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHQgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xuJiM0MztcdFx0ICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7XG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuJiM0MztcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1x0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcdTAwMjZfX2tleSk7XHRcdFx0XFxcbiYjNDM7XHRfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXHUwMDI2X19rZXlzKTtcdFx0XHRcXFxuIH0pXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlXG4mIzQzOyAqIEBodDpcdFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuJiM0MzsgKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbiYjNDM7ICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXG4mIzQzOyAqIGZpeGVkIGxlbmd0aCBrZXk6XG4mIzQzOyAqXG4mIzQzOyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xuJiM0MzsgKiBzdHJ1Y3QgdGVzdF9vYmoge1xuJiM0MzsgKlx0aW50XHRcdFx0a2V5O1xuJiM0MzsgKlx0dm9pZCAqXHRcdFx0bXlfbWVtYmVyO1xuJiM0MzsgKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4mIzQzOyAqIH07XG4mIzQzOyAqXG4mIzQzOyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4mIzQzOyAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuJiM0MzsgKlx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXG4mIzQzOyAqXHQua2V5X2xlbiA9IHNpemVvZihpbnQpLFxuJiM0MzsgKlx0Lmhhc2hmbiA9IGpoYXNoLFxuJiM0MzsgKiB9O1xuJiM0MzsgKlxuJiM0MzsgKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcbiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHtcbiYjNDM7ICpcdFsuLi5dXG4mIzQzOyAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbiYjNDM7ICogfTtcbiYjNDM7ICpcbiYjNDM7ICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXG4mIzQzOyAqIHtcbiYjNDM7ICpcdHN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTtcbiYjNDM7ICpcbiYjNDM7ICpcdHJldHVybiBbLi4uIGhhc2ggLi4uXTtcbiYjNDM7ICogfVxuJiM0MzsgKlxuJiM0MzsgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuJiM0MzsgKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbiYjNDM7ICpcdC5oYXNoZm4gPSBqaGFzaCxcbiYjNDM7ICpcdC5vYmpfaGFzaGZuID0gbXlfaGFzaF9mbixcbiYjNDM7ICogfTtcbiYjNDM7ICovXG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdCAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xuJiM0MztcdFx0ICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpO1xuICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuJiM0MztcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1x0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5KTtcdFx0XHRcXFxuJiM0MztcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbiB9KVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZVxuJiM0MzsgKiBAaGx0Olx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXG4mIzQzOyAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbiYjNDM7ICpcbiYjNDM7ICogSW5pdGlhbGl6ZXMgYSBuZXcgaGFzaCBsaXN0IHRhYmxlLlxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LlxuJiM0MzsgKi9cbiAjZGVmaW5lIHJobHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuICNlbmRpZiAvKiBfTElOVVhfUkhBU0hUQUJMRV9UWVBFU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuaW5kZXggNmM1ZTZkOWFjY2JhNy4uZWM4NTNjMWI5YWYzYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuQEAgLTMyOCw4ICYjNDM7MzI4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXHRiaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTtcbi1cdC8qIHN1YmNsYXNzIDAgaXMgdXNlZCBmb3IgLVx1MDAzZWxvY2sgYW5kIDEgZm9yIC1cdTAwM2VtdXRleC4gMiYjNDM7IGZvciBiaXRsb2NrcyAqL1xuLVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MmIzQzOzIsIDAsIE5VTEwsIF9USElTX0lQXyk7XG4mIzQzO1x0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MsIDAsIE5VTEwsIF9USElTX0lQXyk7XG4gXHRyZXR1cm4gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2xpYi9yaGFzaHRhYmxlLmMgYi9saWIvcmhhc2h0YWJsZS5jXG5pbmRleCA1ZGEwZTUzYThkNDIzLi45MThmMTVhMmFjNjkxIDEwMDY0NFxuLS0tIGEvbGliL3JoYXNodGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3JoYXNodGFibGUuY1xuQEAgLTQzMiw3ICYjNDM7NDMyLDcgQEAgc3RhdGljIHZvaWQgcmh0X2RlZmVycmVkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7XG4tXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZodC1cdTAwM2VtdXRleCwgMSk7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZodC1cdTAwM2VtdXRleCk7XG4gXG4gXHR0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtXHUwMDNldGJsLCBodCk7XG4gXHR0YmwgPSByaGFzaHRhYmxlX2xhc3RfdGFibGUoaHQsIHRibCk7XG5AQCAtMTEyMiw1MSAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpXG4gXHRyZXR1cm4gamhhc2gyKGtleSwgbGVuZ3RoLCBzZWVkKTtcbiB9XG4gXG4tLyoqXG4tICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlXG4tICogQGh0Olx0XHRoYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXG4tICogQHBhcmFtczpcdGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLSAqXG4tICogSW5pdGlhbGl6ZXMgYSBuZXcgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvblxuLSAqIHBhcmFtZXRlcnMuIEEgdGFibGUgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIHdpdGggYSB2YXJpYWJsZSBvclxuLSAqIGZpeGVkIGxlbmd0aCBrZXk6XG4tICpcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMTogRml4ZWQgbGVuZ3RoIGtleXNcbi0gKiBzdHJ1Y3QgdGVzdF9vYmoge1xuLSAqXHRpbnRcdFx0XHRrZXk7XG4tICpcdHZvaWQgKlx0XHRcdG15X21lbWJlcjtcbi0gKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4tICogfTtcbi0gKlxuLSAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4tICpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXG4tICpcdC5rZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBrZXkpLFxuLSAqXHQua2V5X2xlbiA9IHNpemVvZihpbnQpLFxuLSAqXHQuaGFzaGZuID0gamhhc2gsXG4tICogfTtcbi0gKlxuLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5c1xuLSAqIHN0cnVjdCB0ZXN0X29iaiB7XG4tICpcdFsuLi5dXG4tICpcdHN0cnVjdCByaGFzaF9oZWFkXHRub2RlO1xuLSAqIH07XG4tICpcbi0gKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcbi0gKiB7XG4tICpcdHN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTtcbi0gKlxuLSAqXHRyZXR1cm4gWy4uLiBoYXNoIC4uLl07XG4tICogfVxuLSAqXG4tICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcbi0gKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbi0gKlx0Lmhhc2hmbiA9IGpoYXNoLFxuLSAqXHQub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sXG4tICogfTtcbi0gKi9cbiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbi1cdFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHQgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKVxuIHtcbiBcdHN0cnVjdCBidWNrZXRfdGFibGUgKnRibDtcbiBcdHNpemVfdCBzaXplO1xuQEAgLTExNzYsMTMgJiM0MzsxMTM0LDExIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdG1lbXNldChodCwgMCwgc2l6ZW9mKCpodCkpO1xuLVx0LyogbXV0ZXhfbG9jayBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDEgKi9cbi1cdG11dGV4X2luaXRfd2l0aF9rZXkoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIGtleSk7XG4mIzQzO1x0bXV0ZXhfaW5pdF93aXRoX2tleShcdTAwMjZodC1cdTAwM2VtdXRleCwgXHUwMDI2a2V5cy1cdTAwM2VtdXRleF9rZXkpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aHQtXHUwMDNlbG9jayk7XG4tXHQvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi9cbi1cdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmh0LVx1MDAzZWxvY2ssIGtleSk7XG4mIzQzO1x0bG9ja2RlcF9zZXRfY2xhc3MoXHUwMDI2aHQtXHUwMDNlbG9jaywgXHUwMDI2a2V5cy1cdTAwM2Vsb2NrX2tleSk7XG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4tXHRodC1cdTAwM2Vsb2NrZGVwX2tleSA9IGtleTtcbiYjNDM7XHRodC1cdTAwM2Vsb2NrZGVwX2tleSA9IFx1MDAyNmtleXMtXHUwMDNlYnVja2V0X2tleTtcbiAjZW5kaWZcbiBcdG1lbWNweShcdTAwMjZodC1cdTAwM2VwLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7XG4gXG5AQCAtMTIzNiwyMiAmIzQzOzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XG4gXG4tLyoqXG4tICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXG4tICogQGhsdDpcdGhhc2ggbGlzdCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuLSAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0gKlxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cbi0gKlxuLSAqIFNlZSBkb2N1bWVudGF0aW9uIGZvciByaGFzaHRhYmxlX2luaXQuXG4tICovXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXkpO1xuJiM0MztcdGVyciA9IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihcdTAwMjZobHQtXHUwMDNlaHQsIHBhcmFtcywga2V5cyk7XG4gXHRobHQtXHUwMDNlaHQucmhsaXN0ID0gdHJ1ZTtcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3JoYXNodGFibGUuYyBiL2xpYi90ZXN0X3JoYXNodGFibGUuY1xuaW5kZXggODVhNjE1ZTc0NTkxMS4uYjc2N2EzOGE3NGY5NyAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3JoYXNodGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXG5AQCAtNDc3LDcgJiM0Mzs0NzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwcmludF9odChzdHJ1Y3QgcmhsdGFibGUgKnJobHQpXG4gXG4gXHRodCA9IFx1MDAyNnJobHQtXHUwMDNlaHQ7XG4gXHQvKiBUYWtlIHRoZSBtdXRleCB0byBhdm9pZCBSQ1Ugd2FybmluZyAqL1xuLVx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIDEpO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2aHQtXHUwMDNlbXV0ZXgpO1xuIFx0dGJsID0gcmh0X2RlcmVmZXJlbmNlKGh0LVx1MDAzZXRibCwgaHQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGJsLVx1MDAzZXNpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fcmhhc2h0YWJsZV9pbml0X25vcHJvZiYjMzQ7LAogICAgJiMzNDtfX3JobHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O3JodF9kZWZlcnJlZF93b3JrZXImIzM0OywKICAgICYjMzQ7cmhhc2h0YWJsZV9pbnNlcnRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgaW4gbGliL3JoYXNodGFibGUuYyBhbmQgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oLiBJdCBzZXBhcmF0ZXMgdGhlIHByZXZpb3VzbHkgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIG11dGV4LCBzcGlubG9jaywgYW5kIGJ1Y2tldCBiaXRsb2NrcyAoc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzKSwgYW5kIHVwZGF0ZXMgdGhlIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIHRoZSBidWNrZXQgYml0bG9jayBtYXAgYW5kIHRhYmxlIG11dGV4LiBTaW5jZSByaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIElQQywgYW5kIGZpbGVzeXN0ZW1zLCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlc2UgbG9ja2luZyBhbmQgYW5ub3RhdGlvbiBjaGFuZ2VzIGRvIG5vdCBjYXVzZSBsb2NrZGVwIHNwbGF0cyBvciB1bmNvdmVyIGxhdGVudCBsb2NrIG9yZGVyaW5nIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmQ2NGMxZWU2M2E2NGI4ZGQyNDRiN2Y5MGE5MGQxZGIwMjBkOTVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCkBAIC03MCw2ICYjNDM7NzAsMTQgQEAgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHsKIAlyaHRfb2JqX2NtcGZuX3QJCW9ial9jbXBmbjsKIH07CiAKJiM0MztzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOwlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBtdXRleF9rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5OwomIzQzOyNlbmRpZgomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCByaGFzaHRhYmxlIC0gSGFzaCB0YWJsZSBoYW5kbGUKICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZQpAQCAtMTQxLDI0ICYjNDM7MTQ5LDc3IEBAIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgewogCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwomIzQzOwkJICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7CiAjZGVmaW5lIHJoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcykJCQkJXAogKHsJCQkJCQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQkJXAomIzQzOwlzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5czsJCQlcCiAJCQkJCQkJCQlcCi0JX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXlzKTsJCQlcCiB9KQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZQomIzQzOyAqIEBodDoJCWhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWQKJiM0MzsgKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24KJiM0MzsgKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKJiM0MzsgKiBmaXhlZCBsZW5ndGgga2V5OgomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglpbnQJCQlrZXk7CiYjNDM7ICoJdm9pZCAqCQkJbXlfbWVtYmVyOwomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7CiYjNDM7ICoJLmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSwKJiM0MzsgKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKJiM0MzsgKgkua2V5X2xlbiA9IHNpemVvZihpbnQpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKiB9OwomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglbLi4uXQomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKQomIzQzOyAqIHsKJiM0MzsgKglzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7CiYjNDM7ICoKJiM0MzsgKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07CiYjNDM7ICogfQomIzQzOyAqCiYjNDM7ICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKJiM0MzsgKgkuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCiYjNDM7ICogfTsKJiM0MzsgKi8KICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpCiAKIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LAogCQkgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKJiM0MzsJCSAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTsKICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpCQkJCVwKICh7CQkJCQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJCVwKJiM0MzsJc3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7CQkJXAogCQkJCQkJCQkJXAotCV9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgJmFtcDtfX2tleXMpOwkJCVwKIH0pCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlCiYjNDM7ICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCiYjNDM7ICogQHBhcmFtczoJY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICoKJiM0MzsgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCiYjNDM7ICoKJiM0MzsgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LgomIzQzOyAqLwogI2RlZmluZSByaGx0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKQogCiAjZW5kaWYgLyogX0xJTlVYX1JIQVNIVEFCTEVfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAppbmRleCA2YzVlNmQ5YWNjYmE3Li5lYzg1M2MxYjlhZjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaApAQCAtMzI4LDggJiM0MzszMjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAliaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTsKLQkvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC0mZ3Q7bG9jayBhbmQgMSBmb3IgLSZndDttdXRleC4gMiYjNDM7IGZvciBiaXRsb2NrcyAqLwotCWxvY2tfYWNxdWlyZV9leGNsdXNpdmUoJmFtcDt0YmwtJmd0O2RlcF9tYXAsIHN1YmNsYXNzJiM0MzsyLCAwLCBOVUxMLCBfVEhJU19JUF8pOwomIzQzOwlsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKCZhbXA7dGJsLSZndDtkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9yaGFzaHRhYmxlLmMgYi9saWIvcmhhc2h0YWJsZS5jCmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0Ci0tLSBhL2xpYi9yaGFzaHRhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3JoYXNodGFibGUuYwpAQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCByaHRfZGVmZXJyZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlpbnQgZXJyID0gMDsKIAogCWh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAogCXRibCA9IHJodF9kZXJlZmVyZW5jZShodC0mZ3Q7dGJsLCBodCk7CiAJdGJsID0gcmhhc2h0YWJsZV9sYXN0X3RhYmxlKGh0LCB0YmwpOwpAQCAtMTEyMiw1MSAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpCiAJcmV0dXJuIGpoYXNoMihrZXksIGxlbmd0aCwgc2VlZCk7CiB9CiAKLS8qKgotICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlCi0gKiBAaHQ6CQloYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uCi0gKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKLSAqIGZpeGVkIGxlbmd0aCBrZXk6Ci0gKgotICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCi0gKiBzdHJ1Y3QgdGVzdF9vYmogewotICoJaW50CQkJa2V5OwotICoJdm9pZCAqCQkJbXlfbWVtYmVyOwotICoJc3RydWN0IHJoYXNoX2hlYWQJbm9kZTsKLSAqIH07Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKLSAqCS5rZXlfbGVuID0gc2l6ZW9mKGludCksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKiB9OwotICoKLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5cwotICogc3RydWN0IHRlc3Rfb2JqIHsKLSAqCVsuLi5dCi0gKglzdHJ1Y3Qgcmhhc2hfaGVhZAlub2RlOwotICogfTsKLSAqCi0gKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCkKLSAqIHsKLSAqCXN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTsKLSAqCi0gKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07Ci0gKiB9Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCi0gKiB9OwotICovCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKLQkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkgICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7CiAJc2l6ZV90IHNpemU7CkBAIC0xMTc2LDEzICYjNDM7MTEzNCwxMSBAQCBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQoaHQsIDAsIHNpemVvZigqaHQpKTsKLQkvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqLwotCW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsIGtleSk7CiYjNDM7CW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsICZhbXA7a2V5cy0mZ3Q7bXV0ZXhfa2V5KTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2h0LSZndDtsb2NrKTsKLQkvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi8KLQlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCBrZXkpOwomIzQzOwlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCAmYW1wO2tleXMtJmd0O2xvY2tfa2V5KTsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAotCWh0LSZndDtsb2NrZGVwX2tleSA9IGtleTsKJiM0MzsJaHQtJmd0O2xvY2tkZXBfa2V5ID0gJmFtcDtrZXlzLSZndDtidWNrZXRfa2V5OwogI2VuZGlmCiAJbWVtY3B5KCZhbXA7aHQtJmd0O3AsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKIApAQCAtMTIzNiwyMiAmIzQzOzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpOwogCi0vKioKLSAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZQotICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCi0gKgotICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC4KLSAqLwogaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsCiAJCQkgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKLQkJCSAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQomIzQzOwkJCSAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKCZhbXA7aGx0LSZndDtodCwgcGFyYW1zLCBrZXkpOwomIzQzOwllcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoJmFtcDtobHQtJmd0O2h0LCBwYXJhbXMsIGtleXMpOwogCWhsdC0mZ3Q7aHQucmhsaXN0ID0gdHJ1ZTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jCmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X3JoYXNodGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmMKQEAgLTQ3Nyw3ICYjNDM7NDc3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgcHJpbnRfaHQoc3RydWN0IHJobHRhYmxlICpyaGx0KQogCiAJaHQgPSAmYW1wO3JobHQtJmd0O2h0OwogCS8qIFRha2UgdGhlIG11dGV4IHRvIGF2b2lkIFJDVSB3YXJuaW5nICovCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAl0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtJmd0O3RibCwgaHQpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB0YmwtJmd0O3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcmhhc2h0YWJsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGdpdmVuIGEgcGF0Y2ggZm9yIHN5emthbGxlciBmdXp6aW5nLCBhbmQgbXkgZmlyc3Qgc3RlcCBpcyB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGlzIHBhdGNoIHRvdWNoZXMgYHJoYXNodGFibGUtdHlwZXMuaGAsIGByaGFzaHRhYmxlLmhgLCBgcmhhc2h0YWJsZS5jYCwgYW5kIGB0ZXN0X3JoYXNodGFibGUuY2AsIHNvIGNsZWFybHkgdGhpcyBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCBmb3IgbXVsdGlwbGUgbG9ja3Mgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgc3RydWN0dXJlOiB0aGUgYG11dGV4YCwgdGhlIGdlbmVyaWMgYGxvY2tgLCBhbmQgYSBgbG9ja2RlcF9rZXlgIHVzZWQgYnkgYGRlcF9tYXBgLiBUaGlzIGNyZWF0ZXMgc29tZSBpbnRlcmVzdGluZyBsb2NrZGVwIGJlaGF2aW9yOiB0aGUgbXV0ZXggd2FzIGluaXRpYWxpemVkIHdpdGggc3ViY2xhc3MgMSwgdGhlIHNwaW5sb2NrIHdpdGggc3ViY2xhc3MgMCwgYW5kIGJpdGxvY2tzIHdpdGggc3ViY2xhc3NlcyAyJiM0MzsuIFRoZXJlIGFyZSBhbHNvIGNhbGxzIGxpa2UgYG11dGV4X2xvY2tfbmVzdGVkYCBpbiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgYW5kIGBwcmludF9odGAuCgpUaGUgcHJvcG9zZWQgY2hhbmdlIGludHJvZHVjZXMgYSBgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIHN0cnVjdCBjb250YWluaW5nIHNlcGFyYXRlIGBsb2NrX2tleWAsIGBtdXRleF9rZXlgLCBhbmQgYGJ1Y2tldF9rZXlgIG1lbWJlcnMuIENyaXRpY2FsbHksIHRoZXNlIGtleXMgYXJlIG5vdyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBwZXIgY2FsbGVyIG9mIGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYC4gVGhlIGNvZGUgdGhlbiBpbml0aWFsaXplcyB0aGUgcmVzcGVjdGl2ZSBsb2NrczogYG11dGV4X2luaXRfd2l0aF9rZXlgLCBgbG9ja2RlcF9zZXRfY2xhc3NgLCBhbmQgYXNzaWducyB0aGUgYGJ1Y2tldF9rZXlgLiBUaGlzIGF2b2lkcyB0aGUgcHJldmlvdXMgc2hhcmVkIGxvY2sgY2xhc3Mga2V5LCB3aGljaCBjcmVhdGVzIG1vcmUgcHJlY2lzZSBsb2NrZGVwIHRyYWNraW5nLgoKSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGRlY291cGxpbmcgdGhlIGxvY2sgY2xhc3Mga2V5cywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBsb2NrZGVwIGFuYWx5c2lzLiBJdCYjMzk7cyBhbHNvIG1vZGlmeWluZyBob3cgdGhlIGJpdGxvY2tzIGFyZSBhY3F1aXJlZCwgdXNpbmcgdGhlIGBzdWJjbGFzc2AgZGlyZWN0bHkgaW5zdGVhZCBvZiBgc3ViY2xhc3MgJiM0MzsgMmAuIEZ1cnRoZXJtb3JlLCBpdCYjMzk7cyBzaW1wbGlmeWluZyB0aGUgbG9jayBjYWxscyBpbiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgYW5kIGBwcmludF9odGAgdG8gYG11dGV4X2xvY2tgIGZyb20gYG11dGV4X2xvY2tfbmVzdGVkYC4KCk15IG5leHQgdGhvdWdodCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgb3Igc2ltaWxhciB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBrbm93IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LiBTaW5jZSBJIGRvbiYjMzk7dCBoYXZlIGdpdCBvciBiYXNoLCBJIGNhbiYjMzk7dCB1c2UgYGdpdCBsb2dgIG9yIHNoZWxsIGNvbW1hbmRzIGRpcmVjdGx5LiBUaW1lIHRvIHVzZSBncmVwcGVyIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGVzZSBjYWxsZXJzLiBJIGNhbiB1c2UgdGhpcyB0b29sIHRvIGZpbmQgYWxsIGRpcmVjdCB1c2FnZXMgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBzZWUgc29tZSByZWxldmFudCBkb2N1bWVudGF0aW9uIHRvIHNlZSBpZiB0aGlzIGxvY2tkZXAgcmVmYWN0b3JpbmcgaGFzIGFueSBkb2N1bWVudGVkIGJlbmVmaXRzLCBvciB3aGV0aGVyIGl0IHNpbXBseSBjb3JyZWN0cyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yaGFzaHRhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTQwPXN0cnVjdCByaGFzaHRhYmxlX2l0ZXIge1xuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE0OS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjE1MDppbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1MS1cdFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1Ni1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MTU3Olx0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1OC19KVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTEyMD1zdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpXG4tLVxubGliL3JoYXNodGFibGUuYy0xMTI0LVxubGliL3JoYXNodGFibGUuYzoxMTI1OmludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxubGliL3JoYXNodGFibGUuYy0xMTI2LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tLVxubGliL3JoYXNodGFibGUuYy0xMTkyLX1cbmxpYi9yaGFzaHRhYmxlLmM6MTE5MzpFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMTk0LVxubGliL3JoYXNodGFibGUuYz0xMTk1PWludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTIwMC1cbmxpYi9yaGFzaHRhYmxlLmM6MTIwMTpcdGVyciA9IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihcdTAwMjZobHQtXHUwMDNlaHQsIHBhcmFtcywga2V5cyk7XG5saWIvcmhhc2h0YWJsZS5jLTEyMDItXHRobHQtXHUwMDNlaHQucmhsaXN0ID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzcwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbjoKCioqRGlzc2VjdGluZyB0aGUgYHJoYXNodGFibGVfaW5pdGAgTWFjcm8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByaGFzaHRhYmxlX2luaXRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgYSBtYWNybyDigJMgY2xhc3NpYy4gSXQgZXhwYW5kcyBpbnRvIGEgY2FsbCB0byBgYWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpYC4gSSYjMzk7bSBhbHJlYWR5IGdldHRpbmcgYSBmZWVsIGZvciB0aGUgc2V0dXAuIGBhbGxvY19ob29rc2AgdXN1YWxseSBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGhvb2sgcmVnaXN0cmF0aW9uLCB3aGljaCBsaWtlbHkgdGllcyBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGhhc2ggdGFibGUuIERpZ2dpbmcgZGVlcGVyLCBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgaXRzZWxmIGxvb2tzIGludGVyZXN0aW5nLiBUaGUgYF9ub3Byb2ZgIHN1ZmZpeCBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGEgdmVyc2lvbiB0aGF0IHNraXBzIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgd2hpY2ggaXMgc29tZXRoaW5nIEkmIzM5O2Qgd2FudCB0byBrZWVwIGluIG1pbmQsIGVzcGVjaWFsbHkgaW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgY29kZS4KCk5vdyB0aGUgY3J1Y2lhbCBwYXJ0OiBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgZXhwYW5kcyB0byBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXlzKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVhbCBpbml0aWFsaXphdGlvbi4gYGh0YCBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSBoYW5kbGUgdG8gdGhlIHJoYXNodGFibGUgaXRzZWxmLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBwYXJhbXNgIGxpa2VseSBjb250cm9scyB0aGUgY29yZSBzZXR0aW5ncywgbGlrZSB0aGUgc2l6ZSBvciBvdGhlciBwYXJhbWV0ZXJzLCBhbmQgYCZhbXA7X19rZXlzYCBzdWdnZXN0cyBhIGtleSBzdHJ1Y3R1cmUgaXMgYXQgcGxheS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rZXlzYCBhbmQgdGhlIGZ1bGwgYXJndW1lbnQgbGlzdC4gSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIGNoZWNrIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFzIHdlbGwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsaXphdGlvbiB3b3JrIG11c3QgYmUgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JobHRhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTUwPWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwMy1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIwNDppbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwNS1cdFx0ICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMTAtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIxMTpcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIxMi19KVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMTk0LVxubGliL3JoYXNodGFibGUuYzoxMTk1OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxubGliL3JoYXNodGFibGUuYy0xMTk2LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTIwNC19XG5saWIvcmhhc2h0YWJsZS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGx0YWJsZV9pbml0X25vcHJvZik7XG5saWIvcmhhc2h0YWJsZS5jLTEyMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6CgoqKkRlbHZpbmcgaW50byB0aGUgcmhhc2h0YWJsZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIGhvdyB0aGlzIGB0YmwtJmd0O2RlcF9tYXBgIGlzIGJlaW5nIHNldCB1cCB3aXRoaW4gdGhlIGByaGFzaHRhYmxlYCBsaWJyYXJ5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi9yaGFzaHRhYmxlLmNgLiBMZXQmIzM5O3MgdXNlIHRoZSBzb3VyY2UsIEkgbWVhbiwgbGV0JiMzOTtzIHNlYXJjaCBpdC4gTXkgZmlyc3Qgc2VhcmNoIGtleXdvcmRzIGFyZSBlaXRoZXIgYGRlcF9tYXBgIG9yIGBsb2NrZGVwX2tleWAgd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgd2hlcmUgdGhpbmdzIGtpY2sgb2ZmLiBJJiMzOTttIGFmdGVyIHRoZSBpbml0aWFsIHNldHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL3JoYXNodGFibGUuYz0xODc9c3RhdGljIHN0cnVjdCBidWNrZXRfdGFibGUgKmJ1Y2tldF90YWJsZV9hbGxvYyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4tLVxubGliL3JoYXNodGFibGUuYy0yMTAtXHQvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1xubGliL3JoYXNodGFibGUuYzoyMTE6XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNnRibC1cdTAwM2VkZXBfbWFwLCBcJiMzNDtyaGFzaHRhYmxlX2J1Y2tldFwmIzM0OywgaHQtXHUwMDNlbG9ja2RlcF9rZXksIDApO1xubGliL3JoYXNodGFibGUuYy0yMTItI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSByaGFzaHRhYmxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBiaXRsb2NrIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgcmhhc2h0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG5lc3RpbmcgbGV2ZWwuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IHRoYXQuIFJpZ2h0LCBsaW5lIDIxMCBvZiBgbGliL3JoYXNodGFibGUuY2A6ICYjMzQ7LyogYml0bG9ja3MgbXVzdCB1c2UgbmVzdGluZyBsZXZlbCAyIG9yIG1vcmUgKi8mIzM0OyDigJMgdGhhdCYjMzk7cyB0aGUga2V5LiBUbyBnZXQgdGhlIGZ1bGwgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NyBhbmQgZ28gdG8gbGluZSAyMjAgaW4gYGxpYi9yaGFzaHRhYmxlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBmZWVsIGZvciBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlc2UgbG9ja3MgYW5kIHdoeSB0aGUgbmVzdGluZyBsZXZlbCBpcyBjcml0aWNhbC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgZGVzaWduIGNob2ljZTsgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBlbnN1cmluZyBkZWFkbG9jayBhdm9pZGFuY2Ugb3IgcGVyaGFwcyBlZmZpY2llbnQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgdGFibGUmIzM5O3MgaW50ZXJuYWxzLiBJJiMzOTtsbCBmb2N1cyBvbiB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvZXMgdG8gd29yayBvdXQgdGhlIHJvbGUgb2YgdGhlIGJpdGxvY2tzIGF0IHRoYXQgbmVzdGluZyBkZXB0aC4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtsbCBiZSBhIHF1aWNrIGJ1dCB2aXRhbCBjaGVjayB0byBlbnN1cmUgdGhlIGRlc2lnbiBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvcmhhc2h0YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODc6XHRzdGF0aWMgc3RydWN0IGJ1Y2tldF90YWJsZSAqYnVja2V0X3RhYmxlX2FsbG9jKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbiAxODg6XHRcdFx0XHRcdFx0ICAgICAgIHNpemVfdCBuYnVja2V0cyxcbiAxODk6XHRcdFx0XHRcdFx0ICAgICAgIGdmcF90IGdmcClcbiAxOTA6XHR7XG4gMTkxOlx0XHRzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSBOVUxMO1xuIDE5MjpcdFx0c2l6ZV90IHNpemU7XG4gMTkzOlx0XHRpbnQgaTtcbiAxOTQ6XHRcbiAxOTU6XHRcdHRibCA9IGFsbG9jX2hvb2tzX3RhZyhodC1cdTAwM2VhbGxvY190YWcsXG4gMTk2Olx0XHRcdFx0a3ZtYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2Yoc3RydWN0X3NpemUodGJsLCBidWNrZXRzLCBuYnVja2V0cyksXG4gMTk3Olx0XHRcdFx0XHRcdCAgICAgMSwgZ2ZwfF9fR0ZQX1pFUk8sIE5VTUFfTk9fTk9ERSkpO1xuIDE5ODpcdFxuIDE5OTpcdFx0c2l6ZSA9IG5idWNrZXRzO1xuIDIwMDpcdFxuIDIwMTpcdFx0aWYgKHRibCA9PSBOVUxMIFx1MDAyNlx1MDAyNiAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSkge1xuIDIwMjpcdFx0XHR0YmwgPSBuZXN0ZWRfYnVja2V0X3RhYmxlX2FsbG9jKGh0LCBuYnVja2V0cywgZ2ZwKTtcbiAyMDM6XHRcdFx0bmJ1Y2tldHMgPSAwO1xuIDIwNDpcdFx0fVxuIDIwNTpcdFxuIDIwNjpcdFx0aWYgKHRibCA9PSBOVUxMKVxuIDIwNzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyMDg6XHRcbiAyMDk6XHQjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiAyMTA6XHRcdC8qIGJpdGxvY2tzIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMiBvciBtb3JlICovXG4gMjExOlx0XHRsb2NrZGVwX2luaXRfbWFwKFx1MDAyNnRibC1cdTAwM2VkZXBfbWFwLCBcJiMzNDtyaGFzaHRhYmxlX2J1Y2tldFwmIzM0OywgaHQtXHUwMDNlbG9ja2RlcF9rZXksIDApO1xuIDIxMjpcdCNlbmRpZlxuIDIxMzpcdFxuIDIxNDpcdFx0dGJsLVx1MDAzZXNpemUgPSBzaXplO1xuIDIxNTpcdFxuIDIxNjpcdFx0cmN1X2hlYWRfaW5pdChcdTAwMjZ0YmwtXHUwMDNlcmN1KTtcbiAyMTc6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRibC1cdTAwM2V3YWxrZXJzKTtcbiAyMTg6XHRcbiAyMTk6XHRcdHRibC1cdTAwM2VoYXNoX3JuZCA9IGdldF9yYW5kb21fdTMyKCk7XG4gMjIwOlx0XG4gMjIxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuYnVja2V0czsgaSYjNDM7JiM0MzspXG4gMjIyOlx0XHRcdElOSVRfUkhUX05VTExTX0hFQUQodGJsLVx1MDAzZWJ1Y2tldHNbaV0pO1xuIDIyMzpcdFxuIDIyNDpcdFx0cmV0dXJuIHRibDtcbiAyMjU6XHR9XG4gMjI2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxODE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHJoYXNodGFibGUgTG9ja2RlcCBDaGFuZ2U6IFdvcnRoeSBvZiBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIGxvY2tkZXAga2V5IGhhbmRsaW5nIHdpdGhpbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgbXVsdGlwbGUgbG9ja2luZyBtZWNoYW5pc21zIChiaXRsb2Nrcywgc3BpbmxvY2tzLCBhbmQgbXV0ZXhlcykgd2VyZSBwcmV2aW91c2x5IHNoYXJpbmcgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCwgd2hpY2ggaXMgYSBsb2NrZGVwIG5vLW5vLiBOb3csIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRpc3RpbmN0IGtleXMgZm9yIGVhY2ggbG9jayB0eXBlLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSYjMzk7cyBjaGFuZ2luZzogYG11dGV4X2xvY2tfbmVzdGVkYCBjYWxscyBhcmUgYmVpbmcgcmVwbGFjZWQgd2l0aCBzdGFuZGFyZCBgbXV0ZXhfbG9ja2AsIGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYCBjYWxscyBhcmUgdXBkYXRlZCwgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBub3cgdGFrZXMgYSBgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzYCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5YC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBzZXBhcmF0ZSBsb2NrIGNsYXNzZXMgdG8gcHJldmVudCBsb2NrZGVwIGNvbmZ1c2lvbiBhbmQgcG90ZW50aWFsIHdhcm5pbmdzIG9yIHNwbGF0cy4KCk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBgcmhhc2h0YWJsZWAgaXMgdXNlZCBldmVyeXdoZXJlIGluIHRoZSBrZXJuZWwhIFRoZSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gYSBjb3JlIGxpYnJhcnksIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgZGlyZWN0bHksIGFuZCBtb2RpZnlpbmcgbG9ja2RlcCBrZXlzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGtlcm5lbCYjMzk7cyBsb2NrZGVwIGluc3RydW1lbnRhdGlvbiBhbmQgY291bGQgZXhwb3NlIHN1YnRsZSBsb2NraW5nIGJ1Z3Mgb3IsIHdvcnNlLCBpbnRyb2R1Y2UgZGVhZGxvY2tzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgdGhlIGZ1enppbmcgY3JpdGVyaWEgZmxhZyBhcyBoaWdoLXByaW9yaXR5LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGNyaXRlcmlhOgoqICAgKipSZWFjaGFiaWxpdHkqKjogYHJoYXNodGFibGVgIGlzIHdpZGVseSB1c2VkLCBzbyBpdCYjMzk7cyBlYXNpbHkgcmVhY2hhYmxlLgoqICAgKipSZWZhY3RvcmluZyoqOiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBidXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBvZiAqbG9ja2luZyosIHdoaWNoIGlzIGNvcmUgYW5kIGNhbiBpbnRyb2R1Y2Ugc2VtYW50aWMgc2hpZnRzLgoqICAgKipBc3NlcnRpb25zL0NoZWNrcyoqOiBUaGUgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgbG9ja2RlcCwgd2hpY2ggaXMgYSBmb3JtIG9mIHJ1bnRpbWUgY2hlY2ssIGFuZCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGxvY2tkZXAgYXNzZXJ0aW9ucyBvciBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGV4aXN0aW5nIG9uZXMuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYSwgdGhpcyAqbXVzdCogYmUgZnV6emVkLgoKTm93LCBmb3IgRm9jdXNTeW1ib2xzLCB3ZSBuZWVkIHRvIGJlIHByZWNpc2UuIFRoZSBwYXRjaCBoYXMgbW9kaWZpZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiogICBgbGliL3JoYXNodGFibGUuY2AgY29udGFpbnMgYHJodF9kZWZlcnJlZF93b3JrZXJgLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYC4KCldlIG5lZWQgdG8gYXZvaWQgdGhlICYjMzQ7dWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzJiMzNDsgLSBhbGxvY2F0aW5nL2ZyZWVpbmcgbWVtb3J5IG9yIGdlbmVyaWMgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYXJlIG91dC4gSG93ZXZlciwgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCBhcmUgc3BlY2lmaWMgZW50cnlwb2ludHMuIGByaHRfZGVmZXJyZWRfd29ya2VyYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjaywgd2hpY2ggaXMgYWxzbyBzcGVjaWZpYyB0byB0aGUgcmhhc2h0YWJsZSBmdW5jdGlvbmFsaXR5LiBUaGVzZSBhcmUgdGhlIHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQgdG8gcmVkdWNlIGZvY3VzIGRpbHV0aW9uLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZXhlcmNpc2UgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCB0byB0ZXN0IGlmIHdlIGNhbiBjYXVzZSBhbnkgbG9ja2RlcCBpc3N1ZXMgb3IgbWlzYmVoYXZpb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRfbG9ja19uZXN0ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKnJodF9idWNrZXRfaW5zZXJ0KFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMyMS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMyMjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMyMy1cdFx0XHRcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0zMzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0zMzgte1xuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg6MzM5Olx0cmV0dXJuIHJodF9sb2NrX25lc3RlZCh0YmwsIGJrdCwgMCk7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0zNDAtfVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MjQwPXN0YXRpYyBpbnQgcmhhc2h0YWJsZV9yZWhhc2hfb25lKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTI3Mi1cbmxpYi9yaGFzaHRhYmxlLmM6MjczOlx0ZmxhZ3MgPSByaHRfbG9ja19uZXN0ZWQobmV3X3RibCwgXHUwMDI2bmV3X3RibC1cdTAwM2VidWNrZXRzW25ld19oYXNoXSxcbmxpYi9yaGFzaHRhYmxlLmMtMjc0LVx0XHRcdFx0U0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYCBVc2FnZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzLCBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYC4gVGhlIGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgYSBnbG9iYWwgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5ICpldmVyeSogY2FsbHNpdGUgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgYSBjb21wcmVoZW5zaXZlIGxpc3Q7IG5vIHN0b25lIGxlZnQgdW50dXJuZWQuCgpGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSBzZWUgaG93IHdpZGVzcHJlYWQgdGhlaXIgdXNlIGlzLiBBIGJhc2ljIGNvdW50IHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLCBidXQgdGhlIGNvbnRleHQgb2YgZWFjaCBjYWxsc2l0ZSBpcyBnb2luZyB0byBiZSBmYXIgbW9yZSBpbmZvcm1hdGl2ZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnM6IGFyZSB0aGV5IHByaW1hcmlseSB1c2VkIHdpdGhpbiBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtIG9yIGRyaXZlcj8gSXMgaXQgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBvciBpcyB0aGlzIHJlbGF0ZWQgdG8gc29tZSBlc290ZXJpYyBmaWxlIHN5c3RlbSBmdW5jdGlvbmFsaXR5PyBXaGVyZSBhcmUgdGhlc2UgbmVzdGVkIGxvY2sgY2FsbHMgbG9jYXRlZCwgdGhhdCB3b3VsZCBnaXZlIG1lIGEgcXVpY2sgdW5kZXJzdGFuZGluZyBvZiB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gcHJldmVudCBkZWFkbG9jayBvciBmb3Igc29tZSBvdGhlciBwdXJwb3NlPwpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmNoaXRlY3R1cmUsIHNvIHNpbXBseSBsb29raW5nIGF0IHRoZSBjb3VudCBvZiBjYWxscyBpcyBvbmx5IGdvaW5nIHRvIGdldCBtZSBzbyBmYXIuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBlYWNoIGZ1bmN0aW9uLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGVkIGxvY2tpbmcgaGllcmFyY2hpZXMgb3IgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLiBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhbnkgc3VidGxlIGltcGxpY2F0aW9uczsgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgbG9ja3MgaW50ZXJyZWxhdGUgd2l0aCBvdGhlcnMgd2lsbCBiZSBjcml0aWNhbC4gVWx0aW1hdGVseSBJIGFtIGFmdGVyIGEgY2xlYXIgcGljdHVyZSBvZiB0aGVpciBwdXJwb3NlLCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmVuZWZpdCBmcm9tIHJlZmluZW1lbnQgb3IgZnVydGhlciBleGFtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0X2xvY2tcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MzIyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByaHRfbG9ja19uZXN0ZWQoc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMzNC1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMzNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2soc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzM2LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIF9fcmN1ICoqYmt0KVxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oPTc1MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03NzctXHRwcHJldiA9IE5VTEw7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDo3Nzg6XHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc3OS1cbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0xMDQyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmhhc2h0YWJsZV9yZW1vdmVfZmFzdF9vbmUoXG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMTA1OC1cdHBwcmV2ID0gTlVMTDtcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjEwNTk6XHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEwNjAtXG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MTE5NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3JoYXNodGFibGVfcmVwbGFjZV9mYXN0KFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEyMTgtXHRwcHJldiA9IE5VTEw7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoxMjE5Olx0ZmxhZ3MgPSByaHRfbG9jayh0YmwsIGJrdCk7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0xMjIwLVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MjkyPXN0YXRpYyBpbnQgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW4oc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMzAxLVx0XHRyZXR1cm4gMDtcbmxpYi9yaGFzaHRhYmxlLmM6MzAyOlx0ZmxhZ3MgPSByaHRfbG9jayhvbGRfdGJsLCBia3QpO1xubGliL3JoYXNodGFibGUuYy0zMDMtXG4tLVxubGliL3JoYXNodGFibGUuYz02Mjg9c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTY1My1cbmxpYi9yaGFzaHRhYmxlLmM6NjU0Olx0XHRcdGZsYWdzID0gcmh0X2xvY2sodGJsLCBia3QpO1xubGliL3JoYXNodGFibGUuYy02NTUtXHRcdFx0ZGF0YSA9IHJoYXNodGFibGVfbG9va3VwX29uZShodCwgYmt0LCB0YmwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJoYXNodGFibGUgTG9jayBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHVzYWdlIG9mIGByaHRfbG9ja2AgYW5kIGByaHRfbG9ja19uZXN0ZWRgIHdpdGhpbiB0aGUgcmhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7dmUgcGlucG9pbnRlZCB0aGVpciBjYWxsc2l0ZXMgYXM6IGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgYHJodF9kZWZlcnJlZF93b3JrZXJgLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRob3V0IHRoZSBwcmVmaXguIENsZWFybHksIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgcmVoYXNoIGFuZCBkZWZlcnJlZCB3b3JrZXIgcGF0aHMgYXJlIGxvY2tpbmcgdXAsIGFzIG9uZSBtaWdodCBleHBlY3QuIEkmIzM5O20gYWxzbyBzZWVpbmcgbG9jayBhY3F1aXNpdGlvbiB3aXRoaW4gdGhlIG1haW4gaW5zZXJ0aW9uIHBhdGggYW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgoKSG93ZXZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIEkgaW1tZWRpYXRlbHkgc2VlIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGByaGFzaHRhYmxlX3RyeV9pbnNlcnRgIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdC4gTXkgdGhvdWdodHMgaW1tZWRpYXRlbHkgdHVybiB0byB0aGUgYGxpYi9yaGFzaHRhYmxlLmNgIHNvdXJjZSBjb2RlIHRvIGZ1bGx5IGFwcHJlY2lhdGUgdGhlIHBvc3NpYmxlIGxvY2sgY29udGVudGlvbiBpbiB0aG9zZSBjYWxsaW5nIHBhdGhzLiBMZXQgbWUgY2hlY2sgd2hhdCBvdGhlciBmdW5jdGlvbnMgZnJvbSB0aGUgbGlicmFyeSBhcmUgY2FsbGluZyBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCBvciBhcmUgbm9uLXN0YXRpYy4gVGhpcyBjb3VsZCBpbGx1bWluYXRlIHdoZXJlIGNvbnRlbnRpb24gaXMgbW9zdCBsaWtlbHkgdG8gYXJpc2UuIFRoaXMgZ2l2ZXMgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgbG9ja2luZyBzdHJhdGVneSBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaGFzaHRhYmxlX3RyeV9pbnNlcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvcmhhc2h0YWJsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmM9NTgyPXN0YXRpYyBzdHJ1Y3QgYnVja2V0X3RhYmxlICpyaGFzaHRhYmxlX2luc2VydF9vbmUoXG4tLVxubGliL3JoYXNodGFibGUuYy02MjctXG5saWIvcmhhc2h0YWJsZS5jOjYyODpzdGF0aWMgdm9pZCAqcmhhc2h0YWJsZV90cnlfaW5zZXJ0KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5LFxubGliL3JoYXNodGFibGUuYy02MjktXHRcdFx0XHQgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9Njc5PXZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXG4tLVxubGliL3JoYXNodGFibGUuYy02ODUtXHRcdHJjdV9yZWFkX2xvY2soKTtcbmxpYi9yaGFzaHRhYmxlLmM6Njg2Olx0XHRkYXRhID0gcmhhc2h0YWJsZV90cnlfaW5zZXJ0KGh0LCBrZXksIG9iaik7XG5saWIvcmhhc2h0YWJsZS5jLTY4Ny1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDM3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBgcmhhc2h0YWJsZWAgTGlicmFyeSoqCgpPa2F5LCBzbyBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgdGhhdCBsaXZlcyByaWdodCB0aGVyZSBpbiBgbGliL3JoYXNodGFibGUuY2AuIE5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlLiBJIG5lZWQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gdGhhdCBmaWxlPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGByaGFzaHRhYmxlX3dhbGtfaW5pdF9ub3Byb2ZgLCBgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95YCwgYHJobHRhYmxlX2luc2VydF9rZXlgLi4uIEkgbmVlZCB0byBzZWUgdGhlICplbnRpcmUqIGludGVyZmFjZSBvZmZlcmVkIGJ5IHRoaXMgcGFydCBvZiB0aGUgbGlicmFyeS4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYWxsIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBsaWIvcmhhc2h0YWJsZS5jYC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIGFuZCBjYXBhYmlsaXRpZXMgY29tcHJlaGVuc2l2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3JoYXNodGFibGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvcmhhc2h0YWJsZS5jPTQ5PWludCBsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKHN0cnVjdCByaGFzaHRhYmxlICpodClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTUyLX1cbmxpYi9yaGFzaHRhYmxlLmM6NTM6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZCk7XG5saWIvcmhhc2h0YWJsZS5jLTU0LVxubGliL3JoYXNodGFibGUuYz01NT1pbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCB1MzIgaGFzaClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTYyLX1cbmxpYi9yaGFzaHRhYmxlLmM6NjM6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQpO1xubGliL3JoYXNodGFibGUuYy02NC0jZWxzZVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9Njc5PXZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXG4tLVxubGliL3JoYXNodGFibGUuYy02OTEtfVxubGliL3JoYXNodGFibGUuYzo2OTI6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyk7XG5saWIvcmhhc2h0YWJsZS5jLTY5My1cbi0tXG5saWIvcmhhc2h0YWJsZS5jPTc3Mz12b2lkICpyaGFzaHRhYmxlX25leHRfa2V5KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqcHJldl9rZXkpXG4tLVxubGliL3JoYXNodGFibGUuYy03OTMtfVxubGliL3JoYXNodGFibGUuYzo3OTQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9uZXh0X2tleSk7XG5saWIvcmhhc2h0YWJsZS5jLTc5NS1cbi0tXG5saWIvcmhhc2h0YWJsZS5jPTgxNz12b2lkIHJoYXNodGFibGVfd2Fsa19lbnRlcihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXG4tLVxubGliL3JoYXNodGFibGUuYy04MzAtfVxubGliL3JoYXNodGFibGUuYzo4MzE6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX2VudGVyKTtcbmxpYi9yaGFzaHRhYmxlLmMtODMyLVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9ODM5PXZvaWQgcmhhc2h0YWJsZV93YWxrX2V4aXQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcilcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTg0NS19XG5saWIvcmhhc2h0YWJsZS5jOjg0NjpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfZXhpdCk7XG5saWIvcmhhc2h0YWJsZS5jLTg0Ny1cbi0tXG5saWIvcmhhc2h0YWJsZS5jPTg2Nj1pbnQgcmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXG4tLVxubGliL3JoYXNodGFibGUuYy05MjctfVxubGliL3JoYXNodGFibGUuYzo5Mjg6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKTtcbmxpYi9yaGFzaHRhYmxlLmMtOTI5LVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTAxMj12b2lkICpyaGFzaHRhYmxlX3dhbGtfbmV4dChzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTAzOS19XG5saWIvcmhhc2h0YWJsZS5jOjEwNDA6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX25leHQpO1xubGliL3JoYXNodGFibGUuYy0xMDQxLVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTA1MT12b2lkICpyaGFzaHRhYmxlX3dhbGtfcGVlayhzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTA3My19XG5saWIvcmhhc2h0YWJsZS5jOjEwNzQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3BlZWspO1xubGliL3JoYXNodGFibGUuYy0xMDc1LVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTA4Mz12b2lkIHJoYXNodGFibGVfd2Fsa19zdG9wKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXG4tLVxubGliL3JoYXNodGFibGUuYy0xMTAzLX1cbmxpYi9yaGFzaHRhYmxlLmM6MTEwNDpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfc3RvcCk7XG5saWIvcmhhc2h0YWJsZS5jLTExMDUtXG4tLVxubGliL3JoYXNodGFibGUuYz0xMTI1PWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTE5Mi19XG5saWIvcmhhc2h0YWJsZS5jOjExOTM6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcbmxpYi9yaGFzaHRhYmxlLmMtMTE5NC1cbmxpYi9yaGFzaHRhYmxlLmM9MTE5NT1pbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTEyMDQtfVxubGliL3JoYXNodGFibGUuYzoxMjA1OkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhsdGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMjA2LVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTI0Nj12b2lkIHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4tLVxubGliL3JoYXNodGFibGUuYy0xMjg4LX1cbmxpYi9yaGFzaHRhYmxlLmM6MTI4OTpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3kpO1xubGliL3JoYXNodGFibGUuYy0xMjkwLVxubGliL3JoYXNodGFibGUuYz0xMjkxPXZvaWQgcmhhc2h0YWJsZV9kZXN0cm95KHN0cnVjdCByaGFzaHRhYmxlICpodClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTEyOTQtfVxubGliL3JoYXNodGFibGUuYzoxMjk1OkVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfZGVzdHJveSk7XG5saWIvcmhhc2h0YWJsZS5jLTEyOTYtXG5saWIvcmhhc2h0YWJsZS5jPTEyOTc9c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKl9fcmh0X2J1Y2tldF9uZXN0ZWQoXG4tLVxubGliL3JoYXNodGFibGUuYy0xMzIzLX1cbmxpYi9yaGFzaHRhYmxlLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChfX3JodF9idWNrZXRfbmVzdGVkKTtcbmxpYi9yaGFzaHRhYmxlLmMtMTMyNS1cbmxpYi9yaGFzaHRhYmxlLmM9MTMyNj1zdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIF9fcmN1ICoqcmh0X2J1Y2tldF9uZXN0ZWQoXG4tLVxubGliL3JoYXNodGFibGUuYy0xMzM0LX1cbmxpYi9yaGFzaHRhYmxlLmM6MTMzNTpFWFBPUlRfU1lNQk9MX0dQTChyaHRfYnVja2V0X25lc3RlZCk7XG5saWIvcmhhc2h0YWJsZS5jLTEzMzYtXG5saWIvcmhhc2h0YWJsZS5jPTEzMzc9c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKnJodF9idWNrZXRfbmVzdGVkX2luc2VydChcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTEzNjMtfVxubGliL3JoYXNodGFibGUuYzoxMzY0OkVYUE9SVF9TWU1CT0xfR1BMKHJodF9idWNrZXRfbmVzdGVkX2luc2VydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODg1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTG9ja2luZyBJc3N1ZXMgaW4gYGxpYi9yaGFzaHRhYmxlLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGJlaGF2aW9yIHdpdGhpbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgcmVnaW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIGBsaWIvcmhhc2h0YWJsZS5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIGxpbmVzIDQwIHRvIDY1LiBUaGUgY29kZSBpbiB0aGF0IHZpY2luaXR5IGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2NraW5nIHByaW1pdGl2ZXMgYXJlIGRlZmluZWQgb3IgdXRpbGl6ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhleSBhcmUgZW1wbG95aW5nIGxvY2sgZGVwZW5kZW5jeSBjaGVja2luZyBhbmQgc28gZm9ydGguIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gaG93IGBsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkYCBhbmQgYGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkYCBhcmUgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoYXQgc2VjdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBsb2NrZGVwIGNoZWNrcyBpcyBjcml0aWNhbCB0byBlbnN1cmluZyBsb2NrIG9yZGVyaW5nIGlzIGNvcnJlY3QsIHRvIGF2b2lkIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IGJlaGF2aW9yIGR1ZSB0byBpbXByb3BlciBjb25jdXJyZW5jeSBjb250cm9sIGluIHRoYXQgY29kZSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XHR1bmlvbiBuZXN0ZWRfdGFibGUgX19yY3UgKnRhYmxlO1xuICAzNjpcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqYnVja2V0O1xuICAzNzpcdH07XG4gIDM4Olx0XG4gIDM5Olx0c3RhdGljIHUzMiBoZWFkX2hhc2hmbihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gIDQwOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXG4gIDQxOlx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqaGUpXG4gIDQyOlx0e1xuICA0MzpcdFx0cmV0dXJuIHJodF9oZWFkX2hhc2hmbihodCwgdGJsLCBoZSwgaHQtXHUwMDNlcCk7XG4gIDQ0Olx0fVxuICA0NTpcdFxuICA0NjpcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xuICA0NzpcdCNkZWZpbmUgQVNTRVJUX1JIVF9NVVRFWChIVCkgQlVHX09OKCFsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKEhUKSlcbiAgNDg6XHRcbiAgNDk6XHRpbnQgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXG4gIDUwOlx0e1xuICA1MTpcdFx0cmV0dXJuIChkZWJ1Z19sb2NrcykgPyBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgpIDogMTtcbiAgNTI6XHR9XG4gIDUzOlx0RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZCk7XG4gIDU0Olx0XG4gIDU1Olx0aW50IGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgdTMyIGhhc2gpXG4gIDU2Olx0e1xuICA1NzpcdFx0aWYgKCFkZWJ1Z19sb2NrcylcbiAgNTg6XHRcdFx0cmV0dXJuIDE7XG4gIDU5Olx0XHRpZiAodW5saWtlbHkodGJsLVx1MDAzZW5lc3QpKVxuICA2MDpcdFx0XHRyZXR1cm4gMTtcbiAgNjE6XHRcdHJldHVybiBiaXRfc3Bpbl9pc19sb2NrZWQoMCwgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZ0YmwtXHUwMDNlYnVja2V0c1toYXNoXSk7XG4gIDYyOlx0fVxuICA2MzpcdEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKTtcbiAgNjQ6XHQjZWxzZVxuICA2NTpcdCNkZWZpbmUgQVNTRVJUX1JIVF9NVVRFWChIVClcbiAgNjY6XHQjZW5kaWZcbiAgNjc6XHRcbiAgNjg6XHRzdGF0aWMgaW5saW5lIHVuaW9uIG5lc3RlZF90YWJsZSAqbmVzdGVkX3RhYmxlX3RvcChcbiAgNjk6XHRcdGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibClcbiAgNzA6XHR7XG4gIDcxOlx0XHQvKiBUaGUgdG9wLWxldmVsIGJ1Y2tldCBlbnRyeSBkb2VzIG5vdCBuZWVkIFJDVSBwcm90ZWN0aW9uXG4gIDcyOlx0XHQgKiBiZWNhdXNlIGl0JiMzOTtzIHNldCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRibC1cdTAwM2VuZXN0LlxuICA3MzpcdFx0ICovXG4gIDc0Olx0XHRyZXR1cm4gKHZvaWQgKilyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRibC1cdTAwM2VidWNrZXRzWzBdLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBSaGFzaHRhYmxlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgcmhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBkaXJlY3RseSB0b3VjaGVkOiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLiBTdHJhaWdodGZvcndhcmQgaW5pdGlhbGl6YXRpb24gdHdlYWtzLCBpdCBzZWVtcy4gQW5kIHRoZSBjaGFuZ2UgdG8gYHJodF9kZWZlcnJlZF93b3JrZXJgIHdpdGggdGhhdCBgbXV0ZXhfbG9jaygmYW1wO2h0LSZndDttdXRleCk7YCBjYWxsIGlzIGludGVyZXN0aW5nOyBwcm9iYWJseSBzb21lIHN1YnRsZSBsb2NraW5nIHN0cmF0ZWd5IGFkanVzdG1lbnRzIHRoZXJlLgoKTm93LCB0aGF0IGByaHRfbG9ja19uZXN0ZWRgIG1vZGlmaWNhdGlvbiBpbiBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhgIGNhdGNoZXMgbXkgZXllLiBMb2NraW5nIHByaW1pdGl2ZXMgYXJlIGFsd2F5cyBzZW5zaXRpdmUsIGFuZCB0aGF0IGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYCBjYWxsIHdpdGggdGhlIGRlcGVuZGVuY3kgbWFwIHNldHVwLi4uIHRoYXQgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGRlYWRsb2NrIGF2b2lkYW5jZS4gU2luY2UgaXQmIzM5O3MgaW5saW5lLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgKnVzZSogaXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGByaGFzaHRhYmxlX2luc2VydF9zbG93YCBjYWxscyBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHJodF9sb2NrYC4gR290IGl0LiBBbHNvLCBgcmhhc2h0YWJsZV9yZWhhc2hfb25lYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgZGVmZXJyZWQgd29ya2VyIGByaHRfZGVmZXJyZWRfd29ya2VyYCwgZXhwbGljaXRseSBjYWxscyBgcmh0X2xvY2tfbmVzdGVkYC4gQW5kIG9mIGNvdXJzZSwgdGhlIGZhc3QtcGF0aCBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYHJoYXNodGFibGVfaW5zZXJ0X2Zhc3RgIGFuZCBgcmhhc2h0YWJsZV9yZW1vdmVfZmFzdGAgYXJlIGFsc28gZXhlcmNpc2luZyB0aGlzIGxvY2tpbmcgbWVjaGFuaXNtLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLiBJIGhhdmUgdG8gbG9vayBhdCB0aGUgKmNhbGxlcnMqIG9mIHRoZXNlIHBvdGVudGlhbGx5LWltcGFjdGVkIGZ1bmN0aW9ucywgbGlrZSBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AuIFdoYXQgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIGFyZSByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb25hbGl0eT8gSXQmIzM5O3MgdGltZSB0byBjaGVjayB3aGVyZSBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB1c2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEMgZmlsZXMuIFRpbWUgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmhhc2h0YWJsZV9pbnNlcnRfc2xvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0yMjg9c3RhdGljIGlubGluZSBpbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTIzNC1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjIzNTp2b2lkICpyaGFzaHRhYmxlX2luc2VydF9zbG93KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5LFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMjM2LVx0XHRcdCAgICAgc3RydWN0IHJoYXNoX2hlYWQgKm9iaik7XG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9NzUxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19yaGFzaHRhYmxlX2luc2VydF9mYXN0KFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc4My1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDo3ODQ6XHRcdHJldHVybiByaGFzaHRhYmxlX2luc2VydF9zbG93KGh0LCBrZXksIG9iaik7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03ODUtXHR9XG4tLVxubGliL3JoYXNodGFibGUuYz02Mjg9c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTY3OC1cbmxpYi9yaGFzaHRhYmxlLmM6Njc5OnZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXG5saWIvcmhhc2h0YWJsZS5jLTY4MC1cdFx0XHQgICAgIHN0cnVjdCByaGFzaF9oZWFkICpvYmopXG4tLVxubGliL3JoYXNodGFibGUuYy02OTEtfVxubGliL3JoYXNodGFibGUuYzo2OTI6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyk7XG5saWIvcmhhc2h0YWJsZS5jLTY5My1cbi0tXG5saWIvdGVzdF9yaGFzaHRhYmxlLmM9NTE5PXN0YXRpYyBpbnQgX19pbml0IHRlc3RfaW5zZXJ0X2R1cChzdHJ1Y3QgdGVzdF9vYmpfcmhsICpyaGxfdGVzdF9vYmplY3RzLFxuLS1cbmxpYi90ZXN0X3JoYXNodGFibGUuYy01NDItXHRcdGlmIChzbG93KSB7XG5saWIvdGVzdF9yaGFzaHRhYmxlLmM6NTQzOlx0XHRcdGVyciA9IFBUUl9FUlIocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhcdTAwMjZyaGx0LVx1MDAzZWh0LCBrZXksXG5saWIvdGVzdF9yaGFzaHRhYmxlLmMtNTQ0LVx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyaGxfdGVzdF9vYmplY3RzW2ldLmxpc3Rfbm9kZS5yaGVhZCkpO1xuLS1cbm5ldC9jb3JlL3hkcC5jPTI3MT1zdGF0aWMgc3RydWN0IHhkcF9tZW1fYWxsb2NhdG9yICpfX3hkcF9yZWdfbWVtX21vZGVsKHN0cnVjdCB4ZHBfbWVtX2luZm8gKm1lbSxcbi0tXG5uZXQvY29yZS94ZHAuYy0zMTQtXHQvKiBJbnNlcnQgYWxsb2NhdG9yIGludG8gSUQgbG9va3VwIHRhYmxlICovXG5uZXQvY29yZS94ZHAuYzozMTU6XHRwdHIgPSByaGFzaHRhYmxlX2luc2VydF9zbG93KG1lbV9pZF9odCwgXHUwMDI2aWQsIFx1MDAyNnhkcF9hbGxvYy1cdTAwM2Vub2RlKTtcbm5ldC9jb3JlL3hkcC5jLTMxNi1cdGlmIChJU19FUlIocHRyKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIGBsaWIvcmhhc2h0YWJsZS5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBidWlsZCBwcm9jZXNzIG9mIGBsaWIvcmhhc2h0YWJsZS5jYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAuIEkmIzM5O2xsIGRpZyBpbnRvIGBsaWIvTWFrZWZpbGVgIGRpcmVjdGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHJoYXNodGFibGUub2AgaXMgY29uc3RydWN0ZWQsIHdoaWNoIHdpbGwgaW5ldml0YWJseSBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIGl0cyBpbmNsdXNpb24gYW5kIHBvdGVudGlhbGx5LCBhc3BlY3RzIG9mIGl0cyBjb21waWxhdGlvbi4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmhhc2h0YWJsZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZT01MT1vYmoteVx0JiM0Mzs9IGxvY2tyZWYub1xubGliL01ha2VmaWxlLTUyLVxubGliL01ha2VmaWxlOjUzOkNPTlRFWFRfQU5BTFlTSVNfcmhhc2h0YWJsZS5vIDo9IHlcbmxpYi9NYWtlZmlsZS01NC1cbmxpYi9NYWtlZmlsZT01NT1vYmoteSAmIzQzOz0gYmNkLm8gc29ydC5vIHBhcnNlci5vIGRlYnVnX2xvY2tzLm8gcmFuZG9tMzIubyBcXFxuLS1cbmxpYi9NYWtlZmlsZS01OC1cdCBic2VhcmNoLm8gZmluZF9iaXQubyBsbGlzdC5vIGx3cS5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXFxcbmxpYi9NYWtlZmlsZTo1OTpcdCBwZXJjcHUtcmVmY291bnQubyByaGFzaHRhYmxlLm8gYmFzZTY0Lm8gXFxcbmxpYi9NYWtlZmlsZS02MC1cdCBvbmNlLm8gcmVmY291bnQubyByY3VyZWYubyB1c2VyY29weS5vIGVycnNlcS5vIGJ1Y2tldF9sb2Nrcy5vIFxcXG4tLVxubGliL01ha2VmaWxlPTgzPW9iai0kKENPTkZJR19URVNUX1dPUktRVUVVRSkgJiM0Mzs9IHRlc3Rfd29ya3F1ZXVlLm9cbmxpYi9NYWtlZmlsZTo4NDpvYmotJChDT05GSUdfVEVTVF9SSEFTSFRBQkxFKSAmIzQzOz0gdGVzdF9yaGFzaHRhYmxlLm9cbmxpYi9NYWtlZmlsZS04NS1vYmotJChDT05GSUdfVEVTVF9TVEFUSUNfS0VZUykgJiM0Mzs9IHRlc3Rfc3RhdGljX2tleXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY0NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgcmhhc2h0YWJsZS5vYCBpcyBiYWtlZCByaWdodCBpbnRvIHRoZSBrZXJuZWwsIHdoaWNoIG1lYW5zIGFueSBjaGFuZ2VzIGhlcmUgYXJlIHByZXR0eSBpbXBhY3RmdWwuIEkmIzM5O20gc2VlaW5nIGEgYnVuY2ggb2YgbW9kaWZpY2F0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGFsbCBjZW50ZXJlZCBhcm91bmQgYGxvY2tkZXBgIGtleXMgYW5kIGxvY2tpbmcgc3ViY2xhc3Nlcy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUgaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oYCwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYCwgYW5kIGBsaWIvcmhhc2h0YWJsZS5jYC4KCkkgbm90aWNlIHRoaW5ncyBsaWtlIGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIGJlaW5nIGFkZGVkIHdpdGggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19MT0NLREVQYC4gVGhlcmUgYXJlIGFsc28gY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGxvY2tfYWNxdWlyZV9leGNsdXNpdmVgLCBgbG9ja2RlcF9zZXRfY2xhc3NgLCBhbmQgYGxvY2tkZXBfaW5pdF9tYXBgIHRoYXQgcmVmZXJlbmNlIHRoZXNlIGtleXMuIEl0JiMzOTtzIGFsbCB2ZXJ5IGNsZWFybHkgYWJvdXQgbG9jayBkZXBlbmRlbmN5IGFuYWx5c2lzIGFuZCBwcm92aW5nIGxvY2tpbmcgY29ycmVjdG5lc3MuCgpUaGUga2V5IGNvbmZpZ3MgdG8gbG9vayBhdCBoZXJlIGFyZSBkZWZpbml0ZWx5IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGxpYi9LY29uZmlnLmRlYnVnYCBvciBtYXliZSBga2VybmVsL2xvY2tpbmcvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlaXIgaW1wbGljYXRpb25zIGFyZS4gVGhpcyBpcyBhbGwgYWJvdXQgZW5oYW5jaW5nIHRoZSBrZXJuZWwmIzM5O3MgbG9jayBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTE9DS0RFUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FscGhhL0tjb25maWc9ODY9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gvYWxwaGEvS2NvbmZpZy04OC1cbmFyY2gvYWxwaGEvS2NvbmZpZzo4OTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL2FscGhhL0tjb25maWctOTAtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9hcmMvS2NvbmZpZz02PWNvbmZpZyBBUkNcbi0tXG5hcmNoL2FyYy9LY29uZmlnLTU3LVxuYXJjaC9hcmMvS2NvbmZpZzo1ODpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL2FyYy9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvYXJtL0tjb25maWc9MjI0PWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5hcmNoL2FybS9LY29uZmlnLTIyNy1cbmFyY2gvYXJtL0tjb25maWc6MjI4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvYXJtL0tjb25maWctMjI5LVx0Ym9vbFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0zMzA9Y29uZmlnIElMTEVHQUxfUE9JTlRFUl9WQUxVRVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0zMzMtXG5hcmNoL2FybTY0L0tjb25maWc6MzM0OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMzUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9jc2t5L0tjb25maWc9Mj1jb25maWcgQ1NLWVxuLS1cbmFyY2gvY3NreS9LY29uZmlnLTExMi1cbmFyY2gvY3NreS9LY29uZmlnOjExMzpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL2Nza3kvS2NvbmZpZy0xMTQtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9oZXhhZ29uL0tjb25maWc9NDY9Y29uZmlnIEhFWEFHT05fUEhZU19PRkZTRVRcbi0tXG5hcmNoL2hleGFnb24vS2NvbmZpZy01MC1cbmFyY2gvaGV4YWdvbi9LY29uZmlnOjUxOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvaGV4YWdvbi9LY29uZmlnLTUyLVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mjc2PWNvbmZpZyBMMV9DQUNIRV9TSElGVFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMjc5LVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoyODA6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0yODEtXHRib29sXG4tLVxuYXJjaC9taWNyb2JsYXplL0tjb25maWc9ODA9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gvbWljcm9ibGF6ZS9LY29uZmlnLTgyLVxuYXJjaC9taWNyb2JsYXplL0tjb25maWc6ODM6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9taWNyb2JsYXplL0tjb25maWctODQtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9taXBzL0tjb25maWc9Mjk5OD1lbmRtZW51XG5hcmNoL21pcHMvS2NvbmZpZy0yOTk5LVxuYXJjaC9taXBzL0tjb25maWc6MzAwMDpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL21pcHMvS2NvbmZpZy0zMDAxLVx0Ym9vbFxuLS1cbmFyY2gvb3BlbnJpc2MvS2NvbmZpZz02OD1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxuYXJjaC9vcGVucmlzYy9LY29uZmlnLTcwLVxuYXJjaC9vcGVucmlzYy9LY29uZmlnOjcxOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvb3BlbnJpc2MvS2NvbmZpZy03Mi1cdGRlZl9ib29sICB5XG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZz0xNjg9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gvcGFyaXNjL0tjb25maWctMTcwLVxuYXJjaC9wYXJpc2MvS2NvbmZpZzoxNzE6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0xNzItXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTAxPWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xMDQtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxMDU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTA2LVx0Ym9vbFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0zNTE9Y29uZmlnIFBHVEFCTEVfTEVWRUxTXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTM1NS1cbmFyY2gvcmlzY3YvS2NvbmZpZzozNTY6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9yaXNjdi9LY29uZmlnLTM1Ny1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz01PWNvbmZpZyBDUFVfQklHX0VORElBTlxuLS1cbmFyY2gvczM5MC9LY29uZmlnLTctXG5hcmNoL3MzOTAvS2NvbmZpZzo4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gvczM5MC9LY29uZmlnLTktXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zaC9LY29uZmlnPTExMj1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXG4tLVxuYXJjaC9zaC9LY29uZmlnLTExNC1cbmFyY2gvc2gvS2NvbmZpZzoxMTU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC9zaC9LY29uZmlnLTExNi1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3NwYXJjL0tjb25maWc9MTI1PWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctMTI4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjEyOTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL3NwYXJjL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbmFyY2gvdW0vS2NvbmZpZz02OT1jb25maWcgU0JVU1xuLS1cbmFyY2gvdW0vS2NvbmZpZy03MS1cbmFyY2gvdW0vS2NvbmZpZzo3Mjpjb25maWcgTE9DS0RFUF9TVVBQT1JUXG5hcmNoL3VtL0tjb25maWctNzMtXHRib29sXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0zNDg9Y29uZmlnIE9VVFBVVF9GT1JNQVRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTM1Mi1cbmFyY2gveDg2L0tjb25maWc6MzUzOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcbmFyY2gveDg2L0tjb25maWctMzU0LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveHRlbnNhL0tjb25maWc9ODQ9Y29uZmlnIEhaXG4tLVxuYXJjaC94dGVuc2EvS2NvbmZpZy04Ny1cbmFyY2gveHRlbnNhL0tjb25maWc6ODg6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxuYXJjaC94dGVuc2EvS2NvbmZpZy04OS1cdGRlZl9ib29sIHlcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0xNTMzPWNvbmZpZyBERUJVR19MT0NLX0FMTE9DXG4tLVxubGliL0tjb25maWcuZGVidWctMTU0Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjE1NDg6Y29uZmlnIExPQ0tERVBcbmxpYi9LY29uZmlnLmRlYnVnLTE1NDktXHRib29sXG4tLVxubGliL0tjb25maWcuZGVidWctMTU1NC1cbmxpYi9LY29uZmlnLmRlYnVnOjE1NTU6Y29uZmlnIExPQ0tERVBfU01BTExcbmxpYi9LY29uZmlnLmRlYnVnLTE1NTYtXHRib29sXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTU3LVxubGliL0tjb25maWcuZGVidWc6MTU1ODpjb25maWcgTE9DS0RFUF9CSVRTXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTU5LVx0aW50IFwmIzM0O1NpemUgZm9yIE1BWF9MT0NLREVQX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTE1NjUtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTY2OmNvbmZpZyBMT0NLREVQX0NIQUlOU19CSVRTXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTY3LVx0aW50IFwmIzM0O1NpemUgZm9yIE1BWF9MT0NLREVQX0NIQUlOUyAoYXMgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTU3My1cbmxpYi9LY29uZmlnLmRlYnVnOjE1NzQ6Y29uZmlnIExPQ0tERVBfU1RBQ0tfVFJBQ0VfQklUU1xubGliL0tjb25maWcuZGVidWctMTU3NS1cdGludCBcJiMzNDtTaXplIGZvciBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUyAoYXMgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTU4OC1cbmxpYi9LY29uZmlnLmRlYnVnOjE1ODk6Y29uZmlnIExPQ0tERVBfU1RBQ0tfVFJBQ0VfSEFTSF9CSVRTXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTkwLVx0aW50IFwmIzM0O1NpemUgZm9yIFNUQUNLX1RSQUNFX0hBU0hfU0laRSAoYXMgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTU5Ny1cbmxpYi9LY29uZmlnLmRlYnVnOjE1OTg6Y29uZmlnIExPQ0tERVBfQ0lSQ1VMQVJfUVVFVUVfQklUU1xubGliL0tjb25maWcuZGVidWctMTU5OS1cdGludCBcJiMzNDtTaXplIGZvciBlbGVtZW50cyBpbiBjaXJjdWxhcl9xdWV1ZSBzdHJ1Y3QgKGFzIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWJ1ZyBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbGliL0tjb25maWcuZGVidWdgIGFyb3VuZCBsaW5lIDE1NDguIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gZGVidWdnaW5nIGlzIGhpZGluZyBpbiB0aGF0IHNlY3Rpb24sIHByb2JhYmx5IGEgZmxhZywgZGVwZW5kZW5jeSwgb3IgYSBjb25kaXRpb25hbCBibG9jay4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUsIHBpbnBvaW50aW5nIHRoZSByaWdodCBLY29uZmlnIG9wdGlvbiBpcyBjcnVjaWFsIHRvIGVpdGhlciBlbmFibGUgYSBmZWF0dXJlIG9yIGRpYWdub3NlIGEgbWlzY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYSBrZXkgc3BvdCB0byBmaW5kIHJlbGF0ZWQgb3B0aW9ucyBvciB0byB1bmRlcnN0YW5kIGRlcGVuZGVuY2llcyBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4gTGV0IG1lIHB1bGwgdGhhdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUyMDpcdFx0IGV4Y2VwdGlvbiBvZiBzaW1wbHkgbm90IGFjcXVpcmluZyBhbGwgdGhlIHJlcXVpcmVkIGxvY2tzLlxuMTUyMTpcdFx0IE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgY2FuIGludHJvZHVjZSBzaWduaWZpY2FudCBvdmVyaGVhZCwgc29cbjE1MjI6XHRcdCBpdCByZWFsbHkgc2hvdWxkIG5vdCBiZSBlbmFibGVkIGluIGEgcHJvZHVjdGlvbiBvciBkaXN0cm8ga2VybmVsLFxuMTUyMzpcdFx0IGV2ZW4gYSBkZWJ1ZyBrZXJuZWwuICBJZiB5b3UgYXJlIGEgZHJpdmVyIHdyaXRlciwgZW5hYmxlIGl0LiAgSWZcbjE1MjQ6XHRcdCB5b3UgYXJlIGEgZGlzdHJvLCBkbyBub3QuXG4xNTI1Olx0XG4xNTI2Olx0Y29uZmlnIERFQlVHX1JXU0VNU1xuMTUyNzpcdFx0Ym9vbCBcJiMzNDtSVyBTZW1hcGhvcmUgZGVidWdnaW5nOiBiYXNpYyBjaGVja3NcJiMzNDtcbjE1Mjg6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuMTUyOTpcdFx0aGVscFxuMTUzMDpcdFx0ICBUaGlzIGRlYnVnZ2luZyBmZWF0dXJlIGFsbG93cyBtaXNtYXRjaGVkIHJ3IHNlbWFwaG9yZSBsb2Nrc1xuMTUzMTpcdFx0ICBhbmQgdW5sb2NrcyB0byBiZSBkZXRlY3RlZCBhbmQgcmVwb3J0ZWQuXG4xNTMyOlx0XG4xNTMzOlx0Y29uZmlnIERFQlVHX0xPQ0tfQUxMT0NcbjE1MzQ6XHRcdGJvb2wgXCYjMzQ7TG9jayBkZWJ1Z2dpbmc6IGRldGVjdCBpbmNvcnJlY3QgZnJlZWluZyBvZiBsaXZlIGxvY2tzXCYjMzQ7XG4xNTM1Olx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuMTUzNjpcdFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXG4xNTM3Olx0XHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxuMTUzODpcdFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xuMTUzOTpcdFx0c2VsZWN0IExPQ0tERVBcbjE1NDA6XHRcdGhlbHBcbjE1NDE6XHRcdCBUaGlzIGZlYXR1cmUgd2lsbCBjaGVjayB3aGV0aGVyIGFueSBoZWxkIGxvY2sgKHNwaW5sb2NrLCByd2xvY2ssXG4xNTQyOlx0XHQgbXV0ZXggb3IgcndzZW0pIGlzIGluY29ycmVjdGx5IGZyZWVkIGJ5IHRoZSBrZXJuZWwsIHZpYSBhbnkgb2YgdGhlXG4xNTQzOlx0XHQgbWVtb3J5LWZyZWVpbmcgcm91dGluZXMgKGtmcmVlKCksIGttZW1fY2FjaGVfZnJlZSgpLCBmcmVlX3BhZ2VzKCksXG4xNTQ0Olx0XHQgdmZyZWUoKSwgZXRjLiksIHdoZXRoZXIgYSBsaXZlIGxvY2sgaXMgaW5jb3JyZWN0bHkgcmVpbml0aWFsaXplZCB2aWFcbjE1NDU6XHRcdCBzcGluX2xvY2tfaW5pdCgpL211dGV4X2luaXQoKS9ldGMuLCBvciB3aGV0aGVyIHRoZXJlIGlzIGFueSBsb2NrXG4xNTQ2Olx0XHQgaGVsZCBkdXJpbmcgdGFzayBleGl0LlxuMTU0NzpcdFxuMTU0ODpcdGNvbmZpZyBMT0NLREVQXG4xNTQ5Olx0XHRib29sXG4xNTUwOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuMTU1MTpcdFx0c2VsZWN0IFNUQUNLVFJBQ0VcbjE1NTI6XHRcdHNlbGVjdCBLQUxMU1lNU1xuMTU1MzpcdFx0c2VsZWN0IEtBTExTWU1TX0FMTFxuMTU1NDpcdFxuMTU1NTpcdGNvbmZpZyBMT0NLREVQX1NNQUxMXG4xNTU2Olx0XHRib29sXG4xNTU3Olx0XG4xNTU4Olx0Y29uZmlnIExPQ0tERVBfQklUU1xuMTU1OTpcdFx0aW50IFwmIzM0O1NpemUgZm9yIE1BWF9MT0NLREVQX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuMTU2MDpcdFx0ZGVwZW5kcyBvbiBMT0NLREVQIFx1MDAyNlx1MDAyNiAhTE9DS0RFUF9TTUFMTFxuMTU2MTpcdFx0cmFuZ2UgMTAgMjRcbjE1NjI6XHRcdGRlZmF1bHQgMTVcbjE1NjM6XHRcdGhlbHBcbjE1NjQ6XHRcdCAgVHJ5IGluY3JlYXNpbmcgdGhpcyB2YWx1ZSBpZiB5b3UgaGl0IFwmIzM0O0JVRzogTUFYX0xPQ0tERVBfRU5UUklFUyB0b28gbG93IVwmIzM0OyBtZXNzYWdlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBMb2NraW5nIE1lY2hhbmlzbXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgdG93YXJkIHVuZGVyc3RhbmRpbmcgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvZGUuIEkgbmVlZCB0byBwaW5wb2ludCBleGFjdGx5IHdoYXQgY29uZGl0aW9uIG9yIHNldCBvZiBjb25kaXRpb25zIHRyaWdnZXJzIHRoZSBzZWxlY3Rpb24gb2YgZWl0aGVyIGBQUk9WRV9MT0NLSU5HYCBvciBgTE9DS0RFUGAuIEkgd2FudCB0byBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IHVsdGltYXRlbHkgZGV0ZXJtaW5lIHdoaWNoIGxvY2tpbmcgbWVjaGFuaXNtIGdldHMgYWN0aXZhdGVkLiBJdCYjMzk7cyBhYm91dCB0cmFjaW5nIHRoZSBsb2dpYyBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGJyYW5jaGluZyBwb2ludCBhbmQgaG93IHRoZSBzeXN0ZW0gY2hvb3NlcyBiZXR3ZWVuIHRoZXNlIHR3byBkaXN0aW5jdCBhcHByb2FjaGVzLiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gc2VlIHdoeSBjZXJ0YWluIGRlY2lzaW9ucyBhcmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST1ZFX0xPQ0tJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MTQwMT1jb25maWcgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTE0MDUtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNDA2OmNvbmZpZyBQUk9WRV9MT0NLSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDA3LVx0Ym9vbCBcJiMzNDtMb2NrIGRlYnVnZ2luZzogcHJvdmUgbG9ja2luZyBjb3JyZWN0bmVzc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWJ1ZyBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MDYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbW9yZSBpbnRyaWNhdGUgZGVidWcgb3B0aW9ucyByZXNpZGUsIGFuZCBsaWtlbHkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zLCB0aGVpciBkZWZhdWx0cywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCB3aGVyZSB0aGV5JiMzOTtyZSB1c2VkLiBGcm9tIHRoZXJlLCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgaW5jbHVkZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHkgaW50byB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIGlmIG5lY2Vzc2FyeSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYWRkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDU6XHRcbjE0MDY6XHRjb25maWcgUFJPVkVfTE9DS0lOR1xuMTQwNzpcdFx0Ym9vbCBcJiMzNDtMb2NrIGRlYnVnZ2luZzogcHJvdmUgbG9ja2luZyBjb3JyZWN0bmVzc1wmIzM0O1xuMTQwODpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcbjE0MDk6XHRcdHNlbGVjdCBMT0NLREVQXG4xNDEwOlx0XHRzZWxlY3QgREVCVUdfU1BJTkxPQ0tcbjE0MTE6XHRcdHNlbGVjdCBERUJVR19NVVRFWEVTIGlmICFQUkVFTVBUX1JUXG4xNDEyOlx0XHRzZWxlY3QgREVCVUdfUlRfTVVURVhFUyBpZiBSVF9NVVRFWEVTXG4xNDEzOlx0XHRzZWxlY3QgREVCVUdfUldTRU1TIGlmICFQUkVFTVBUX1JUXG4xNDE0Olx0XHRzZWxlY3QgREVCVUdfV1dfTVVURVhfU0xPV1BBVEhcbjE0MTU6XHRcdHNlbGVjdCBERUJVR19MT0NLX0FMTE9DXG4xNDE2Olx0XHRzZWxlY3QgUFJFRU1QVF9DT1VOVCBpZiAhQVJDSF9OT19QUkVFTVBUXG4xNDE3Olx0XHRzZWxlY3QgVFJBQ0VfSVJRRkxBR1NcbjE0MTg6XHRcdGRlZmF1bHQgblxuMTQxOTpcdFx0aGVscFxuMTQyMDpcdFx0IFRoaXMgZmVhdHVyZSBlbmFibGVzIHRoZSBrZXJuZWwgdG8gcHJvdmUgdGhhdCBhbGwgbG9ja2luZ1xuMTQyMTpcdFx0IHRoYXQgb2NjdXJzIGluIHRoZSBrZXJuZWwgcnVudGltZSBpcyBtYXRoZW1hdGljYWxseVxuMTQyMjpcdFx0IGNvcnJlY3Q6IHRoYXQgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlIGNvdWxkIGFuIGFyYml0cmFyeSAoYW5kXG4xNDIzOlx0XHQgbm90IHlldCB0cmlnZ2VyZWQpIGNvbWJpbmF0aW9uIG9mIG9ic2VydmVkIGxvY2tpbmdcbjE0MjQ6XHRcdCBzZXF1ZW5jZXMgKG9uIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgQ1BVcywgcnVubmluZyBhblxuMTQyNTpcdFx0IGFyYml0cmFyeSBudW1iZXIgb2YgdGFza3MgYW5kIGludGVycnVwdCBjb250ZXh0cykgY2F1c2UgYVxuMTQyNjpcdFx0IGRlYWRsb2NrLlxuMTQyNzpcdFxuMTQyODpcdFx0IEluIHNob3J0LCB0aGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUga2VybmVsIHRvIHJlcG9ydCBsb2NraW5nXG4xNDI5Olx0XHQgcmVsYXRlZCBkZWFkbG9ja3MgYmVmb3JlIHRoZXkgYWN0dWFsbHkgb2NjdXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJ1bWluYXRpb25zIG9uIFJoYXNodGFibGUgYW5kIExvY2tkZXAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgcmhhc2h0YWJsZWAgaW1wbGVtZW50YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBMT0NLREVQYCBhbmQgYFBST1ZFX0xPQ0tJTkdgLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFBST1ZFX0xPQ0tJTkdgIGltcGxpY2l0bHkgcHVsbHMgaW4gYExPQ0tERVBgLCBhbmQgYERFQlVHX0xPQ0tfQUxMT0NgIGRvZXMgdGhlIHNhbWUuICBUaGF0IHNlZW1zIGxvZ2ljYWwuICBBbmQgYERFQlVHX0xPQ0tfQUxMT0NgIGFsc28gZHJhZ3MgaW4gYExPQ0tERVBgIC0gdGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgdGhlc2UgZGVidWcgYWlkcy4KCk15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBDT05GSUdfVEVTVF9SSEFTSFRBQkxFYCBzaW5jZSBpdCYjMzk7cyBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgKm1pZ2h0KiBiZSByZWxldmFudC4gQnV0IHdhaXQsIGBDT05GSUdfVEVTVF9SSEFTSFRBQkxFYCBpcyBqdXN0IGZvciBzZWxmLXRlc3RzISBUaGF0JiMzOTtzIG5vdCB3aGF0IFN5emthbGxlciBpcyBsb29raW5nIGF0OyBpdCBkZWFscyB3aXRoIHN5c2NhbGxzIGFuZCBub3JtYWwgZXhlY3V0aW9uIHBhdGhzLiAgU28sIG5vLiBJIGNhbiBzYWZlbHkgaWdub3JlIHRoYXQuCgpOb3csIGByaGFzaHRhYmxlYCBpdHNlbGYgaXMgYSBidWlsdC1pbiBrZXJuZWwgY29tcG9uZW50LiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBBbmQsIGFoIHllcywgaGVyZSBpdCBpczogYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCBhcmUgd2hhdCBhY3R1YWxseSAqZW5hYmxlKiB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nIGZvciB0aGUgcmhhc2h0YWJsZSBrZXlzOyBzcGVjaWZpY2FsbHkgYmVjYXVzZSBgI2lmZGVmIENPTkZJR19MT0NLREVQYCBndWFyZHMgdGhvc2Ugc2VjdGlvbnMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb2RlLgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTG9va2luZyBpbiBgcmhhc2h0YWJsZS10eXBlcy5oYCBJIGNhbiBzZWUgdGhpczoKCmBgYGMKc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIHsKI2lmZGVmIENPTkZJR19MT0NLREVQCglzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7CglzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5OwoJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1Y2tldF9rZXk7CiNlbmRpZgp9OwpgYGAKClRoaXMgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGNvbWUgdG9nZXRoZXIuICBBbmQgdGhlbiwgaW4gYGxpYi9yaGFzaHRhYmxlLmNgOgoKYGBgYwojaWZkZWYgQ09ORklHX0xPQ0tERVAKCWh0LSZndDtsb2NrZGVwX2tleSA9ICZhbXA7a2V5cy0mZ3Q7YnVja2V0X2tleTsKI2VuZGlmCmBgYAoKYGh0LSZndDtsb2NrZGVwX2tleWAgaXMgYXNzaWduZWQgKm9ubHkqIHdoZW4gYENPTkZJR19MT0NLREVQYCBpcyBkZWZpbmVkLiBUaGlzIGlzIHdoYXQmIzM5O3MgcHJvdmlkaW5nIHRoZSBrZXkgaW5mb3JtYXRpb24uCgpGdXJ0aGVybW9yZSwgaW4gYGJ1Y2tldF90YWJsZV9hbGxvY2A6CgpgYGBjCiNpZmRlZiBDT05GSUdfTE9DS0RFUAoJLyogYml0bG9ja3MgbXVzdCB1c2UgbmVzdGluZyBsZXZlbCAyIG9yIG1vcmUgKi8KCWxvY2tkZXBfaW5pdF9tYXAoJmFtcDt0YmwtJmd0O2RlcF9tYXAsICYjMzQ7cmhhc2h0YWJsZV9idWNrZXQmIzM0OywgaHQtJmd0O2xvY2tkZXBfa2V5LCAwKTsKI2VuZGlmCmBgYAoKSGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludDogIGB0YmwtJmd0O2RlcF9tYXBgIGlzIGluaXRpYWxpemVkICpvbmx5KiB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBsb2NrIGRlcGVuZGVuY3kgdHJhY2tpbmcgcmVsaWVzIG9uIGBMT0NLREVQYC4KCkFuZCwgZmluYWxseSwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYDoKCmBgYGMKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsCgkJCQkJc3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCwKCQkJCQl1bnNpZ25lZCBpbnQgc3ViY2xhc3MpCnsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwoJYml0X3NwaW5fbG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWJ1Y2tldCk7Cglsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKCZhbXA7dGJsLSZndDtkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTsKCXJldHVybiBmbGFnczsKfQpgYGAKCkxvb2tpbmcgYXQgYHJodF9sb2NrX25lc3RlZGAsIHRoZSBjYWxsIHRvIGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYCAqZXhwbGljaXRseSogdXNlcyBgdGJsLSZndDtkZXBfbWFwYC4gIEFuZCwgZ29pbmcgYmFjayB0byB0aGUgZGVmaW5pdGlvbiwgYHRibC0mZ3Q7ZGVwX21hcGAgaXMgb25seSBwcmVzZW50IHdoZW4gYENPTkZJR19MT0NLREVQYCBpcyBlbmFibGVkLgoKVGhlcmVmb3JlLCB0aGUgcHJlc2VuY2Ugb2YgYExPQ0tERVBgICpkaXJlY3RseSogaW1wYWN0cyB0aGUgbG9ja2luZyBiZWhhdmlvciBpbiB0aGUgcmhhc2h0YWJsZSBjb2RlISBJdCBhZGRzIHRoZSBsb2NrIGRlcGVuZGVuY3kgdHJhY2tpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBpbXBsaWNhdGlvbnMuIEFuZCBub3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBmdWxsIGBzdHJ1Y3QgYnVja2V0X3RhYmxlYCBkZWZpbml0aW9uIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcF9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTYwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gYHN0cnVjdCBidWNrZXRfdGFibGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBidWNrZXRfdGFibGVgLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBzb21lIGtpbmQgb2YgaGFzaCB0YWJsZSBvciBzaW1pbGFyIGRhdGEgc3RydWN0dXJlLCBhbmQgdGhlIGBidWNrZXRfdGFibGVgIGlzIGNlbnRyYWwgdG8gaXRzIGltcGxlbWVudGF0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogaXQmIzM5O3MgZGVmaW5lZC4gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBzcGVjaWZpYyBzb3VyY2UgZmlsZT8gSWYgSSBoYXZlIHNvbWUgY29udGV4dCAtIHdoaWNoIHByb2plY3QgSSBhbSBpbiAtIEkgY291bGQgZ3Vlc3MuIEJ1dCB3aXRob3V0IGl0LCBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgZGlnZ2luZy4gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzLiBgZ3JlcGAsIGBmaW5kYCwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBtYXliZSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIG9yIHNlbWFudGljIGFuYWx5c2lzLCBpcyB0aGUgaW1tZWRpYXRlIGRpcmVjdGlvbiBJJiMzOTtsbCBnby4gTXkgb2JqZWN0aXZlPyBMb2NhdGUgdGhlIGRlZmluaXRpdmUgZGVjbGFyYXRpb24sIHByZWZlcmFibHkgaW5jbHVkaW5nIGFueSByZWxldmFudCBjb21tZW50cywgdHlwZWRlZnMsIGFuZCBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gQXJtZWQgd2l0aCB0aGF0LCBJIGNhbiBnZXQgZG93biB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYnVja2V0X3RhYmxlIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD00Nz1zdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIHt9O1xuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc1LSAqL1xuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg6NzY6c3RydWN0IGJ1Y2tldF90YWJsZSB7XG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03Ny1cdHVuc2lnbmVkIGludFx0XHRzaXplO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDUxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHNwZWNpZmllZCBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byBgcmhhc2h0YWJsZS5oYCDigJMgTGluZXMgNzUtMTAwKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDc1LTEwMCBvZiBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSByZXNpemFibGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGByaGFzaHRhYmxlYCBzdHJ1Y3QgaXRzZWxmIGRlZmluZWQsIGFsb25nIHdpdGggbWF5YmUgcmVsYXRlZCBzdHJ1Y3RzIGxpa2UgYnVja2V0IGhlYWRzLCBub2RlIHN0cnVjdHVyZXMsIG9yIG1ldGFkYXRhIGZvciBoYXNoIGtleSBtYW5hZ2VtZW50LiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIGZpbmRpbmcgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGhhc2gga2V5IHN0cnVjdHVyZSwgYW5kIHBvc3NpYmxlIGZ1bmN0aW9uIHByb3RvdHlwZXMgcmVsYXRpbmcgdG8ga2V5IGxvb2t1cHMsIGluc2VydGlvbnMsIGFuZCBkZWxldGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHN0YXJ0cywgc28gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBiYXNpY3MuIExvb2tpbmcgZm9yd2FyZCB0byBnZXR0aW5nIHRvIHRoZSBudXRzIGFuZCBib2x0cyBvZiBob3cgdGhlc2UgdGFibGVzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdCAqL1xuICA3NjpcdHN0cnVjdCBidWNrZXRfdGFibGUge1xuICA3NzpcdFx0dW5zaWduZWQgaW50XHRcdHNpemU7XG4gIDc4Olx0XHR1bnNpZ25lZCBpbnRcdFx0bmVzdDtcbiAgNzk6XHRcdHUzMlx0XHRcdGhhc2hfcm5kO1xuICA4MDpcdFx0c3RydWN0IGxpc3RfaGVhZFx0d2Fsa2VycztcbiAgODE6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gIDgyOlx0XG4gIDgzOlx0XHRzdHJ1Y3QgYnVja2V0X3RhYmxlIF9fcmN1ICpmdXR1cmVfdGJsO1xuICA4NDpcdFxuICA4NTpcdFx0c3RydWN0IGxvY2tkZXBfbWFwXHRkZXBfbWFwO1xuICA4NjpcdFxuICA4NzpcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqYnVja2V0c1tdIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4gIDg4Olx0fTtcbiAgODk6XHRcbiAgOTA6XHQvKlxuICA5MTpcdCAqIE5VTExTX01BUktFUigpIGV4cGVjdHMgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGxvd1xuICA5MjpcdCAqIGJpdHMgbW9zdGx5IGxpa2VseSB0byBiZSBzaWduaWZpY2FudCwgYW5kIGl0IGRpc2NhcmRzXG4gIDkzOlx0ICogdGhlIG1zYi5cbiAgOTQ6XHQgKiBXZSBnaXZlIGl0IGFuIGFkZHJlc3MsIGluIHdoaWNoIHRoZSBib3R0b20gYml0IGlzXG4gIDk1Olx0ICogYWx3YXlzIDAsIGFuZCB0aGUgbXNiIG1pZ2h0IGJlIHNpZ25pZmljYW50LlxuICA5NjpcdCAqIFNvIHdlIHNoaWZ0IHRoZSBhZGRyZXNzIGRvd24gb25lIGJpdCB0byBhbGlnbiB3aXRoXG4gIDk3Olx0ICogZXhwZWN0YXRpb25zIGFuZCBhdm9pZCBsb3NpbmcgYSBzaWduaWZpY2FudCBiaXQuXG4gIDk4Olx0ICpcbiAgOTk6XHQgKiBXZSBuZXZlciBzdG9yZSB0aGUgTlVMTFNfTUFSS0VSIGluIHRoZSBoYXNoIHRhYmxlXG4gMTAwOlx0ICogaXRzZWxmIGFzIHdlIG5lZWQgdGhlIGxzYiBmb3IgbG9ja2luZy5cbiAxMDE6XHQgKiBJbnN0ZWFkIHdlIHN0b3JlIGEgTlVMTFxuIDEwMjpcdCAqL1xuIDEwMzpcdCNkZWZpbmVcdFJIVF9OVUxMU19NQVJLRVIocHRyKVx0XFxcbiAxMDQ6XHRcdCgodm9pZCAqKU5VTExTX01BUktFUigoKHVuc2lnbmVkIGxvbmcpIChwdHIpKSBcdTAwM2VcdTAwM2UgMSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiByaGFzaHRhYmxlIExvY2sgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbG9jayBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nLiBJIHNlZSB0aGF0IHRoZSBgYnVja2V0X3RhYmxlYCBzdHJ1Y3QgaGFzIGEgYGxvY2tkZXBfbWFwYCB3aGljaCB0cmFja3MgZGVwZW5kZW5jaWVzLCBidXQgaXQmIzM5O3Mgb25seSBhY3RpdmUgaWYgYENPTkZJR19MT0NLREVQYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzeW1ib2xzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBSZW1lbWJlcmluZyB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCBpbnN0ZWFkIHRhcmdldCBmZWF0dXJlLXNwZWNpZmljIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHByZXNlbnQgYSBjaGFsbGVuZ2UsIHNvIEkgbmVlZCB0byBpZGVudGlmeSBub24tc3RhdGljIGNhbGxlcnMgdGhhdCBleGVyY2lzZSB0aGVtLgoKTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjaGFuZ2VkIG9yIGVudHJ5cG9pbnQgZnVuY3Rpb25zIGluIGBsaWIvcmhhc2h0YWJsZS5jYC4gSSBmb3VuZCB0aGVzZSBmdW5jdGlvbnM6IGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgLCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAsIGFuZCBgcmh0X2RlZmVycmVkX3dvcmtlcmAuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIGZpbGUsIGFuZCBJJiMzOTt2ZSBsb29rZWQgaW50byBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AuIEkmIzM5O3ZlIG5vdGVkIHRoYXQgc2V2ZXJhbCByZWhhc2hpbmcgZnVuY3Rpb25zLCBsaWtlIGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV9yZWhhc2hfdGFibGVgLCBhbmQgYHJoYXNodGFibGVfcmVoYXNoX2FsbG9jYCBhcmUgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgbWVhbnMgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWRkcmVzc2FibGUgc3ltYm9scy4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgKm5vdCogaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgd29yayBxdWV1ZSwgbWFraW5nIGl0IGEgdmFsaWQgc3ltYm9sIGluIGB2bWxpbnV4YC4gVGhlIG90aGVyIHR3byAoYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCkgYXJlIEVYUE9SVF9TWU1CT0xfR1BMLCBzbyBhcmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLgoKYHJoYXNodGFibGVfaW5zZXJ0X3Nsb3dgIGl0c2VsZiBjYWxscyBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgd2hpY2ggaW4gdHVybiBjYWxscyBgcmh0X2xvY2tgLiBgcmh0X2xvY2tgIGlzIHdoZXJlIHRoZSBsb2NraW5nIG9jY3VycyBhbmQgaXMgc3RhdGljIGlubGluZSBpbiBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoaXMsIHdoaWNoIHdpbGwgbGV0IG1lIGdldCBhdCB0aGUgbG9jay4gTG9va2luZyBhdCBgcmh0X2xvY2tfbmVzdGVkYCB3aGljaCBgcmh0X2xvY2tgIGNhbGxzLCBJIHNlZSB0aGF0IHdpdGhpbiBgbGliL3JoYXNodGFibGUuY2A6IGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgIGFuZCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gIGNhbGwgbmVzdGVkIHZlcnNpb25zIG9mIHRoZSBsb2NrLiBBbHNvLCBgcmh0X2RlZmVycmVkX3dvcmtlcmAgY2FsbHMgYHJoYXNodGFibGVfcmVoYXNoX3RhYmxlYCwgd2hpY2ggY2FsbHMgYm90aCBvZiB0aG9zZSBmdW5jdGlvbnMsIGFuZCBhbHNvIHRha2VzIGEgbXV0ZXggbG9jayBiZWZvcmUgdGhhdC4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95YCB0YWtlcyBhbnkgbG9ja3MsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9yaGFzaHRhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDY6XHR2b2lkIHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4xMjQ3Olx0XHRcdFx0XHQgdm9pZCAoKmZyZWVfZm4pKHZvaWQgKnB0ciwgdm9pZCAqYXJnKSxcbjEyNDg6XHRcdFx0XHRcdCB2b2lkICphcmcpXG4xMjQ5Olx0e1xuMTI1MDpcdFx0c3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCAqbmV4dF90Ymw7XG4xMjUxOlx0XHR1bnNpZ25lZCBpbnQgaTtcbjEyNTI6XHRcbjEyNTM6XHRcdGlycV93b3JrX3N5bmMoXHUwMDI2aHQtXHUwMDNlcnVuX2lycV93b3JrKTtcbjEyNTQ6XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2aHQtXHUwMDNlcnVuX3dvcmspO1xuMTI1NTpcdFxuMTI1NjpcdFx0LypcbjEyNTc6XHRcdCAqIERvIE5PVCB0YWtlIGh0LVx1MDAzZW11dGV4IGhlcmUuIFRoZSByZWhhc2ggd29ya2VyIGVzdGFibGlzaGVzXG4xMjU4Olx0XHQgKiBodC1cdTAwM2VtdXRleCAtXHUwMDNlIGZzX3JlY2xhaW0gdmlhIEdGUF9LRVJORUwgYnVja2V0IGFsbG9jYXRpb24gdW5kZXJcbjEyNTk6XHRcdCAqIHRoZSBtdXRleDsgY2FsbGVycyBvbiB0aGUgcmVjbGFpbSBwYXRoIChlLmcuIHNpbXBsZV94YXR0cl9odF9mcmVlKClcbjEyNjA6XHRcdCAqIGZyb20gZXZpY3QoKSB1bmRlciB0aGUgZGNhY2hlIHNocmlua2VyIGZvciBzaG1lbS9rZXJuZnMvcGlkZnNcbjEyNjE6XHRcdCAqIGlub2Rlcykgd291bGQgb3RoZXJ3aXNlIGNsb3NlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuMTI2MjpcdFx0ICogZnNfcmVjbGFpbSAtXHUwMDNlIGh0LVx1MDAzZW11dGV4LlxuMTI2MzpcdFx0ICovXG4xMjY0Olx0XHR0YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGh0LVx1MDAzZXRibCk7XG4xMjY1Olx0cmVzdGFydDpcbjEyNjY6XHRcdGlmIChmcmVlX2ZuKSB7XG4xMjY3Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRibC1cdTAwM2VzaXplOyBpJiM0MzsmIzQzOykge1xuMTI2ODpcdFx0XHRcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xuMTI2OTpcdFxuMTI3MDpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMTI3MTpcdFx0XHRcdGZvciAocG9zID0gcmh0X3B0cl9leGNsdXNpdmUocmh0X2J1Y2tldCh0YmwsIGkpKSxcbjEyNzI6XHRcdFx0XHQgICAgIG5leHQgPSAhcmh0X2lzX2FfbnVsbHMocG9zKSA/XG4xMjczOlx0XHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLVx1MDAzZW5leHQpIDogTlVMTDtcbjEyNzQ6XHRcdFx0XHQgICAgICFyaHRfaXNfYV9udWxscyhwb3MpO1xuMTI3NTpcdFx0XHRcdCAgICAgcG9zID0gbmV4dCxcbjEyNzY6XHRcdFx0XHQgICAgIG5leHQgPSAhcmh0X2lzX2FfbnVsbHMocG9zKSA/XG4xMjc3Olx0XHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLVx1MDAzZW5leHQpIDogTlVMTClcbjEyNzg6XHRcdFx0XHRcdHJoYXNodGFibGVfZnJlZV9vbmUoaHQsIHBvcywgZnJlZV9mbiwgYXJnKTtcbjEyNzk6XHRcdFx0fVxuMTI4MDpcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0bmV4dF90YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHRibC1cdTAwM2VmdXR1cmVfdGJsKTtcbjEyODM6XHRcdGJ1Y2tldF90YWJsZV9mcmVlKHRibCk7XG4xMjg0Olx0XHRpZiAobmV4dF90YmwpIHtcbjEyODU6XHRcdFx0dGJsID0gbmV4dF90Ymw7XG4xMjg2Olx0XHRcdGdvdG8gcmVzdGFydDtcbjEyODc6XHRcdH1cbjEyODg6XHR9XG4xMjg5Olx0RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KTtcbjEyOTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1OTYKCQkJCQkJCW91dHB1dDogMjE1CgkJCQkJCQl0aG91Z2h0czogMTE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFJhdGlvbmFsZTogUmhhc2h0YWJsZSBMb2NraW5nICZhbXA7IExvY2tkZXAqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoaXMgcGF0Y2ggdG91Y2hpbmcgYGxpYi9yaGFzaHRhYmxlLmNgLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb21tZW50IGluIGByaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3lgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUsIGhpZ2hsaWdodGluZyB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiByaGFzaHRhYmxlJiMzOTtzIGxvY2tpbmcsIGBmc19yZWNsYWltYCwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVkIGZsYWcgZm9yIGxvY2tkZXAsIGFuZCBpdCBtZWFucyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzIGluIGhvdyB3ZSB0YXJnZXQgdGhpcy4KClRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiByZWZhY3RvcmluZyB0aGUgbG9ja2RlcCBrZXkgaW5pdGlhbGl6YXRpb24sIGdvaW5nIGZyb20gYSBzaW5nbGUgc2hhcmVkIGtleSB0byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzLiAgSXQgYWxzbyByZWNvbmZpZ3VyZXMgdGhlIGxvY2sgbmVzdGluZyBzdWJjbGFzc2VzIGZvciBgdGJsLSZndDtkZXBfbWFwYCBhbmQgYGh0LSZndDttdXRleGAuIFRoaXMgaXMgYWxsIGFib3V0IGxvY2sgdmFsaWRhdGlvbiwgYW5kIGFueXRoaW5nIHRoYXQgbWVzc2VzIHdpdGggbG9ja2RlcCBpbiBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgbGlrZSBgcmhhc2h0YWJsZWAgKnNjcmVhbXMqICYjMzQ7d29ydGggZnV6emluZy4mIzM0OyBSaGFzaHRhYmxlcyBhcmUgZXZlcnl3aGVyZSDigJMgbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIElQQywgeW91IG5hbWUgaXQg4oCTIHNvIGFueSBsb2NraW5nIHJlZ3Jlc3Npb24gaGVyZSBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGRvd25zdHJlYW0gaW1wYWN0LgoKUmVnYXJkaW5nIHJlbGV2YW50IGNvbmZpZ3MsIHRoZSBjaGFuZ2VkIGNvZGUgdXRpbGl6ZXMgYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCwgd2hpY2ggaXMgc3RhbmRhcmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gYGxpYi9yaGFzaHRhYmxlLmNgIGlzIGFsd2F5cyBidWlsdCwgc28gd2UgY2FuIHJlbGlhYmx5IGluY2x1ZGUgdGhlc2UuICBTaW5jZSBgUFJPVkVfTE9DS0lOR2AgaW1wbGljaXRseSBpbmNsdWRlcyBgTE9DS0RFUGAsIHdlJiMzOTtyZSBzb2xpZCB0aGVyZS4KCk5vdywgZm9yIHN5bWJvbCBzZWxlY3Rpb24sIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGluIGBsaWIvcmhhc2h0YWJsZS5jYDogYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAsIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCwgYW5kIGByaHRfZGVmZXJyZWRfd29ya2VyYC4gSSBrbm93IHRoYXQgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGlzIGEgbWFjcm8sIGJ1dCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgIGFyZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMuIEkmIzM5O3ZlIGFsc28gaW5jbHVkZWQgYHJoYXNodGFibGVfaW5zZXJ0X3Nsb3dgIGJlY2F1c2UgaXQgZXhlcmNpc2VzIGluc2VydGlvbiBhbmQgdGhlIGJ1Y2tldCBiaXRsb2NrIGxvZ2ljIGFuZCBjYWxscyBgcmh0X2xvY2tgLiBJIGJyaWVmbHkgY2hlY2tlZCBgbGliL3Rlc3Rfcmhhc2h0YWJsZS5jYCwgYnV0IHRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBpc29sYXRlZCB0byBhIHRlc3QgbW9kdWxlJiMzOTtzIGBwcmludF9odGAgZnVuY3Rpb24sIGFuZCBub3QgY3JpdGljYWwgZm9yIG91ciBzeXprYWxsZXIgZm9jdXMuCgpTbyB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbnMgd2l0aGluIHRoZSByaGFzaHRhYmxlIGNvZGUsIGRpcmVjdGx5IGltcGFjdGluZyBsb2NrIHZhbGlkYXRpb24uIEFueSBzdWJ0bGUgZXJyb3IgaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBleHBvc2UgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIHVuZGVyIGxvY2tkZXAuIFRoYXQmIzM5O3Mgd2h5IEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoZXNlIHNldHRpbmdzIGZvciB0aGUgZnV6emluZyBydW46CgoqICAgKipXb3J0aEZ1enppbmcqKjogdHJ1ZQoqICAgKipSZWFzb25pbmcqKjogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyAoYGxpYi9yaGFzaHRhYmxlLmNgIGFuZCBgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oYCkuIFNwZWNpZmljYWxseSwgaXQgc2VwYXJhdGVzIHRoZSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgaGFzaCB0YWJsZSBtdXRleCwgc3BpbmxvY2ssIGFuZCBidWNrZXQgYml0bG9ja3MgKGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgKSwgYW5kIGFkanVzdHMgdGhlIGxvY2tkZXAgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgYHRibC0mZ3Q7ZGVwX21hcGAgYW5kIGBodC0mZ3Q7bXV0ZXhgLiBSaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zLCBhbmQgSVBDLiBDaGFuZ2VzIGluIGxvY2tkZXAgYW5ub3RhdGlvbnMgYW5kIGxvY2tpbmcgcnVsZXMgZGlyZWN0bHkgaW1wYWN0IGxvY2sgdmFsaWRhdGlvbiBhbmQgY2FuIGV4cG9zZSBsYXRlbnQgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIHVuZGVyIGxvY2tkZXAuCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFsmIzM0O1BST1ZFXF9MT0NLSU5HJiMzNDssICYjMzQ7TE9DS0RFUCYjMzQ7XQoqICAgKipGb2N1c1N5bWJvbHMqKjogXFsmIzM0O1xfXF9yaGFzaHRhYmxlXF9pbml0XF9ub3Byb2YmIzM0OywgJiMzNDtcX1xfcmhsdGFibGVcX2luaXRcX25vcHJvZiYjMzQ7LCAmIzM0O3JodFxfZGVmZXJyZWRcX3dvcmtlciYjMzQ7LCAmIzM0O3JoYXNodGFibGVcX2luc2VydFxfc2xvdyYjMzQ7XQoKV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIHZlcmlmaWVkLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgdGhlIHJlc3VsdHMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fcmhsdGFibGVfaW5pdF9ub3Byb2YmIzM0OywKICAgICYjMzQ7cmh0X2RlZmVycmVkX3dvcmtlciYjMzQ7LAogICAgJiMzNDtyaGFzaHRhYmxlX2luc2VydF9zbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mJiMzNDssCiAgICAmIzM0O19fcmhsdGFibGVfaW5pdF9ub3Byb2YmIzM0OywKICAgICYjMzQ7cmh0X2RlZmVycmVkX3dvcmtlciYjMzQ7LAogICAgJiMzNDtyaGFzaHRhYmxlX2luc2VydF9zbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBkYXRhIGJ1ZmZlcnMsIGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIHNlcmlhbGl6YXRpb24uXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Db25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmQ2NGMxZWU2M2E2NGI4ZGQyNDRiN2Y5MGE5MGQxZGIwMjBkOTVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oCkBAIC03MCw2ICYjNDM7NzAsMTQgQEAgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHsKIAlyaHRfb2JqX2NtcGZuX3QJCW9ial9jbXBmbjsKIH07CiAKJiM0MztzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOwlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBtdXRleF9rZXk7CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5OwomIzQzOyNlbmRpZgomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCByaGFzaHRhYmxlIC0gSGFzaCB0YWJsZSBoYW5kbGUKICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZQpAQCAtMTQxLDI0ICYjNDM7MTQ5LDc3IEBAIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgewogCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwomIzQzOwkJICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7CiAjZGVmaW5lIHJoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcykJCQkJXAogKHsJCQkJCQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQkJXAomIzQzOwlzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5czsJCQlcCiAJCQkJCQkJCQlcCi0JX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsICZhbXA7X19rZXlzKTsJCQlcCiB9KQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZQomIzQzOyAqIEBodDoJCWhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWQKJiM0MzsgKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24KJiM0MzsgKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKJiM0MzsgKiBmaXhlZCBsZW5ndGgga2V5OgomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglpbnQJCQlrZXk7CiYjNDM7ICoJdm9pZCAqCQkJbXlfbWVtYmVyOwomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7CiYjNDM7ICoJLmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSwKJiM0MzsgKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKJiM0MzsgKgkua2V5X2xlbiA9IHNpemVvZihpbnQpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKiB9OwomIzQzOyAqCiYjNDM7ICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzCiYjNDM7ICogc3RydWN0IHRlc3Rfb2JqIHsKJiM0MzsgKglbLi4uXQomIzQzOyAqCXN0cnVjdCByaGFzaF9oZWFkCW5vZGU7CiYjNDM7ICogfTsKJiM0MzsgKgomIzQzOyAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKQomIzQzOyAqIHsKJiM0MzsgKglzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7CiYjNDM7ICoKJiM0MzsgKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07CiYjNDM7ICogfQomIzQzOyAqCiYjNDM7ICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKJiM0MzsgKgkuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLAomIzQzOyAqCS5oYXNoZm4gPSBqaGFzaCwKJiM0MzsgKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCiYjNDM7ICogfTsKJiM0MzsgKi8KICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpCiAKIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LAogCQkgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKJiM0MzsJCSAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTsKICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpCQkJCVwKICh7CQkJCQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJCVwKJiM0MzsJc3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7CQkJXAogCQkJCQkJCQkJXAotCV9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsICZhbXA7X19rZXkpOwkJCVwKJiM0MzsJX19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgJmFtcDtfX2tleXMpOwkJCVwKIH0pCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlCiYjNDM7ICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCiYjNDM7ICogQHBhcmFtczoJY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICoKJiM0MzsgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCiYjNDM7ICoKJiM0MzsgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LgomIzQzOyAqLwogI2RlZmluZSByaGx0YWJsZV9pbml0KC4uLikJYWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKQogCiAjZW5kaWYgLyogX0xJTlVYX1JIQVNIVEFCTEVfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAppbmRleCA2YzVlNmQ5YWNjYmE3Li5lYzg1M2MxYjlhZjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaApAQCAtMzI4LDggJiM0MzszMjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAliaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTsKLQkvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC0mZ3Q7bG9jayBhbmQgMSBmb3IgLSZndDttdXRleC4gMiYjNDM7IGZvciBiaXRsb2NrcyAqLwotCWxvY2tfYWNxdWlyZV9leGNsdXNpdmUoJmFtcDt0YmwtJmd0O2RlcF9tYXAsIHN1YmNsYXNzJiM0MzsyLCAwLCBOVUxMLCBfVEhJU19JUF8pOwomIzQzOwlsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKCZhbXA7dGJsLSZndDtkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9yaGFzaHRhYmxlLmMgYi9saWIvcmhhc2h0YWJsZS5jCmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0Ci0tLSBhL2xpYi9yaGFzaHRhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3JoYXNodGFibGUuYwpAQCAtNDMyLDcgJiM0Mzs0MzIsNyBAQCBzdGF0aWMgdm9pZCByaHRfZGVmZXJyZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlpbnQgZXJyID0gMDsKIAogCWh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAogCXRibCA9IHJodF9kZXJlZmVyZW5jZShodC0mZ3Q7dGJsLCBodCk7CiAJdGJsID0gcmhhc2h0YWJsZV9sYXN0X3RhYmxlKGh0LCB0YmwpOwpAQCAtMTEyMiw1MSAmIzQzOzExMjIsOSBAQCBzdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpCiAJcmV0dXJuIGpoYXNoMihrZXksIGxlbmd0aCwgc2VlZCk7CiB9CiAKLS8qKgotICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlCi0gKiBAaHQ6CQloYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uCi0gKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3IKLSAqIGZpeGVkIGxlbmd0aCBrZXk6Ci0gKgotICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzCi0gKiBzdHJ1Y3QgdGVzdF9vYmogewotICoJaW50CQkJa2V5OwotICoJdm9pZCAqCQkJbXlfbWVtYmVyOwotICoJc3RydWN0IHJoYXNoX2hlYWQJbm9kZTsKLSAqIH07Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSwKLSAqCS5rZXlfbGVuID0gc2l6ZW9mKGludCksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKiB9OwotICoKLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5cwotICogc3RydWN0IHRlc3Rfb2JqIHsKLSAqCVsuLi5dCi0gKglzdHJ1Y3Qgcmhhc2hfaGVhZAlub2RlOwotICogfTsKLSAqCi0gKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZCkKLSAqIHsKLSAqCXN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTsKLSAqCi0gKglyZXR1cm4gWy4uLiBoYXNoIC4uLl07Ci0gKiB9Ci0gKgotICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHsKLSAqCS5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksCi0gKgkuaGFzaGZuID0gamhhc2gsCi0gKgkub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sCi0gKiB9OwotICovCiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKLQkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLAotCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkgICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7CiAJc2l6ZV90IHNpemU7CkBAIC0xMTc2LDEzICYjNDM7MTEzNCwxMSBAQCBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQoaHQsIDAsIHNpemVvZigqaHQpKTsKLQkvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqLwotCW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsIGtleSk7CiYjNDM7CW11dGV4X2luaXRfd2l0aF9rZXkoJmFtcDtodC0mZ3Q7bXV0ZXgsICZhbXA7a2V5cy0mZ3Q7bXV0ZXhfa2V5KTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2h0LSZndDtsb2NrKTsKLQkvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi8KLQlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCBrZXkpOwomIzQzOwlsb2NrZGVwX3NldF9jbGFzcygmYW1wO2h0LSZndDtsb2NrLCAmYW1wO2tleXMtJmd0O2xvY2tfa2V5KTsKICNpZmRlZiBDT05GSUdfTE9DS0RFUAotCWh0LSZndDtsb2NrZGVwX2tleSA9IGtleTsKJiM0MzsJaHQtJmd0O2xvY2tkZXBfa2V5ID0gJmFtcDtrZXlzLSZndDtidWNrZXRfa2V5OwogI2VuZGlmCiAJbWVtY3B5KCZhbXA7aHQtJmd0O3AsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKIApAQCAtMTIzNiwyMiAmIzQzOzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpOwogCi0vKioKLSAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZQotICogQGhsdDoJaGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkCi0gKiBAcGFyYW1zOgljb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuCi0gKgotICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC4KLSAqLwogaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsCiAJCQkgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcywKLQkJCSAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQomIzQzOwkJCSAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cykKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKCZhbXA7aGx0LSZndDtodCwgcGFyYW1zLCBrZXkpOwomIzQzOwllcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoJmFtcDtobHQtJmd0O2h0LCBwYXJhbXMsIGtleXMpOwogCWhsdC0mZ3Q7aHQucmhsaXN0ID0gdHJ1ZTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jCmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X3JoYXNodGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmMKQEAgLTQ3Nyw3ICYjNDM7NDc3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgcHJpbnRfaHQoc3RydWN0IHJobHRhYmxlICpyaGx0KQogCiAJaHQgPSAmYW1wO3JobHQtJmd0O2h0OwogCS8qIFRha2UgdGhlIG11dGV4IHRvIGF2b2lkIFJDVSB3YXJuaW5nICovCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtodC0mZ3Q7bXV0ZXgsIDEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aHQtJmd0O211dGV4KTsKIAl0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtJmd0O3RibCwgaHQpOwogCWZvciAoaSA9IDA7IGkgJmx0OyB0YmwtJmd0O3NpemU7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHJoYXNodGFibGUgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGNoYW5nZXMuCgpUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBsb2NrZGVwIGFuZCBpbml0aWFsaXphdGlvbi4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgcmhhc2h0YWJsZS10eXBlcy5oYCwgYHJoYXNodGFibGUuaGAsIGByaGFzaHRhYmxlLmNgLCBhbmQgdGhlIHRlc3QgZmlsZSBgdGVzdF9yaGFzaHRhYmxlLmNgLgoKRmlyc3QsIGByaGFzaHRhYmxlLXR5cGVzLmhgIGludHJvZHVjZXMgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AsIHdoaWNoIGFwcGVhcnMgdG8gZW5jYXBzdWxhdGUgbG9ja2RlcCBrZXlzIGZvciB0aGUgcmhhc2h0YWJsZSYjMzk7cyBsb2Nrcy4gSXQgdXNlcyBgQ09ORklHX0xPQ0tERVBgIGd1YXJkcywgc28gaXQmIzM5O3MgY29uZGl0aW9uYWwuIFRoZSBpbml0aWFsaXphdGlvbiBtYWNyb3MsIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAsIGFyZSB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBgc3RydWN0YCBhbmQgYSBzdGF0aWMgaW5zdGFuY2Ugb2YgaXQgKGBfX2tleXNgKS4gVGhlIGRvY3VtZW50YXRpb24gbW92ZSBpcyBqdXN0IGEgY29kZSBvcmdhbml6YXRpb24gY2hhbmdlLCBzbyB0aGF0JiMzOTtzIG5vdCBjcml0aWNhbCBmb3Igbm93LiBUaGUgc2FtZSBjaGFuZ2VzIG9jY3VyIGZvciBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmAuCgpUaGVuLCBgcmhhc2h0YWJsZS5oYCBpcyBjaGFuZ2luZyB0aGUgYHJodF9sb2NrX25lc3RlZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlIHdhcyBhbiBvZmYtYnktb25lIGVycm9yIHdpdGggdGhlIGBzdWJjbGFzc2AgYXJndW1lbnQgZm9yIGBsb2NrX2FjcXVpcmVfZXhjbHVzaXZlYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgYHN1YmNsYXNzYCAwIGFuZCAxIGFyZSB1c2VkIGZvciB0aGUgdGFibGUgbG9jayBhbmQgbXV0ZXggcmVzcGVjdGl2ZWx5LCBhbmQgMiYjNDM7IGlzIHVzZWQgZm9yIGJpdGxvY2tzLiBTaW5jZSBsb2NrZGVwIGtleXMgYXJlIG5vdyBleHBsaWNpdGx5IGRlZmluZWQgZm9yIGxvY2ssIG11dGV4LCBhbmQgYnVja2V0IChiaXRsb2NrKSwgdGhlcmUgaXMgbm8gcmVhc29uIGZvciB0aGUgYCYjNDM7MmAgYW55bW9yZS4gVGhpcyBpcyBhIGdvb2QgZml4LgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gYGxpYi9yaGFzaHRhYmxlLmNgLiAgYHJodF9kZWZlcnJlZF93b3JrZXJgIGlzIHVwZGF0ZWQgdG8gdXNlIHRoZSByZWd1bGFyIGBtdXRleF9sb2NrYCBpbnN0ZWFkIG9mIHRoZSBuZXN0ZWQgdmVyc2lvbi4gVGhlIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGZ1bmN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIHNpZ25pZmljYW50bHkuIEl0IG5vdyB0YWtlcyB0aGF0IGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXNgIGFuZCB1c2VzIGl0IHRvIGluaXRpYWxpemUgdGhlIG11dGV4IHdpdGggYG11dGV4X2luaXRfd2l0aF9rZXlgLCBzZXRzIHRoZSBsb2NrIGNsYXNzIHZpYSBgbG9ja2RlcF9zZXRfY2xhc3NgLCBhbmQgc2V0cyBgaHQtJmd0O2xvY2tkZXBfa2V5YC4gVGhlIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCBmdW5jdGlvbiBpcyBub3cgcGFzc2luZyBga2V5c2AuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWFsIHBvdGVudGlhbCBmb3IgaXNzdWVzLCBhbmQgdGh1cyBmdXp6aW5nIG5lZWRzLCB3aWxsIGxpZS4gVGhlIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgY2hhbmdlcyBhcmUgbmV3LgoKRmluYWxseSwgaW4gYGxpYi90ZXN0X3JoYXNodGFibGUuY2AsIHRoZSBgbXV0ZXhfbG9ja2AgaXMgc2ltcGxpZmllZCwgY29uc2lzdGVudCB3aXRoIHRoZSBwcmV2aW91cyBjaGFuZ2UuCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCB0aGVzZSBjaGFuZ2VzICpjb3VsZCogaW50cm9kdWNlIHN1YnRsZSBsb2NrZGVwIGlzc3VlcyBvciB1bmluaXRpYWxpemVkIHVzZSBvZiB0aGUgbG9ja2RlcCBrZXlzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgY2FsbGVycyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgcGVydmFzaXZlIHRoZXNlIG5ldyBwYXJhbWV0ZXJzIGFyZSBhbmQgaWYgdGhlIGByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgY291bGQgYmUgdW5pbml0aWFsaXplZC4gQmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBhIGZ1bGwgS01TQU4gZnV6emluZyBzZXNzaW9uLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIGBfX3JoYXNodGFibGVfaW5pdGAgYW5kIGBfX3JobHRhYmxlX2luaXRgIGNhbGxzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXkgYXJlIHVzZWQuIEEgc3RhdGljIGFuYWx5c2lzICpzaG91bGQqIGJlIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGEgcmVhbCBLTVNBTiByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JoYXNodGFibGVfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaD0xNDA9c3RydWN0IHJoYXNodGFibGVfaXRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTQ5LVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MTUwOmludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTUxLVx0XHQgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tLVxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU2LVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoxNTc6XHRfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXHUwMDI2X19rZXlzKTtcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU4LX0pXG4tLVxubGliL3JoYXNodGFibGUuYz0xMTIwPXN0YXRpYyB1MzIgcmhhc2h0YWJsZV9qaGFzaDIoY29uc3Qgdm9pZCAqa2V5LCB1MzIgbGVuZ3RoLCB1MzIgc2VlZClcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTExMjQtXG5saWIvcmhhc2h0YWJsZS5jOjExMjU6aW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG5saWIvcmhhc2h0YWJsZS5jLTExMjYtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5saWIvcmhhc2h0YWJsZS5jLTExOTItfVxubGliL3JoYXNodGFibGUuYzoxMTkzOkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXG5saWIvcmhhc2h0YWJsZS5jPTExOTU9aW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4tLVxubGliL3JoYXNodGFibGUuYy0xMjAwLVxubGliL3JoYXNodGFibGUuYzoxMjAxOlx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXlzKTtcbmxpYi9yaGFzaHRhYmxlLmMtMTIwMi1cdGhsdC1cdTAwM2VodC5yaGxpc3QgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYF9fcmhsdGFibGVfaW5pdGAgQ2FsbHMqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgX19yaGx0YWJsZV9pbml0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gdHJ5aW5nIHRvIGFzY2VydGFpbiBpcyB0aGUgc2NvcGUgb2YgaXRzIHVzYWdlLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiAqd2hlcmUqIGFuZCAqaG93KiB0aGlzIGlzIGJlaW5nIHVzZWQuIFJpZ2h0IG5vdywgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgb3RoZXIgbG9jYXRpb25zIHdoZXJlIGBfX3JobHRhYmxlX2luaXRgIGlzIGJlaW5nIGNhbGxlZCBiZXNpZGVzIHRoZSBvbmVzIEkmIzM5O20gYWxyZWFkeSBhd2FyZSBvZj8mIzM0Oy4gVGhpcyBpcyBiYXNpYyBkdWUgZGlsaWdlbmNlLiBJZGVudGlmeWluZyBhbGwgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGluZmx1ZW5jZSwgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIG9mIGNvdXJzZSwgZm9yIGRlYnVnZ2luZyBhbmQgcmVmYWN0b3JpbmcgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JobHRhYmxlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTUwPWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLS1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwMy1cbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIwNDppbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwNS1cdFx0ICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMTAtXHRcdFx0XHRcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIxMTpcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIxMi19KVxuLS1cbmxpYi9yaGFzaHRhYmxlLmM9MTE5Mz1FWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xubGliL3JoYXNodGFibGUuYy0xMTk0LVxubGliL3JoYXNodGFibGUuYzoxMTk1OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxubGliL3JoYXNodGFibGUuYy0xMTk2LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLS1cbmxpYi9yaGFzaHRhYmxlLmMtMTIwNC19XG5saWIvcmhhc2h0YWJsZS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGx0YWJsZV9pbml0X25vcHJvZik7XG5saWIvcmhhc2h0YWJsZS5jLTEyMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSByaGFzaHRhYmxlIEluaXRpYWxpemF0aW9uIGFuZCBMb2NrZGVwIEtleXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJoYXNodGFibGVfaW5pdGAgb3IgYHJobHRhYmxlX2luaXRgIG1hY3JvLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCBkZWNsYXJlcyBhIGBzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztgLiBUaGF0IGBzdGF0aWNgIHF1YWxpZmllciBpcyB0aGUga2V5IGhlcmUuIEl0IG1lYW5zIHRoaXMgYF9fa2V5c2AgdmFyaWFibGUgaXMgZ29pbmcgdG8gbGFuZCBpbiBlaXRoZXIgdGhlIEJTUyBvciB0aGUgZGF0YSBzZWN0aW9uLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtsbCBiZSB6ZXJvLWluaXRpYWxpemVkLiBOb3csIGtub3dpbmcgd2hhdCBJIGRvIGFib3V0IGxvY2tkZXAsIHRob3NlICYjMzQ7bG9ja2RlcCBrZXlzJiMzNDsgYXJlIGJhc2ljYWxseSBqdXN0IHBsYWNlaG9sZGVyIGFkZHJlc3NlcyBmb3IgdGhlIGxvY2tkZXAgbWFjaGluZXJ5LiBUaGUgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgaXRzZWxmIOKAkyBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSDigJMgaXMgZWl0aGVyIGFuIGVtcHR5IHN0cnVjdCBvciBhIGR1bW15LCBzbyBsb2NrZGVwIGlzIHJlYWxseSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlICphZGRyZXNzKiBvZiBpdC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc3RydWN0IGxvY2tfY2xhc3Nfa2V5YCBkZWZpbml0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIG15IG1lbW9yeSBpcyBzZXJ2aW5nIG1lIGNvcnJlY3RseSBoZXJlLiBJIGp1c3Qgd2FudCB0byB2ZXJpZnkgaG93IHRoZSBrZXkgc3RydWN0IGlzIGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBsb2NrX2NsYXNzX2tleSBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg9NzA9c3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC03NC0vKiBoYXNoX2VudHJ5IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQga2V5cy4gKi9cbmluY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oOjc1OnN0cnVjdCBsb2NrX2NsYXNzX2tleSB7XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC03Ni1cdHVuaW9uIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaD0yMDY9c3RydWN0IGhlbGRfbG9jayB7XG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgtMjY0LSAqL1xuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg6MjY1OnN0cnVjdCBsb2NrX2NsYXNzX2tleSB7IH07XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC0yNjYtXG4tLVxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oLTUtXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC9sb2NrZGVwLmg6NjpzdHJ1Y3QgbG9ja19jbGFzc19rZXkge1xudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oLTctXHR1bnNpZ25lZCBpbnQgYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyMQoJCQkJCQkJb3V0cHV0OiAyNDgKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgcmhhc2h0YWJsZSBMb2NrZGVwIENoYW5nZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBhZnRlciByZXZpZXdpbmcgdGhlc2UgY2hhbmdlcyB0byB0aGUgYHJoYXNodGFibGVgIGxvY2tkZXAgYW5ub3RhdGlvbnMuIEl0JiMzOTtzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGxvY2tkZXAgaW1wbGVtZW50YXRpb24uIEJlZm9yZSwgdGhleSB3ZXJlIGF3a3dhcmRseSBzaGFyaW5nIGEgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgYWNyb3NzIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jay4gVGhhdCBmb3JjZWQgc29tZSBwcmV0dHkgbWVzc3kgc3ViY2xhc3MgbmVzdGluZyB0cmlja3MgdXNpbmcgYHN1YmNsYXNzJiM0MzsyYCBhbmQgc3BlY2lmaWMgYG11dGV4X2xvY2tfbmVzdGVkYCBjYWxscy4gRnJhbmtseSwgaXQgd2FzIGEgYml0IG9mIGEgaGFjay4KCk5vdywgd2UgaGF2ZSBhIHByb3BlciBgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCB3aGljaCBjbGVhbmx5IGRlZmluZXMgdGhyZWUgc2VwYXJhdGUgYGxvY2tfY2xhc3Nfa2V5c2A6IGBsb2NrX2tleWAsIGBtdXRleF9rZXlgLCBhbmQgYGJ1Y2tldF9rZXlgLiBUaGlzIGlzICptdWNoKiBjbGVhbmVyOyBlYWNoIGxvY2sgZ2V0cyBpdHMgb3duIGRlZGljYXRlZCBrZXkuIEkmIzM5O20gZ2xhZCB0byBzZWUgdGhhdCBjb21wbGV4aXR5IHJlZHVjZWQuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNvdXJjZSBvZiBwcm9ibGVtcy4gQnV0IGFmdGVyIGxvb2tpbmcgYXQgaXQgY2xvc2VseSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGFuIGlzc3VlIGhlcmUuIFRoZSBrZXlzIGFyZSBzdGF0aWNhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztgLCBtZWFuaW5nIHRoZXkgcmVzaWRlIGluIHRoZSBCU1Mgc2VjdGlvbiBhbmQgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBsb2FkZXIsIHNvIHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlIG9ubHkgZXZlciB1c2luZyB0aGUgKmFkZHJlc3MqIG9mIHRoZXNlIGtleXMgKGUuZy4sIGAmYW1wO2tleXMtJmd0O211dGV4X2tleWApIGZvciB0aGUgbG9ja2RlcCBtYWNoaW5lcnksIHNvIG5vIGFjdHVhbCBkYXRhIGlzIGV2ZXIgY29waWVkIG9yIHJlYWQgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBUaGVyZSYjMzk7cyBubyBtZW1vcnkgYWxsb2NhdGlvbiBpbnZvbHZlZCwgbm8gY2hhbmdlcyB0byBidWZmZXIgbG9naWMsIGFuZCBubyByZWFkcyBvciBicmFuY2hlcyBiYXNlZCBvbiBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBDcml0aWNhbGx5LCBhbnkgbG9ja2luZyBidWdzIG9yIGRlYWRsb2NrcyAqd291bGQqIGJlIGNhdWdodCBieSBMT0NLREVQLCB3aGljaCBpcyB1c3VhbGx5IHBhcnQgb2Ygc3RhbmRhcmQgS0FTQU4gY29uZmlndXJhdGlvbnMgYW55d2F5LgoKU28sIGluIHN1bW1hcnksIGJhc2VkIG9uIHRoaXMgcmV2aWV3LCB0aGlzIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgaWRlbnRpZnlpbmcgbWVtb3J5IGlzc3VlcywgYnV0IHRoZSBwcmltYXJ5IGNvbmNlcm4gd2l0aCB0aGVzZSBjaGFuZ2VzIGlzIGxvY2tkZXAgYW5ub3RhdGlvbnMuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoZXJlYXMgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcGVydGluZW50LiBTaW5jZSB0aGUgbG9ja2RlcCBjaGFuZ2UgaXMgdGhlIG1haW4gZHJpdmVyIGFuZCBLTVNBTiBpc24mIzM5O3QgZGVzaWduZWQgdG8gZmluZCBsb2NrZGVwIGlzc3VlcywgdGhpcyBpcyBhbGwgZ29vZC4gVGhpcyBwYXRjaCBpcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9ja2RlcCBhbm5vdGF0aW9ucyB3aXRoaW4gcmhhc2h0YWJsZSBieSBpbnRyb2R1Y2luZyBgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCB0byBwcm92aWRlIGRpc3RpbmN0IGBsb2NrX2NsYXNzX2tleWAgc3RydWN0dXJlcyBmb3IgdGhlIHNwaW5sb2NrLCBtdXRleCwgYW5kIGJ1Y2tldCBiaXRsb2NrIChyZXBsYWNpbmcgdGhlIHByZXZpb3VzIGFwcHJvYWNoIG9mIHNoYXJpbmcgYSBzaW5nbGUgbG9ja2RlcCBrZXkgd2l0aCBtYW51YWwgc3ViY2xhc3Mgb2Zmc2V0cykuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gbG9ja2RlcCB0cmFja2luZyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uOlxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgZXZhbHVhdGVkIGluIGJyYW5jaGluZyBsb2dpYy4gVGhlIGxvY2tkZXAga2V5cyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgdmFyaWFibGVzIGluc2lkZSBtYWNybyB3cmFwcGVycyAoYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgcmhsdGFibGVfaW5pdF9ub3Byb2ZgKSwgcmVzaWRpbmcgaW4gQlNTLlxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIGRhdGEgYnVmZmVycywgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgc2VyaWFsaXphdGlvbi5cbjMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBsb2NraW5nIGhpZXJhcmNoeSBhbmQgY2xhc3MgYXNzaWdubWVudHMgYXJlIHRyYWNrZWQgZGlyZWN0bHkgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgY29uZmlndXJhdGlvbnMuXG5cbkNvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cbjIuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBkYXRhIGJ1ZmZlcnMsIGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIHNlcmlhbGl6YXRpb24uXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5Db25zZXF1ZW50bHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjIwLjg3NTUwMTI3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNTMyMjg0NTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJMT0NLREVQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJfX3JobHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJyaHRfZGVmZXJyZWRfd29ya2VyXCIsXG4gICAgXCJyaGFzaHRhYmxlX2luc2VydF9zbG93XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwIGFubm90YXRpb25zIHdpdGhpbiByaGFzaHRhYmxlIGJ5IGludHJvZHVjaW5nIGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIHRvIHByb3ZpZGUgZGlzdGluY3QgYGxvY2tfY2xhc3Nfa2V5YCBzdHJ1Y3R1cmVzIGZvciB0aGUgc3BpbmxvY2ssIG11dGV4LCBhbmQgYnVja2V0IGJpdGxvY2sgKHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2Ygc2hhcmluZyBhIHNpbmdsZSBsb2NrZGVwIGtleSB3aXRoIG1hbnVhbCBzdWJjbGFzcyBvZmZzZXRzKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBldmFsdWF0ZWQgaW4gYnJhbmNoaW5nIGxvZ2ljLiBUaGUgbG9ja2RlcCBrZXlzIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCB2YXJpYWJsZXMgaW5zaWRlIG1hY3JvIHdyYXBwZXJzIChgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmApLCByZXNpZGluZyBpbiBCU1MuXFxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIGRhdGEgYnVmZmVycywgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgc2VyaWFsaXphdGlvbi5cXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxcblxcbkNvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgaW4gbGliL3JoYXNodGFibGUuYyBhbmQgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oLiBJdCBzZXBhcmF0ZXMgdGhlIHByZXZpb3VzbHkgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIG11dGV4LCBzcGlubG9jaywgYW5kIGJ1Y2tldCBiaXRsb2NrcyAoc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzKSwgYW5kIHVwZGF0ZXMgdGhlIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIHRoZSBidWNrZXQgYml0bG9jayBtYXAgYW5kIHRhYmxlIG11dGV4LiBTaW5jZSByaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIElQQywgYW5kIGZpbGVzeXN0ZW1zLCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlc2UgbG9ja2luZyBhbmQgYW5ub3RhdGlvbiBjaGFuZ2VzIGRvIG5vdCBjYXVzZSBsb2NrZGVwIHNwbGF0cyBvciB1bmNvdmVyIGxhdGVudCBsb2NrIG9yZGVyaW5nIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjIwLjg3NTUzNDE0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTUwODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ2ZDY0YzFlZTYzYTY0YjhkZDI0NGI3ZjkwYTkwZDFkYjAyMGQ5NWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxcbmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxcbkBAIC03MCw2ICs3MCwxNCBAQCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMge1xcbiBcXHRyaHRfb2JqX2NtcGZuX3RcXHRcXHRvYmpfY21wZm47XFxuIH07XFxuIFxcbitzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMge1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rXFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5O1xcbitcXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5O1xcbitcXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYnVja2V0X2tleTtcXG4rI2VuZGlmXFxuK307XFxuK1xcbiAvKipcXG4gICogc3RydWN0IHJoYXNodGFibGUgLSBIYXNoIHRhYmxlIGhhbmRsZVxcbiAgKiBAdGJsOiBCdWNrZXQgdGFibGVcXG5AQCAtMTQxLDI0ICsxNDksNzcgQEAgc3RydWN0IHJoYXNodGFibGVfaXRlciB7XFxuIFxcbiBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi1cXHRcXHQgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xcbitcXHRcXHQgICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTtcXG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMpXFx0XFx0XFx0XFx0XFxcXFxcbiAoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1xcdFxcdFxcdFxcXFxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXFx1MDAyNl9fa2V5KTtcXHRcXHRcXHRcXFxcXFxuK1xcdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuIH0pXFxuK1xcbisvKipcXG4rICogcmhhc2h0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIHRhYmxlXFxuKyAqIEBodDpcXHRcXHRoYXNoIHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXFxuKyAqIEBwYXJhbXM6XFx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cXG4rICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXFxuKyAqIGZpeGVkIGxlbmd0aCBrZXk6XFxuKyAqXFxuKyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xcbisgKiBzdHJ1Y3QgdGVzdF9vYmoge1xcbisgKlxcdGludFxcdFxcdFxcdGtleTtcXG4rICpcXHR2b2lkICpcXHRcXHRcXHRteV9tZW1iZXI7XFxuKyAqXFx0c3RydWN0IHJoYXNoX2hlYWRcXHRub2RlO1xcbisgKiB9O1xcbisgKlxcbisgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xcbisgKlxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXFxuKyAqXFx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXFxuKyAqXFx0LmtleV9sZW4gPSBzaXplb2YoaW50KSxcXG4rICpcXHQuaGFzaGZuID0gamhhc2gsXFxuKyAqIH07XFxuKyAqXFxuKyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5c1xcbisgKiBzdHJ1Y3QgdGVzdF9vYmoge1xcbisgKlxcdFsuLi5dXFxuKyAqXFx0c3RydWN0IHJoYXNoX2hlYWRcXHRub2RlO1xcbisgKiB9O1xcbisgKlxcbisgKiB1MzIgbXlfaGFzaF9mbihjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG4rICoge1xcbisgKlxcdHN0cnVjdCB0ZXN0X29iaiAqb2JqID0gZGF0YTtcXG4rICpcXG4rICpcXHRyZXR1cm4gWy4uLiBoYXNoIC4uLl07XFxuKyAqIH1cXG4rICpcXG4rICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcXG4rICpcXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxcbisgKlxcdC5oYXNoZm4gPSBqaGFzaCxcXG4rICpcXHQub2JqX2hhc2hmbiA9IG15X2hhc2hfZm4sXFxuKyAqIH07XFxuKyAqL1xcbiAjZGVmaW5lIHJoYXNodGFibGVfaW5pdCguLi4pXFx0YWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXFxuIFxcbiBpbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcXG4gXFx0XFx0ICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tXFx0XFx0ICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XFxuK1xcdFxcdCAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKTtcXG4gI2RlZmluZSByaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcylcXHRcXHRcXHRcXHRcXFxcXFxuICh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5O1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFxcdTAwMjZfX2tleSk7XFx0XFx0XFx0XFxcXFxcbitcXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuIH0pXFxuK1xcbisvKipcXG4rICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXFxuKyAqIEBobHQ6XFx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXFxuKyAqIEBwYXJhbXM6XFx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cXG4rICpcXG4rICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC5cXG4rICovXFxuICNkZWZpbmUgcmhsdGFibGVfaW5pdCguLi4pXFx0YWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9SSEFTSFRBQkxFX1RZUEVTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxcbmluZGV4IDZjNWU2ZDlhY2NiYTcuLmVjODUzYzFiOWFmM2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxcbkBAIC0zMjgsOCArMzI4LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXFxuIFxcbiBcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIFxcdGJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilidWNrZXQpO1xcbi1cXHQvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC1cXHUwMDNlbG9jayBhbmQgMSBmb3IgLVxcdTAwM2VtdXRleC4gMisgZm9yIGJpdGxvY2tzICovXFxuLVxcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUoXFx1MDAyNnRibC1cXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MrMiwgMCwgTlVMTCwgX1RISVNfSVBfKTtcXG4rXFx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcXHUwMDI2dGJsLVxcdTAwM2VkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTtcXG4gXFx0cmV0dXJuIGZsYWdzO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9saWIvcmhhc2h0YWJsZS5jIGIvbGliL3JoYXNodGFibGUuY1xcbmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0XFxuLS0tIGEvbGliL3JoYXNodGFibGUuY1xcbisrKyBiL2xpYi9yaGFzaHRhYmxlLmNcXG5AQCAtNDMyLDcgKzQzMiw3IEBAIHN0YXRpYyB2b2lkIHJodF9kZWZlcnJlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7XFxuLVxcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZodC1cXHUwMDNlbXV0ZXgsIDEpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZodC1cXHUwMDNlbXV0ZXgpO1xcbiBcXG4gXFx0dGJsID0gcmh0X2RlcmVmZXJlbmNlKGh0LVxcdTAwM2V0YmwsIGh0KTtcXG4gXFx0dGJsID0gcmhhc2h0YWJsZV9sYXN0X3RhYmxlKGh0LCB0YmwpO1xcbkBAIC0xMTIyLDUxICsxMTIyLDkgQEAgc3RhdGljIHUzMiByaGFzaHRhYmxlX2poYXNoMihjb25zdCB2b2lkICprZXksIHUzMiBsZW5ndGgsIHUzMiBzZWVkKVxcbiBcXHRyZXR1cm4gamhhc2gyKGtleSwgbGVuZ3RoLCBzZWVkKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZVxcbi0gKiBAaHQ6XFx0XFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxcbi0gKiBAcGFyYW1zOlxcdGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xcbi0gKlxcbi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uXFxuLSAqIHBhcmFtZXRlcnMuIEEgdGFibGUgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIHdpdGggYSB2YXJpYWJsZSBvclxcbi0gKiBmaXhlZCBsZW5ndGgga2V5Olxcbi0gKlxcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMTogRml4ZWQgbGVuZ3RoIGtleXNcXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcXG4tICpcXHRpbnRcXHRcXHRcXHRrZXk7XFxuLSAqXFx0dm9pZCAqXFx0XFx0XFx0bXlfbWVtYmVyO1xcbi0gKlxcdHN0cnVjdCByaGFzaF9oZWFkXFx0bm9kZTtcXG4tICogfTtcXG4tICpcXG4tICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcXG4tICpcXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxcbi0gKlxcdC5rZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBrZXkpLFxcbi0gKlxcdC5rZXlfbGVuID0gc2l6ZW9mKGludCksXFxuLSAqXFx0Lmhhc2hmbiA9IGpoYXNoLFxcbi0gKiB9O1xcbi0gKlxcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcXG4tICpcXHRbLi4uXVxcbi0gKlxcdHN0cnVjdCByaGFzaF9oZWFkXFx0bm9kZTtcXG4tICogfTtcXG4tICpcXG4tICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXFxuLSAqIHtcXG4tICpcXHRzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7XFxuLSAqXFxuLSAqXFx0cmV0dXJuIFsuLi4gaGFzaCAuLi5dO1xcbi0gKiB9XFxuLSAqXFxuLSAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XFxuLSAqXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcXG4tICpcXHQuaGFzaGZuID0gamhhc2gsXFxuLSAqXFx0Lm9ial9oYXNoZm4gPSBteV9oYXNoX2ZuLFxcbi0gKiB9O1xcbi0gKi9cXG4gaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tXFx0XFx0ICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7XFxuIFxcdHNpemVfdCBzaXplO1xcbkBAIC0xMTc2LDEzICsxMTM0LDExIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdG1lbXNldChodCwgMCwgc2l6ZW9mKCpodCkpO1xcbi1cXHQvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqL1xcbi1cXHRtdXRleF9pbml0X3dpdGhfa2V5KFxcdTAwMjZodC1cXHUwMDNlbXV0ZXgsIGtleSk7XFxuK1xcdG11dGV4X2luaXRfd2l0aF9rZXkoXFx1MDAyNmh0LVxcdTAwM2VtdXRleCwgXFx1MDAyNmtleXMtXFx1MDAzZW11dGV4X2tleSk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZodC1cXHUwMDNlbG9jayk7XFxuLVxcdC8qIHNwaW5fbG9jayBjYW4gdXNlIG5lc3RpbmcgbGV2ZWwgMCAqL1xcbi1cXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2aHQtXFx1MDAzZWxvY2ssIGtleSk7XFxuK1xcdGxvY2tkZXBfc2V0X2NsYXNzKFxcdTAwMjZodC1cXHUwMDNlbG9jaywgXFx1MDAyNmtleXMtXFx1MDAzZWxvY2tfa2V5KTtcXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXFxuLVxcdGh0LVxcdTAwM2Vsb2NrZGVwX2tleSA9IGtleTtcXG4rXFx0aHQtXFx1MDAzZWxvY2tkZXBfa2V5ID0gXFx1MDAyNmtleXMtXFx1MDAzZWJ1Y2tldF9rZXk7XFxuICNlbmRpZlxcbiBcXHRtZW1jcHkoXFx1MDAyNmh0LVxcdTAwM2VwLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7XFxuIFxcbkBAIC0xMjM2LDIyICsxMTkyLDEzIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XFxuIFxcbi0vKipcXG4tICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXFxuLSAqIEBobHQ6XFx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXFxuLSAqIEBwYXJhbXM6XFx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXFxuLSAqXFxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cXG4tICpcXG4tICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC5cXG4tICovXFxuIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbiBcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tXFx0XFx0XFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFxcdTAwMjZobHQtXFx1MDAzZWh0LCBwYXJhbXMsIGtleSk7XFxuK1xcdGVyciA9IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihcXHUwMDI2aGx0LVxcdTAwM2VodCwgcGFyYW1zLCBrZXlzKTtcXG4gXFx0aGx0LVxcdTAwM2VodC5yaGxpc3QgPSB0cnVlO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3JoYXNodGFibGUuYyBiL2xpYi90ZXN0X3JoYXNodGFibGUuY1xcbmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXFxuKysrIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXFxuQEAgLTQ3Nyw3ICs0NzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwcmludF9odChzdHJ1Y3QgcmhsdGFibGUgKnJobHQpXFxuIFxcbiBcXHRodCA9IFxcdTAwMjZyaGx0LVxcdTAwM2VodDtcXG4gXFx0LyogVGFrZSB0aGUgbXV0ZXggdG8gYXZvaWQgUkNVIHdhcm5pbmcgKi9cXG4tXFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNmh0LVxcdTAwM2VtdXRleCwgMSk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmh0LVxcdTAwM2VtdXRleCk7XFxuIFxcdHRibCA9IHJodF9kZXJlZmVyZW5jZShodC1cXHUwMDNldGJsLCBodCk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0YmwtXFx1MDAzZXNpemU7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3Qgcmhhc2hfaGVhZCAqcG9zLCAqbmV4dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MjIuNTgyMDgxNTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNDkyOTU5MTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJMT0NLREVQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJfX3JobHRhYmxlX2luaXRfbm9wcm9mXCIsXG4gICAgXCJyaHRfZGVmZXJyZWRfd29ya2VyXCIsXG4gICAgXCJyaGFzaHRhYmxlX2luc2VydF9zbG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGxvY2tkZXAgY2xhc3NpZmljYXRpb24gZm9yIHJoYXNodGFibGVzIGluIGxpYi9yaGFzaHRhYmxlLmMgYW5kIGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZSouaC4gSXQgc2VwYXJhdGVzIHRoZSBwcmV2aW91c2x5IHNoYXJlZCBsb2NrZGVwIGtleSBpbnRvIGRpc3RpbmN0IGtleXMgZm9yIHRoZSBtdXRleCwgc3BpbmxvY2ssIGFuZCBidWNrZXQgYml0bG9ja3MgKHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyksIGFuZCB1cGRhdGVzIHRoZSBuZXN0aW5nIHN1YmNsYXNzZXMgdXNlZCB3aGVuIGFjcXVpcmluZyB0aGUgYnVja2V0IGJpdGxvY2sgbWFwIGFuZCB0YWJsZSBtdXRleC4gU2luY2Ugcmhhc2h0YWJsZXMgYXJlIGhlYXZpbHkgdXNlZCBhY3Jvc3MgY29yZSBuZXR3b3JraW5nLCBJUEMsIGFuZCBmaWxlc3lzdGVtcywgZnV6emluZyB3aXRoIGxvY2tkZXAgZW5hYmxlZCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZXNlIGxvY2tpbmcgYW5kIGFubm90YXRpb24gY2hhbmdlcyBkbyBub3QgY2F1c2UgbG9ja2RlcCBzcGxhdHMgb3IgdW5jb3ZlciBsYXRlbnQgbG9jayBvcmRlcmluZyB2aW9sYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2ZDY0YzFlZTYzYTY0YjhkZDI0NGI3ZjkwYTkwZDFkYjAyMGQ5NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNzowMjoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbmluZGV4IDBlMWIxNzJhNGY2Y2IuLmFmYmMxMmJhNzFmNWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbkBAIC03MCw2ICs3MCwxNCBAQCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMge1xuIFx0cmh0X29ial9jbXBmbl90XHRcdG9ial9jbXBmbjtcbiB9O1xuIFxuK3N0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyB7XG4rI2lmZGVmIENPTkZJR19MT0NLREVQXG4rXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7XG4rXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbXV0ZXhfa2V5O1xuK1x0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ1Y2tldF9rZXk7XG4rI2VuZGlmXG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3Qgcmhhc2h0YWJsZSAtIEhhc2ggdGFibGUgaGFuZGxlXG4gICogQHRibDogQnVja2V0IHRhYmxlXG5AQCAtMTQxLDI0ICsxNDksNzcgQEAgc3RydWN0IHJoYXNodGFibGVfaXRlciB7XG4gXG4gaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi1cdFx0ICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTtcbitcdFx0ICAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7XG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuK1x0c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFx1MDAyNl9fa2V5KTtcdFx0XHRcXFxuK1x0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbiB9KVxuK1xuKy8qKlxuKyAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZVxuKyAqIEBodDpcdFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuKyAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbisgKlxuKyAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbisgKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3JcbisgKiBmaXhlZCBsZW5ndGgga2V5OlxuKyAqXG4rICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzXG4rICogc3RydWN0IHRlc3Rfb2JqIHtcbisgKlx0aW50XHRcdFx0a2V5O1xuKyAqXHR2b2lkICpcdFx0XHRteV9tZW1iZXI7XG4rICpcdHN0cnVjdCByaGFzaF9oZWFkXHRub2RlO1xuKyAqIH07XG4rICpcbisgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuKyAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuKyAqXHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSxcbisgKlx0LmtleV9sZW4gPSBzaXplb2YoaW50KSxcbisgKlx0Lmhhc2hmbiA9IGpoYXNoLFxuKyAqIH07XG4rICpcbisgKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcbisgKiBzdHJ1Y3QgdGVzdF9vYmoge1xuKyAqXHRbLi4uXVxuKyAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbisgKiB9O1xuKyAqXG4rICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXG4rICoge1xuKyAqXHRzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7XG4rICpcbisgKlx0cmV0dXJuIFsuLi4gaGFzaCAuLi5dO1xuKyAqIH1cbisgKlxuKyAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4rICpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXG4rICpcdC5oYXNoZm4gPSBqaGFzaCxcbisgKlx0Lm9ial9oYXNoZm4gPSBteV9oYXNoX2ZuLFxuKyAqIH07XG4rICovXG4gI2RlZmluZSByaGFzaHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3Mocmhhc2h0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdCAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpO1xuK1x0XHQgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cyk7XG4gI2RlZmluZSByaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcylcdFx0XHRcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTtcdFx0XHRcdFxcXG4rXHRzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztcdFx0XHRcXFxuIFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcdTAwMjZfX2tleSk7XHRcdFx0XFxcbitcdF9fcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMsIFx1MDAyNl9fa2V5cyk7XHRcdFx0XFxcbiB9KVxuK1xuKy8qKlxuKyAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZVxuKyAqIEBobHQ6XHRoYXNoIGxpc3QgdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbisgKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4rICpcbisgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuXG4rICpcbisgKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LlxuKyAqL1xuICNkZWZpbmUgcmhsdGFibGVfaW5pdCguLi4pXHRhbGxvY19ob29rcyhyaGx0YWJsZV9pbml0X25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9SSEFTSFRBQkxFX1RZUEVTX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG5pbmRleCA2YzVlNmQ5YWNjYmE3Li5lYzg1M2MxYjlhZjNhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG5AQCAtMzI4LDggKzMyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByaHRfbG9ja19uZXN0ZWQoc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0Yml0X3NwaW5fbG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWJ1Y2tldCk7XG4tXHQvKiBzdWJjbGFzcyAwIGlzIHVzZWQgZm9yIC1cdTAwM2Vsb2NrIGFuZCAxIGZvciAtXHUwMDNlbXV0ZXguIDIrIGZvciBiaXRsb2NrcyAqL1xuLVx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MrMiwgMCwgTlVMTCwgX1RISVNfSVBfKTtcbitcdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUoXHUwMDI2dGJsLVx1MDAzZWRlcF9tYXAsIHN1YmNsYXNzLCAwLCBOVUxMLCBfVEhJU19JUF8pO1xuIFx0cmV0dXJuIGZsYWdzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9saWIvcmhhc2h0YWJsZS5jIGIvbGliL3JoYXNodGFibGUuY1xuaW5kZXggNWRhMGU1M2E4ZDQyMy4uOTE4ZjE1YTJhYzY5MSAxMDA2NDRcbi0tLSBhL2xpYi9yaGFzaHRhYmxlLmNcbisrKyBiL2xpYi9yaGFzaHRhYmxlLmNcbkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIHZvaWQgcmh0X2RlZmVycmVkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRpbnQgZXJyID0gMDtcbiBcbiBcdGh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7XG4tXHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZodC1cdTAwM2VtdXRleCwgMSk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmh0LVx1MDAzZW11dGV4KTtcbiBcbiBcdHRibCA9IHJodF9kZXJlZmVyZW5jZShodC1cdTAwM2V0YmwsIGh0KTtcbiBcdHRibCA9IHJoYXNodGFibGVfbGFzdF90YWJsZShodCwgdGJsKTtcbkBAIC0xMTIyLDUxICsxMTIyLDkgQEAgc3RhdGljIHUzMiByaGFzaHRhYmxlX2poYXNoMihjb25zdCB2b2lkICprZXksIHUzMiBsZW5ndGgsIHUzMiBzZWVkKVxuIFx0cmV0dXJuIGpoYXNoMihrZXksIGxlbmd0aCwgc2VlZCk7XG4gfVxuIFxuLS8qKlxuLSAqIHJoYXNodGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCB0YWJsZVxuLSAqIEBodDpcdFx0aGFzaCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuLSAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0gKlxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbi0gKiBwYXJhbWV0ZXJzLiBBIHRhYmxlIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciB3aXRoIGEgdmFyaWFibGUgb3Jcbi0gKiBmaXhlZCBsZW5ndGgga2V5OlxuLSAqXG4tICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDE6IEZpeGVkIGxlbmd0aCBrZXlzXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcbi0gKlx0aW50XHRcdFx0a2V5O1xuLSAqXHR2b2lkICpcdFx0XHRteV9tZW1iZXI7XG4tICpcdHN0cnVjdCByaGFzaF9oZWFkXHRub2RlO1xuLSAqIH07XG4tICpcbi0gKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuLSAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuLSAqXHQua2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwga2V5KSxcbi0gKlx0LmtleV9sZW4gPSBzaXplb2YoaW50KSxcbi0gKlx0Lmhhc2hmbiA9IGpoYXNoLFxuLSAqIH07XG4tICpcbi0gKiBDb25maWd1cmF0aW9uIEV4YW1wbGUgMjogVmFyaWFibGUgbGVuZ3RoIGtleXNcbi0gKiBzdHJ1Y3QgdGVzdF9vYmoge1xuLSAqXHRbLi4uXVxuLSAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbi0gKiB9O1xuLSAqXG4tICogdTMyIG15X2hhc2hfZm4oY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGxlbiwgdTMyIHNlZWQpXG4tICoge1xuLSAqXHRzdHJ1Y3QgdGVzdF9vYmogKm9iaiA9IGRhdGE7XG4tICpcbi0gKlx0cmV0dXJuIFsuLi4gaGFzaCAuLi5dO1xuLSAqIH1cbi0gKlxuLSAqIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXMgPSB7XG4tICpcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X29iaiwgbm9kZSksXG4tICpcdC5oYXNoZm4gPSBqaGFzaCxcbi0gKlx0Lm9ial9oYXNoZm4gPSBteV9oYXNoX2ZuLFxuLSAqIH07XG4tICovXG4gaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4tXHRcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcbi1cdFx0ICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxuK1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0ICAgICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpXG4ge1xuIFx0c3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsO1xuIFx0c2l6ZV90IHNpemU7XG5AQCAtMTE3NiwxMyArMTEzNCwxMSBAQCBpbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRtZW1zZXQoaHQsIDAsIHNpemVvZigqaHQpKTtcbi1cdC8qIG11dGV4X2xvY2sgbXVzdCB1c2UgbmVzdGluZyBsZXZlbCAxICovXG4tXHRtdXRleF9pbml0X3dpdGhfa2V5KFx1MDAyNmh0LVx1MDAzZW11dGV4LCBrZXkpO1xuK1x0bXV0ZXhfaW5pdF93aXRoX2tleShcdTAwMjZodC1cdTAwM2VtdXRleCwgXHUwMDI2a2V5cy1cdTAwM2VtdXRleF9rZXkpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aHQtXHUwMDNlbG9jayk7XG4tXHQvKiBzcGluX2xvY2sgY2FuIHVzZSBuZXN0aW5nIGxldmVsIDAgKi9cbi1cdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmh0LVx1MDAzZWxvY2ssIGtleSk7XG4rXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZodC1cdTAwM2Vsb2NrLCBcdTAwMjZrZXlzLVx1MDAzZWxvY2tfa2V5KTtcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbi1cdGh0LVx1MDAzZWxvY2tkZXBfa2V5ID0ga2V5O1xuK1x0aHQtXHUwMDNlbG9ja2RlcF9rZXkgPSBcdTAwMjZrZXlzLVx1MDAzZWJ1Y2tldF9rZXk7XG4gI2VuZGlmXG4gXHRtZW1jcHkoXHUwMDI2aHQtXHUwMDNlcCwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpO1xuIFxuQEAgLTEyMzYsMjIgKzExOTIsMTMgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XG4gXG4tLyoqXG4tICogcmhsdGFibGVfaW5pdCAtIGluaXRpYWxpemUgYSBuZXcgaGFzaCBsaXN0IHRhYmxlXG4tICogQGhsdDpcdGhhc2ggbGlzdCB0YWJsZSB0byBiZSBpbml0aWFsaXplZFxuLSAqIEBwYXJhbXM6XHRjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0gKlxuLSAqIEluaXRpYWxpemVzIGEgbmV3IGhhc2ggbGlzdCB0YWJsZS5cbi0gKlxuLSAqIFNlZSBkb2N1bWVudGF0aW9uIGZvciByaGFzaHRhYmxlX2luaXQuXG4tICovXG4gaW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4rXHRcdFx0ICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoXHUwMDI2aGx0LVx1MDAzZWh0LCBwYXJhbXMsIGtleSk7XG4rXHRlcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoXHUwMDI2aGx0LVx1MDAzZWh0LCBwYXJhbXMsIGtleXMpO1xuIFx0aGx0LVx1MDAzZWh0LnJobGlzdCA9IHRydWU7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9saWIvdGVzdF9yaGFzaHRhYmxlLmMgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmNcbmluZGV4IDg1YTYxNWU3NDU5MTEuLmI3NjdhMzhhNzRmOTcgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9yaGFzaHRhYmxlLmNcbisrKyBiL2xpYi90ZXN0X3JoYXNodGFibGUuY1xuQEAgLTQ3Nyw3ICs0NzcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwcmludF9odChzdHJ1Y3QgcmhsdGFibGUgKnJobHQpXG4gXG4gXHRodCA9IFx1MDAyNnJobHQtXHUwMDNlaHQ7XG4gXHQvKiBUYWtlIHRoZSBtdXRleCB0byBhdm9pZCBSQ1Ugd2FybmluZyAqL1xuLVx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIDEpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZodC1cdTAwM2VtdXRleCk7XG4gXHR0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtXHUwMDNldGJsLCBodCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0YmwtXHUwMDNlc2l6ZTsgaSsrKSB7XG4gXHRcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MjIuNTgyMDgzNzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjUwNDUxMTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBmb3Igc3l6a2FsbGVyIGZ1enppbmcsIGFuZCBteSBmaXJzdCBzdGVwIGlzIHRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gVGhpcyBwYXRjaCB0b3VjaGVzIGByaGFzaHRhYmxlLXR5cGVzLmhgLCBgcmhhc2h0YWJsZS5oYCwgYHJoYXNodGFibGUuY2AsIGFuZCBgdGVzdF9yaGFzaHRhYmxlLmNgLCBzbyBjbGVhcmx5IHRoaXMgaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIGNoYW5nZS5cblxuSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCBmb3IgbXVsdGlwbGUgbG9ja3Mgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgc3RydWN0dXJlOiB0aGUgYG11dGV4YCwgdGhlIGdlbmVyaWMgYGxvY2tgLCBhbmQgYSBgbG9ja2RlcF9rZXlgIHVzZWQgYnkgYGRlcF9tYXBgLiBUaGlzIGNyZWF0ZXMgc29tZSBpbnRlcmVzdGluZyBsb2NrZGVwIGJlaGF2aW9yOiB0aGUgbXV0ZXggd2FzIGluaXRpYWxpemVkIHdpdGggc3ViY2xhc3MgMSwgdGhlIHNwaW5sb2NrIHdpdGggc3ViY2xhc3MgMCwgYW5kIGJpdGxvY2tzIHdpdGggc3ViY2xhc3NlcyAyKy4gVGhlcmUgYXJlIGFsc28gY2FsbHMgbGlrZSBgbXV0ZXhfbG9ja19uZXN0ZWRgIGluIGByaHRfZGVmZXJyZWRfd29ya2VyYCBhbmQgYHByaW50X2h0YC5cblxuVGhlIHByb3Bvc2VkIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCBzdHJ1Y3QgY29udGFpbmluZyBzZXBhcmF0ZSBgbG9ja19rZXlgLCBgbXV0ZXhfa2V5YCwgYW5kIGBidWNrZXRfa2V5YCBtZW1iZXJzLiBDcml0aWNhbGx5LCB0aGVzZSBrZXlzIGFyZSBub3cgc3RhdGljYWxseSBhbGxvY2F0ZWQgcGVyIGNhbGxlciBvZiBgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmAuIFRoZSBjb2RlIHRoZW4gaW5pdGlhbGl6ZXMgdGhlIHJlc3BlY3RpdmUgbG9ja3M6IGBtdXRleF9pbml0X3dpdGhfa2V5YCwgYGxvY2tkZXBfc2V0X2NsYXNzYCwgYW5kIGFzc2lnbnMgdGhlIGBidWNrZXRfa2V5YC4gVGhpcyBhdm9pZHMgdGhlIHByZXZpb3VzIHNoYXJlZCBsb2NrIGNsYXNzIGtleSwgd2hpY2ggY3JlYXRlcyBtb3JlIHByZWNpc2UgbG9ja2RlcCB0cmFja2luZy5cblxuSW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGRlY291cGxpbmcgdGhlIGxvY2sgY2xhc3Mga2V5cywgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBsb2NrZGVwIGFuYWx5c2lzLiBJdCdzIGFsc28gbW9kaWZ5aW5nIGhvdyB0aGUgYml0bG9ja3MgYXJlIGFjcXVpcmVkLCB1c2luZyB0aGUgYHN1YmNsYXNzYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGBzdWJjbGFzcyArIDJgLiBGdXJ0aGVybW9yZSwgaXQncyBzaW1wbGlmeWluZyB0aGUgbG9jayBjYWxscyBpbiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgYW5kIGBwcmludF9odGAgdG8gYG11dGV4X2xvY2tgIGZyb20gYG11dGV4X2xvY2tfbmVzdGVkYC5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBvciBzaW1pbGFyIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCdzIGNydWNpYWwgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdC4gU2luY2UgSSBkb24ndCBoYXZlIGdpdCBvciBiYXNoLCBJIGNhbid0IHVzZSBgZ2l0IGxvZ2Agb3Igc2hlbGwgY29tbWFuZHMgZGlyZWN0bHkuIFRpbWUgdG8gdXNlIGdyZXBwZXIgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgZm9yIHRoZXNlIGNhbGxlcnMuIEkgY2FuIHVzZSB0aGlzIHRvb2wgdG8gZmluZCBhbGwgZGlyZWN0IHVzYWdlcyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHksIEknbGwgc2VlIHNvbWUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhpcyBsb2NrZGVwIHJlZmFjdG9yaW5nIGhhcyBhbnkgZG9jdW1lbnRlZCBiZW5lZml0cywgb3Igd2hldGhlciBpdCBzaW1wbHkgY29ycmVjdHMgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MzUuMDg2NTk4MTA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzYyMjUyNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yaGFzaHRhYmxlX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg9MTQwPXN0cnVjdCByaGFzaHRhYmxlX2l0ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTQ5LVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjE1MDppbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0xNTEtXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoxNTc6XFx0X19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKGh0LCBwYXJhbXMsIFxcdTAwMjZfX2tleXMpO1xcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0xNTgtfSlcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTEyMD1zdGF0aWMgdTMyIHJoYXNodGFibGVfamhhc2gyKGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbmd0aCwgdTMyIHNlZWQpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTExMjQtXFxubGliL3JoYXNodGFibGUuYzoxMTI1OmludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbmxpYi9yaGFzaHRhYmxlLmMtMTEyNi1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMTkyLX1cXG5saWIvcmhhc2h0YWJsZS5jOjExOTM6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXFxubGliL3JoYXNodGFibGUuYz0xMTk1PWludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMjAwLVxcbmxpYi9yaGFzaHRhYmxlLmM6MTIwMTpcXHRlcnIgPSBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoXFx1MDAyNmhsdC1cXHUwMDNlaHQsIHBhcmFtcywga2V5cyk7XFxubGliL3JoYXNodGFibGUuYy0xMjAyLVxcdGhsdC1cXHUwMDNlaHQucmhsaXN0ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6MzcuNzIyODI3ODI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTM5OTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQncyBnb2luZyBvbjpcblxuKipEaXNzZWN0aW5nIHRoZSBgcmhhc2h0YWJsZV9pbml0YCBNYWNybyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByaGFzaHRhYmxlX2luaXRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQncyBhIG1hY3JvIOKAkyBjbGFzc2ljLiBJdCBleHBhbmRzIGludG8gYSBjYWxsIHRvIGBhbGxvY19ob29rcyhyaGFzaHRhYmxlX2luaXRfbm9wcm9mKF9fVkFfQVJHU19fKSlgLiBJJ20gYWxyZWFkeSBnZXR0aW5nIGEgZmVlbCBmb3IgdGhlIHNldHVwLiBgYWxsb2NfaG9va3NgIHVzdWFsbHkgaW5kaWNhdGVzIHNvbWUga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBob29rIHJlZ2lzdHJhdGlvbiwgd2hpY2ggbGlrZWx5IHRpZXMgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBoYXNoIHRhYmxlLiBEaWdnaW5nIGRlZXBlciwgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGl0c2VsZiBsb29rcyBpbnRlcmVzdGluZy4gVGhlIGBfbm9wcm9mYCBzdWZmaXggc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBhIHZlcnNpb24gdGhhdCBza2lwcyBwZXJmb3JtYW5jZSBwcm9maWxpbmcsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ2Qgd2FudCB0byBrZWVwIGluIG1pbmQsIGVzcGVjaWFsbHkgaW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgY29kZS5cblxuTm93IHRoZSBjcnVjaWFsIHBhcnQ6IGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBleHBhbmRzIHRvIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YoaHQsIHBhcmFtcywgXHUwMDI2X19rZXlzKWAuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVhbCBpbml0aWFsaXphdGlvbi4gYGh0YCBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSBoYW5kbGUgdG8gdGhlIHJoYXNodGFibGUgaXRzZWxmLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBwYXJhbXNgIGxpa2VseSBjb250cm9scyB0aGUgY29yZSBzZXR0aW5ncywgbGlrZSB0aGUgc2l6ZSBvciBvdGhlciBwYXJhbWV0ZXJzLCBhbmQgYFx1MDAyNl9fa2V5c2Agc3VnZ2VzdHMgYSBrZXkgc3RydWN0dXJlIGlzIGF0IHBsYXkuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19rZXlzYCBhbmQgdGhlIGZ1bGwgYXJndW1lbnQgbGlzdC4gSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gY2hlY2sgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYXMgd2VsbCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgaW5pdGlhbGl6YXRpb24gd29yayBtdXN0IGJlIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMjo0MC40OTIyMzEwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM0NzIxMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmhsdGFibGVfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaD0xNTA9aW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMDMtXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MjA0OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwNS1cXHRcXHQgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMjEwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoyMTE6XFx0X19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgXFx1MDAyNl9fa2V5cyk7XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIxMi19KVxcbi0tXFxubGliL3JoYXNodGFibGUuYz0xMTkzPUVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XFxubGliL3JoYXNodGFibGUuYy0xMTk0LVxcbmxpYi9yaGFzaHRhYmxlLmM6MTE5NTppbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcXG5saWIvcmhhc2h0YWJsZS5jLTExOTYtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEyMDQtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTIwNTpFWFBPUlRfU1lNQk9MX0dQTChfX3JobHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTEyMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjQyLjkyNjk1NzUzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4MDIwNTI0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgcmhhc2h0YWJsZSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgaG93IHRoaXMgYHRibC1cdTAwM2VkZXBfbWFwYCBpcyBiZWluZyBzZXQgdXAgd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgbGlicmFyeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNvIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi9yaGFzaHRhYmxlLmNgLiBMZXQncyB1c2UgdGhlIHNvdXJjZSwgSSBtZWFuLCBsZXQncyBzZWFyY2ggaXQuIE15IGZpcnN0IHNlYXJjaCBrZXl3b3JkcyBhcmUgZWl0aGVyIGBkZXBfbWFwYCBvciBgbG9ja2RlcF9rZXlgIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIHdoZXJlIHRoaW5ncyBraWNrIG9mZi4gSSdtIGFmdGVyIHRoZSBpbml0aWFsIHNldHVwLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjQ1LjcyOTAxMTczMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQxMTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3JoYXNodGFibGUuYz0xODc9c3RhdGljIHN0cnVjdCBidWNrZXRfdGFibGUgKmJ1Y2tldF90YWJsZV9hbGxvYyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTIxMC1cXHQvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1xcbmxpYi9yaGFzaHRhYmxlLmM6MjExOlxcdGxvY2tkZXBfaW5pdF9tYXAoXFx1MDAyNnRibC1cXHUwMDNlZGVwX21hcCwgXFxcInJoYXNodGFibGVfYnVja2V0XFxcIiwgaHQtXFx1MDAzZWxvY2tkZXBfa2V5LCAwKTtcXG5saWIvcmhhc2h0YWJsZS5jLTIxMi0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDUuODEwNDI4MDY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxNDM2NTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIHJoYXNodGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUuLi4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGJpdGxvY2sgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSByaGFzaHRhYmxlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbmVzdGluZyBsZXZlbC4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgdGhhdC4gUmlnaHQsIGxpbmUgMjEwIG9mIGBsaWIvcmhhc2h0YWJsZS5jYDogXCIvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1wiIOKAkyB0aGF0J3MgdGhlIGtleS4gVG8gZ2V0IHRoZSBmdWxsIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDE4NyBhbmQgZ28gdG8gbGluZSAyMjAgaW4gYGxpYi9yaGFzaHRhYmxlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBmZWVsIGZvciBob3cgdGhleSdyZSBoYW5kbGluZyB0aGVzZSBsb2NrcyBhbmQgd2h5IHRoZSBuZXN0aW5nIGxldmVsIGlzIGNyaXRpY2FsLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGRlc2lnbiBjaG9pY2U7IGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBlbnN1cmluZyBkZWFkbG9jayBhdm9pZGFuY2Ugb3IgcGVyaGFwcyBlZmZpY2llbnQgc3luY2hyb25pemF0aW9uIHdpdGhpbiB0aGUgdGFibGUncyBpbnRlcm5hbHMuIEknbGwgZm9jdXMgb24gd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzIHRvIHdvcmsgb3V0IHRoZSByb2xlIG9mIHRoZSBiaXRsb2NrcyBhdCB0aGF0IG5lc3RpbmcgZGVwdGguIFRoaXMgbG9va3MgbGlrZSBpdCdsbCBiZSBhIHF1aWNrIGJ1dCB2aXRhbCBjaGVjayB0byBlbnN1cmUgdGhlIGRlc2lnbiBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAyOjQ4LjYyNDc5NTU3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvcmhhc2h0YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NzpcXHRzdGF0aWMgc3RydWN0IGJ1Y2tldF90YWJsZSAqYnVja2V0X3RhYmxlX2FsbG9jKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4gMTg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ1Y2tldHMsXFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwKVxcbiAxOTA6XFx0e1xcbiAxOTE6XFx0XFx0c3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsID0gTlVMTDtcXG4gMTkyOlxcdFxcdHNpemVfdCBzaXplO1xcbiAxOTM6XFx0XFx0aW50IGk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdHRibCA9IGFsbG9jX2hvb2tzX3RhZyhodC1cXHUwMDNlYWxsb2NfdGFnLFxcbiAxOTY6XFx0XFx0XFx0XFx0a3ZtYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2Yoc3RydWN0X3NpemUodGJsLCBidWNrZXRzLCBuYnVja2V0cyksXFxuIDE5NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIDEsIGdmcHxfX0dGUF9aRVJPLCBOVU1BX05PX05PREUpKTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0c2l6ZSA9IG5idWNrZXRzO1xcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHRpZiAodGJsID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkpIHtcXG4gMjAyOlxcdFxcdFxcdHRibCA9IG5lc3RlZF9idWNrZXRfdGFibGVfYWxsb2MoaHQsIG5idWNrZXRzLCBnZnApO1xcbiAyMDM6XFx0XFx0XFx0bmJ1Y2tldHMgPSAwO1xcbiAyMDQ6XFx0XFx0fVxcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAodGJsID09IE5VTEwpXFxuIDIwNzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjA4OlxcdFxcbiAyMDk6XFx0I2lmZGVmIENPTkZJR19MT0NLREVQXFxuIDIxMDpcXHRcXHQvKiBiaXRsb2NrcyBtdXN0IHVzZSBuZXN0aW5nIGxldmVsIDIgb3IgbW9yZSAqL1xcbiAyMTE6XFx0XFx0bG9ja2RlcF9pbml0X21hcChcXHUwMDI2dGJsLVxcdTAwM2VkZXBfbWFwLCBcXFwicmhhc2h0YWJsZV9idWNrZXRcXFwiLCBodC1cXHUwMDNlbG9ja2RlcF9rZXksIDApO1xcbiAyMTI6XFx0I2VuZGlmXFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdHRibC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdHJjdV9oZWFkX2luaXQoXFx1MDAyNnRibC1cXHUwMDNlcmN1KTtcXG4gMjE3OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ0YmwtXFx1MDAzZXdhbGtlcnMpO1xcbiAyMTg6XFx0XFxuIDIxOTpcXHRcXHR0YmwtXFx1MDAzZWhhc2hfcm5kID0gZ2V0X3JhbmRvbV91MzIoKTtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5idWNrZXRzOyBpKyspXFxuIDIyMjpcXHRcXHRcXHRJTklUX1JIVF9OVUxMU19IRUFEKHRibC1cXHUwMDNlYnVja2V0c1tpXSk7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdHJldHVybiB0Ymw7XFxuIDIyNTpcXHR9XFxuIDIyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDI6NDguNjI0ODg0MDczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2ODEyMTIyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHJoYXNodGFibGUgTG9ja2RlcCBDaGFuZ2U6IFdvcnRoeSBvZiBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCByZWZhY3RvcnMgdGhlIGxvY2tkZXAga2V5IGhhbmRsaW5nIHdpdGhpbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgbXVsdGlwbGUgbG9ja2luZyBtZWNoYW5pc21zIChiaXRsb2Nrcywgc3BpbmxvY2tzLCBhbmQgbXV0ZXhlcykgd2VyZSBwcmV2aW91c2x5IHNoYXJpbmcgYSBzaW5nbGUgYGxvY2tfY2xhc3Nfa2V5YCwgd2hpY2ggaXMgYSBsb2NrZGVwIG5vLW5vLiBOb3csIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGRpc3RpbmN0IGtleXMgZm9yIGVhY2ggbG9jayB0eXBlLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb2RlJ3MgY2hhbmdpbmc6IGBtdXRleF9sb2NrX25lc3RlZGAgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIHdpdGggc3RhbmRhcmQgYG11dGV4X2xvY2tgLCBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAgY2FsbHMgYXJlIHVwZGF0ZWQsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgbm93IHRha2VzIGEgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5c2AgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleWAuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygc2VwYXJhdGUgbG9jayBjbGFzc2VzIHRvIHByZXZlbnQgbG9ja2RlcCBjb25mdXNpb24gYW5kIHBvdGVudGlhbCB3YXJuaW5ncyBvciBzcGxhdHMuXG5cbk5vdywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBgcmhhc2h0YWJsZWAgaXMgdXNlZCBldmVyeXdoZXJlIGluIHRoZSBrZXJuZWwhIFRoZSBwYXRjaCB0b3VjaGVzIGNvZGUgaW4gYSBjb3JlIGxpYnJhcnksIGRlYWxpbmcgd2l0aCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgZGlyZWN0bHksIGFuZCBtb2RpZnlpbmcgbG9ja2RlcCBrZXlzLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGtlcm5lbCdzIGxvY2tkZXAgaW5zdHJ1bWVudGF0aW9uIGFuZCBjb3VsZCBleHBvc2Ugc3VidGxlIGxvY2tpbmcgYnVncyBvciwgd29yc2UsIGludHJvZHVjZSBkZWFkbG9ja3MuIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCB0aGUgZnV6emluZyBjcml0ZXJpYSBmbGFnIGFzIGhpZ2gtcHJpb3JpdHkuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNyaXRlcmlhOlxuKiAgICoqUmVhY2hhYmlsaXR5Kio6IGByaGFzaHRhYmxlYCBpcyB3aWRlbHkgdXNlZCwgc28gaXQncyBlYXNpbHkgcmVhY2hhYmxlLlxuKiAgICoqUmVmYWN0b3JpbmcqKjogSXQncyBhIHJlZmFjdG9yaW5nLCBidXQgaXQncyBhIHJlZmFjdG9yaW5nIG9mICpsb2NraW5nKiwgd2hpY2ggaXMgY29yZSBhbmQgY2FuIGludHJvZHVjZSBzZW1hbnRpYyBzaGlmdHMuXG4qICAgKipBc3NlcnRpb25zL0NoZWNrcyoqOiBUaGUgY2hhbmdlIGRpcmVjdGx5IGltcGFjdHMgbG9ja2RlcCwgd2hpY2ggaXMgYSBmb3JtIG9mIHJ1bnRpbWUgY2hlY2ssIGFuZCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGxvY2tkZXAgYXNzZXJ0aW9ucyBvciBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGV4aXN0aW5nIG9uZXMuXG5cblNvLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhLCB0aGlzICptdXN0KiBiZSBmdXp6ZWQuXG5cbk5vdywgZm9yIEZvY3VzU3ltYm9scywgd2UgbmVlZCB0byBiZSBwcmVjaXNlLiBUaGUgcGF0Y2ggaGFzIG1vZGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuKiAgIGBsaWIvcmhhc2h0YWJsZS5jYCBjb250YWlucyBgcmh0X2RlZmVycmVkX3dvcmtlcmAsIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLlxuXG5XZSBuZWVkIHRvIGF2b2lkIHRoZSBcInViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoc1wiIC0gYWxsb2NhdGluZy9mcmVlaW5nIG1lbW9yeSBvciBnZW5lcmljIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFyZSBvdXQuIEhvd2V2ZXIsIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgYXJlIHNwZWNpZmljIGVudHJ5cG9pbnRzLiBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2ssIHdoaWNoIGlzIGFsc28gc3BlY2lmaWMgdG8gdGhlIHJoYXNodGFibGUgZnVuY3Rpb25hbGl0eS4gVGhlc2UgYXJlIHRoZSBzeW1ib2xzIHdlIG5lZWQgdG8gdGFyZ2V0IHRvIHJlZHVjZSBmb2N1cyBkaWx1dGlvbi4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGV4ZXJjaXNlIGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgdG8gdGVzdCBpZiB3ZSBjYW4gY2F1c2UgYW55IGxvY2tkZXAgaXNzdWVzIG9yIG1pc2JlaGF2aW9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzowNS40MzcwMTc3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NzUyOTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRfbG9ja19uZXN0ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKnJodF9idWNrZXRfaW5zZXJ0KFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzIxLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMyMjpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0zMjMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oPTMzNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2soc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzM4LXtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDozMzk6XFx0cmV0dXJuIHJodF9sb2NrX25lc3RlZCh0YmwsIGJrdCwgMCk7XFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzQwLX1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MjQwPXN0YXRpYyBpbnQgcmhhc2h0YWJsZV9yZWhhc2hfb25lKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMjcyLVxcbmxpYi9yaGFzaHRhYmxlLmM6MjczOlxcdGZsYWdzID0gcmh0X2xvY2tfbmVzdGVkKG5ld190YmwsIFxcdTAwMjZuZXdfdGJsLVxcdTAwM2VidWNrZXRzW25ld19oYXNoXSxcXG5saWIvcmhhc2h0YWJsZS5jLTI3NC1cXHRcXHRcXHRcXHRTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjA3LjcxNDU1Mjk3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MTI3NzEzNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHJodF9sb2NrYCBhbmQgYHJodF9sb2NrX25lc3RlZGAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgbG9ja2luZyBwcmltaXRpdmVzLCBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYC4gVGhlIGZpcnN0IHN0ZXAsIG5hdHVyYWxseSwgaXMgYSBnbG9iYWwgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgKmV2ZXJ5KiBjYWxsc2l0ZSBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UuIEknbSBnb2luZyB0byB3YW50IGEgY29tcHJlaGVuc2l2ZSBsaXN0OyBubyBzdG9uZSBsZWZ0IHVudHVybmVkLlxuXG5Gcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBob3cgd2lkZXNwcmVhZCB0aGVpciB1c2UgaXMuIEEgYmFzaWMgY291bnQgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUsIGJ1dCB0aGUgY29udGV4dCBvZiBlYWNoIGNhbGxzaXRlIGlzIGdvaW5nIHRvIGJlIGZhciBtb3JlIGluZm9ybWF0aXZlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBhdHRlcm5zOiBhcmUgdGhleSBwcmltYXJpbHkgdXNlZCB3aXRoaW4gYSBwYXJ0aWN1bGFyIHN1YnN5c3RlbSBvciBkcml2ZXI/IElzIGl0IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgb3IgaXMgdGhpcyByZWxhdGVkIHRvIHNvbWUgZXNvdGVyaWMgZmlsZSBzeXN0ZW0gZnVuY3Rpb25hbGl0eT8gV2hlcmUgYXJlIHRoZXNlIG5lc3RlZCBsb2NrIGNhbGxzIGxvY2F0ZWQsIHRoYXQgd291bGQgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2Ygd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgZGVhZGxvY2sgb3IgZm9yIHNvbWUgb3RoZXIgcHVycG9zZT9cbkknbGwgYWxzbyBrZWVwIGluIG1pbmQgdGhhdCBJJ20gZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsbHkgY29tcGxleCBhcmNoaXRlY3R1cmUsIHNvIHNpbXBseSBsb29raW5nIGF0IHRoZSBjb3VudCBvZiBjYWxscyBpcyBvbmx5IGdvaW5nIHRvIGdldCBtZSBzbyBmYXIuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIGVhY2ggZnVuY3Rpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHJlbGF0ZWQgbG9ja2luZyBoaWVyYXJjaGllcyBvciBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMuIEkgY2FuJ3QgYWZmb3JkIHRvIG1pc3MgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnM7IHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGxvY2tzIGludGVycmVsYXRlIHdpdGggb3RoZXJzIHdpbGwgYmUgY3JpdGljYWwuIFVsdGltYXRlbHkgSSBhbSBhZnRlciBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgcHVycG9zZSwgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlbmVmaXQgZnJvbSByZWZpbmVtZW50IG9yIGZ1cnRoZXIgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjQ0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTYuODQyMjcwMTUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczNDgwNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJodF9sb2NrXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MzIyPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByaHRfbG9ja19uZXN0ZWQoc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtMzM0LVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjMzNTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2soc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTMzNi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKipia3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD03NTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX3JoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03NzctXFx0cHByZXYgPSBOVUxMO1xcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oOjc3ODpcXHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03NzktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0xMDQyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmhhc2h0YWJsZV9yZW1vdmVfZmFzdF9vbmUoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0xMDU4LVxcdHBwcmV2ID0gTlVMTDtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoxMDU5OlxcdGZsYWdzID0gcmh0X2xvY2sodGJsLCBia3QpO1xcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEwNjAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD0xMTk1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmhhc2h0YWJsZV9yZXBsYWNlX2Zhc3QoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0xMjE4LVxcdHBwcmV2ID0gTlVMTDtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoxMjE5OlxcdGZsYWdzID0gcmh0X2xvY2sodGJsLCBia3QpO1xcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTEyMjAtXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTI5Mj1zdGF0aWMgaW50IHJoYXNodGFibGVfcmVoYXNoX2NoYWluKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMzAxLVxcdFxcdHJldHVybiAwO1xcbmxpYi9yaGFzaHRhYmxlLmM6MzAyOlxcdGZsYWdzID0gcmh0X2xvY2sob2xkX3RibCwgYmt0KTtcXG5saWIvcmhhc2h0YWJsZS5jLTMwMy1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9NjI4PXN0YXRpYyB2b2lkICpyaGFzaHRhYmxlX3RyeV9pbnNlcnQoc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTY1My1cXG5saWIvcmhhc2h0YWJsZS5jOjY1NDpcXHRcXHRcXHRmbGFncyA9IHJodF9sb2NrKHRibCwgYmt0KTtcXG5saWIvcmhhc2h0YWJsZS5jLTY1NS1cXHRcXHRcXHRkYXRhID0gcmhhc2h0YWJsZV9sb29rdXBfb25lKGh0LCBia3QsIHRibCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MTkuMzE1NzU1NzIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3NjAzMjc3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJoYXNodGFibGUgTG9jayBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSB1c2FnZSBvZiBgcmh0X2xvY2tgIGFuZCBgcmh0X2xvY2tfbmVzdGVkYCB3aXRoaW4gdGhlIHJoYXNodGFibGUgaW1wbGVtZW50YXRpb24uIEkndmUgcGlucG9pbnRlZCB0aGVpciBjYWxsc2l0ZXMgYXM6IGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCwgYHJodF9kZWZlcnJlZF93b3JrZXJgLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRob3V0IHRoZSBwcmVmaXguIENsZWFybHksIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgcmVoYXNoIGFuZCBkZWZlcnJlZCB3b3JrZXIgcGF0aHMgYXJlIGxvY2tpbmcgdXAsIGFzIG9uZSBtaWdodCBleHBlY3QuIEknbSBhbHNvIHNlZWluZyBsb2NrIGFjcXVpc2l0aW9uIHdpdGhpbiB0aGUgbWFpbiBpbnNlcnRpb24gcGF0aCBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIGltbWVkaWF0ZWx5IHNlZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiBgcmhhc2h0YWJsZV90cnlfaW5zZXJ0YCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuIE15IHRob3VnaHRzIGltbWVkaWF0ZWx5IHR1cm4gdG8gdGhlIGBsaWIvcmhhc2h0YWJsZS5jYCBzb3VyY2UgY29kZSB0byBmdWxseSBhcHByZWNpYXRlIHRoZSBwb3NzaWJsZSBsb2NrIGNvbnRlbnRpb24gaW4gdGhvc2UgY2FsbGluZyBwYXRocy4gTGV0IG1lIGNoZWNrIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGZyb20gdGhlIGxpYnJhcnkgYXJlIGNhbGxpbmcgYHJoYXNodGFibGVfdHJ5X2luc2VydGAgb3IgYXJlIG5vbi1zdGF0aWMuIFRoaXMgY291bGQgaWxsdW1pbmF0ZSB3aGVyZSBjb250ZW50aW9uIGlzIG1vc3QgbGlrZWx5IHRvIGFyaXNlLiBUaGlzIGdpdmVzIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6MzYuOTE5MDM1MjEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU4NTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaGFzaHRhYmxlX3RyeV9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3JoYXNodGFibGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvcmhhc2h0YWJsZS5jPTU4Mj1zdGF0aWMgc3RydWN0IGJ1Y2tldF90YWJsZSAqcmhhc2h0YWJsZV9pbnNlcnRfb25lKFxcbi0tXFxubGliL3JoYXNodGFibGUuYy02MjctXFxubGliL3JoYXNodGFibGUuYzo2Mjg6c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG5saWIvcmhhc2h0YWJsZS5jLTYyOS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKVxcbi0tXFxubGliL3JoYXNodGFibGUuYz02Nzk9dm9pZCAqcmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtNjg1LVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5saWIvcmhhc2h0YWJsZS5jOjY4NjpcXHRcXHRkYXRhID0gcmhhc2h0YWJsZV90cnlfaW5zZXJ0KGh0LCBrZXksIG9iaik7XFxubGliL3JoYXNodGFibGUuYy02ODctXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjM3LjAwMjYyNzI3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDMxNTc5ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgYHJoYXNodGFibGVgIExpYnJhcnkqKlxuXG5Pa2F5LCBzbyBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBhbmQgdGhhdCBsaXZlcyByaWdodCB0aGVyZSBpbiBgbGliL3JoYXNodGFibGUuY2AuIE5vdywgbGV0J3MgYnJvYWRlbiB0aGUgc2NvcGUuIEkgbmVlZCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZnJvbSB0aGF0IGZpbGU/IEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBgcmhhc2h0YWJsZV93YWxrX2luaXRfbm9wcm9mYCwgYHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveWAsIGByaGx0YWJsZV9pbnNlcnRfa2V5YC4uLiBJIG5lZWQgdG8gc2VlIHRoZSAqZW50aXJlKiBpbnRlcmZhY2Ugb2ZmZXJlZCBieSB0aGlzIHBhcnQgb2YgdGhlIGxpYnJhcnkuIEl0J3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgYWxsIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBsaWIvcmhhc2h0YWJsZS5jYC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIGFuZCBjYXBhYmlsaXRpZXMgY29tcHJlaGVuc2l2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjAzOjM5LjAzNDIxMTQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE2ODUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3JoYXNodGFibGUuYz00OT1pbnQgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTUyLX1cXG5saWIvcmhhc2h0YWJsZS5jOjUzOkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tkZXBfcmh0X211dGV4X2lzX2hlbGQpO1xcbmxpYi9yaGFzaHRhYmxlLmMtNTQtXFxubGliL3JoYXNodGFibGUuYz01NT1pbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCB1MzIgaGFzaClcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtNjItfVxcbmxpYi9yaGFzaHRhYmxlLmM6NjM6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQpO1xcbmxpYi9yaGFzaHRhYmxlLmMtNjQtI2Vsc2VcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9Njc5PXZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTY5MS19XFxubGliL3JoYXNodGFibGUuYzo2OTI6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyk7XFxubGliL3JoYXNodGFibGUuYy02OTMtXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTc3Mz12b2lkICpyaGFzaHRhYmxlX25leHRfa2V5KHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqcHJldl9rZXkpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTc5My19XFxubGliL3JoYXNodGFibGUuYzo3OTQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9uZXh0X2tleSk7XFxubGliL3JoYXNodGFibGUuYy03OTUtXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTgxNz12b2lkIHJoYXNodGFibGVfd2Fsa19lbnRlcihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTgzMC19XFxubGliL3JoYXNodGFibGUuYzo4MzE6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX2VudGVyKTtcXG5saWIvcmhhc2h0YWJsZS5jLTgzMi1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9ODM5PXZvaWQgcmhhc2h0YWJsZV93YWxrX2V4aXQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcilcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtODQ1LX1cXG5saWIvcmhhc2h0YWJsZS5jOjg0NjpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfZXhpdCk7XFxubGliL3JoYXNodGFibGUuYy04NDctXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTg2Nj1pbnQgcmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTkyNy19XFxubGliL3JoYXNodGFibGUuYzo5Mjg6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3N0YXJ0X2NoZWNrKTtcXG5saWIvcmhhc2h0YWJsZS5jLTkyOS1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTAxMj12b2lkICpyaGFzaHRhYmxlX3dhbGtfbmV4dChzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMDM5LX1cXG5saWIvcmhhc2h0YWJsZS5jOjEwNDA6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX25leHQpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTA0MS1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTA1MT12b2lkICpyaGFzaHRhYmxlX3dhbGtfcGVlayhzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMDczLX1cXG5saWIvcmhhc2h0YWJsZS5jOjEwNzQ6RVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3BlZWspO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTA3NS1cXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTA4Mz12b2lkIHJoYXNodGFibGVfd2Fsa19zdG9wKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTExMDMtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTEwNDpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfc3RvcCk7XFxubGliL3JoYXNodGFibGUuYy0xMTA1LVxcbi0tXFxubGliL3JoYXNodGFibGUuYz0xMTI1PWludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMTkyLX1cXG5saWIvcmhhc2h0YWJsZS5jOjExOTM6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXFxubGliL3JoYXNodGFibGUuYz0xMTk1PWludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMjA0LX1cXG5saWIvcmhhc2h0YWJsZS5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwoX19yaGx0YWJsZV9pbml0X25vcHJvZik7XFxubGliL3JoYXNodGFibGUuYy0xMjA2LVxcbi0tXFxubGliL3JoYXNodGFibGUuYz0xMjQ2PXZvaWQgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTI4OC19XFxubGliL3JoYXNodGFibGUuYzoxMjg5OkVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveSk7XFxubGliL3JoYXNodGFibGUuYy0xMjkwLVxcbmxpYi9yaGFzaHRhYmxlLmM9MTI5MT12b2lkIHJoYXNodGFibGVfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEyOTQtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTI5NTpFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX2Rlc3Ryb3kpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTI5Ni1cXG5saWIvcmhhc2h0YWJsZS5jPTEyOTc9c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKl9fcmh0X2J1Y2tldF9uZXN0ZWQoXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEzMjMtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTMyNDpFWFBPUlRfU1lNQk9MX0dQTChfX3JodF9idWNrZXRfbmVzdGVkKTtcXG5saWIvcmhhc2h0YWJsZS5jLTEzMjUtXFxubGliL3JoYXNodGFibGUuYz0xMzI2PXN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKipyaHRfYnVja2V0X25lc3RlZChcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTMzNC19XFxubGliL3JoYXNodGFibGUuYzoxMzM1OkVYUE9SVF9TWU1CT0xfR1BMKHJodF9idWNrZXRfbmVzdGVkKTtcXG5saWIvcmhhc2h0YWJsZS5jLTEzMzYtXFxubGliL3JoYXNodGFibGUuYz0xMzM3PXN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKipyaHRfYnVja2V0X25lc3RlZF9pbnNlcnQoXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jLTEzNjMtfVxcbmxpYi9yaGFzaHRhYmxlLmM6MTM2NDpFWFBPUlRfU1lNQk9MX0dQTChyaHRfYnVja2V0X25lc3RlZF9pbnNlcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzozOS4xMTQzODkyODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDk1NDQ0ODM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgTG9ja2luZyBJc3N1ZXMgaW4gYGxpYi9yaGFzaHRhYmxlLmNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgYmVoYXZpb3Igd2l0aGluIHRoZSBgcmhhc2h0YWJsZWAgaW1wbGVtZW50YXRpb24sIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyByZWdpb24uIExldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbGliL3JoYXNodGFibGUuY2AsIGZvY3VzaW5nIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lcyA0MCB0byA2NS4gVGhlIGNvZGUgaW4gdGhhdCB2aWNpbml0eSBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBkZWZpbmVkIG9yIHV0aWxpemVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXkgYXJlIGVtcGxveWluZyBsb2NrIGRlcGVuZGVuY3kgY2hlY2tpbmcgYW5kIHNvIGZvcnRoLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIGhvdyBgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZGAgYW5kIGBsb2NrZGVwX3JodF9idWNrZXRfaXNfaGVsZGAgYXJlIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGF0IHNlY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgbG9ja2RlcCBjaGVja3MgaXMgY3JpdGljYWwgdG8gZW5zdXJpbmcgbG9jayBvcmRlcmluZyBpcyBjb3JyZWN0LCB0byBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBiZWhhdmlvciBkdWUgdG8gaW1wcm9wZXIgY29uY3VycmVuY3kgY29udHJvbCBpbiB0aGF0IGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowMzo0NC4wNjg4NDExOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFx0dW5pb24gbmVzdGVkX3RhYmxlIF9fcmN1ICp0YWJsZTtcXG4gIDM2OlxcdFxcdHN0cnVjdCByaGFzaF9sb2NrX2hlYWQgX19yY3UgKmJ1Y2tldDtcXG4gIDM3OlxcdH07XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyB1MzIgaGVhZF9oYXNoZm4oc3RydWN0IHJoYXNodGFibGUgKmh0LFxcbiAgNDA6XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcXG4gIDQxOlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqaGUpXFxuICA0MjpcXHR7XFxuICA0MzpcXHRcXHRyZXR1cm4gcmh0X2hlYWRfaGFzaGZuKGh0LCB0YmwsIGhlLCBodC1cXHUwMDNlcCk7XFxuICA0NDpcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdCNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xcbiAgNDc6XFx0I2RlZmluZSBBU1NFUlRfUkhUX01VVEVYKEhUKSBCVUdfT04oIWxvY2tkZXBfcmh0X211dGV4X2lzX2hlbGQoSFQpKVxcbiAgNDg6XFx0XFxuICA0OTpcXHRpbnQgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpXFxuICA1MDpcXHR7XFxuICA1MTpcXHRcXHRyZXR1cm4gKGRlYnVnX2xvY2tzKSA/IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2aHQtXFx1MDAzZW11dGV4KSA6IDE7XFxuICA1MjpcXHR9XFxuICA1MzpcXHRFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKTtcXG4gIDU0OlxcdFxcbiAgNTU6XFx0aW50IGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgdTMyIGhhc2gpXFxuICA1NjpcXHR7XFxuICA1NzpcXHRcXHRpZiAoIWRlYnVnX2xvY2tzKVxcbiAgNTg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuICA1OTpcXHRcXHRpZiAodW5saWtlbHkodGJsLVxcdTAwM2VuZXN0KSlcXG4gIDYwOlxcdFxcdFxcdHJldHVybiAxO1xcbiAgNjE6XFx0XFx0cmV0dXJuIGJpdF9zcGluX2lzX2xvY2tlZCgwLCAodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZ0YmwtXFx1MDAzZWJ1Y2tldHNbaGFzaF0pO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQpO1xcbiAgNjQ6XFx0I2Vsc2VcXG4gIDY1OlxcdCNkZWZpbmUgQVNTRVJUX1JIVF9NVVRFWChIVClcXG4gIDY2OlxcdCNlbmRpZlxcbiAgNjc6XFx0XFxuICA2ODpcXHRzdGF0aWMgaW5saW5lIHVuaW9uIG5lc3RlZF90YWJsZSAqbmVzdGVkX3RhYmxlX3RvcChcXG4gIDY5OlxcdFxcdGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibClcXG4gIDcwOlxcdHtcXG4gIDcxOlxcdFxcdC8qIFRoZSB0b3AtbGV2ZWwgYnVja2V0IGVudHJ5IGRvZXMgbm90IG5lZWQgUkNVIHByb3RlY3Rpb25cXG4gIDcyOlxcdFxcdCAqIGJlY2F1c2UgaXQncyBzZXQgYXQgdGhlIHNhbWUgdGltZSBhcyB0YmwtXFx1MDAzZW5lc3QuXFxuICA3MzpcXHRcXHQgKi9cXG4gIDc0OlxcdFxcdHJldHVybiAodm9pZCAqKXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGJsLVxcdTAwM2VidWNrZXRzWzBdLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDM6NDQuMDY4OTg0MzY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM2ODgzNTQ0MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgUmhhc2h0YWJsZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHRoZSByaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGRpcmVjdGx5IHRvdWNoZWQ6IGBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGFuZCBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAuIFN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsaXphdGlvbiB0d2Vha3MsIGl0IHNlZW1zLiBBbmQgdGhlIGNoYW5nZSB0byBgcmh0X2RlZmVycmVkX3dvcmtlcmAgd2l0aCB0aGF0IGBtdXRleF9sb2NrKFx1MDAyNmh0LVx1MDAzZW11dGV4KTtgIGNhbGwgaXMgaW50ZXJlc3Rpbmc7IHByb2JhYmx5IHNvbWUgc3VidGxlIGxvY2tpbmcgc3RyYXRlZ3kgYWRqdXN0bWVudHMgdGhlcmUuXG5cbk5vdywgdGhhdCBgcmh0X2xvY2tfbmVzdGVkYCBtb2RpZmljYXRpb24gaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYCBjYXRjaGVzIG15IGV5ZS4gTG9ja2luZyBwcmltaXRpdmVzIGFyZSBhbHdheXMgc2Vuc2l0aXZlLCBhbmQgdGhhdCBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAgY2FsbCB3aXRoIHRoZSBkZXBlbmRlbmN5IG1hcCBzZXR1cC4uLiB0aGF0IGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBkZWFkbG9jayBhdm9pZGFuY2UuIFNpbmNlIGl0J3MgaW5saW5lLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgKnVzZSogaXQuXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgY2FsbHMgYHJoYXNodGFibGVfdHJ5X2luc2VydGAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGByaHRfbG9ja2AuIEdvdCBpdC4gQWxzbywgYHJoYXNodGFibGVfcmVoYXNoX29uZWAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRlZmVycmVkIHdvcmtlciBgcmh0X2RlZmVycmVkX3dvcmtlcmAsIGV4cGxpY2l0bHkgY2FsbHMgYHJodF9sb2NrX25lc3RlZGAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBmYXN0LXBhdGggaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGByaGFzaHRhYmxlX2luc2VydF9mYXN0YCBhbmQgYHJoYXNodGFibGVfcmVtb3ZlX2Zhc3RgIGFyZSBhbHNvIGV4ZXJjaXNpbmcgdGhpcyBsb2NraW5nIG1lY2hhbmlzbS5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciBwaWN0dXJlLiBJIGhhdmUgdG8gbG9vayBhdCB0aGUgKmNhbGxlcnMqIG9mIHRoZXNlIHBvdGVudGlhbGx5LWltcGFjdGVkIGZ1bmN0aW9ucywgbGlrZSBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AuIFdoYXQgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIGFyZSByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb25hbGl0eT8gSXQncyB0aW1lIHRvIGNoZWNrIHdoZXJlIGByaGFzaHRhYmxlX2luc2VydF9zbG93YCBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBDIGZpbGVzLiBUaW1lIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6MjAuOTUyNTMyODAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM3MjM0MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJoYXNodGFibGVfaW5zZXJ0X3Nsb3dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg9MjI4PXN0YXRpYyBpbmxpbmUgaW50IGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTIzNC1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDoyMzU6dm9pZCAqcmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC0yMzYtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oPTc1MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fcmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oLTc4My1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaDo3ODQ6XFx0XFx0cmV0dXJuIHJoYXNodGFibGVfaW5zZXJ0X3Nsb3coaHQsIGtleSwgb2JqKTtcXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaC03ODUtXFx0fVxcbi0tXFxubGliL3JoYXNodGFibGUuYz02Mjg9c3RhdGljIHZvaWQgKnJoYXNodGFibGVfdHJ5X2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtNjc4LVxcbmxpYi9yaGFzaHRhYmxlLmM6Njc5OnZvaWQgKnJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksXFxubGliL3JoYXNodGFibGUuYy02ODAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy02OTEtfVxcbmxpYi9yaGFzaHRhYmxlLmM6NjkyOkVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfaW5zZXJ0X3Nsb3cpO1xcbmxpYi9yaGFzaHRhYmxlLmMtNjkzLVxcbi0tXFxubGliL3Rlc3Rfcmhhc2h0YWJsZS5jPTUxOT1zdGF0aWMgaW50IF9faW5pdCB0ZXN0X2luc2VydF9kdXAoc3RydWN0IHRlc3Rfb2JqX3JobCAqcmhsX3Rlc3Rfb2JqZWN0cyxcXG4tLVxcbmxpYi90ZXN0X3JoYXNodGFibGUuYy01NDItXFx0XFx0aWYgKHNsb3cpIHtcXG5saWIvdGVzdF9yaGFzaHRhYmxlLmM6NTQzOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhcXHUwMDI2cmhsdC1cXHUwMDNlaHQsIGtleSxcXG5saWIvdGVzdF9yaGFzaHRhYmxlLmMtNTQ0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJobF90ZXN0X29iamVjdHNbaV0ubGlzdF9ub2RlLnJoZWFkKSk7XFxuLS1cXG5uZXQvY29yZS94ZHAuYz0yNzE9c3RhdGljIHN0cnVjdCB4ZHBfbWVtX2FsbG9jYXRvciAqX194ZHBfcmVnX21lbV9tb2RlbChzdHJ1Y3QgeGRwX21lbV9pbmZvICptZW0sXFxuLS1cXG5uZXQvY29yZS94ZHAuYy0zMTQtXFx0LyogSW5zZXJ0IGFsbG9jYXRvciBpbnRvIElEIGxvb2t1cCB0YWJsZSAqL1xcbm5ldC9jb3JlL3hkcC5jOjMxNTpcXHRwdHIgPSByaGFzaHRhYmxlX2luc2VydF9zbG93KG1lbV9pZF9odCwgXFx1MDAyNmlkLCBcXHUwMDI2eGRwX2FsbG9jLVxcdTAwM2Vub2RlKTtcXG5uZXQvY29yZS94ZHAuYy0zMTYtXFx0aWYgKElTX0VSUihwdHIpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjIzLjU4OTc4MjI0NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjgxMjk5MDIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBgbGliL3JoYXNodGFibGUuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBidWlsZCBwcm9jZXNzIG9mIGBsaWIvcmhhc2h0YWJsZS5jYC4gTXkgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBleGFtaW5lIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAuIEknbGwgZGlnIGludG8gYGxpYi9NYWtlZmlsZWAgZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcmhhc2h0YWJsZS5vYCBpcyBjb25zdHJ1Y3RlZCwgd2hpY2ggd2lsbCBpbmV2aXRhYmx5IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBLY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbiBhbmQgcG90ZW50aWFsbHksIGFzcGVjdHMgb2YgaXRzIGNvbXBpbGF0aW9uLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgY29uZmlndXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjQwLjQwMjc3NTM5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3Mzk3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJoYXNodGFibGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvTWFrZWZpbGU9NTE9b2JqLXlcXHQrPSBsb2NrcmVmLm9cXG5saWIvTWFrZWZpbGUtNTItXFxubGliL01ha2VmaWxlOjUzOkNPTlRFWFRfQU5BTFlTSVNfcmhhc2h0YWJsZS5vIDo9IHlcXG5saWIvTWFrZWZpbGUtNTQtXFxubGliL01ha2VmaWxlPTU1PW9iai15ICs9IGJjZC5vIHNvcnQubyBwYXJzZXIubyBkZWJ1Z19sb2Nrcy5vIHJhbmRvbTMyLm8gXFxcXFxcbi0tXFxubGliL01ha2VmaWxlLTU4LVxcdCBic2VhcmNoLm8gZmluZF9iaXQubyBsbGlzdC5vIGx3cS5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXFxcXFxcbmxpYi9NYWtlZmlsZTo1OTpcXHQgcGVyY3B1LXJlZmNvdW50Lm8gcmhhc2h0YWJsZS5vIGJhc2U2NC5vIFxcXFxcXG5saWIvTWFrZWZpbGUtNjAtXFx0IG9uY2UubyByZWZjb3VudC5vIHJjdXJlZi5vIHVzZXJjb3B5Lm8gZXJyc2VxLm8gYnVja2V0X2xvY2tzLm8gXFxcXFxcbi0tXFxubGliL01ha2VmaWxlPTgzPW9iai0kKENPTkZJR19URVNUX1dPUktRVUVVRSkgKz0gdGVzdF93b3JrcXVldWUub1xcbmxpYi9NYWtlZmlsZTo4NDpvYmotJChDT05GSUdfVEVTVF9SSEFTSFRBQkxFKSArPSB0ZXN0X3JoYXNodGFibGUub1xcbmxpYi9NYWtlZmlsZS04NS1vYmotJChDT05GSUdfVEVTVF9TVEFUSUNfS0VZUykgKz0gdGVzdF9zdGF0aWNfa2V5cy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA0OjQwLjUyMDE4MjA4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTI5NzQ1MDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJoYXNodGFibGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGByaGFzaHRhYmxlLm9gIGlzIGJha2VkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCwgd2hpY2ggbWVhbnMgYW55IGNoYW5nZXMgaGVyZSBhcmUgcHJldHR5IGltcGFjdGZ1bC4gSSdtIHNlZWluZyBhIGJ1bmNoIG9mIG1vZGlmaWNhdGlvbnMsIGFuZCB0aGV5J3JlIGFsbCBjZW50ZXJlZCBhcm91bmQgYGxvY2tkZXBgIGtleXMgYW5kIGxvY2tpbmcgc3ViY2xhc3Nlcy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUgaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oYCwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYCwgYW5kIGBsaWIvcmhhc2h0YWJsZS5jYC5cblxuSSBub3RpY2UgdGhpbmdzIGxpa2UgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgYmVpbmcgYWRkZWQgd2l0aCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX0xPQ0tERVBgLiBUaGVyZSBhcmUgYWxzbyBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAsIGBsb2NrZGVwX3NldF9jbGFzc2AsIGFuZCBgbG9ja2RlcF9pbml0X21hcGAgdGhhdCByZWZlcmVuY2UgdGhlc2Uga2V5cy4gSXQncyBhbGwgdmVyeSBjbGVhcmx5IGFib3V0IGxvY2sgZGVwZW5kZW5jeSBhbmFseXNpcyBhbmQgcHJvdmluZyBsb2NraW5nIGNvcnJlY3RuZXNzLlxuXG5UaGUga2V5IGNvbmZpZ3MgdG8gbG9vayBhdCBoZXJlIGFyZSBkZWZpbml0ZWx5IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AuIEknbGwgbmVlZCB0byBjaGVjayBgbGliL0tjb25maWcuZGVidWdgIG9yIG1heWJlIGBrZXJuZWwvbG9ja2luZy9LY29uZmlnYCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBhcmUgZW5hYmxlZCBhbmQgd2hhdCB0aGVpciBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIGlzIGFsbCBhYm91dCBlbmhhbmNpbmcgdGhlIGtlcm5lbCdzIGxvY2sgZGVidWdnaW5nIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NDUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6NTUuODE3NjM1ODg3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg0ODQ3NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMT0NLREVQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYWxwaGEvS2NvbmZpZz04Nj1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL2FscGhhL0tjb25maWctODgtXFxuYXJjaC9hbHBoYS9LY29uZmlnOjg5OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL2FscGhhL0tjb25maWctOTAtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9hcmMvS2NvbmZpZz02PWNvbmZpZyBBUkNcXG4tLVxcbmFyY2gvYXJjL0tjb25maWctNTctXFxuYXJjaC9hcmMvS2NvbmZpZzo1ODpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9hcmMvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL2FybS9LY29uZmlnPTIyND1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTIyNy1cXG5hcmNoL2FybS9LY29uZmlnOjIyODpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9hcm0vS2NvbmZpZy0yMjktXFx0Ym9vbFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTMzMD1jb25maWcgSUxMRUdBTF9QT0lOVEVSX1ZBTFVFXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMzMzLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzozMzQ6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMzUtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWc9Mj1jb25maWcgQ1NLWVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMTEyLVxcbmFyY2gvY3NreS9LY29uZmlnOjExMzpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9jc2t5L0tjb25maWctMTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvaGV4YWdvbi9LY29uZmlnPTQ2PWNvbmZpZyBIRVhBR09OX1BIWVNfT0ZGU0VUXFxuLS1cXG5hcmNoL2hleGFnb24vS2NvbmZpZy01MC1cXG5hcmNoL2hleGFnb24vS2NvbmZpZzo1MTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9oZXhhZ29uL0tjb25maWctNTItXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yNzY9Y29uZmlnIEwxX0NBQ0hFX1NISUZUXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTI3OS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjI4MDpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0yODEtXFx0Ym9vbFxcbi0tXFxuYXJjaC9taWNyb2JsYXplL0tjb25maWc9ODA9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxuYXJjaC9taWNyb2JsYXplL0tjb25maWctODItXFxuYXJjaC9taWNyb2JsYXplL0tjb25maWc6ODM6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvbWljcm9ibGF6ZS9LY29uZmlnLTg0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnPTI5OTg9ZW5kbWVudVxcbmFyY2gvbWlwcy9LY29uZmlnLTI5OTktXFxuYXJjaC9taXBzL0tjb25maWc6MzAwMDpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9taXBzL0tjb25maWctMzAwMS1cXHRib29sXFxuLS1cXG5hcmNoL29wZW5yaXNjL0tjb25maWc9Njg9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxuYXJjaC9vcGVucmlzYy9LY29uZmlnLTcwLVxcbmFyY2gvb3BlbnJpc2MvS2NvbmZpZzo3MTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9vcGVucmlzYy9LY29uZmlnLTcyLVxcdGRlZl9ib29sICB5XFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTE2OD1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTE3MC1cXG5hcmNoL3BhcmlzYy9LY29uZmlnOjE3MTpjb25maWcgTE9DS0RFUF9TVVBQT1JUXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0xNzItXFx0Ym9vbFxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTAxPWNvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEwNC1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxMDU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEwNi1cXHRib29sXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MzUxPWNvbmZpZyBQR1RBQkxFX0xFVkVMU1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTM1NS1cXG5hcmNoL3Jpc2N2L0tjb25maWc6MzU2OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3Jpc2N2L0tjb25maWctMzU3LVxcdGRlZl9ib29sIHlcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTU9Y29uZmlnIENQVV9CSUdfRU5ESUFOXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy03LVxcbmFyY2gvczM5MC9LY29uZmlnOjg6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvczM5MC9LY29uZmlnLTktXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTExMj1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL3NoL0tjb25maWctMTE0LVxcbmFyY2gvc2gvS2NvbmZpZzoxMTU6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvc2gvS2NvbmZpZy0xMTYtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTEyNT1jb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMTI4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoxMjk6Y29uZmlnIExPQ0tERVBfU1VQUE9SVFxcbmFyY2gvc3BhcmMvS2NvbmZpZy0xMzAtXFx0Ym9vbFxcbi0tXFxuYXJjaC91bS9LY29uZmlnPTY5PWNvbmZpZyBTQlVTXFxuLS1cXG5hcmNoL3VtL0tjb25maWctNzEtXFxuYXJjaC91bS9LY29uZmlnOjcyOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3VtL0tjb25maWctNzMtXFx0Ym9vbFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0zNDg9Y29uZmlnIE9VVFBVVF9GT1JNQVRcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMzUyLVxcbmFyY2gveDg2L0tjb25maWc6MzUzOmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3g4Ni9LY29uZmlnLTM1NC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3h0ZW5zYS9LY29uZmlnPTg0PWNvbmZpZyBIWlxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZy04Ny1cXG5hcmNoL3h0ZW5zYS9LY29uZmlnOjg4OmNvbmZpZyBMT0NLREVQX1NVUFBPUlRcXG5hcmNoL3h0ZW5zYS9LY29uZmlnLTg5LVxcdGRlZl9ib29sIHlcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTE1MzM9Y29uZmlnIERFQlVHX0xPQ0tfQUxMT0NcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE1NDctXFxubGliL0tjb25maWcuZGVidWc6MTU0ODpjb25maWcgTE9DS0RFUFxcbmxpYi9LY29uZmlnLmRlYnVnLTE1NDktXFx0Ym9vbFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTU1NC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTU1OmNvbmZpZyBMT0NLREVQX1NNQUxMXFxubGliL0tjb25maWcuZGVidWctMTU1Ni1cXHRib29sXFxubGliL0tjb25maWcuZGVidWctMTU1Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTU4OmNvbmZpZyBMT0NLREVQX0JJVFNcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTU5LVxcdGludCBcXFwiU2l6ZSBmb3IgTUFYX0xPQ0tERVBfRU5UUklFUyAoYXMgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTU2NS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTY2OmNvbmZpZyBMT0NLREVQX0NIQUlOU19CSVRTXFxubGliL0tjb25maWcuZGVidWctMTU2Ny1cXHRpbnQgXFxcIlNpemUgZm9yIE1BWF9MT0NLREVQX0NIQUlOUyAoYXMgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWctMTU3My1cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxNTc0OmNvbmZpZyBMT0NLREVQX1NUQUNLX1RSQUNFX0JJVFNcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTc1LVxcdGludCBcXFwiU2l6ZSBmb3IgTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE1ODgtXFxubGliL0tjb25maWcuZGVidWc6MTU4OTpjb25maWcgTE9DS0RFUF9TVEFDS19UUkFDRV9IQVNIX0JJVFNcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTkwLVxcdGludCBcXFwiU2l6ZSBmb3IgU1RBQ0tfVFJBQ0VfSEFTSF9TSVpFIChhcyBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNTk3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjE1OTg6Y29uZmlnIExPQ0tERVBfQ0lSQ1VMQVJfUVVFVUVfQklUU1xcbmxpYi9LY29uZmlnLmRlYnVnLTE1OTktXFx0aW50IFxcXCJTaXplIGZvciBlbGVtZW50cyBpbiBjaXJjdWxhcl9xdWV1ZSBzdHJ1Y3QgKGFzIE50aCBwb3dlciBvZiAyKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDQ6NTguMTAyNDkwNDc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczNjg2MzUwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGRlYnVnIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYXJvdW5kIGxpbmUgMTU0OC4gSSd2ZSBnb3QgYSBmZWVsaW5nIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIGRlYnVnZ2luZyBpcyBoaWRpbmcgaW4gdGhhdCBzZWN0aW9uLCBwcm9iYWJseSBhIGZsYWcsIGRlcGVuZGVuY3ksIG9yIGEgY29uZGl0aW9uYWwgYmxvY2suIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUsIHBpbnBvaW50aW5nIHRoZSByaWdodCBLY29uZmlnIG9wdGlvbiBpcyBjcnVjaWFsIHRvIGVpdGhlciBlbmFibGUgYSBmZWF0dXJlIG9yIGRpYWdub3NlIGEgbWlzY29uZmlndXJhdGlvbi4gSXQncyBhIGtleSBzcG90IHRvIGZpbmQgcmVsYXRlZCBvcHRpb25zIG9yIHRvIHVuZGVyc3RhbmQgZGVwZW5kZW5jaWVzIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBMZXQgbWUgcHVsbCB0aGF0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjA1LjQ3MTEyODcwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUyMDpcXHRcXHQgZXhjZXB0aW9uIG9mIHNpbXBseSBub3QgYWNxdWlyaW5nIGFsbCB0aGUgcmVxdWlyZWQgbG9ja3MuXFxuMTUyMTpcXHRcXHQgTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBjYW4gaW50cm9kdWNlIHNpZ25pZmljYW50IG92ZXJoZWFkLCBzb1xcbjE1MjI6XFx0XFx0IGl0IHJlYWxseSBzaG91bGQgbm90IGJlIGVuYWJsZWQgaW4gYSBwcm9kdWN0aW9uIG9yIGRpc3RybyBrZXJuZWwsXFxuMTUyMzpcXHRcXHQgZXZlbiBhIGRlYnVnIGtlcm5lbC4gIElmIHlvdSBhcmUgYSBkcml2ZXIgd3JpdGVyLCBlbmFibGUgaXQuICBJZlxcbjE1MjQ6XFx0XFx0IHlvdSBhcmUgYSBkaXN0cm8sIGRvIG5vdC5cXG4xNTI1OlxcdFxcbjE1MjY6XFx0Y29uZmlnIERFQlVHX1JXU0VNU1xcbjE1Mjc6XFx0XFx0Ym9vbCBcXFwiUlcgU2VtYXBob3JlIGRlYnVnZ2luZzogYmFzaWMgY2hlY2tzXFxcIlxcbjE1Mjg6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4xNTI5OlxcdFxcdGhlbHBcXG4xNTMwOlxcdFxcdCAgVGhpcyBkZWJ1Z2dpbmcgZmVhdHVyZSBhbGxvd3MgbWlzbWF0Y2hlZCBydyBzZW1hcGhvcmUgbG9ja3NcXG4xNTMxOlxcdFxcdCAgYW5kIHVubG9ja3MgdG8gYmUgZGV0ZWN0ZWQgYW5kIHJlcG9ydGVkLlxcbjE1MzI6XFx0XFxuMTUzMzpcXHRjb25maWcgREVCVUdfTE9DS19BTExPQ1xcbjE1MzQ6XFx0XFx0Ym9vbCBcXFwiTG9jayBkZWJ1Z2dpbmc6IGRldGVjdCBpbmNvcnJlY3QgZnJlZWluZyBvZiBsaXZlIGxvY2tzXFxcIlxcbjE1MzU6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcbjE1MzY6XFx0XFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXFxuMTUzNzpcXHRcXHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxcbjE1Mzg6XFx0XFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xcbjE1Mzk6XFx0XFx0c2VsZWN0IExPQ0tERVBcXG4xNTQwOlxcdFxcdGhlbHBcXG4xNTQxOlxcdFxcdCBUaGlzIGZlYXR1cmUgd2lsbCBjaGVjayB3aGV0aGVyIGFueSBoZWxkIGxvY2sgKHNwaW5sb2NrLCByd2xvY2ssXFxuMTU0MjpcXHRcXHQgbXV0ZXggb3IgcndzZW0pIGlzIGluY29ycmVjdGx5IGZyZWVkIGJ5IHRoZSBrZXJuZWwsIHZpYSBhbnkgb2YgdGhlXFxuMTU0MzpcXHRcXHQgbWVtb3J5LWZyZWVpbmcgcm91dGluZXMgKGtmcmVlKCksIGttZW1fY2FjaGVfZnJlZSgpLCBmcmVlX3BhZ2VzKCksXFxuMTU0NDpcXHRcXHQgdmZyZWUoKSwgZXRjLiksIHdoZXRoZXIgYSBsaXZlIGxvY2sgaXMgaW5jb3JyZWN0bHkgcmVpbml0aWFsaXplZCB2aWFcXG4xNTQ1OlxcdFxcdCBzcGluX2xvY2tfaW5pdCgpL211dGV4X2luaXQoKS9ldGMuLCBvciB3aGV0aGVyIHRoZXJlIGlzIGFueSBsb2NrXFxuMTU0NjpcXHRcXHQgaGVsZCBkdXJpbmcgdGFzayBleGl0LlxcbjE1NDc6XFx0XFxuMTU0ODpcXHRjb25maWcgTE9DS0RFUFxcbjE1NDk6XFx0XFx0Ym9vbFxcbjE1NTA6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcbjE1NTE6XFx0XFx0c2VsZWN0IFNUQUNLVFJBQ0VcXG4xNTUyOlxcdFxcdHNlbGVjdCBLQUxMU1lNU1xcbjE1NTM6XFx0XFx0c2VsZWN0IEtBTExTWU1TX0FMTFxcbjE1NTQ6XFx0XFxuMTU1NTpcXHRjb25maWcgTE9DS0RFUF9TTUFMTFxcbjE1NTY6XFx0XFx0Ym9vbFxcbjE1NTc6XFx0XFxuMTU1ODpcXHRjb25maWcgTE9DS0RFUF9CSVRTXFxuMTU1OTpcXHRcXHRpbnQgXFxcIlNpemUgZm9yIE1BWF9MT0NLREVQX0VOVFJJRVMgKGFzIE50aCBwb3dlciBvZiAyKVxcXCJcXG4xNTYwOlxcdFxcdGRlcGVuZHMgb24gTE9DS0RFUCBcXHUwMDI2XFx1MDAyNiAhTE9DS0RFUF9TTUFMTFxcbjE1NjE6XFx0XFx0cmFuZ2UgMTAgMjRcXG4xNTYyOlxcdFxcdGRlZmF1bHQgMTVcXG4xNTYzOlxcdFxcdGhlbHBcXG4xNTY0OlxcdFxcdCAgVHJ5IGluY3JlYXNpbmcgdGhpcyB2YWx1ZSBpZiB5b3UgaGl0IFxcXCJCVUc6IE1BWF9MT0NLREVQX0VOVFJJRVMgdG9vIGxvdyFcXFwiIG1lc3NhZ2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjA1LjQ3MTM2MDU1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTM1MTI4NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBMb2NraW5nIE1lY2hhbmlzbXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZCB1bmRlcnN0YW5kaW5nIHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGF0IGNvbmRpdGlvbiBvciBzZXQgb2YgY29uZGl0aW9ucyB0cmlnZ2VycyB0aGUgc2VsZWN0aW9uIG9mIGVpdGhlciBgUFJPVkVfTE9DS0lOR2Agb3IgYExPQ0tERVBgLiBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGtleSB2YXJpYWJsZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IGRldGVybWluZSB3aGljaCBsb2NraW5nIG1lY2hhbmlzbSBnZXRzIGFjdGl2YXRlZC4gSXQncyBhYm91dCB0cmFjaW5nIHRoZSBsb2dpYyBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGJyYW5jaGluZyBwb2ludCBhbmQgaG93IHRoZSBzeXN0ZW0gY2hvb3NlcyBiZXR3ZWVuIHRoZXNlIHR3byBkaXN0aW5jdCBhcHByb2FjaGVzLiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byBzZWUgd2h5IGNlcnRhaW4gZGVjaXNpb25zIGFyZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg3NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6MTIuNjA2NDkxMjA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg4NzY3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUk9WRV9MT0NLSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTE0MDE9Y29uZmlnIExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE0MDUtXFxubGliL0tjb25maWcuZGVidWc6MTQwNjpjb25maWcgUFJPVkVfTE9DS0lOR1xcbmxpYi9LY29uZmlnLmRlYnVnLTE0MDctXFx0Ym9vbCBcXFwiTG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjE0Ljg5NTI2NjYwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjAwMDY5ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkZWJ1ZyBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgbGliL0tjb25maWcuZGVidWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTQwNi4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIG1vcmUgaW50cmljYXRlIGRlYnVnIG9wdGlvbnMgcmVzaWRlLCBhbmQgbGlrZWx5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zLCB0aGVpciBkZWZhdWx0cywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgbWF5YmUgc29tZSBoaW50cyBhYm91dCB3aGVyZSB0aGV5J3JlIHVzZWQuIEZyb20gdGhlcmUsIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBpbmNsdWRlcywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSBpbnRvIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgaWYgbmVjZXNzYXJ5LCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6MjMuMDk1MzM5NDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDU6XFx0XFxuMTQwNjpcXHRjb25maWcgUFJPVkVfTE9DS0lOR1xcbjE0MDc6XFx0XFx0Ym9vbCBcXFwiTG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcXFwiXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXFxuMTQwOTpcXHRcXHRzZWxlY3QgTE9DS0RFUFxcbjE0MTA6XFx0XFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXFxuMTQxMTpcXHRcXHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxcbjE0MTI6XFx0XFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xcbjE0MTM6XFx0XFx0c2VsZWN0IERFQlVHX1JXU0VNUyBpZiAhUFJFRU1QVF9SVFxcbjE0MTQ6XFx0XFx0c2VsZWN0IERFQlVHX1dXX01VVEVYX1NMT1dQQVRIXFxuMTQxNTpcXHRcXHRzZWxlY3QgREVCVUdfTE9DS19BTExPQ1xcbjE0MTY6XFx0XFx0c2VsZWN0IFBSRUVNUFRfQ09VTlQgaWYgIUFSQ0hfTk9fUFJFRU1QVFxcbjE0MTc6XFx0XFx0c2VsZWN0IFRSQUNFX0lSUUZMQUdTXFxuMTQxODpcXHRcXHRkZWZhdWx0IG5cXG4xNDE5OlxcdFxcdGhlbHBcXG4xNDIwOlxcdFxcdCBUaGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUga2VybmVsIHRvIHByb3ZlIHRoYXQgYWxsIGxvY2tpbmdcXG4xNDIxOlxcdFxcdCB0aGF0IG9jY3VycyBpbiB0aGUga2VybmVsIHJ1bnRpbWUgaXMgbWF0aGVtYXRpY2FsbHlcXG4xNDIyOlxcdFxcdCBjb3JyZWN0OiB0aGF0IHVuZGVyIG5vIGNpcmN1bXN0YW5jZSBjb3VsZCBhbiBhcmJpdHJhcnkgKGFuZFxcbjE0MjM6XFx0XFx0IG5vdCB5ZXQgdHJpZ2dlcmVkKSBjb21iaW5hdGlvbiBvZiBvYnNlcnZlZCBsb2NraW5nXFxuMTQyNDpcXHRcXHQgc2VxdWVuY2VzIChvbiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIENQVXMsIHJ1bm5pbmcgYW5cXG4xNDI1OlxcdFxcdCBhcmJpdHJhcnkgbnVtYmVyIG9mIHRhc2tzIGFuZCBpbnRlcnJ1cHQgY29udGV4dHMpIGNhdXNlIGFcXG4xNDI2OlxcdFxcdCBkZWFkbG9jay5cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0XFx0IEluIHNob3J0LCB0aGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUga2VybmVsIHRvIHJlcG9ydCBsb2NraW5nXFxuMTQyOTpcXHRcXHQgcmVsYXRlZCBkZWFkbG9ja3MgYmVmb3JlIHRoZXkgYWN0dWFsbHkgb2NjdXIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA1OjIzLjA5NTY0NjE4OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTc5MDQyNDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJ1bWluYXRpb25zIG9uIFJoYXNodGFibGUgYW5kIExvY2tkZXAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYHJoYXNodGFibGVgIGltcGxlbWVudGF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgTE9DS0RFUGAgYW5kIGBQUk9WRV9MT0NLSU5HYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBQUk9WRV9MT0NLSU5HYCBpbXBsaWNpdGx5IHB1bGxzIGluIGBMT0NLREVQYCwgYW5kIGBERUJVR19MT0NLX0FMTE9DYCBkb2VzIHRoZSBzYW1lLiAgVGhhdCBzZWVtcyBsb2dpY2FsLiAgQW5kIGBERUJVR19MT0NLX0FMTE9DYCBhbHNvIGRyYWdzIGluIGBMT0NLREVQYCAtIHRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSBmb3IgdGhlc2UgZGVidWcgYWlkcy5cblxuTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgYENPTkZJR19URVNUX1JIQVNIVEFCTEVgIHNpbmNlIGl0J3MgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQuIEJ1dCB3YWl0LCBgQ09ORklHX1RFU1RfUkhBU0hUQUJMRWAgaXMganVzdCBmb3Igc2VsZi10ZXN0cyEgVGhhdCdzIG5vdCB3aGF0IFN5emthbGxlciBpcyBsb29raW5nIGF0OyBpdCBkZWFscyB3aXRoIHN5c2NhbGxzIGFuZCBub3JtYWwgZXhlY3V0aW9uIHBhdGhzLiAgU28sIG5vLiBJIGNhbiBzYWZlbHkgaWdub3JlIHRoYXQuXG5cbk5vdywgYHJoYXNodGFibGVgIGl0c2VsZiBpcyBhIGJ1aWx0LWluIGtlcm5lbCBjb21wb25lbnQuIFRoYXQncyBhIGtleSBwb2ludC4gQW5kLCBhaCB5ZXMsIGhlcmUgaXQgaXM6IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgYXJlIHdoYXQgYWN0dWFsbHkgKmVuYWJsZSogdGhlIGxvY2sgZGVwZW5kZW5jeSB0cmFja2luZyBmb3IgdGhlIHJoYXNodGFibGUga2V5czsgc3BlY2lmaWNhbGx5IGJlY2F1c2UgYCNpZmRlZiBDT05GSUdfTE9DS0RFUGAgZ3VhcmRzIHRob3NlIHNlY3Rpb25zLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gTG9va2luZyBpbiBgcmhhc2h0YWJsZS10eXBlcy5oYCBJIGNhbiBzZWUgdGhpczpcblxuYGBgY1xuc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIHtcbiNpZmRlZiBDT05GSUdfTE9DS0RFUFxuXHRzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG9ja19rZXk7XG5cdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBtdXRleF9rZXk7XG5cdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5O1xuI2VuZGlmXG59O1xuYGBgXG5cblRoaXMgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGNvbWUgdG9nZXRoZXIuICBBbmQgdGhlbiwgaW4gYGxpYi9yaGFzaHRhYmxlLmNgOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX0xPQ0tERVBcblx0aHQtXHUwMDNlbG9ja2RlcF9rZXkgPSBcdTAwMjZrZXlzLVx1MDAzZWJ1Y2tldF9rZXk7XG4jZW5kaWZcbmBgYFxuXG5gaHQtXHUwMDNlbG9ja2RlcF9rZXlgIGlzIGFzc2lnbmVkICpvbmx5KiB3aGVuIGBDT05GSUdfTE9DS0RFUGAgaXMgZGVmaW5lZC4gVGhpcyBpcyB3aGF0J3MgcHJvdmlkaW5nIHRoZSBrZXkgaW5mb3JtYXRpb24uXG5cbkZ1cnRoZXJtb3JlLCBpbiBgYnVja2V0X3RhYmxlX2FsbG9jYDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19MT0NLREVQXG5cdC8qIGJpdGxvY2tzIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMiBvciBtb3JlICovXG5cdGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2dGJsLVx1MDAzZWRlcF9tYXAsIFwicmhhc2h0YWJsZV9idWNrZXRcIiwgaHQtXHUwMDNlbG9ja2RlcF9rZXksIDApO1xuI2VuZGlmXG5gYGBcblxuSGVyZSdzIHRoZSBjcnVjaWFsIHBvaW50OiAgYHRibC1cdTAwM2VkZXBfbWFwYCBpcyBpbml0aWFsaXplZCAqb25seSogd2hlbiBgQ09ORklHX0xPQ0tERVBgIGlzIGVuYWJsZWQuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nIHJlbGllcyBvbiBgTE9DS0RFUGAuXG5cbkFuZCwgZmluYWxseSwgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYDpcblxuYGBgY1xuc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9sb2NrX25lc3RlZChzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsXG5cdFx0XHRcdFx0c3RydWN0IHJoYXNoX2xvY2tfaGVhZCBfX3JjdSAqKmJ1Y2tldCxcblx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXG57XG5cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5cblx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuXHRiaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYnVja2V0KTtcblx0bG9ja19hY3F1aXJlX2V4Y2x1c2l2ZShcdTAwMjZ0YmwtXHUwMDNlZGVwX21hcCwgc3ViY2xhc3MsIDAsIE5VTEwsIF9USElTX0lQXyk7XG5cdHJldHVybiBmbGFncztcbn1cbmBgYFxuXG5Mb29raW5nIGF0IGByaHRfbG9ja19uZXN0ZWRgLCB0aGUgY2FsbCB0byBgbG9ja19hY3F1aXJlX2V4Y2x1c2l2ZWAgKmV4cGxpY2l0bHkqIHVzZXMgYHRibC1cdTAwM2VkZXBfbWFwYC4gIEFuZCwgZ29pbmcgYmFjayB0byB0aGUgZGVmaW5pdGlvbiwgYHRibC1cdTAwM2VkZXBfbWFwYCBpcyBvbmx5IHByZXNlbnQgd2hlbiBgQ09ORklHX0xPQ0tERVBgIGlzIGVuYWJsZWQuXG5cblRoZXJlZm9yZSwgdGhlIHByZXNlbmNlIG9mIGBMT0NLREVQYCAqZGlyZWN0bHkqIGltcGFjdHMgdGhlIGxvY2tpbmcgYmVoYXZpb3IgaW4gdGhlIHJoYXNodGFibGUgY29kZSEgSXQgYWRkcyB0aGUgbG9jayBkZXBlbmRlbmN5IHRyYWNraW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wbGljYXRpb25zLiBBbmQgbm93IEkgbmVlZCB0byBjaGVjayB0aGUgZnVsbCBgc3RydWN0IGJ1Y2tldF90YWJsZWAgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNToyOS4wNzQ2OTI3MDFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjAwMDU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNToyOS4xNTc5MDc2NDhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTUyMjI1MTA5NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIGBzdHJ1Y3QgYnVja2V0X3RhYmxlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgb24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBidWNrZXRfdGFibGVgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gd29ya2luZyB3aXRoIHNvbWUga2luZCBvZiBoYXNoIHRhYmxlIG9yIHNpbWlsYXIgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB0aGUgYGJ1Y2tldF90YWJsZWAgaXMgY2VudHJhbCB0byBpdHMgaW1wbGVtZW50YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCdzIGRlZmluZWQuIElzIGl0IGluIGEgaGVhZGVyIGZpbGU/IEEgc3BlY2lmaWMgc291cmNlIGZpbGU/IElmIEkgaGF2ZSBzb21lIGNvbnRleHQgLSB3aGljaCBwcm9qZWN0IEkgYW0gaW4gLSBJIGNvdWxkIGd1ZXNzLiBCdXQgd2l0aG91dCBpdCwgSSdsbCBuZWVkIHRvIGRvIHNvbWUgZGlnZ2luZy4gVGltZSB0byBicmVhayBvdXQgdGhlIHRvb2xzLiBgZ3JlcGAsIGBmaW5kYCwgb3IgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCBJREUgc2VhcmNoLCBtYXliZSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIG9yIHNlbWFudGljIGFuYWx5c2lzLCBpcyB0aGUgaW1tZWRpYXRlIGRpcmVjdGlvbiBJJ2xsIGdvLiBNeSBvYmplY3RpdmU/IExvY2F0ZSB0aGUgZGVmaW5pdGl2ZSBkZWNsYXJhdGlvbiwgcHJlZmVyYWJseSBpbmNsdWRpbmcgYW55IHJlbGV2YW50IGNvbW1lbnRzLCB0eXBlZGVmcywgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYnVpbGRpbmcgYmxvY2tzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEFybWVkIHdpdGggdGhhdCwgSSBjYW4gZ2V0IGRvd24gdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTo0NC4zODA0MjEzMzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDYwMTcyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJ1Y2tldF90YWJsZSBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaD00Nz1zdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIHt9O1xcbi0tXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtNzUtICovXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmg6NzY6c3RydWN0IGJ1Y2tldF90YWJsZSB7XFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgtNzctXFx0dW5zaWduZWQgaW50XFx0XFx0c2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDU6NDYuOTI2NDQzNTgxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMDExODY3OTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBzcGVjaWZpZWQgbGluZXMgb2YgY29kZTpcblxuKipEaXZpbmcgaW50byBgcmhhc2h0YWJsZS5oYCDigJMgTGluZXMgNzUtMTAwKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyA3NS0xMDAgb2YgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYC4gSSdtIGd1ZXNzaW5nIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgcGVyaGFwcyBzb21lIGZ1bmRhbWVudGFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSByZXNpemFibGUgaGFzaHRhYmxlIGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgYHJoYXNodGFibGVgIHN0cnVjdCBpdHNlbGYgZGVmaW5lZCwgYWxvbmcgd2l0aCBtYXliZSByZWxhdGVkIHN0cnVjdHMgbGlrZSBidWNrZXQgaGVhZHMsIG5vZGUgc3RydWN0dXJlcywgb3IgbWV0YWRhdGEgZm9yIGhhc2gga2V5IG1hbmFnZW1lbnQuIEknbSBhbHNvIGFudGljaXBhdGluZyBmaW5kaW5nIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBoYXNoIGtleSBzdHJ1Y3R1cmUsIGFuZCBwb3NzaWJsZSBmdW5jdGlvbiBwcm90b3R5cGVzIHJlbGF0aW5nIHRvIGtleSBsb29rdXBzLCBpbnNlcnRpb25zLCBhbmQgZGVsZXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMsIHNvIEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgYmFzaWNzLiBMb29raW5nIGZvcndhcmQgdG8gZ2V0dGluZyB0byB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHRoZXNlIHRhYmxlcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1MTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTo1Ni45MzgzMTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NTpcXHQgKi9cXG4gIDc2OlxcdHN0cnVjdCBidWNrZXRfdGFibGUge1xcbiAgNzc6XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0c2l6ZTtcXG4gIDc4OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdG5lc3Q7XFxuICA3OTpcXHRcXHR1MzJcXHRcXHRcXHRoYXNoX3JuZDtcXG4gIDgwOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR3YWxrZXJzO1xcbiAgODE6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1O1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRzdHJ1Y3QgYnVja2V0X3RhYmxlIF9fcmN1ICpmdXR1cmVfdGJsO1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRzdHJ1Y3QgbG9ja2RlcF9tYXBcXHRkZXBfbWFwO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHRzdHJ1Y3Qgcmhhc2hfbG9ja19oZWFkIF9fcmN1ICpidWNrZXRzW10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4gIDg4OlxcdH07XFxuICA4OTpcXHRcXG4gIDkwOlxcdC8qXFxuICA5MTpcXHQgKiBOVUxMU19NQVJLRVIoKSBleHBlY3RzIGEgaGFzaCB2YWx1ZSB3aXRoIHRoZSBsb3dcXG4gIDkyOlxcdCAqIGJpdHMgbW9zdGx5IGxpa2VseSB0byBiZSBzaWduaWZpY2FudCwgYW5kIGl0IGRpc2NhcmRzXFxuICA5MzpcXHQgKiB0aGUgbXNiLlxcbiAgOTQ6XFx0ICogV2UgZ2l2ZSBpdCBhbiBhZGRyZXNzLCBpbiB3aGljaCB0aGUgYm90dG9tIGJpdCBpc1xcbiAgOTU6XFx0ICogYWx3YXlzIDAsIGFuZCB0aGUgbXNiIG1pZ2h0IGJlIHNpZ25pZmljYW50LlxcbiAgOTY6XFx0ICogU28gd2Ugc2hpZnQgdGhlIGFkZHJlc3MgZG93biBvbmUgYml0IHRvIGFsaWduIHdpdGhcXG4gIDk3OlxcdCAqIGV4cGVjdGF0aW9ucyBhbmQgYXZvaWQgbG9zaW5nIGEgc2lnbmlmaWNhbnQgYml0LlxcbiAgOTg6XFx0ICpcXG4gIDk5OlxcdCAqIFdlIG5ldmVyIHN0b3JlIHRoZSBOVUxMU19NQVJLRVIgaW4gdGhlIGhhc2ggdGFibGVcXG4gMTAwOlxcdCAqIGl0c2VsZiBhcyB3ZSBuZWVkIHRoZSBsc2IgZm9yIGxvY2tpbmcuXFxuIDEwMTpcXHQgKiBJbnN0ZWFkIHdlIHN0b3JlIGEgTlVMTFxcbiAxMDI6XFx0ICovXFxuIDEwMzpcXHQjZGVmaW5lXFx0UkhUX05VTExTX01BUktFUihwdHIpXFx0XFxcXFxcbiAxMDQ6XFx0XFx0KCh2b2lkICopTlVMTFNfTUFSS0VSKCgodW5zaWduZWQgbG9uZykgKHB0cikpIFxcdTAwM2VcXHUwMDNlIDEpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNTo1Ni45Mzg0NTk1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NDI1OTAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gcmhhc2h0YWJsZSBMb2NrIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBsb2NrIGRlcGVuZGVuY2llcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIGByaGFzaHRhYmxlYCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGZ1enppbmcuIEkgc2VlIHRoYXQgdGhlIGBidWNrZXRfdGFibGVgIHN0cnVjdCBoYXMgYSBgbG9ja2RlcF9tYXBgIHdoaWNoIHRyYWNrcyBkZXBlbmRlbmNpZXMsIGJ1dCBpdCdzIG9ubHkgYWN0aXZlIGlmIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIFJlbWVtYmVyaW5nIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgYW5kIGluc3RlYWQgdGFyZ2V0IGZlYXR1cmUtc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgcHJlc2VudCBhIGNoYWxsZW5nZSwgc28gSSBuZWVkIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgY2FsbGVycyB0aGF0IGV4ZXJjaXNlIHRoZW0uXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY2hhbmdlZCBvciBlbnRyeXBvaW50IGZ1bmN0aW9ucyBpbiBgbGliL3JoYXNodGFibGUuY2AuIEkgZm91bmQgdGhlc2UgZnVuY3Rpb25zOiBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCwgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgLCBhbmQgYHJodF9kZWZlcnJlZF93b3JrZXJgLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgZmlsZSwgYW5kIEkndmUgbG9va2VkIGludG8gYHJoYXNodGFibGVfaW5zZXJ0X3Nsb3dgLiBJJ3ZlIG5vdGVkIHRoYXQgc2V2ZXJhbCByZWhhc2hpbmcgZnVuY3Rpb25zLCBsaWtlIGByaGFzaHRhYmxlX3JlaGFzaF9vbmVgLCBgcmhhc2h0YWJsZV9yZWhhc2hfY2hhaW5gLCBgcmhhc2h0YWJsZV9yZWhhc2hfdGFibGVgLCBhbmQgYHJoYXNodGFibGVfcmVoYXNoX2FsbG9jYCBhcmUgZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgbWVhbnMgdGhleSBtaWdodCBub3QgYmUgZGlyZWN0bHkgYWRkcmVzc2FibGUgc3ltYm9scy4gSG93ZXZlciwgSSBjb25maXJtZWQgdGhhdCBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgKm5vdCogaW5saW5lZCBiZWNhdXNlIGl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYSB3b3JrIHF1ZXVlLCBtYWtpbmcgaXQgYSB2YWxpZCBzeW1ib2wgaW4gYHZtbGludXhgLiBUaGUgb3RoZXIgdHdvIChgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgKSBhcmUgRVhQT1JUX1NZTUJPTF9HUEwsIHNvIGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUuXG5cbmByaGFzaHRhYmxlX2luc2VydF9zbG93YCBpdHNlbGYgY2FsbHMgYHJoYXNodGFibGVfdHJ5X2luc2VydGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJodF9sb2NrYC4gYHJodF9sb2NrYCBpcyB3aGVyZSB0aGUgbG9ja2luZyBvY2N1cnMgYW5kIGlzIHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCB0aGlzLCB3aGljaCB3aWxsIGxldCBtZSBnZXQgYXQgdGhlIGxvY2suIExvb2tpbmcgYXQgYHJodF9sb2NrX25lc3RlZGAgd2hpY2ggYHJodF9sb2NrYCBjYWxscywgSSBzZWUgdGhhdCB3aXRoaW4gYGxpYi9yaGFzaHRhYmxlLmNgOiBgcmhhc2h0YWJsZV9yZWhhc2hfb25lYCBhbmQgYHJoYXNodGFibGVfcmVoYXNoX2NoYWluYCBjYWxsIG5lc3RlZCB2ZXJzaW9ucyBvZiB0aGUgbG9jay4gQWxzbywgYHJodF9kZWZlcnJlZF93b3JrZXJgIGNhbGxzIGByaGFzaHRhYmxlX3JlaGFzaF90YWJsZWAsIHdoaWNoIGNhbGxzIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zLCBhbmQgYWxzbyB0YWtlcyBhIG11dGV4IGxvY2sgYmVmb3JlIHRoYXQuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiBgcmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95YCB0YWtlcyBhbnkgbG9ja3MsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjowMi44ODEwNTM5NDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9yaGFzaHRhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0NixcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI0NjpcXHR2b2lkIHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuMTI0NzpcXHRcXHRcXHRcXHRcXHQgdm9pZCAoKmZyZWVfZm4pKHZvaWQgKnB0ciwgdm9pZCAqYXJnKSxcXG4xMjQ4OlxcdFxcdFxcdFxcdFxcdCB2b2lkICphcmcpXFxuMTI0OTpcXHR7XFxuMTI1MDpcXHRcXHRzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsICpuZXh0X3RibDtcXG4xMjUxOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbjEyNTI6XFx0XFxuMTI1MzpcXHRcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZodC1cXHUwMDNlcnVuX2lycV93b3JrKTtcXG4xMjU0OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmh0LVxcdTAwM2VydW5fd29yayk7XFxuMTI1NTpcXHRcXG4xMjU2OlxcdFxcdC8qXFxuMTI1NzpcXHRcXHQgKiBEbyBOT1QgdGFrZSBodC1cXHUwMDNlbXV0ZXggaGVyZS4gVGhlIHJlaGFzaCB3b3JrZXIgZXN0YWJsaXNoZXNcXG4xMjU4OlxcdFxcdCAqIGh0LVxcdTAwM2VtdXRleCAtXFx1MDAzZSBmc19yZWNsYWltIHZpYSBHRlBfS0VSTkVMIGJ1Y2tldCBhbGxvY2F0aW9uIHVuZGVyXFxuMTI1OTpcXHRcXHQgKiB0aGUgbXV0ZXg7IGNhbGxlcnMgb24gdGhlIHJlY2xhaW0gcGF0aCAoZS5nLiBzaW1wbGVfeGF0dHJfaHRfZnJlZSgpXFxuMTI2MDpcXHRcXHQgKiBmcm9tIGV2aWN0KCkgdW5kZXIgdGhlIGRjYWNoZSBzaHJpbmtlciBmb3Igc2htZW0va2VybmZzL3BpZGZzXFxuMTI2MTpcXHRcXHQgKiBpbm9kZXMpIHdvdWxkIG90aGVyd2lzZSBjbG9zZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3lcXG4xMjYyOlxcdFxcdCAqIGZzX3JlY2xhaW0gLVxcdTAwM2UgaHQtXFx1MDAzZW11dGV4LlxcbjEyNjM6XFx0XFx0ICovXFxuMTI2NDpcXHRcXHR0YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGh0LVxcdTAwM2V0YmwpO1xcbjEyNjU6XFx0cmVzdGFydDpcXG4xMjY2OlxcdFxcdGlmIChmcmVlX2ZuKSB7XFxuMTI2NzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGJsLVxcdTAwM2VzaXplOyBpKyspIHtcXG4xMjY4OlxcdFxcdFxcdFxcdHN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0O1xcbjEyNjk6XFx0XFxuMTI3MDpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMjcxOlxcdFxcdFxcdFxcdGZvciAocG9zID0gcmh0X3B0cl9leGNsdXNpdmUocmh0X2J1Y2tldCh0YmwsIGkpKSxcXG4xMjcyOlxcdFxcdFxcdFxcdCAgICAgbmV4dCA9ICFyaHRfaXNfYV9udWxscyhwb3MpID9cXG4xMjczOlxcdFxcdFxcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLVxcdTAwM2VuZXh0KSA6IE5VTEw7XFxuMTI3NDpcXHRcXHRcXHRcXHQgICAgICFyaHRfaXNfYV9udWxscyhwb3MpO1xcbjEyNzU6XFx0XFx0XFx0XFx0ICAgICBwb3MgPSBuZXh0LFxcbjEyNzY6XFx0XFx0XFx0XFx0ICAgICBuZXh0ID0gIXJodF9pc19hX251bGxzKHBvcykgP1xcbjEyNzc6XFx0XFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtXFx1MDAzZW5leHQpIDogTlVMTClcXG4xMjc4OlxcdFxcdFxcdFxcdFxcdHJoYXNodGFibGVfZnJlZV9vbmUoaHQsIHBvcywgZnJlZV9mbiwgYXJnKTtcXG4xMjc5OlxcdFxcdFxcdH1cXG4xMjgwOlxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0bmV4dF90YmwgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHRibC1cXHUwMDNlZnV0dXJlX3RibCk7XFxuMTI4MzpcXHRcXHRidWNrZXRfdGFibGVfZnJlZSh0YmwpO1xcbjEyODQ6XFx0XFx0aWYgKG5leHRfdGJsKSB7XFxuMTI4NTpcXHRcXHRcXHR0YmwgPSBuZXh0X3RibDtcXG4xMjg2OlxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4xMjg3OlxcdFxcdH1cXG4xMjg4OlxcdH1cXG4xMjg5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveSk7XFxuMTI5MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MDIuODgxMjE0NTU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NDg1NjA4MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUmF0aW9uYWxlOiBSaGFzaHRhYmxlIExvY2tpbmcgXHUwMDI2IExvY2tkZXAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGlzIHBhdGNoIHRvdWNoaW5nIGBsaWIvcmhhc2h0YWJsZS5jYCwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb21tZW50IGluIGByaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3lgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUsIGhpZ2hsaWdodGluZyB0aGUgY3JpdGljYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiByaGFzaHRhYmxlJ3MgbG9ja2luZywgYGZzX3JlY2xhaW1gLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLiBUaGF0J3MgYSBodWdlIHJlZCBmbGFnIGZvciBsb2NrZGVwLCBhbmQgaXQgbWVhbnMgd2UgbmVlZCB0byBiZSBleHRyYSBjYXV0aW91cyBpbiBob3cgd2UgdGFyZ2V0IHRoaXMuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiByZWZhY3RvcmluZyB0aGUgbG9ja2RlcCBrZXkgaW5pdGlhbGl6YXRpb24sIGdvaW5nIGZyb20gYSBzaW5nbGUgc2hhcmVkIGtleSB0byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzLiAgSXQgYWxzbyByZWNvbmZpZ3VyZXMgdGhlIGxvY2sgbmVzdGluZyBzdWJjbGFzc2VzIGZvciBgdGJsLVx1MDAzZWRlcF9tYXBgIGFuZCBgaHQtXHUwMDNlbXV0ZXhgLiBUaGlzIGlzIGFsbCBhYm91dCBsb2NrIHZhbGlkYXRpb24sIGFuZCBhbnl0aGluZyB0aGF0IG1lc3NlcyB3aXRoIGxvY2tkZXAgaW4gYSBjb3JlIGRhdGEgc3RydWN0dXJlIGxpa2UgYHJoYXNodGFibGVgICpzY3JlYW1zKiBcIndvcnRoIGZ1enppbmcuXCIgUmhhc2h0YWJsZXMgYXJlIGV2ZXJ5d2hlcmUg4oCTIG5ldHdvcmtpbmcsIGZpbGVzeXN0ZW1zLCBJUEMsIHlvdSBuYW1lIGl0IOKAkyBzbyBhbnkgbG9ja2luZyByZWdyZXNzaW9uIGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBkb3duc3RyZWFtIGltcGFjdC5cblxuUmVnYXJkaW5nIHJlbGV2YW50IGNvbmZpZ3MsIHRoZSBjaGFuZ2VkIGNvZGUgdXRpbGl6ZXMgYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCwgd2hpY2ggaXMgc3RhbmRhcmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gYGxpYi9yaGFzaHRhYmxlLmNgIGlzIGFsd2F5cyBidWlsdCwgc28gd2UgY2FuIHJlbGlhYmx5IGluY2x1ZGUgdGhlc2UuICBTaW5jZSBgUFJPVkVfTE9DS0lOR2AgaW1wbGljaXRseSBpbmNsdWRlcyBgTE9DS0RFUGAsIHdlJ3JlIHNvbGlkIHRoZXJlLlxuXG5Ob3csIGZvciBzeW1ib2wgc2VsZWN0aW9uLCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGluIGBsaWIvcmhhc2h0YWJsZS5jYDogYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAsIGBfX3JobHRhYmxlX2luaXRfbm9wcm9mYCwgYW5kIGByaHRfZGVmZXJyZWRfd29ya2VyYC4gSSBrbm93IHRoYXQgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgIGlzIGEgbWFjcm8sIGJ1dCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgIGFyZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMuIEkndmUgYWxzbyBpbmNsdWRlZCBgcmhhc2h0YWJsZV9pbnNlcnRfc2xvd2AgYmVjYXVzZSBpdCBleGVyY2lzZXMgaW5zZXJ0aW9uIGFuZCB0aGUgYnVja2V0IGJpdGxvY2sgbG9naWMgYW5kIGNhbGxzIGByaHRfbG9ja2AuIEkgYnJpZWZseSBjaGVja2VkIGBsaWIvdGVzdF9yaGFzaHRhYmxlLmNgLCBidXQgdGhlIGNoYW5nZXMgdGhlcmUgYXJlIGlzb2xhdGVkIHRvIGEgdGVzdCBtb2R1bGUncyBgcHJpbnRfaHRgIGZ1bmN0aW9uLCBhbmQgbm90IGNyaXRpY2FsIGZvciBvdXIgc3l6a2FsbGVyIGZvY3VzLlxuXG5TbyB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbnMgd2l0aGluIHRoZSByaGFzaHRhYmxlIGNvZGUsIGRpcmVjdGx5IGltcGFjdGluZyBsb2NrIHZhbGlkYXRpb24uIEFueSBzdWJ0bGUgZXJyb3IgaW4gdGhlc2UgY2hhbmdlcyBjb3VsZCBleHBvc2UgZGVhZGxvY2tzIG9yIHJlZ3Jlc3Npb25zIHVuZGVyIGxvY2tkZXAuIFRoYXQncyB3aHkgSSdtIGNvbmZpZGVudCBhYm91dCB0aGVzZSBzZXR0aW5ncyBmb3IgdGhlIGZ1enppbmcgcnVuOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogdHJ1ZVxuKiAgICoqUmVhc29uaW5nKio6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgKGBsaWIvcmhhc2h0YWJsZS5jYCBhbmQgYGluY2x1ZGUvbGludXgvcmhhc2h0YWJsZSouaGApLiBTcGVjaWZpY2FsbHksIGl0IHNlcGFyYXRlcyB0aGUgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIGhhc2ggdGFibGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzYCksIGFuZCBhZGp1c3RzIHRoZSBsb2NrZGVwIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIGB0YmwtXHUwMDNlZGVwX21hcGAgYW5kIGBodC1cdTAwM2VtdXRleGAuIFJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgZmlsZXN5c3RlbXMsIGFuZCBJUEMuIENoYW5nZXMgaW4gbG9ja2RlcCBhbm5vdGF0aW9ucyBhbmQgbG9ja2luZyBydWxlcyBkaXJlY3RseSBpbXBhY3QgbG9jayB2YWxpZGF0aW9uIGFuZCBjYW4gZXhwb3NlIGxhdGVudCBkZWFkbG9ja3Mgb3IgcmVncmVzc2lvbnMgdW5kZXIgbG9ja2RlcC5cbiogICAqKkVuYWJsZUNvbmZpZ3MqKjogXFxbXCJQUk9WRVxcX0xPQ0tJTkdcIiwgXCJMT0NLREVQXCJdXG4qICAgKipGb2N1c1N5bWJvbHMqKjogXFxbXCJcXF9cXF9yaGFzaHRhYmxlXFxfaW5pdFxcX25vcHJvZlwiLCBcIlxcX1xcX3JobHRhYmxlXFxfaW5pdFxcX25vcHJvZlwiLCBcInJodFxcX2RlZmVycmVkXFxfd29ya2VyXCIsIFwicmhhc2h0YWJsZVxcX2luc2VydFxcX3Nsb3dcIl1cblxuV2l0aCBldmVyeXRoaW5nIGNoZWNrZWQgYW5kIHZlcmlmaWVkLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTk2LCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjoxNy4zNjY4MjU5NDJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ4NDE3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3JoYXNodGFibGVfaW5pdF9ub3Byb2ZcIixcbiAgICBcIl9fcmhsdGFibGVfaW5pdF9ub3Byb2ZcIixcbiAgICBcInJodF9kZWZlcnJlZF93b3JrZXJcIixcbiAgICBcInJoYXNodGFibGVfaW5zZXJ0X3Nsb3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgbG9ja2RlcCBjbGFzc2lmaWNhdGlvbiBmb3Igcmhhc2h0YWJsZXMgaW4gbGliL3JoYXNodGFibGUuYyBhbmQgaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlKi5oLiBJdCBzZXBhcmF0ZXMgdGhlIHByZXZpb3VzbHkgc2hhcmVkIGxvY2tkZXAga2V5IGludG8gZGlzdGluY3Qga2V5cyBmb3IgdGhlIG11dGV4LCBzcGlubG9jaywgYW5kIGJ1Y2tldCBiaXRsb2NrcyAoc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzKSwgYW5kIHVwZGF0ZXMgdGhlIG5lc3Rpbmcgc3ViY2xhc3NlcyB1c2VkIHdoZW4gYWNxdWlyaW5nIHRoZSBidWNrZXQgYml0bG9jayBtYXAgYW5kIHRhYmxlIG11dGV4LiBTaW5jZSByaGFzaHRhYmxlcyBhcmUgaGVhdmlseSB1c2VkIGFjcm9zcyBjb3JlIG5ldHdvcmtpbmcsIElQQywgYW5kIGZpbGVzeXN0ZW1zLCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlc2UgbG9ja2luZyBhbmQgYW5ub3RhdGlvbiBjaGFuZ2VzIGRvIG5vdCBjYXVzZSBsb2NrZGVwIHNwbGF0cyBvciB1bmNvdmVyIGxhdGVudCBsb2NrIG9yZGVyaW5nIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcmhhc2h0YWJsZV9pbml0X25vcHJvZlwiLFxuICAgIFwiX19yaGx0YWJsZV9pbml0X25vcHJvZlwiLFxuICAgIFwicmh0X2RlZmVycmVkX3dvcmtlclwiLFxuICAgIFwicmhhc2h0YWJsZV9pbnNlcnRfc2xvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBsb2NrZGVwIGNsYXNzaWZpY2F0aW9uIGZvciByaGFzaHRhYmxlcyBpbiBsaWIvcmhhc2h0YWJsZS5jIGFuZCBpbmNsdWRlL2xpbnV4L3JoYXNodGFibGUqLmguIEl0IHNlcGFyYXRlcyB0aGUgcHJldmlvdXNseSBzaGFyZWQgbG9ja2RlcCBrZXkgaW50byBkaXN0aW5jdCBrZXlzIGZvciB0aGUgbXV0ZXgsIHNwaW5sb2NrLCBhbmQgYnVja2V0IGJpdGxvY2tzIChzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMpLCBhbmQgdXBkYXRlcyB0aGUgbmVzdGluZyBzdWJjbGFzc2VzIHVzZWQgd2hlbiBhY3F1aXJpbmcgdGhlIGJ1Y2tldCBiaXRsb2NrIG1hcCBhbmQgdGFibGUgbXV0ZXguIFNpbmNlIHJoYXNodGFibGVzIGFyZSBoZWF2aWx5IHVzZWQgYWNyb3NzIGNvcmUgbmV0d29ya2luZywgSVBDLCBhbmQgZmlsZXN5c3RlbXMsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGVzZSBsb2NraW5nIGFuZCBhbm5vdGF0aW9uIGNoYW5nZXMgZG8gbm90IGNhdXNlIGxvY2tkZXAgc3BsYXRzIG9yIHVuY292ZXIgbGF0ZW50IGxvY2sgb3JkZXJpbmcgdmlvbGF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MTcuNTExNjc3MDk4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY4NjY2MDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjE3LjUxMjE2NTM3OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY4Njg2MTY2NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwIGFubm90YXRpb25zIHdpdGhpbiByaGFzaHRhYmxlIGJ5IGludHJvZHVjaW5nIGBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIHRvIHByb3ZpZGUgZGlzdGluY3QgYGxvY2tfY2xhc3Nfa2V5YCBzdHJ1Y3R1cmVzIGZvciB0aGUgc3BpbmxvY2ssIG11dGV4LCBhbmQgYnVja2V0IGJpdGxvY2sgKHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2Ygc2hhcmluZyBhIHNpbmdsZSBsb2NrZGVwIGtleSB3aXRoIG1hbnVhbCBzdWJjbGFzcyBvZmZzZXRzKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSByZWxhdGVkIHRvIGxvY2tkZXAgdHJhY2tpbmcgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbjpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBldmFsdWF0ZWQgaW4gYnJhbmNoaW5nIGxvZ2ljLiBUaGUgbG9ja2RlcCBrZXlzIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCB2YXJpYWJsZXMgaW5zaWRlIG1hY3JvIHdyYXBwZXJzIChgcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmApLCByZXNpZGluZyBpbiBCU1MuXFxuMi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIGRhdGEgYnVmZmVycywgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgc2VyaWFsaXphdGlvbi5cXG4zLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ1Z3MgaW4gbG9ja2luZyBoaWVyYXJjaHkgYW5kIGNsYXNzIGFzc2lnbm1lbnRzIGFyZSB0cmFja2VkIGRpcmVjdGx5IGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLlxcblxcbkNvbnNlcXVlbnRseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NmQ2NGMxZWU2M2E2NGI4ZGQyNDRiN2Y5MGE5MGQxZGIwMjBkOTVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDc6MDI6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5pbmRleCAwZTFiMTcyYTRmNmNiLi5hZmJjMTJiYTcxZjViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oXG5AQCAtNzAsNiArNzAsMTQgQEAgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHtcbiBcdHJodF9vYmpfY21wZm5fdFx0XHRvYmpfY21wZm47XG4gfTtcbiBcbitzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMge1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK1x0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvY2tfa2V5O1xuK1x0c3RydWN0IGxvY2tfY2xhc3Nfa2V5IG11dGV4X2tleTtcbitcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSBidWNrZXRfa2V5O1xuKyNlbmRpZlxuK307XG4rXG4gLyoqXG4gICogc3RydWN0IHJoYXNodGFibGUgLSBIYXNoIHRhYmxlIGhhbmRsZVxuICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZVxuQEAgLTE0MSwyNCArMTQ5LDc3IEBAIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIge1xuIFxuIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuIFx0XHQgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7XG4rXHRcdCAgICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpO1xuICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zKVx0XHRcdFx0XFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4tXHRzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5O1x0XHRcdFx0XFxcbitcdHN0YXRpYyBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgX19rZXlzO1x0XHRcdFxcXG4gXHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcdTAwMjZfX2tleSk7XHRcdFx0XFxcbitcdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcdTAwMjZfX2tleXMpO1x0XHRcdFxcXG4gfSlcbitcbisvKipcbisgKiByaGFzaHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggdGFibGVcbisgKiBAaHQ6XHRcdGhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbisgKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4rICpcbisgKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uXG4rICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXG4rICogZml4ZWQgbGVuZ3RoIGtleTpcbisgKlxuKyAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xuKyAqIHN0cnVjdCB0ZXN0X29iaiB7XG4rICpcdGludFx0XHRcdGtleTtcbisgKlx0dm9pZCAqXHRcdFx0bXlfbWVtYmVyO1xuKyAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbisgKiB9O1xuKyAqXG4rICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcbisgKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbisgKlx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXG4rICpcdC5rZXlfbGVuID0gc2l6ZW9mKGludCksXG4rICpcdC5oYXNoZm4gPSBqaGFzaCxcbisgKiB9O1xuKyAqXG4rICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzXG4rICogc3RydWN0IHRlc3Rfb2JqIHtcbisgKlx0Wy4uLl1cbisgKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4rICogfTtcbisgKlxuKyAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxuKyAqIHtcbisgKlx0c3RydWN0IHRlc3Rfb2JqICpvYmogPSBkYXRhO1xuKyAqXG4rICpcdHJldHVybiBbLi4uIGhhc2ggLi4uXTtcbisgKiB9XG4rICpcbisgKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuKyAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuKyAqXHQuaGFzaGZuID0gamhhc2gsXG4rICpcdC5vYmpfaGFzaGZuID0gbXlfaGFzaF9mbixcbisgKiB9O1xuKyAqL1xuICNkZWZpbmUgcmhhc2h0YWJsZV9pbml0KC4uLilcdGFsbG9jX2hvb2tzKHJoYXNodGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxuIFx0XHQgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHQgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTtcbitcdFx0ICBzdHJ1Y3Qgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXMgKmtleXMpO1xuICNkZWZpbmUgcmhsdGFibGVfaW5pdF9ub3Byb2YoaGx0LCBwYXJhbXMpXHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi1cdHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7XHRcdFx0XHRcXFxuK1x0c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7XHRcdFx0XFxcbiBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLVx0X19yaGx0YWJsZV9pbml0X25vcHJvZihobHQsIHBhcmFtcywgXHUwMDI2X19rZXkpO1x0XHRcdFxcXG4rXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcdTAwMjZfX2tleXMpO1x0XHRcdFxcXG4gfSlcbitcbisvKipcbisgKiByaGx0YWJsZV9pbml0IC0gaW5pdGlhbGl6ZSBhIG5ldyBoYXNoIGxpc3QgdGFibGVcbisgKiBAaGx0Olx0aGFzaCBsaXN0IHRhYmxlIHRvIGJlIGluaXRpYWxpemVkXG4rICogQHBhcmFtczpcdGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuKyAqXG4rICogSW5pdGlhbGl6ZXMgYSBuZXcgaGFzaCBsaXN0IHRhYmxlLlxuKyAqXG4rICogU2VlIGRvY3VtZW50YXRpb24gZm9yIHJoYXNodGFibGVfaW5pdC5cbisgKi9cbiAjZGVmaW5lIHJobHRhYmxlX2luaXQoLi4uKVx0YWxsb2NfaG9va3MocmhsdGFibGVfaW5pdF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuICNlbmRpZiAvKiBfTElOVVhfUkhBU0hUQUJMRV9UWVBFU19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuaW5kZXggNmM1ZTZkOWFjY2JhNy4uZWM4NTNjMWI5YWYzYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUuaFxuQEAgLTMyOCw4ICszMjgsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmh0X2xvY2tfbmVzdGVkKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCxcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilidWNrZXQpO1xuLVx0Lyogc3ViY2xhc3MgMCBpcyB1c2VkIGZvciAtXHUwMDNlbG9jayBhbmQgMSBmb3IgLVx1MDAzZW11dGV4LiAyKyBmb3IgYml0bG9ja3MgKi9cbi1cdGxvY2tfYWNxdWlyZV9leGNsdXNpdmUoXHUwMDI2dGJsLVx1MDAzZWRlcF9tYXAsIHN1YmNsYXNzKzIsIDAsIE5VTEwsIF9USElTX0lQXyk7XG4rXHRsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKFx1MDAyNnRibC1cdTAwM2VkZXBfbWFwLCBzdWJjbGFzcywgMCwgTlVMTCwgX1RISVNfSVBfKTtcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbGliL3JoYXNodGFibGUuYyBiL2xpYi9yaGFzaHRhYmxlLmNcbmluZGV4IDVkYTBlNTNhOGQ0MjMuLjkxOGYxNWEyYWM2OTEgMTAwNjQ0XG4tLS0gYS9saWIvcmhhc2h0YWJsZS5jXG4rKysgYi9saWIvcmhhc2h0YWJsZS5jXG5AQCAtNDMyLDcgKzQzMiw3IEBAIHN0YXRpYyB2b2lkIHJodF9kZWZlcnJlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRodCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgcmhhc2h0YWJsZSwgcnVuX3dvcmspO1xuLVx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIDEpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZodC1cdTAwM2VtdXRleCk7XG4gXG4gXHR0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtXHUwMDNldGJsLCBodCk7XG4gXHR0YmwgPSByaGFzaHRhYmxlX2xhc3RfdGFibGUoaHQsIHRibCk7XG5AQCAtMTEyMiw1MSArMTEyMiw5IEBAIHN0YXRpYyB1MzIgcmhhc2h0YWJsZV9qaGFzaDIoY29uc3Qgdm9pZCAqa2V5LCB1MzIgbGVuZ3RoLCB1MzIgc2VlZClcbiBcdHJldHVybiBqaGFzaDIoa2V5LCBsZW5ndGgsIHNlZWQpO1xuIH1cbiBcbi0vKipcbi0gKiByaGFzaHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggdGFibGVcbi0gKiBAaHQ6XHRcdGhhc2ggdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbi0gKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tICpcbi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uXG4tICogcGFyYW1ldGVycy4gQSB0YWJsZSBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgd2l0aCBhIHZhcmlhYmxlIG9yXG4tICogZml4ZWQgbGVuZ3RoIGtleTpcbi0gKlxuLSAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAxOiBGaXhlZCBsZW5ndGgga2V5c1xuLSAqIHN0cnVjdCB0ZXN0X29iaiB7XG4tICpcdGludFx0XHRcdGtleTtcbi0gKlx0dm9pZCAqXHRcdFx0bXlfbWVtYmVyO1xuLSAqXHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0bm9kZTtcbi0gKiB9O1xuLSAqXG4tICogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHBhcmFtcyA9IHtcbi0gKlx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSxcbi0gKlx0LmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksXG4tICpcdC5rZXlfbGVuID0gc2l6ZW9mKGludCksXG4tICpcdC5oYXNoZm4gPSBqaGFzaCxcbi0gKiB9O1xuLSAqXG4tICogQ29uZmlndXJhdGlvbiBFeGFtcGxlIDI6IFZhcmlhYmxlIGxlbmd0aCBrZXlzXG4tICogc3RydWN0IHRlc3Rfb2JqIHtcbi0gKlx0Wy4uLl1cbi0gKlx0c3RydWN0IHJoYXNoX2hlYWRcdG5vZGU7XG4tICogfTtcbi0gKlxuLSAqIHUzMiBteV9oYXNoX2ZuKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxuLSAqIHtcbi0gKlx0c3RydWN0IHRlc3Rfb2JqICpvYmogPSBkYXRhO1xuLSAqXG4tICpcdHJldHVybiBbLi4uIGhhc2ggLi4uXTtcbi0gKiB9XG4tICpcbi0gKiBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0ge1xuLSAqXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIG5vZGUpLFxuLSAqXHQuaGFzaGZuID0gamhhc2gsXG4tICpcdC5vYmpfaGFzaGZuID0gbXlfaGFzaF9mbixcbi0gKiB9O1xuLSAqL1xuIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuLVx0XHQgICAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXG4tXHRcdCAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuK1x0XHRcdCAgICAgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzICprZXlzKVxuIHtcbiBcdHN0cnVjdCBidWNrZXRfdGFibGUgKnRibDtcbiBcdHNpemVfdCBzaXplO1xuQEAgLTExNzYsMTMgKzExMzQsMTEgQEAgaW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0bWVtc2V0KGh0LCAwLCBzaXplb2YoKmh0KSk7XG4tXHQvKiBtdXRleF9sb2NrIG11c3QgdXNlIG5lc3RpbmcgbGV2ZWwgMSAqL1xuLVx0bXV0ZXhfaW5pdF93aXRoX2tleShcdTAwMjZodC1cdTAwM2VtdXRleCwga2V5KTtcbitcdG11dGV4X2luaXRfd2l0aF9rZXkoXHUwMDI2aHQtXHUwMDNlbXV0ZXgsIFx1MDAyNmtleXMtXHUwMDNlbXV0ZXhfa2V5KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmh0LVx1MDAzZWxvY2spO1xuLVx0Lyogc3Bpbl9sb2NrIGNhbiB1c2UgbmVzdGluZyBsZXZlbCAwICovXG4tXHRsb2NrZGVwX3NldF9jbGFzcyhcdTAwMjZodC1cdTAwM2Vsb2NrLCBrZXkpO1xuK1x0bG9ja2RlcF9zZXRfY2xhc3MoXHUwMDI2aHQtXHUwMDNlbG9jaywgXHUwMDI2a2V5cy1cdTAwM2Vsb2NrX2tleSk7XG4gI2lmZGVmIENPTkZJR19MT0NLREVQXG4tXHRodC1cdTAwM2Vsb2NrZGVwX2tleSA9IGtleTtcbitcdGh0LVx1MDAzZWxvY2tkZXBfa2V5ID0gXHUwMDI2a2V5cy1cdTAwM2VidWNrZXRfa2V5O1xuICNlbmRpZlxuIFx0bWVtY3B5KFx1MDAyNmh0LVx1MDAzZXAsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTtcbiBcbkBAIC0xMjM2LDIyICsxMTkyLDEzIEBAIGludCBfX3JoYXNodGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJoYXNodGFibGUgKmh0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChfX3JoYXNodGFibGVfaW5pdF9ub3Byb2YpO1xuIFxuLS8qKlxuLSAqIHJobHRhYmxlX2luaXQgLSBpbml0aWFsaXplIGEgbmV3IGhhc2ggbGlzdCB0YWJsZVxuLSAqIEBobHQ6XHRoYXNoIGxpc3QgdGFibGUgdG8gYmUgaW5pdGlhbGl6ZWRcbi0gKiBAcGFyYW1zOlx0Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tICpcbi0gKiBJbml0aWFsaXplcyBhIG5ldyBoYXNoIGxpc3QgdGFibGUuXG4tICpcbi0gKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3Igcmhhc2h0YWJsZV9pbml0LlxuLSAqL1xuIGludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zLFxuLVx0XHRcdCAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxuK1x0XHRcdCAgIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5cylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXkpO1xuK1x0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFx1MDAyNmhsdC1cdTAwM2VodCwgcGFyYW1zLCBrZXlzKTtcbiBcdGhsdC1cdTAwM2VodC5yaGxpc3QgPSB0cnVlO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jIGIvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXG5pbmRleCA4NWE2MTVlNzQ1OTExLi5iNzY3YTM4YTc0Zjk3IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3Rfcmhhc2h0YWJsZS5jXG4rKysgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmNcbkBAIC00NzcsNyArNDc3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgcHJpbnRfaHQoc3RydWN0IHJobHRhYmxlICpyaGx0KVxuIFxuIFx0aHQgPSBcdTAwMjZyaGx0LVx1MDAzZWh0O1xuIFx0LyogVGFrZSB0aGUgbXV0ZXggdG8gYXZvaWQgUkNVIHdhcm5pbmcgKi9cbi1cdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNmh0LVx1MDAzZW11dGV4LCAxKTtcbitcdG11dGV4X2xvY2soXHUwMDI2aHQtXHUwMDNlbXV0ZXgpO1xuIFx0dGJsID0gcmh0X2RlcmVmZXJlbmNlKGh0LVx1MDAzZXRibCwgaHQpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGJsLVx1MDAzZXNpemU7IGkrKykge1xuIFx0XHRzdHJ1Y3Qgcmhhc2hfaGVhZCAqcG9zLCAqbmV4dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjE3LjUxMjE2NjU0OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTQzNzUxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcmhhc2h0YWJsZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHJoYXNodGFibGUgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgY2hhbmdlcy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGByaGFzaHRhYmxlYCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgbG9ja2RlcCBhbmQgaW5pdGlhbGl6YXRpb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYHJoYXNodGFibGUtdHlwZXMuaGAsIGByaGFzaHRhYmxlLmhgLCBgcmhhc2h0YWJsZS5jYCwgYW5kIHRoZSB0ZXN0IGZpbGUgYHRlc3Rfcmhhc2h0YWJsZS5jYC5cblxuRmlyc3QsIGByaGFzaHRhYmxlLXR5cGVzLmhgIGludHJvZHVjZXMgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AsIHdoaWNoIGFwcGVhcnMgdG8gZW5jYXBzdWxhdGUgbG9ja2RlcCBrZXlzIGZvciB0aGUgcmhhc2h0YWJsZSdzIGxvY2tzLiBJdCB1c2VzIGBDT05GSUdfTE9DS0RFUGAgZ3VhcmRzLCBzbyBpdCdzIGNvbmRpdGlvbmFsLiBUaGUgaW5pdGlhbGl6YXRpb24gbWFjcm9zLCBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJoYXNodGFibGVfaW5pdF9ub3Byb2ZgLCBhcmUgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgYHN0cnVjdGAgYW5kIGEgc3RhdGljIGluc3RhbmNlIG9mIGl0IChgX19rZXlzYCkuIFRoZSBkb2N1bWVudGF0aW9uIG1vdmUgaXMganVzdCBhIGNvZGUgb3JnYW5pemF0aW9uIGNoYW5nZSwgc28gdGhhdCdzIG5vdCBjcml0aWNhbCBmb3Igbm93LiBUaGUgc2FtZSBjaGFuZ2VzIG9jY3VyIGZvciBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgYW5kIGByaGx0YWJsZV9pbml0X25vcHJvZmAuXG5cblRoZW4sIGByaGFzaHRhYmxlLmhgIGlzIGNoYW5naW5nIHRoZSBgcmh0X2xvY2tfbmVzdGVkYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhlcmUgd2FzIGFuIG9mZi1ieS1vbmUgZXJyb3Igd2l0aCB0aGUgYHN1YmNsYXNzYCBhcmd1bWVudCBmb3IgYGxvY2tfYWNxdWlyZV9leGNsdXNpdmVgLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCBgc3ViY2xhc3NgIDAgYW5kIDEgYXJlIHVzZWQgZm9yIHRoZSB0YWJsZSBsb2NrIGFuZCBtdXRleCByZXNwZWN0aXZlbHksIGFuZCAyKyBpcyB1c2VkIGZvciBiaXRsb2Nrcy4gU2luY2UgbG9ja2RlcCBrZXlzIGFyZSBub3cgZXhwbGljaXRseSBkZWZpbmVkIGZvciBsb2NrLCBtdXRleCwgYW5kIGJ1Y2tldCAoYml0bG9jayksIHRoZXJlIGlzIG5vIHJlYXNvbiBmb3IgdGhlIGArMmAgYW55bW9yZS4gVGhpcyBpcyBhIGdvb2QgZml4LlxuXG5UaGUgbWVhdCBvZiB0aGUgY2hhbmdlcyBzZWVtcyB0byBiZSBpbiBgbGliL3JoYXNodGFibGUuY2AuICBgcmh0X2RlZmVycmVkX3dvcmtlcmAgaXMgdXBkYXRlZCB0byB1c2UgdGhlIHJlZ3VsYXIgYG11dGV4X2xvY2tgIGluc3RlYWQgb2YgdGhlIG5lc3RlZCB2ZXJzaW9uLiBUaGUgYF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZmAgZnVuY3Rpb24gaXMgYmVpbmcgbW9kaWZpZWQgc2lnbmlmaWNhbnRseS4gSXQgbm93IHRha2VzIHRoYXQgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyAqa2V5c2AgYW5kIHVzZXMgaXQgdG8gaW5pdGlhbGl6ZSB0aGUgbXV0ZXggd2l0aCBgbXV0ZXhfaW5pdF93aXRoX2tleWAsIHNldHMgdGhlIGxvY2sgY2xhc3MgdmlhIGBsb2NrZGVwX3NldF9jbGFzc2AsIGFuZCBzZXRzIGBodC1cdTAwM2Vsb2NrZGVwX2tleWAuIFRoZSBgX19yaGx0YWJsZV9pbml0X25vcHJvZmAgZnVuY3Rpb24gaXMgbm93IHBhc3NpbmcgYGtleXNgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVhbCBwb3RlbnRpYWwgZm9yIGlzc3VlcywgYW5kIHRodXMgZnV6emluZyBuZWVkcywgd2lsbCBsaWUuIFRoZSBgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYF9fcmhsdGFibGVfaW5pdF9ub3Byb2ZgIGNoYW5nZXMgYXJlIG5ldy5cblxuRmluYWxseSwgaW4gYGxpYi90ZXN0X3JoYXNodGFibGUuY2AsIHRoZSBgbXV0ZXhfbG9ja2AgaXMgc2ltcGxpZmllZCwgY29uc2lzdGVudCB3aXRoIHRoZSBwcmV2aW91cyBjaGFuZ2UuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUsIHRoZXNlIGNoYW5nZXMgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlIGxvY2tkZXAgaXNzdWVzIG9yIHVuaW5pdGlhbGl6ZWQgdXNlIG9mIHRoZSBsb2NrZGVwIGtleXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciBjYWxsZXJzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBzZWUgaG93IHBlcnZhc2l2ZSB0aGVzZSBuZXcgcGFyYW1ldGVycyBhcmUgYW5kIGlmIHRoZSBgcmhhc2h0YWJsZV9sb2NrZGVwX2tleXNgIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIEJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgSSdsbCBgZ3JlcGAgZm9yIGBfX3JoYXNodGFibGVfaW5pdGAgYW5kIGBfX3JobHRhYmxlX2luaXRgIGNhbGxzIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlYmFzZSB0byBzZWUgaG93IHRoZXkgYXJlIHVzZWQuIEEgc3RhdGljIGFuYWx5c2lzICpzaG91bGQqIGJlIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGEgcmVhbCBLTVNBTiByaXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MjUuNjU1OTIzNDI5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIwMTMwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmhhc2h0YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oPTE0MD1zdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE0OS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoxNTA6aW50IF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTUxLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTE1Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmg6MTU3OlxcdF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZihodCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMTU4LX0pXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTExMjA9c3RhdGljIHUzMiByaGFzaHRhYmxlX2poYXNoMihjb25zdCB2b2lkICprZXksIHUzMiBsZW5ndGgsIHUzMiBzZWVkKVxcbi0tXFxubGliL3JoYXNodGFibGUuYy0xMTI0LVxcbmxpYi9yaGFzaHRhYmxlLmM6MTEyNTppbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG5saWIvcmhhc2h0YWJsZS5jLTExMjYtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTE5Mi19XFxubGliL3JoYXNodGFibGUuYzoxMTkzOkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhhc2h0YWJsZV9pbml0X25vcHJvZik7XFxubGliL3JoYXNodGFibGUuYy0xMTk0LVxcbmxpYi9yaGFzaHRhYmxlLmM9MTE5NT1pbnQgX19yaGx0YWJsZV9pbml0X25vcHJvZihzdHJ1Y3QgcmhsdGFibGUgKmhsdCxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTIwMC1cXG5saWIvcmhhc2h0YWJsZS5jOjEyMDE6XFx0ZXJyID0gX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKFxcdTAwMjZobHQtXFx1MDAzZWh0LCBwYXJhbXMsIGtleXMpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTIwMi1cXHRobHQtXFx1MDAzZWh0LnJobGlzdCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA3OjA2OjI3Ljg3NjA2MTE3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyOTA1MzI3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX3JobHRhYmxlX2luaXRgIENhbGxzKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBfX3JobHRhYmxlX2luaXRgIGZ1bmN0aW9uLiBUaGUgZmlyc3QgdGhpbmcgSSdtIHRyeWluZyB0byBhc2NlcnRhaW4gaXMgdGhlIHNjb3BlIG9mIGl0cyB1c2FnZS4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgKndoZXJlKiBhbmQgKmhvdyogdGhpcyBpcyBiZWluZyB1c2VkLiBSaWdodCBub3csIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgXCJBcmUgdGhlcmUgYW55IG90aGVyIGxvY2F0aW9ucyB3aGVyZSBgX19yaGx0YWJsZV9pbml0YCBpcyBiZWluZyBjYWxsZWQgYmVzaWRlcyB0aGUgb25lcyBJJ20gYWxyZWFkeSBhd2FyZSBvZj9cIi4gVGhpcyBpcyBiYXNpYyBkdWUgZGlsaWdlbmNlLiBJZGVudGlmeWluZyBhbGwgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgaW5mbHVlbmNlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgb2YgY291cnNlLCBmb3IgZGVidWdnaW5nIGFuZCByZWZhY3RvcmluZyBkb3duIHRoZSBsaW5lLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNjozMy4xNjY1OTY3NzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzUyNzU5NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yaGx0YWJsZV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oPTE1MD1pbnQgX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGFzaHRhYmxlICpodCxcXG4tLVxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oLTIwMy1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaDoyMDQ6aW50IF9fcmhsdGFibGVfaW5pdF9ub3Byb2Yoc3RydWN0IHJobHRhYmxlICpobHQsXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMjA1LVxcdFxcdCAgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JoYXNodGFibGUtdHlwZXMuaC0yMTAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS10eXBlcy5oOjIxMTpcXHRfX3JobHRhYmxlX2luaXRfbm9wcm9mKGhsdCwgcGFyYW1zLCBcXHUwMDI2X19rZXlzKTtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLXR5cGVzLmgtMjEyLX0pXFxuLS1cXG5saWIvcmhhc2h0YWJsZS5jPTExOTM9RVhQT1JUX1NZTUJPTF9HUEwoX19yaGFzaHRhYmxlX2luaXRfbm9wcm9mKTtcXG5saWIvcmhhc2h0YWJsZS5jLTExOTQtXFxubGliL3JoYXNodGFibGUuYzoxMTk1OmludCBfX3JobHRhYmxlX2luaXRfbm9wcm9mKHN0cnVjdCByaGx0YWJsZSAqaGx0LFxcbmxpYi9yaGFzaHRhYmxlLmMtMTE5Ni1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbmxpYi9yaGFzaHRhYmxlLmMtMTIwNC19XFxubGliL3JoYXNodGFibGUuYzoxMjA1OkVYUE9SVF9TWU1CT0xfR1BMKF9fcmhsdGFibGVfaW5pdF9ub3Byb2YpO1xcbmxpYi9yaGFzaHRhYmxlLmMtMTIwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDY6MzUuNDQxODgwODI1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4MTQ4MDM2ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcmhhc2h0YWJsZSBJbml0aWFsaXphdGlvbiBhbmQgTG9ja2RlcCBLZXlzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcmhhc2h0YWJsZV9pbml0YCBvciBgcmhsdGFibGVfaW5pdGAgbWFjcm8sIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgaXQgZGVjbGFyZXMgYSBgc3RhdGljIHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5cyBfX2tleXM7YC4gVGhhdCBgc3RhdGljYCBxdWFsaWZpZXIgaXMgdGhlIGtleSBoZXJlLiBJdCBtZWFucyB0aGlzIGBfX2tleXNgIHZhcmlhYmxlIGlzIGdvaW5nIHRvIGxhbmQgaW4gZWl0aGVyIHRoZSBCU1Mgb3IgdGhlIGRhdGEgc2VjdGlvbiwgYW5kIGltcG9ydGFudGx5LCBpdCdsbCBiZSB6ZXJvLWluaXRpYWxpemVkLiBOb3csIGtub3dpbmcgd2hhdCBJIGRvIGFib3V0IGxvY2tkZXAsIHRob3NlIFwibG9ja2RlcCBrZXlzXCIgYXJlIGJhc2ljYWxseSBqdXN0IHBsYWNlaG9sZGVyIGFkZHJlc3NlcyBmb3IgdGhlIGxvY2tkZXAgbWFjaGluZXJ5LiBUaGUgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgaXRzZWxmIOKAkyBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSDigJMgaXMgZWl0aGVyIGFuIGVtcHR5IHN0cnVjdCBvciBhIGR1bW15LCBzbyBsb2NrZGVwIGlzIHJlYWxseSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlICphZGRyZXNzKiBvZiBpdC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc3RydWN0IGxvY2tfY2xhc3Nfa2V5YCBkZWZpbml0aW9uIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIG15IG1lbW9yeSBpcyBzZXJ2aW5nIG1lIGNvcnJlY3RseSBoZXJlLiBJIGp1c3Qgd2FudCB0byB2ZXJpZnkgaG93IHRoZSBrZXkgc3RydWN0IGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6MTMuNTg5OTM2NzQ4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUzMzM0ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBsb2NrX2NsYXNzX2tleSBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaD03MD1zdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgtNzQtLyogaGFzaF9lbnRyeSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGtleXMuICovXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg6NzU6c3RydWN0IGxvY2tfY2xhc3Nfa2V5IHtcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC03Ni1cXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaD0yMDY9c3RydWN0IGhlbGRfbG9jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaC0yNjQtICovXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmg6MjY1OnN0cnVjdCBsb2NrX2NsYXNzX2tleSB7IH07XFxuaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgtMjY2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oLTUtXFxudG9vbHMvdGVzdGluZy9zaGFyZWQvbGludXgvbG9ja2RlcC5oOjY6c3RydWN0IGxvY2tfY2xhc3Nfa2V5IHtcXG50b29scy90ZXN0aW5nL3NoYXJlZC9saW51eC9sb2NrZGVwLmgtNy1cXHR1bnNpZ25lZCBpbnQgYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDc6MDc6MTYuMTQzMjc4NDY0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMDU1MDIxODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHJoYXNodGFibGUgTG9ja2RlcCBDaGFuZ2VzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3QgYWZ0ZXIgcmV2aWV3aW5nIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGByaGFzaHRhYmxlYCBsb2NrZGVwIGFubm90YXRpb25zLiBJdCdzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGxvY2tkZXAgaW1wbGVtZW50YXRpb24uIEJlZm9yZSwgdGhleSB3ZXJlIGF3a3dhcmRseSBzaGFyaW5nIGEgYHN0cnVjdCBsb2NrX2NsYXNzX2tleWAgYWNyb3NzIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jay4gVGhhdCBmb3JjZWQgc29tZSBwcmV0dHkgbWVzc3kgc3ViY2xhc3MgbmVzdGluZyB0cmlja3MgdXNpbmcgYHN1YmNsYXNzKzJgIGFuZCBzcGVjaWZpYyBgbXV0ZXhfbG9ja19uZXN0ZWRgIGNhbGxzLiBGcmFua2x5LCBpdCB3YXMgYSBiaXQgb2YgYSBoYWNrLlxuXG5Ob3csIHdlIGhhdmUgYSBwcm9wZXIgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2Agd2hpY2ggY2xlYW5seSBkZWZpbmVzIHRocmVlIHNlcGFyYXRlIGBsb2NrX2NsYXNzX2tleXNgOiBgbG9ja19rZXlgLCBgbXV0ZXhfa2V5YCwgYW5kIGBidWNrZXRfa2V5YC4gVGhpcyBpcyAqbXVjaCogY2xlYW5lcjsgZWFjaCBsb2NrIGdldHMgaXRzIG93biBkZWRpY2F0ZWQga2V5LiBJJ20gZ2xhZCB0byBzZWUgdGhhdCBjb21wbGV4aXR5IHJlZHVjZWQuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgcHJvYmxlbXMuIEJ1dCBhZnRlciBsb29raW5nIGF0IGl0IGNsb3NlbHksIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGFuIGlzc3VlIGhlcmUuIFRoZSBrZXlzIGFyZSBzdGF0aWNhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWMgc3RydWN0IHJoYXNodGFibGVfbG9ja2RlcF9rZXlzIF9fa2V5cztgLCBtZWFuaW5nIHRoZXkgcmVzaWRlIGluIHRoZSBCU1Mgc2VjdGlvbiBhbmQgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBsb2FkZXIsIHNvIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSBvbmx5IGV2ZXIgdXNpbmcgdGhlICphZGRyZXNzKiBvZiB0aGVzZSBrZXlzIChlLmcuLCBgXHUwMDI2a2V5cy1cdTAwM2VtdXRleF9rZXlgKSBmb3IgdGhlIGxvY2tkZXAgbWFjaGluZXJ5LCBzbyBubyBhY3R1YWwgZGF0YSBpcyBldmVyIGNvcGllZCBvciByZWFkIHRoYXQgY291bGQgYmUgdW5pbml0aWFsaXplZC4gVGhlcmUncyBubyBtZW1vcnkgYWxsb2NhdGlvbiBpbnZvbHZlZCwgbm8gY2hhbmdlcyB0byBidWZmZXIgbG9naWMsIGFuZCBubyByZWFkcyBvciBicmFuY2hlcyBiYXNlZCBvbiBhbnkgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBDcml0aWNhbGx5LCBhbnkgbG9ja2luZyBidWdzIG9yIGRlYWRsb2NrcyAqd291bGQqIGJlIGNhdWdodCBieSBMT0NLREVQLCB3aGljaCBpcyB1c3VhbGx5IHBhcnQgb2Ygc3RhbmRhcmQgS0FTQU4gY29uZmlndXJhdGlvbnMgYW55d2F5LlxuXG5TbywgaW4gc3VtbWFyeSwgYmFzZWQgb24gdGhpcyByZXZpZXcsIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2UgYW55IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgZG9uJ3Qgc2VlIGFueSByZWFzb24gdG8gYnJpbmcgS01TQU4gaW50byB0aGUgcGljdHVyZSBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgaWRlbnRpZnlpbmcgbWVtb3J5IGlzc3VlcywgYnV0IHRoZSBwcmltYXJ5IGNvbmNlcm4gd2l0aCB0aGVzZSBjaGFuZ2VzIGlzIGxvY2tkZXAgYW5ub3RhdGlvbnMuIEtNU0FOIGZvY3VzZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoZXJlYXMgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcGVydGluZW50LiBTaW5jZSB0aGUgbG9ja2RlcCBjaGFuZ2UgaXMgdGhlIG1haW4gZHJpdmVyIGFuZCBLTVNBTiBpc24ndCBkZXNpZ25lZCB0byBmaW5kIGxvY2tkZXAgaXNzdWVzLCB0aGlzIGlzIGFsbCBnb29kLiBUaGlzIHBhdGNoIGlzIHNvbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODIxLCJPdXRwdXRUb2tlbnMiOjI0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNzowNzoyNi4xOTgzMDY3NzZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gbG9ja2RlcCB0cmFja2luZyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cXG4yLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgZGF0YSBidWZmZXJzLCBhbGxvY2F0aW9ucywgYm91bmRzIGNoZWNrcywgb3IgZGF0YSBzZXJpYWxpemF0aW9uLlxcbjMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBsb2NraW5nIGhpZXJhcmNoeSBhbmQgY2xhc3MgYXNzaWdubWVudHMgYXJlIHRyYWNrZWQgZGlyZWN0bHkgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgY29uZmlndXJhdGlvbnMuXFxuXFxuQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAgYW5ub3RhdGlvbnMgd2l0aGluIHJoYXNodGFibGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCByaGFzaHRhYmxlX2xvY2tkZXBfa2V5c2AgdG8gcHJvdmlkZSBkaXN0aW5jdCBgbG9ja19jbGFzc19rZXlgIHN0cnVjdHVyZXMgZm9yIHRoZSBzcGlubG9jaywgbXV0ZXgsIGFuZCBidWNrZXQgYml0bG9jayAocmVwbGFjaW5nIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZiBzaGFyaW5nIGEgc2luZ2xlIGxvY2tkZXAga2V5IHdpdGggbWFudWFsIHN1YmNsYXNzIG9mZnNldHMpLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gbG9ja2RlcCB0cmFja2luZyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2YWx1YXRlZCBpbiBicmFuY2hpbmcgbG9naWMuIFRoZSBsb2NrZGVwIGtleXMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIHZhcmlhYmxlcyBpbnNpZGUgbWFjcm8gd3JhcHBlcnMgKGByaGFzaHRhYmxlX2luaXRfbm9wcm9mYCBhbmQgYHJobHRhYmxlX2luaXRfbm9wcm9mYCksIHJlc2lkaW5nIGluIEJTUy5cXG4yLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgZGF0YSBidWZmZXJzLCBhbGxvY2F0aW9ucywgYm91bmRzIGNoZWNrcywgb3IgZGF0YSBzZXJpYWxpemF0aW9uLlxcbjMuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3IgYnVncyBpbiBsb2NraW5nIGhpZXJhcmNoeSBhbmQgY2xhc3MgYXNzaWdubWVudHMgYXJlIHRyYWNrZWQgZGlyZWN0bHkgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgY29uZmlndXJhdGlvbnMuXFxuXFxuQ29uc2VxdWVudGx5LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow99xmd[1] Phase: Succeeded StartedAt: 2026-09-15 07:07:37 +0000 UTC FinishedAt: 2026-09-15 07:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 07:07:37 +0000 UTC FinishedAt: 2026-09-15 07:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2] Phase: Succeeded StartedAt: 2026-09-15 07:07:37 +0000 UTC FinishedAt: 2026-09-15 10:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 07:07:37 +0000 UTC FinishedAt: 2026-09-15 10:54:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 07:07:37 +0000 UTC FinishedAt: 2026-09-15 07:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 07:07:37 +0000 UTC FinishedAt: 2026-09-15 07:07:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow99xmd/series-workflow99xmd-convert-artifact-4957788/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 07:07:57 +0000 UTC FinishedAt: 2026-09-15 07:24:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 07:07:57 +0000 UTC FinishedAt: 2026-09-15 07:24:35 +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:*7bac95b9-8a10-443f-8f74-88bec44cbe3d,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-workflow99xmd/series-workflow99xmd-convert-artifact-4957788/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": "67baf5e4-a500-467d-bc70-2a201fd6711d", "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-workflow99xmd/series-workflow99xmd-build-action-1327356298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 07:07:57 +0000 UTC FinishedAt: 2026-09-15 07:24:25 +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:*7bac95b9-8a10-443f-8f74-88bec44cbe3d,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-workflow99xmd/series-workflow99xmd-convert-artifact-4957788/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": "67baf5e4-a500-467d-bc70-2a201fd6711d", "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-workflow99xmd/series-workflow99xmd-build-action-1327356298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 07:24:35 +0000 UTC FinishedAt: 2026-09-15 07:24:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 07:24:35 +0000 UTC FinishedAt: 2026-09-15 07:24:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 07:24:35 +0000 UTC FinishedAt: 2026-09-15 07:24:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 07:24:35 +0000 UTC FinishedAt: 2026-09-15 07:24:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow99xmd/series-workflow99xmd-convert-artifact-3396695451/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 07:24:45 +0000 UTC FinishedAt: 2026-09-15 07:26:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 07:24:45 +0000 UTC FinishedAt: 2026-09-15 07:26:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*67baf5e4-a500-467d-bc70-2a201fd6711d,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-workflow99xmd/series-workflow99xmd-build-action-1327356298/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-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 07:26:53 +0000 UTC FinishedAt: 2026-09-15 07:26:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 07:26:53 +0000 UTC FinishedAt: 2026-09-15 07:26:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 07:26:53 +0000 UTC FinishedAt: 2026-09-15 07:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 07:26:53 +0000 UTC FinishedAt: 2026-09-15 07:43:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7bac95b9-8a10-443f-8f74-88bec44cbe3d,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-workflow99xmd/series-workflow99xmd-convert-artifact-3396695451/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": "abfe6dbf-f020-45e6-9e42-7b0c889e858f", "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-workflow99xmd/series-workflow99xmd-build-action-751100223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 07:26:53 +0000 UTC FinishedAt: 2026-09-15 07:42:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7bac95b9-8a10-443f-8f74-88bec44cbe3d,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-workflow99xmd/series-workflow99xmd-convert-artifact-3396695451/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": "abfe6dbf-f020-45e6-9e42-7b0c889e858f", "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-workflow99xmd/series-workflow99xmd-build-action-751100223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 07:43:06 +0000 UTC FinishedAt: 2026-09-15 07:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 07:43:06 +0000 UTC FinishedAt: 2026-09-15 07:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 07:43:06 +0000 UTC FinishedAt: 2026-09-15 07:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 07:43:06 +0000 UTC FinishedAt: 2026-09-15 07:44:49 +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:*abfe6dbf-f020-45e6-9e42-7b0c889e858f,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-workflow99xmd/series-workflow99xmd-build-action-751100223/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-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 07:44:59 +0000 UTC FinishedAt: 2026-09-15 10:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 07:44:59 +0000 UTC FinishedAt: 2026-09-15 10:54:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"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:*67baf5e4-a500-467d-bc70-2a201fd6711d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*abfe6dbf-f020-45e6-9e42-7b0c889e858f,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-workflow99xmd/series-workflow99xmd-build-action-1327356298/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-workflow99xmd/series-workflow99xmd-build-action-751100223/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 07:44:59 +0000 UTC FinishedAt: 2026-09-15 07:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 07:44:59 +0000 UTC FinishedAt: 2026-09-15 07:45:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"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-workflow99xmd/series-workflow99xmd-convert-artifact-1108709012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 07:44:59 +0000 UTC FinishedAt: 2026-09-15 07:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 07:44:59 +0000 UTC FinishedAt: 2026-09-15 07:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 07:44:59 +0000 UTC FinishedAt: 2026-09-15 07:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 07:45:09 +0000 UTC FinishedAt: 2026-09-15 10:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99xmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"9e06d371730b841ad8fe79ebfccf0def9470201f","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__rhashtable_init_noprof","__rhltable_init_noprof","rht_deferred_worker","rhashtable_insert_slow"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e06d371730b841ad8fe79ebfccf0def9470201f","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"3a9dfe85-515f-47c4-847d-716ca86c88ba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 07:45:09 +0000 UTC FinishedAt: 2026-09-15 10:53:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*67baf5e4-a500-467d-bc70-2a201fd6711d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*abfe6dbf-f020-45e6-9e42-7b0c889e858f,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-workflow99xmd/series-workflow99xmd-build-action-1327356298/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-workflow99xmd/series-workflow99xmd-build-action-751100223/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-workflow99xmd/series-workflow99xmd-convert-artifact-1108709012/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,}