Name: series-workflow5556m Phase: Succeeded StartedAt: 2026-08-01 06:42:05 +0000 UTC FinishedAt: 2026-08-01 10:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[0] Phase: Succeeded StartedAt: 2026-08-01 06:42:05 +0000 UTC FinishedAt: 2026-08-01 07:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 06:42:05 +0000 UTC FinishedAt: 2026-08-01 07:02:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a8efbe7d22d1d32bb8a5fab8c132bd7f31864735", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "PRINTK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a8efbe7d22d1d32bb8a5fab8c132bd7f31864735", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "PRINTK" ], "series_id": "bbd6e812-b789-4a02-a6f8-b4472e51b3ee" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vrealloc_node_align_noprof", "vmalloc_dump_obj" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7UFJJTlRLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YmIzM0OywKICAgICYjMzQ7dm1hbGxvY19kdW1wX29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIGBucl9wYWdlc2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIHRvIHN1cHBvcnQgdm1hbGxvYyBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiAxNlRCIChvciBmaXggdHJ1bmNhdGlvbiBidWdzKS4gSXQgdXBkYXRlcyB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYCB0byB1c2UgYHVuc2lnbmVkIGxvbmdgIGZvciBwYWdlIGNvdW50cyBhbmQgaW5kaWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCB3aGljaCB3ZXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgcmVxdWlyZSBgTlVNQWAgYW5kIGBQUklOVEtgIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljNDQ2NTg1YTkwZjAwMzhmM2NjYjViNjc5NjU1YmE2ODMyYzc4OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjU5OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbmluZGV4IGU0ZDhkMGE5ZjMwZjkuLmFlZDEyMWQ3MjliMDEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbkBAIC02Miw3ICYjNDM7NjIsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbiBcdHVuc2lnbmVkIGludFx0XHRwYWdlX29yZGVyO1xuICNlbmRpZlxuLVx0dW5zaWduZWQgaW50XHRcdG5yX3BhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXM7XG4gXHRwaHlzX2FkZHJfdFx0XHRwaHlzX2FkZHI7XG4gXHRjb25zdCB2b2lkXHRcdCpjYWxsZXI7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHJlcXVlc3RlZF9zaXplO1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMjZmMzI5NDljMmYyZS4uMTk2ZGE4NzM4Y2YxMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtMzQwNCw3ICYjNDM7MzQwNCw3IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKnJlbW92ZV92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9hcmVhX2RpcmVjdF9tYXAoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSxcbiBcdFx0XHRcdCAgICAgICBpbnQgKCpzZXRfZGlyZWN0X21hcCkoc3RydWN0IHBhZ2UgKnBhZ2UpKVxuIHtcbi1cdGludCBpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdC8qIEhVR0VfVk1BTExPQyBwYXNzZXMgc21hbGwgcGFnZXMgdG8gc2V0X2RpcmVjdF9tYXAgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZWEtXHUwMDNlbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuQEAgLTM0MjAsNyAmIzQzOzM0MjAsNyBAQCBzdGF0aWMgdm9pZCB2bV9yZXNldF9wZXJtcyhzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhKVxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDtcbiBcdHVuc2lnbmVkIGludCBwYWdlX29yZGVyID0gdm1fYXJlYV9wYWdlX29yZGVyKGFyZWEpO1xuIFx0aW50IGZsdXNoX2RtYXAgPSAwO1xuLVx0aW50IGk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0LypcbiBcdCAqIEZpbmQgdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2Ugb2YgdGhlIGRpcmVjdCBtYXBwaW5ncyB0byBtYWtlIHN1cmUgdGhhdFxuQEAgLTM0OTMsMTAgJiM0MzszNDkzLDEwIEBAIHZvaWQgdmZyZWVfYXRvbWljKGNvbnN0IHZvaWQgKmFkZHIpXG4gICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bm1hcHBpbmcgKHZ1bm1hcF9yYW5nZSkgYW5kIEtBU0FOXG4gICogcG9pc29uaW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMuXG4gICovXG4tc3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgc3RhcnRfaWR4LFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZW5kX2lkeClcbiYjNDM7c3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2lkeCxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRpZiAoISh2bS1cdTAwM2VmbGFncyBcdTAwMjYgVk1fTUFQX1BVVF9QQUdFUykpIHtcbiBcdFx0Zm9yIChpID0gc3RhcnRfaWR4OyBpIFx1MDAzYyBlbmRfaWR4OyBpJiM0MzsmIzQzOylcbkBAIC0zODE5LDEyICYjNDM7MzgxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGdmcF90IHZtYWxsb2NfZ2ZwX2FkanVzdChnZnBfdCBmbGFncywgY29uc3QgYm9vbCBsYXJnZSlcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4gdm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGludCBucl9hbGxvY2F0ZWQgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG1heF9hdHRlbXB0X29yZGVyID0gTUFYX1BBR0VfT1JERVI7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdGludCBpO1xuQEAgLTM4NzIsNyAmIzQzOzM4NzIsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbiBcdGlmICghb3JkZXIpIHtcbiBcdFx0d2hpbGUgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpIHtcbiBcdFx0XHR1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7XG4tXHRcdFx0aW50IGk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEEgbWF4aW11bSBhbGxvd2VkIHJlcXVlc3QgaXMgaGFyZC1jb2RlZCBhbmQgaXMgMTAwXG5AQCAtMzg4MCw3ICYjNDM7Mzg4MCw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuIFx0XHRcdCAqIGxvbmcgcHJlZW1wdGlvbiBvZmYgc2NlbmFyaW8gaW4gdGhlIGJ1bGstYWxsb2NhdG9yXG4gXHRcdFx0ICogc28gdGhlIHJhbmdlIGlzIFsxOjEwMF0uXG4gXHRcdFx0ICovXG4tXHRcdFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVLCBucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCk7XG4mIzQzO1x0XHRcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVUwsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcbiBcbiBcdFx0XHQvKiBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgY29uc2lkZXIgbWVtcG9saWN5LCB3ZSBjYW4mIzM5O3RcbiBcdFx0XHQgKiB3cm9uZ2x5IHVzZSBuZWFyZXN0IG5vZGUgd2hlbiBuaWQgPT0gTlVNQV9OT19OT0RFLFxuQEAgLTQwMjYsMTIgJiM0Mzs0MDI2LDEyIEBAIHN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cdTAwM2VhZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTtcbiBcdHVuc2lnbmVkIGxvbmcgYXJyYXlfc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBucl9zbWFsbF9wYWdlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9zbWFsbF9wYWdlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZV9vcmRlcjtcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdGludCByZXQ7XG4gXG4tXHRhcnJheV9zaXplID0gKHVuc2lnbmVkIGxvbmcpbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4mIzQzO1x0YXJyYXlfc2l6ZSA9IG5yX3NtYWxsX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopO1xuIFxuIFx0LyogX19HRlBfTk9GQUlMIGFuZCBcJiMzNDtub2Jsb2NrXCYjMzQ7IGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXG4gXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbkBAIC00NTI1LDcgJiM0Mzs0NTI1LDcgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25cbiBcdH1cbiBcbiBcdGlmIChzaXplIFx1MDAzYz0gb2xkX3NpemUpIHtcbi1cdFx0dW5zaWduZWQgaW50IG5ld19ucl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5ld19ucl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRcdC8qIFplcm8gb3V0IFwmIzM0O2ZyZWVkXCYjMzQ7IG1lbW9yeSwgcG90ZW50aWFsbHkgZm9yIGZ1dHVyZSByZWFsbG9jLiAqL1xuIFx0XHRpZiAod2FudF9pbml0X29uX2ZyZWUoKSB8fCB3YW50X2luaXRfb25fYWxsb2MoZmxhZ3MpKVxuQEAgLTQ1NTQsNyAmIzQzOzQ1NTQsNyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxuIFx0XHQgICAgISh2bS1cdTAwM2VmbGFncyBcdTAwMjYgKFZNX0ZMVVNIX1JFU0VUX1BFUk1TIHwgVk1fVVNFUk1BUCkpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZ2ZwX2hhc19pb19mcyhmbGFncykpIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcocCk7XG4tXHRcdFx0dW5zaWduZWQgaW50IG9sZF9ucl9wYWdlcyA9IHZtLVx1MDAzZW5yX3BhZ2VzO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIG9sZF9ucl9wYWdlcyA9IHZtLVx1MDAzZW5yX3BhZ2VzO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVXNlIHRoZSBub2RlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBjb25jdXJyZW50XG5AQCAtNDU2NywxNiAmIzQzOzQ1NjcsMTMgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25cbiBcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuIFxuIFx0XHRcdC8qIE5vdGlmeSBrbWVtbGVhayBvZiB0aGUgcmVkdWNlZCBhbGxvY2F0aW9uIHNpemUgYmVmb3JlIHVubWFwcGluZy4gKi9cbi1cdFx0XHRrbWVtbGVha19mcmVlX3BhcnQoXG4tXHRcdFx0XHQodm9pZCAqKWFkZHIgJiM0MzsgKCh1bnNpZ25lZCBsb25nKW5ld19ucl9wYWdlc1xuLVx0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbi1cdFx0XHRcdCh1bnNpZ25lZCBsb25nKShvbGRfbnJfcGFnZXMgLSBuZXdfbnJfcGFnZXMpXG4tXHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiYjNDM7XHRcdFx0a21lbWxlYWtfZnJlZV9wYXJ0KCh2b2lkICopYWRkciAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgKG5ld19ucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHRcdFx0XHQgICAob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxuJiM0MztcdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4gXG4tXHRcdFx0dnVubWFwX3JhbmdlKGFkZHIgJiM0MzsgKCh1bnNpZ25lZCBsb25nKW5ld19ucl9wYWdlc1xuLVx0XHRcdFx0XHQgICAgIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbi1cdFx0XHRcdCAgICAgYWRkciAmIzQzOyAoKHVuc2lnbmVkIGxvbmcpb2xkX25yX3BhZ2VzXG4tXHRcdFx0XHRcdCAgICAgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiYjNDM7XHRcdFx0dnVubWFwX3JhbmdlKGFkZHIgJiM0MzsgKG5ld19ucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHRcdFx0ICAgICBhZGRyICYjNDM7IChvbGRfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiBcbiBcdFx0XHR2bV9hcmVhX2ZyZWVfcGFnZXModm0sIG5ld19ucl9wYWdlcywgb2xkX25yX3BhZ2VzKTtcbiBcdFx0fVxuQEAgLTU0MDAsNyAmIzQzOzUzOTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxuIFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbi1cdHVuc2lnbmVkIGludCBucl9wYWdlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuIFxuIFx0YWRkciA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpIG9iamVjdCk7XG4gXHR2biA9IGFkZHJfdG9fbm9kZShhZGRyKTtcbkBAIC01NDIwLDcgJiM0Mzs1NDE3LDcgQEAgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbiBcdG5yX3BhZ2VzID0gdm0tXHUwMDNlbnJfcGFnZXM7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuIFxuLVx0cHJfY29udChcJiMzNDsgJXUtcGFnZSB2bWFsbG9jIHJlZ2lvbiBzdGFydGluZyBhdCAlI2x4IGFsbG9jYXRlZCBhdCAlcFNcXG5cJiMzNDssXG4mIzQzO1x0cHJfY29udChcJiMzNDsgJWx1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxuXCYjMzQ7LFxuIFx0XHRucl9wYWdlcywgYWRkciwgY2FsbGVyKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU0MzgsMTYgJiM0Mzs1NDM1LDE3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpXG4gc3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxuIFx0XHRcdFx0IHVuc2lnbmVkIGludCAqY291bnRlcnMpXG4ge1xuLVx0dW5zaWduZWQgaW50IG5yO1xuIFx0dW5zaWduZWQgaW50IHN0ZXAgPSAxVSBcdTAwM2NcdTAwM2Mgdm1fYXJlYV9wYWdlX29yZGVyKHYpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4gXHRpZiAoIWNvdW50ZXJzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpO1xuIFxuLVx0Zm9yIChuciA9IDA7IG5yIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBuciAmIzQzOz0gc3RlcClcbi1cdFx0Y291bnRlcnNbcGFnZV90b19uaWQodi1cdTAwM2VwYWdlc1tucl0pXSAmIzQzOz0gc3RlcDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBpICYjNDM7PSBzdGVwKVxuJiM0MztcdFx0Y291bnRlcnNbcGFnZV90b19uaWQodi1cdTAwM2VwYWdlc1tpXSldICYjNDM7PSBzdGVwO1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuciwgTl9ISUdIX01FTU9SWSlcbiBcdFx0aWYgKGNvdW50ZXJzW25yXSlcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyBOJXU9JXVcJiMzNDssIG5yLCBjb3VudGVyc1tucl0pO1xuQEAgLTU1MDUsNyAmIzQzOzU1MDMsNyBAQCBzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbiBcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICVwU1wmIzM0Oywgdi1cdTAwM2VjYWxsZXIpO1xuIFxuIFx0XHRcdGlmICh2LVx1MDAzZW5yX3BhZ2VzKVxuLVx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGFnZXM9JWRcJiMzNDssIHYtXHUwMDNlbnJfcGFnZXMpO1xuJiM0MztcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7IHBhZ2VzPSVsdVwmIzM0Oywgdi1cdTAwM2Vucl9wYWdlcyk7XG4gXG4gXHRcdFx0aWYgKHYtXHUwMDNlcGh5c19hZGRyKVxuIFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGh5cz0lcGFcJiMzNDssIFx1MDAyNnYtXHUwMDNlcGh5c19hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtQUklOVEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZiYjMzQ7LAogICAgJiMzNDt2bWFsbG9jX2R1bXBfb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgYG5yX3BhZ2VzYCBpbiBgc3RydWN0IHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgdG8gc3VwcG9ydCB2bWFsbG9jIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDE2VEIgKG9yIGZpeCB0cnVuY2F0aW9uIGJ1Z3MpLiBJdCB1cGRhdGVzIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIHRvIHVzZSBgdW5zaWduZWQgbG9uZ2AgZm9yIHBhZ2UgY291bnRzIGFuZCBpbmRpY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHdoaWNoIHdlcmUgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCByZXF1aXJlIGBOVU1BYCBhbmQgYFBSSU5US2AgdG8gdGVzdCB0aGUgbW9kaWZpZWQgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWM0NDY1ODVhOTBmMDAzOGYzY2NiNWI2Nzk2NTViYTY4MzJjNzg5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDY6NTk6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IGU0ZDhkMGE5ZjMwZjkuLmFlZDEyMWQ3MjliMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC02Miw3ICYjNDM7NjIsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0IHsKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQwogCXVuc2lnbmVkIGludAkJcGFnZV9vcmRlcjsKICNlbmRpZgotCXVuc2lnbmVkIGludAkJbnJfcGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCW5yX3BhZ2VzOwogCXBoeXNfYWRkcl90CQlwaHlzX2FkZHI7CiAJY29uc3Qgdm9pZAkJKmNhbGxlcjsKIAl1bnNpZ25lZCBsb25nCQlyZXF1ZXN0ZWRfc2l6ZTsKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAyNmYzMjk0OWMyZjJlLi4xOTZkYTg3MzhjZjEwIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC0zNDA0LDcgJiM0MzszNDA0LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXJlYV9kaXJlY3RfbWFwKGNvbnN0IHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsCiAJCQkJICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpCiB7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCS8qIEhVR0VfVk1BTExPQyBwYXNzZXMgc21hbGwgcGFnZXMgdG8gc2V0X2RpcmVjdF9tYXAgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgYXJlYS0mZ3Q7bnJfcGFnZXM7IGkmIzQzOyYjNDM7KQpAQCAtMzQyMCw3ICYjNDM7MzQyMCw3IEBAIHN0YXRpYyB2b2lkIHZtX3Jlc2V0X3Blcm1zKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpCiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKIAl1bnNpZ25lZCBpbnQgcGFnZV9vcmRlciA9IHZtX2FyZWFfcGFnZV9vcmRlcihhcmVhKTsKIAlpbnQgZmx1c2hfZG1hcCA9IDA7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCS8qCiAJICogRmluZCB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBvZiB0aGUgZGlyZWN0IG1hcHBpbmdzIHRvIG1ha2Ugc3VyZSB0aGF0CkBAIC0zNDkzLDEwICYjNDM7MzQ5MywxMCBAQCB2b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKQogICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bm1hcHBpbmcgKHZ1bm1hcF9yYW5nZSkgYW5kIEtBU0FOCiAgKiBwb2lzb25pbmcgYmVmb3JlIGNhbGxpbmcgdGhpcy4KICAqLwotc3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgc3RhcnRfaWR4LAotCQkJICAgICAgIHVuc2lnbmVkIGludCBlbmRfaWR4KQomIzQzO3N0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJaWYgKCEodm0tJmd0O2ZsYWdzICZhbXA7IFZNX01BUF9QVVRfUEFHRVMpKSB7CiAJCWZvciAoaSA9IHN0YXJ0X2lkeDsgaSAmbHQ7IGVuZF9pZHg7IGkmIzQzOyYjNDM7KQpAQCAtMzgxOSwxMiAmIzQzOzM4MTksMTIgQEAgc3RhdGljIGlubGluZSBnZnBfdCB2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX3QgZmxhZ3MsIGNvbnN0IGJvb2wgbGFyZ2UpCiAJcmV0dXJuIGZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogdm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsCi0JCXVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewotCXVuc2lnbmVkIGludCBucl9hbGxvY2F0ZWQgPSAwOwotCXVuc2lnbmVkIGludCBucl9yZW1haW5pbmcgPSBucl9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzOwogCXVuc2lnbmVkIGludCBtYXhfYXR0ZW1wdF9vcmRlciA9IE1BWF9QQUdFX09SREVSOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBpOwpAQCAtMzg3Miw3ICYjNDM7Mzg3Miw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLAogCWlmICghb3JkZXIpIHsKIAkJd2hpbGUgKG5yX2FsbG9jYXRlZCAmbHQ7IG5yX3BhZ2VzKSB7CiAJCQl1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7Ci0JCQlpbnQgaTsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGk7CiAKIAkJCS8qCiAJCQkgKiBBIG1heGltdW0gYWxsb3dlZCByZXF1ZXN0IGlzIGhhcmQtY29kZWQgYW5kIGlzIDEwMApAQCAtMzg4MCw3ICYjNDM7Mzg4MCw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLAogCQkJICogbG9uZyBwcmVlbXB0aW9uIG9mZiBzY2VuYXJpbyBpbiB0aGUgYnVsay1hbGxvY2F0b3IKIAkJCSAqIHNvIHRoZSByYW5nZSBpcyBbMToxMDBdLgogCQkJICovCi0JCQlucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFUsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTsKJiM0MzsJCQlucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFVMLCBucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCk7CiAKIAkJCS8qIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBjb25zaWRlciBtZW1wb2xpY3ksIHdlIGNhbiYjMzk7dAogCQkJICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSwKQEAgLTQwMjYsMTIgJiM0Mzs0MDI2LDEyIEBAIHN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLAogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTsKIAl1bnNpZ25lZCBsb25nIGFycmF5X3NpemU7Ci0JdW5zaWduZWQgaW50IG5yX3NtYWxsX3BhZ2VzID0gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3NtYWxsX3BhZ2VzID0gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGludCBwYWdlX29yZGVyOwogCXVuc2lnbmVkIGludCBmbGFnczsKIAlpbnQgcmV0OwogCi0JYXJyYXlfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKW5yX3NtYWxsX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopOwomIzQzOwlhcnJheV9zaXplID0gbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7CiAKIAkvKiBfX0dGUF9OT0ZBSUwgYW5kICYjMzQ7bm9ibG9jayYjMzQ7IGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovCiAJaWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpCkBAIC00NTI1LDcgJiM0Mzs0NTI1LDcgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24KIAl9CiAKIAlpZiAoc2l6ZSAmbHQ7PSBvbGRfc2l6ZSkgewotCQl1bnNpZ25lZCBpbnQgbmV3X25yX3BhZ2VzID0gUEFHRV9BTElHTihzaXplKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJdW5zaWduZWQgbG9uZyBuZXdfbnJfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAKIAkJLyogWmVybyBvdXQgJiMzNDtmcmVlZCYjMzQ7IG1lbW9yeSwgcG90ZW50aWFsbHkgZm9yIGZ1dHVyZSByZWFsbG9jLiAqLwogCQlpZiAod2FudF9pbml0X29uX2ZyZWUoKSB8fCB3YW50X2luaXRfb25fYWxsb2MoZmxhZ3MpKQpAQCAtNDU1NCw3ICYjNDM7NDU1NCw3IEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduCiAJCSAgICAhKHZtLSZndDtmbGFncyAmYW1wOyAoVk1fRkxVU0hfUkVTRVRfUEVSTVMgfCBWTV9VU0VSTUFQKSkgJmFtcDsmYW1wOwogCQkgICAgZ2ZwX2hhc19pb19mcyhmbGFncykpIHsKIAkJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhwKTsKLQkJCXVuc2lnbmVkIGludCBvbGRfbnJfcGFnZXMgPSB2bS0mZ3Q7bnJfcGFnZXM7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBvbGRfbnJfcGFnZXMgPSB2bS0mZ3Q7bnJfcGFnZXM7CiAKIAkJCS8qCiAJCQkgKiBVc2UgdGhlIG5vZGUgbG9jayB0byBzeW5jaHJvbml6ZSB3aXRoIGNvbmN1cnJlbnQKQEAgLTQ1NjcsMTYgJiM0Mzs0NTY3LDEzIEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduCiAJCQlzcGluX3VubG9jaygmYW1wO3ZuLSZndDtidXN5LmxvY2spOwogCiAJCQkvKiBOb3RpZnkga21lbWxlYWsgb2YgdGhlIHJlZHVjZWQgYWxsb2NhdGlvbiBzaXplIGJlZm9yZSB1bm1hcHBpbmcuICovCi0JCQlrbWVtbGVha19mcmVlX3BhcnQoCi0JCQkJKHZvaWQgKilhZGRyICYjNDM7ICgodW5zaWduZWQgbG9uZyluZXdfbnJfcGFnZXMKLQkJCQkJCSZsdDsmbHQ7IFBBR0VfU0hJRlQpLAotCQkJCSh1bnNpZ25lZCBsb25nKShvbGRfbnJfcGFnZXMgLSBuZXdfbnJfcGFnZXMpCi0JCQkJCSZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwkJCWttZW1sZWFrX2ZyZWVfcGFydCgodm9pZCAqKWFkZHIgJiM0MzsKJiM0MzsJCQkJCSAgIChuZXdfbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCksCiYjNDM7CQkJCQkgICAob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKQomIzQzOwkJCQkJCSZsdDsmbHQ7IFBBR0VfU0hJRlQpOwogCi0JCQl2dW5tYXBfcmFuZ2UoYWRkciAmIzQzOyAoKHVuc2lnbmVkIGxvbmcpbmV3X25yX3BhZ2VzCi0JCQkJCSAgICAgJmx0OyZsdDsgUEFHRV9TSElGVCksCi0JCQkJICAgICBhZGRyICYjNDM7ICgodW5zaWduZWQgbG9uZylvbGRfbnJfcGFnZXMKLQkJCQkJICAgICAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7CQkJdnVubWFwX3JhbmdlKGFkZHIgJiM0MzsgKG5ld19ucl9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkJICAgICBhZGRyICYjNDM7IChvbGRfbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCkpOwogCiAJCQl2bV9hcmVhX2ZyZWVfcGFnZXModm0sIG5ld19ucl9wYWdlcywgb2xkX25yX3BhZ2VzKTsKIAkJfQpAQCAtNTQwMCw3ICYjNDM7NTM5Nyw3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpCiAJc3RydWN0IHZtYXBfYXJlYSAqdmE7CiAJc3RydWN0IHZtYXBfbm9kZSAqdm47CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGludCBucl9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKIAogCWFkZHIgPSBQQUdFX0FMSUdOKCh1bnNpZ25lZCBsb25nKSBvYmplY3QpOwogCXZuID0gYWRkcl90b19ub2RlKGFkZHIpOwpAQCAtNTQyMCw3ICYjNDM7NTQxNyw3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpCiAJbnJfcGFnZXMgPSB2bS0mZ3Q7bnJfcGFnZXM7CiAJc3Bpbl91bmxvY2soJmFtcDt2bi0mZ3Q7YnVzeS5sb2NrKTsKIAotCXByX2NvbnQoJiMzNDsgJXUtcGFnZSB2bWFsbG9jIHJlZ2lvbiBzdGFydGluZyBhdCAlI2x4IGFsbG9jYXRlZCBhdCAlcFNcbiYjMzQ7LAomIzQzOwlwcl9jb250KCYjMzQ7ICVsdS1wYWdlIHZtYWxsb2MgcmVnaW9uIHN0YXJ0aW5nIGF0ICUjbHggYWxsb2NhdGVkIGF0ICVwU1xuJiMzNDssCiAJCW5yX3BhZ2VzLCBhZGRyLCBjYWxsZXIpOwogCiAJcmV0dXJuIHRydWU7CkBAIC01NDM4LDE2ICYjNDM7NTQzNSwxNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KQogc3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LAogCQkJCSB1bnNpZ25lZCBpbnQgKmNvdW50ZXJzKQogewotCXVuc2lnbmVkIGludCBucjsKIAl1bnNpZ25lZCBpbnQgc3RlcCA9IDFVICZsdDsmbHQ7IHZtX2FyZWFfcGFnZV9vcmRlcih2KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwl1bnNpZ25lZCBpbnQgbnI7CiAKIAlpZiAoIWNvdW50ZXJzKQogCQlyZXR1cm47CiAKIAltZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOwogCi0JZm9yIChuciA9IDA7IG5yICZsdDsgdi0mZ3Q7bnJfcGFnZXM7IG5yICYjNDM7PSBzdGVwKQotCQljb3VudGVyc1twYWdlX3RvX25pZCh2LSZndDtwYWdlc1tucl0pXSAmIzQzOz0gc3RlcDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHYtJmd0O25yX3BhZ2VzOyBpICYjNDM7PSBzdGVwKQomIzQzOwkJY291bnRlcnNbcGFnZV90b19uaWQodi0mZ3Q7cGFnZXNbaV0pXSAmIzQzOz0gc3RlcDsKIAlmb3JfZWFjaF9ub2RlX3N0YXRlKG5yLCBOX0hJR0hfTUVNT1JZKQogCQlpZiAoY291bnRlcnNbbnJdKQogCQkJc2VxX3ByaW50ZihtLCAmIzM0OyBOJXU9JXUmIzM0OywgbnIsIGNvdW50ZXJzW25yXSk7CkBAIC01NTA1LDcgJiM0Mzs1NTAzLDcgQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiAJCQkJc2VxX3ByaW50ZihtLCAmIzM0OyAlcFMmIzM0Oywgdi0mZ3Q7Y2FsbGVyKTsKIAogCQkJaWYgKHYtJmd0O25yX3BhZ2VzKQotCQkJCXNlcV9wcmludGYobSwgJiMzNDsgcGFnZXM9JWQmIzM0Oywgdi0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJCQlzZXFfcHJpbnRmKG0sICYjMzQ7IHBhZ2VzPSVsdSYjMzQ7LCB2LSZndDtucl9wYWdlcyk7CiAKIAkJCWlmICh2LSZndDtwaHlzX2FkZHIpCiAJCQkJc2VxX3ByaW50ZihtLCAmIzM0OyBwaHlzPSVwYSYjMzQ7LCAmYW1wO3YtJmd0O3BoeXNfYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmcgQW5hbHlzaXM6IHZtYWxsb2MuYyBUeXBlIENoYW5nZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBidW1waW5nIGBucl9wYWdlc2AgaW4gYHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgYW5kIHByb3BhZ2F0aW5nIHRoZSBjaGFuZ2UgdGhyb3VnaG91dCBgbW0vdm1hbGxvYy5jYC4gVGhlIG1haW4gbW90aXZhdGlvbiBzZWVtcyB0byBiZSBzdXBwb3J0aW5nIGxhcmdlciB2bWFsbG9jIGFsbG9jYXRpb25zLCBleGNlZWRpbmcgdGhlIDRHQiBsaW1pdCBpbXBvc2VkIGJ5IGEgMzItYml0IGB1bnNpZ25lZCBpbnRgLiBPbiA2NC1iaXQgc3lzdGVtcywgYHVuc2lnbmVkIGludGAgaXMgc3RpbGwgb25seSAzMiBiaXRzLiBUaGlzIG1lYW5zIGEgbWF4aW11bSBvZiA0RyBwYWdlcyBvZiBtZW1vcnkuIFdpdGggYHVuc2lnbmVkIGxvbmdgIHdlIGhhdmUgYSBtdWNoIGxhcmdlciBjYXBhY2l0eS4KClRoZSBkaWZmIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ6IHR5cGUgY2hhbmdlcyBhY3Jvc3MgYSBidW5jaCBvZiBmdW5jdGlvbnMuICBJIHNlZSBjaGFuZ2VzIGluIGBzZXRfYXJlYV9kaXJlY3RfbWFwYCwgYHZtX3Jlc2V0X3Blcm1zYCwgYHZtX2FyZWFfZnJlZV9wYWdlc2AsIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYF9fdm1hbGxvY19hcmVhX25vZGVgLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBzaG93X251bWFfaW5mb2AsIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgLiAgVGhlIGNvZGUgaW4gcXVlc3Rpb24gaGFzIHRvIGJlIGNoZWNrZWQsIGFzIGl0IGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLgoKSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCB0aGUgZGlmZmljdWx0eSBvZiBmdXp6aW5nIHRoaXMgZWZmZWN0aXZlbHksIHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgYWxsb2NhdGluZyBtYXNzaXZlIGFtb3VudHMgb2Ygdm1hbGxvYyBtZW1vcnkgdG8gdHJpZ2dlciB0aGUgYWN0dWFsIGRpZmZlcmVuY2UsIHdoaWNoIGlzbiYjMzk7dCBlYXN5IHRvIGRvIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuIEJ1dCB0aGVuIGFnYWluLCBhIGJ1ZyBpbnZvbHZpbmcgdGhlIHRydW5jYXRpb24gb2Ygc2l6ZSwgZXRjIGNvdWxkIGxlYWQgdG8gYSBkaWZmZXJlbmNlIG5vdyB0aGF0IGl0IGlzIGEgNjQtYml0IHZhcmlhYmxlLgoKVGhlbiB0aGUgaW5zdHJ1Y3Rpb25zIHBvcHBlZCBpbnRvIG15IGhlYWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzICpub3QqIGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIG5vdCBkZWNvcmF0aXZlLCBhbmQgaXQgaXMgYSBjaGFuZ2UgdG8gYSBudW1lcmljIGNvbnN0YW50IG9yIG1hY3JvIHRoYXQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoICppcyogd29ydGggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGZvY3VzLiAgV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0PyBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYHNldF9hcmVhX2RpcmVjdF9tYXBgLCBgdm1fcmVzZXRfcGVybXNgLCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX192bWFsbG9jX2FyZWFfbm9kZWAsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2R1bXBfb2JqYCwgYHNob3dfbnVtYV9pbmZvYCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AuICBTaW5jZSB3ZSB3YW50IHRvIGZvY3VzIG9uIGZ1enppbmcgQVBJIGVudHJ5cG9pbnRzLCBsZXQgbWUgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBmaWx0ZXIgZG93biB0aGUgbGlzdC4gIAoKQWxyaWdodCwgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYF9fdm1hbGxvY19hcmVhX25vZGVgIGxvb2sgbGlrZSBBUEkgZW50cnlwb2ludHMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2hlY2sgdGhlIGNvZGUgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHN0YXRpYyBvciBub3QuCkxldCYjMzk7cyBjaGVjayBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgX192bWFsbG9jX2FyZWFfbm9kZWAgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NDQ1Mz1FWFBPUlRfU1lNQk9MKHZ6YWxsb2Nfbm9kZV9ub3Byb2YpO1xuLS1cbm1tL3ZtYWxsb2MuYy00NDg3LSAqL1xubW0vdm1hbGxvYy5jOjQ0ODg6dm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG5tbS92bWFsbG9jLmMtNDQ4OS1cdFx0XHRcdCBnZnBfdCBmbGFncywgaW50IG5pZClcbi0tXG5tbS92bWFsbG9jLmMtNDYxMi19XG5tbS92bWFsbG9jLmM6NDYxMzpFWFBPUlRfU1lNQk9MKHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00NjE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gRnVuY3Rpb25zKioKClJpZ2h0LCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLi4uIHllcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGFuIGV4cG9ydGVkIGZ1bmN0aW9uLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIFRoZSBxdWVzdGlvbiBub3cgaXMgYWJvdXQgYF9fdm1hbGxvY19hcmVhX25vZGVgLiBJdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXQmIzM5O3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBCdXQgdGhhdCBkb2VzbiYjMzk7dCBzdG9wIG1lIGZyb20gd2FudGluZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBTbywgbGV0JiMzOTtzIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoZXJlIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBpcyBpbnZva2VkIHdpdGhpbiB0aGUga2VybmVsIHRvIGRldGVybWluZSBpdHMgY29udHJpYnV0aW9uIHRvIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcHJvY2VzcywgZXZlbiBpZiBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byBpbnRlcm5hbCB1c2FnZSB3aXRoaW4gdGhlIG1vZHVsZS4gS25vd2luZyAqd2hvKiBpcyBjYWxsaW5nIGl0LCBhbmQgdW5kZXIgKndoYXQqIGNpcmN1bXN0YW5jZXMsIGlzIGVzc2VudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZtYWxsb2NfYXJlYV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zOTUzPXN0YXRpYyB2b2lkIGNsZWFudXBfdm1fYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS92bWFsbG9jLmMtMzk3MC0vKlxubW0vdm1hbGxvYy5jOjM5NzE6ICogSGVscGVyIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgdG8gZGVmZXIgY2xlYW51cFxubW0vdm1hbGxvYy5jLTM5NzItICogb2YgcGFydGlhbGx5IGluaXRpYWxpemVkIHZtX3N0cnVjdCBpbiBlcnJvciBwYXRocy5cbi0tXG5tbS92bWFsbG9jLmM9NDAxND1tZW1hbGxvY19yZXN0b3JlX3Njb3BlKHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5tbS92bWFsbG9jLmMtNDAxOS1cbm1tL3ZtYWxsb2MuYzo0MDIwOnN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxubW0vdm1hbGxvYy5jLTQwMjEtXHRcdFx0XHQgcGdwcm90X3QgcHJvdCwgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQsXG4tLVxubW0vdm1hbGxvYy5jPTQxODA9dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDIzMC1cdC8qXG5tbS92bWFsbG9jLmM6NDIzMTpcdCAqIFByZXBhcmUgYXJndW1lbnRzIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgYW5kXG5tbS92bWFsbG9jLmMtNDIzMi1cdCAqIGthc2FuX3VucG9pc29uX3ZtYWxsb2MoKS5cbi0tXG5tbS92bWFsbG9jLmMtNDI1NC1cdC8qIEFsbG9jYXRlIHBoeXNpY2FsIHBhZ2VzIGFuZCBtYXAgdGhlbSBpbnRvIHZtYWxsb2Mgc3BhY2UuICovXG5tbS92bWFsbG9jLmM6NDI1NTpcdHJldCA9IF9fdm1hbGxvY19hcmVhX25vZGUoYXJlYSwgZ2ZwX21hc2ssIHByb3QsIHNoaWZ0LCBub2RlKTtcbm1tL3ZtYWxsb2MuYy00MjU2LVx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBDYWxsIFBhdGgqKgoKUmlnaHQsIHNvIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzIHVzaW5nIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBpbnRlcm5hbGx5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzcGVjaWZpYyBub2Rlcy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGNoYWluLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgb2YgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGl0cyBwdXJwb3NlLCB1c2FnZSBjb250ZXh0LCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJiMzOTtzIGludm9raW5nIHRoaXMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYmVpbmcgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz00MDIwPXN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3ZtYWxsb2MuYy00MDY1LVx0ICpcbm1tL3ZtYWxsb2MuYzo0MDY2Olx0ICogUGxlYXNlIG5vdGUsIHRoZSBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoKSBmYWxscy1iYWNrXG5tbS92bWFsbG9jLmMtNDA2Ny1cdCAqIHRvIG9yZGVyLTAgcGFnZXMgaWYgaGlnaC1vcmRlciBhdHRlbXB0IGlzIHVuc3VjY2Vzc2Z1bC5cbi0tXG5tbS92bWFsbG9jLmM9NDEzNT1zdGF0aWMgZ2ZwX3Qgdm1hbGxvY19maXhfZmxhZ3MoZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vdm1hbGxvYy5jLTQxNzktICovXG5tbS92bWFsbG9jLmM6NDE4MDp2b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxubW0vdm1hbGxvYy5jLTQxODEtXHRcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3ZtYWxsb2MuYy00MzA4LSAqIFNlbWFudGljcyBvZiBAZ2ZwX21hc2sgKGluY2x1ZGluZyByZWNsYWltL3JldHJ5IG1vZGlmaWVycyBzdWNoIGFzXG5tbS92bWFsbG9jLmM6NDMwOTogKiBfX0dGUF9OT0ZBSUwpIGFyZSB0aGUgc2FtZSBhcyBpbiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoKS5cbm1tL3ZtYWxsb2MuYy00MzEwLSAqXG4tLVxubW0vdm1hbGxvYy5jPTQzMTM9dm9pZCAqX192bWFsbG9jX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDMxNS17XG5tbS92bWFsbG9jLmM6NDMxNjpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgYWxpZ24sIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxubW0vdm1hbGxvYy5jLTQzMTctXHRcdFx0XHRnZnBfbWFzaywgUEFHRV9LRVJORUwsIDAsIG5vZGUsIGNhbGxlcik7XG4tLVxubW0vdm1hbGxvYy5jPTQzNjk9dm9pZCAqdm1hbGxvY19odWdlX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlKVxuLS1cbm1tL3ZtYWxsb2MuYy00MzcyLVx0XHRnZnBfbWFzayA9IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF9tYXNrKTtcbm1tL3ZtYWxsb2MuYzo0MzczOlx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCAxLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00Mzc0LVx0XHRcdFx0XHQgICBnZnBfbWFzaywgUEFHRV9LRVJORUwsIFZNX0FMTE9XX0hVR0VfVk1BUCxcbi0tXG5tbS92bWFsbG9jLmM9NDQwOD12b2lkICp2bWFsbG9jX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbm1tL3ZtYWxsb2MuYy00NDA5LXtcbm1tL3ZtYWxsb2MuYzo0NDEwOlx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00NDExLVx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCxcbi0tXG5tbS92bWFsbG9jLmM9NDY1Mj12b2lkICp2bWFsbG9jXzMyX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbm1tL3ZtYWxsb2MuYy00NjUzLXtcbm1tL3ZtYWxsb2MuYzo0NjU0Olx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00NjU1LVx0XHRcdFx0ICAgIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdm1hbGxvYyBJbnRlcm5hbHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZtYWxsb2MgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIHRoZSBjb3JlIG9mIHRoZSB3aG9sZSBvcGVyYXRpb24uIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucywgbGlrZSBgX192bWFsbG9jX25vZGVfbm9wcm9mYCwgYHZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZmAsIGB2bWFsbG9jX3VzZXJfbm9wcm9mYCwgYW5kIGV2ZW4gYHZtYWxsb2NfMzJfdXNlcl9ub3Byb2ZgLiBJdCYjMzk7cyB0eXBpY2FsIHRvIGhhdmUgYSBjZW50cmFsIGZ1bmN0aW9uIGxpa2UgdGhhdCwgaGFuZGxpbmcgdGhlIGZ1bmRhbWVudGFsIGxvZ2ljLgoKV2FpdCBhIHNlY29uZOKApiB0aGlua2luZyBhYm91dCBpdCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgaXMgYWN0dWFsbHkgKmltcGxlbWVudGluZyogYF9fdm1hbGxvY19ub2RlX3JhbmdlYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlc2UgYG5vcHJvZmAgdmFyaWFudHMgYXJlIG9mdGVuIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9ucy4KCkkgc2hvdWxkIHZlcmlmeSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGl0c2VsZiBpcyBleHBvcnRlZCwgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGFjY2VzcyBsZXZlbCBhbmQgcG90ZW50aWFsIHVzYWdlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipfX3ZtYWxsb2Nfbm9kZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgTWVtb3J5IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYF9fdm1hbGxvY19ub2RlX3JhbmdlYCwgYnV0IHRoYXQgbWlnaHQgbm90IGJlIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0JiMzOTtzIGEgY29tbW9uIGdvdGNoYSBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQsIHJpZ2h0PyBBbHdheXMgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBMZXQgbWUgcXVpY2tseSBwaXZvdCB0byBzb21ldGhpbmcgSSAqa25vdyogaXMgcHJvYmFibHkgYWNjZXNzaWJsZTogYHZtYWxsb2NgLiBZZWFoLCBva2F5LCBgdm1hbGxvY2AgaXRzZWxmIHNob3VsZCBiZSBmaW5lLCBidXQgSSBrbm93IHRoZXJlIGFyZSB2YXJpYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgcHJvZmlsaW5nIG5lZWRlZC4gTGV0JiMzOTtzIHNlZS4uLiBwZXJoYXBzIGBfX3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgIG9yIGV2ZW4gYHZtYWxsb2Nfbm9wcm9mYCB3aWxsIGJlIGF2YWlsYWJsZSBpbnN0ZWFkLiBUaG9zZSBtaWdodCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgd2l0aG91dCB0aGUgb3ZlcmhlYWQuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoZXkgc3VpdCBteSBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip2bWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz04MT1ib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KVxuLS1cbm1tL3ZtYWxsb2MuYy04Ni19XG5tbS92bWFsbG9jLmM6ODc6RVhQT1JUX1NZTUJPTChpc192bWFsbG9jX2FkZHIpO1xubW0vdm1hbGxvYy5jLTg4LVxuLS1cbm1tL3ZtYWxsb2MuYz04MzY9aW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeClcbi0tXG5tbS92bWFsbG9jLmMtODQ5LX1cbm1tL3ZtYWxsb2MuYzo4NTA6RVhQT1JUX1NZTUJPTF9HUEwoaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcik7XG5tbS92bWFsbG9jLmMtODUxLVxuLS1cbm1tL3ZtYWxsb2MuYz04NTc9c3RydWN0IHBhZ2UgKnZtYWxsb2NfdG9fcGFnZShjb25zdCB2b2lkICp2bWFsbG9jX2FkZHIpXG4tLVxubW0vdm1hbGxvYy5jLTkxMC19XG5tbS92bWFsbG9jLmM6OTExOkVYUE9SVF9TWU1CT0wodm1hbGxvY190b19wYWdlKTtcbm1tL3ZtYWxsb2MuYy05MTItXG4tLVxubW0vdm1hbGxvYy5jPTkxNj11bnNpZ25lZCBsb25nIHZtYWxsb2NfdG9fcGZuKGNvbnN0IHZvaWQgKnZtYWxsb2NfYWRkcilcbi0tXG5tbS92bWFsbG9jLmMtOTE5LX1cbm1tL3ZtYWxsb2MuYzo5MjA6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX3RvX3Bmbik7XG5tbS92bWFsbG9jLmMtOTIxLVxuLS1cbm1tL3ZtYWxsb2MuYz00MzEzPXZvaWQgKl9fdm1hbGxvY19ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTQzMjQtI2lmZGVmIENPTkZJR19URVNUX1ZNQUxMT0NfTU9EVUxFXG5tbS92bWFsbG9jLmM6NDMyNTpFWFBPUlRfU1lNQk9MX0dQTChfX3ZtYWxsb2Nfbm9kZV9ub3Byb2YpO1xubW0vdm1hbGxvYy5jLTQzMjYtI2VuZGlmXG4tLVxubW0vdm1hbGxvYy5jPTQzMjg9dm9pZCAqX192bWFsbG9jX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3ZtYWxsb2MuYy00MzM0LX1cbm1tL3ZtYWxsb2MuYzo0MzM1OkVYUE9SVF9TWU1CT0woX192bWFsbG9jX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDMzNi1cbi0tXG5tbS92bWFsbG9jLmM9NDM0OT12b2lkICp2bWFsbG9jX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxubW0vdm1hbGxvYy5jLTQzNTMtfVxubW0vdm1hbGxvYy5jOjQzNTQ6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDM1NS1cbi0tXG5tbS92bWFsbG9jLmM9NDM2OT12b2lkICp2bWFsbG9jX2h1Z2Vfbm9kZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGUpXG4tLVxubW0vdm1hbGxvYy5jLTQzNzYtfVxubW0vdm1hbGxvYy5jOjQzNzc6RVhQT1JUX1NZTUJPTF9HUEwodm1hbGxvY19odWdlX25vZGVfbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00Mzc4LVxuLS1cbm1tL3ZtYWxsb2MuYz00NDA4PXZvaWQgKnZtYWxsb2NfdXNlcl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbm1tL3ZtYWxsb2MuYy00NDE0LX1cbm1tL3ZtYWxsb2MuYzo0NDE1OkVYUE9SVF9TWU1CT0wodm1hbGxvY191c2VyX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDQxNi1cbi0tXG5tbS92bWFsbG9jLmM9NDQzMD12b2lkICp2bWFsbG9jX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpXG4tLVxubW0vdm1hbGxvYy5jLTQ0MzQtfVxubW0vdm1hbGxvYy5jOjQ0MzU6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX25vZGVfbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00NDM2LVxuLS1cbm1tL3ZtYWxsb2MuYz00NjM2PXZvaWQgKnZtYWxsb2NfMzJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS92bWFsbG9jLmMtNDY0MC19XG5tbS92bWFsbG9jLmM6NDY0MTpFWFBPUlRfU1lNQk9MKHZtYWxsb2NfMzJfbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00NjQyLVxuLS1cbm1tL3ZtYWxsb2MuYz00NjUyPXZvaWQgKnZtYWxsb2NfMzJfdXNlcl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbm1tL3ZtYWxsb2MuYy00NjU4LX1cbm1tL3ZtYWxsb2MuYzo0NjU5OkVYUE9SVF9TWU1CT0wodm1hbGxvY18zMl91c2VyX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDY2MC1cbi0tXG5tbS92bWFsbG9jLmM9NTAyNz1pbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcbi0tXG5tbS92bWFsbG9jLmMtNTAzMy19XG5tbS92bWFsbG9jLmM6NTAzNDpFWFBPUlRfU1lNQk9MKHJlbWFwX3ZtYWxsb2NfcmFuZ2UpO1xubW0vdm1hbGxvYy5jLTUwMzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyB0YXJnZXQgc2VsZWN0aW9uLiBJIHNlZSBhIGxpc3Qgb2YgYHZtYWxsb2NfKl9ub3Byb2ZgIGZ1bmN0aW9ucyBleHBvcnRlZDogYHZtYWxsb2Nfbm9wcm9mYCwgYF9fdm1hbGxvY19ub3Byb2ZgLCBgdm1hbGxvY19ub2RlX25vcHJvZmAsIGB2bWFsbG9jX3VzZXJfbm9wcm9mYCwgYHZtYWxsb2NfMzJfbm9wcm9mYCwgYHZtYWxsb2NfMzJfdXNlcl9ub3Byb2ZgLCBgdm1hbGxvY19odWdlX25vZGVfbm9wcm9mYCwgYW5kIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAuIFJpZ2h0LCBgdm1hbGxvY2AgaXMgbm93IGEgbWFjcm8gcmVkaXJlY3RpbmcgdG8gYHZtYWxsb2Nfbm9wcm9mYCBpbiBuZXdlciBrZXJuZWxzLCBhIGNvbnNlcXVlbmNlIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uLiBNYWtlcyBzZW5zZS4KCkJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHdhcm4gYWdhaW5zdCBvdmVybHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtZWFucyBgdm1hbGxvY19ub3Byb2ZgIGl0c2VsZiBpcyBwcm9iYWJseSB0b28gYnJvYWQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLCBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB0aGUgcmVsZXZhbnQgcmVjZW50IGNoYW5nZXMuIExldCYjMzk7cyByZS1leGFtaW5lIHRob3NlIGNoYW5nZSBsb2NhdGlvbnM6IGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYF9fdm1hbGxvY19hcmVhX25vZGVgLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBzaG93X251bWFfaW5mb2AsIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgLgoKQWxyaWdodCwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzIGEgc3Ryb25nIGNvbnRlbmRlci4gSXQmIzM5O3MgZXhwbGljaXRseSB0aWVkIHRvIG1lbW9yeSByZWFsbG9jYXRpb25zLCB3aGljaCBpcyBhIGNvbW1vbiBhcmVhIGZvciBmdXp6aW5nLiBXaGF0IGVsc2UgbG9va3MgaW50ZXJlc3RpbmcgaGVyZT8gSSBzZWUgYHZtYWxsb2NfZHVtcF9vYmpgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBga21lbV9kdW1wX29iamAgY2hhaW4uIEFuZCwgYWgsIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgYXJlIGFzc29jaWF0ZWQgd2l0aCBgL3Byb2Mvdm1hbGxvY2luZm9gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIGtub3cgaG93IHRvIHRhcmdldCBwcm9jZnMgZW50cmllcy4gUmVhZGluZyBgL3Byb2Mvdm1hbGxvY2luZm9gIHNob3VsZCBkaXJlY3RseSB0cmlnZ2VyIGJvdGggYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfbnVtYV9pbmZvYC4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBpZiBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIGluZGVlZCBib3VuZCB0byBhIHNwZWNpZmljIHByb2NmcyBmaWxlLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY19pbmZvX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTMyNDQ9dm9pZCBjbGVhcl92bV91bmluaXRpYWxpemVkX2ZsYWcoc3RydWN0IHZtX3N0cnVjdCAqdm0pXG4tLVxubW0vdm1hbGxvYy5jLTMyNDgtXHQgKiB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdm0gaGFzIHByb3BlciB2YWx1ZXMuXG5tbS92bWFsbG9jLmM6MzI0OTpcdCAqIFBhaXIgd2l0aCBzbXBfcm1iKCkgaW4gdnJlYWRfaXRlcigpIGFuZCB2bWFsbG9jX2luZm9fc2hvdygpLlxubW0vdm1hbGxvYy5jLTMyNTAtXHQgKi9cbi0tXG5tbS92bWFsbG9jLmM9NDQ4OD12b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDU2MC1cdFx0XHQgKiBVc2UgdGhlIG5vZGUgbG9jayB0byBzeW5jaHJvbml6ZSB3aXRoIGNvbmN1cnJlbnRcbm1tL3ZtYWxsb2MuYzo0NTYxOlx0XHRcdCAqIHJlYWRlcnMgKHZtYWxsb2NfaW5mb19zaG93KS5cbm1tL3ZtYWxsb2MuYy00NTYyLVx0XHRcdCAqL1xuLS1cbm1tL3ZtYWxsb2MuYz01NDU0PXN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxubW0vdm1hbGxvYy5jLTU0NjktXG5tbS92bWFsbG9jLmM6NTQ3MDpzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbm1tL3ZtYWxsb2MuYy01NDcxLXtcbi0tXG5tbS92bWFsbG9jLmM9NTU0OT1zdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxubW0vdm1hbGxvYy5jLTU1NTAte1xubW0vdm1hbGxvYy5jOjU1NTE6XHRwcm9jX2NyZWF0ZV9zaW5nbGUoXCYjMzQ7dm1hbGxvY2luZm9cJiMzNDssIDA0MDAsIE5VTEwsIHZtYWxsb2NfaW5mb19zaG93KTtcbm1tL3ZtYWxsb2MuYy01NTUyLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCBvbiB2bWFsbG9jIFVzYWdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYHZtYWxsb2NgJiMzOTtzIGhhbmRsaW5nIG9mIHBhZ2UgY291bnRzLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHBvc2l0aXZlOyB0aGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyB3ZSBuZWVkIHRvIGJlIHZpZ2lsYW50IGFib3V0LiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXkgbWlnaHQgaW1wYWN0IGZ1enppbmcgZWZmb3J0cy4KCkkgc2VlIGl0JiMzOTtzIGVuYWJsaW5nIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYHByb2NfY3JlYXRlX3NpbmdsZWAgYW5kIGxpbmtpbmcgaXQgdG8gdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXNpczsgaXQgcHJvdmlkZXMgYSB3YXkgdG8gdHJpZ2dlciB0aGUgbW9kaWZpZWQgY29kZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgc3lzdGVtYXRpYyByZXBsYWNlbWVudCBvZiBgdW5zaWduZWQgaW50YCB3aXRoIGB1bnNpZ25lZCBsb25nYCBmb3IgdmFyaW91cyBwYWdlIGNvdW50IHZhcmlhYmxlcyB3aXRoaW4gdGhlIGB2bWFsbG9jYCBzdWJzeXN0ZW0uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIGB2LSZndDtucl9wYWdlc2AgaW4gYHZtYWxsb2NfaW5mb19zaG93YCwgYG5yYCBpbiBgc2hvd19udW1hX2luZm9gLCBhbmQgYG5yX3BhZ2VzYCBpbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYW5kIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBpbXBhY3RlZCwgYW5kIHRoZXJlZm9yZSB3YXJyYW50IGEgY2xvc2VyIGxvb2sgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFyZSBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19pbmZvX3Nob3dgLCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgaW4gbWluZCB0aGF0IGB2bWFsbG9jX2luZm9fc2hvd2AgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBjYW4mIzM5O3QgYmUgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5bWJvbCBmb3IgZnV6emluZyB1bmxlc3MgaXQmIzM5O3MgdHJpZ2dlcmVkIGluZGlyZWN0bHkgKHdoaWNoLCBhcyB3ZSBrbm93LCBpdCBpcyB0aHJvdWdoIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZSkuIEhvd2V2ZXIsIGZyb20gZXhwZXJpZW5jZSBJIGtub3cgdGhhdCBzeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHN0aWxsIHByZWZlcmFibGUsIHRob3VnaCwgdG8gcHJpb3JpdGl6ZSBleHBvc2VkIHN5bWJvbHMgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgdm1hbGxvY19kdW1wX29iamAgaXMgZXhwb3J0ZWQsIGFzIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBicm9hZGVuIG91ciBmdXp6aW5nIG9wdGlvbnMuIElmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBnb2luZyB0byByZXF1aXJlIGNhcmVmdWwgaW5zcGVjdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGB1bnNpZ25lZCBsb25nYCBjaGFuZ2VzIGFmZmVjdCB0aGUgcG90ZW50aWFsIGZvciBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdGhlIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgYHZtYWxsb2NgIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY19kdW1wX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NTM4Mj12b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKVxuLS1cbm1tL3ZtYWxsb2MuYy01MzkyLSNpZmRlZiBDT05GSUdfUFJJTlRLXG5tbS92bWFsbG9jLmM6NTM5Mzpib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxubW0vdm1hbGxvYy5jLTUzOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdm1hbGxvY19kdW1wX29iamAqKgoKQWxyaWdodCwgc28gYHZtYWxsb2NfZHVtcF9vYmpgIGlzbiYjMzk7dCBkZWNsYXJlZCBhcyBgZXh0ZXJuYCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIGBzdGF0aWNgIGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gVGhhdCBzdWdnZXN0cyBhIGRlbGliZXJhdGUgZGVjaXNpb247IGl0ICpjb3VsZCogYmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgZGVmaW5pbmcgZmlsZSwgZXZlbiBpZiB0aGUgbGlua2FnZSBpc24mIzM5O3QgZXhwbGljaXRseSBkZWNsYXJlZCBpbiB0aGUgaGVhZGVyLiBUaGVyZWZvcmUsIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGRlZmluaXRpdmVseSBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWNsYXJlZCBpbiBhIHB1YmxpYyBoZWFkZXIgZmlsZSwgYWxsb3dpbmcgYWNjZXNzIGZyb20gb3RoZXIgc291cmNlIGZpbGVzLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGl0cyBpbnRlbmRlZCBzY29wZSBhbmQgdXNhZ2UuIElmIGl0ICppcyogaW4gYSBoZWFkZXIsIHRoZW4gaXRzIG5vbi1zdGF0aWMgZGVmaW5pdGlvbiB3b3VsZCBpbmRpY2F0ZSBpdHMgZXhwZWN0ZWQgdXNlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGluY2x1ZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYWxsb2NfZHVtcF9vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0zMjU9c3RhdGljIGlubGluZSB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMyOC0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJJTlRLKVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI5OmJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpO1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMzE6c3RhdGljIGlubGluZSBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KSB7IHJldHVybiBmYWxzZTsgfVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgzOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdm1hbGxvYyBDb2RlIGZvciBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZtYWxsb2MgY29kZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBpbiBgaW5jbHVkZS9saW51eC92bWFsbG9jLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRvIGxvb2suIE5vdywgSSBzZWUgYHZtYWxsb2NfZHVtcF9vYmpgIGFuZCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGp1bXAgb3V0IGltbWVkaWF0ZWx5LiBHb29kIGNhbmRpZGF0ZXMuIEJ1dCwgd2FpdC4uLiBgX192bWFsbG9jX25vZGVfbm9wcm9mYD8gSXQgKmlzKiBhIGdlbmVyaWMsIGhvdC1wYXRoIGZ1bmN0aW9uLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgYHZtYWxsb2NgLCBzbyBtYXliZSBpdCYjMzk7cyB0aGUgcmlnaHQgb25lLgoKQnV0LCBoYW5nIG9uLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzbiYjMzk7dCBhY3R1YWxseSBob3QtcGF0aDsgaXTigJlzIHNwZWNpZmljYWxseSBmb3IgcmVhbGxvY2F0aW5nIHZtYWxsb2MgbWVtb3J5LiBIbW0sIGl0JiMzOTtzIGNhbGxlZCBieSBgdnJlYWxsb2NgIGFuZCBga3ZyZWFsbG9jYCwgcmlnaHQ/IE5vdywgdGhlIGJpZyBxdWVzdGlvbiBpczogSG93IGNvbW1vbiBpcyBga3ZyZWFsbG9jYD8gSSBrbm93IGl0JiMzOTtzIHVzZWQgYSBmYWlyIGJpdCwgYnV0IGl0JiMzOTtzIHByb2JhYmx5IGxlc3Mgb2YgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHRoYW4gYSBwbGFpbiBgdm1hbGxvY2AgY2FsbC4KClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIHN0ZXAgYmFjay4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgQ09ORklHIG9wdGlvbnMgdGhpcyBtb2RpZmljYXRpb24gbWlnaHQgZGVwZW5kIG9uLiBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3ZtYWxsb2MuY2AuIFRoaXMgaXMgbm9ybWFsbHkgY29tcGlsZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgTWFrZWZpbGUuLi4geWVzLCBpdCBsb29rcyBsaWtlIGB2bWFsbG9jLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cy4gU28sIG5vIG1ham9yIGRlcGVuZGVuY3kgaXNzdWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS0zOS1cdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlOjQwOlx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xubW0vTWFrZWZpbGUtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zIFJlbGF0ZWQgdG8gVmlydHVhbCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGhvdyB2YXJpb3VzIGtlcm5lbCBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIGB2bWFsbG9jLm9gLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgdGhlbiBgdm1hbGxvYy5vYCBnZXRzIGNvbXBpbGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gR2l2ZW4gdGhhdCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBvbiBwcmFjdGljYWxseSBldmVyeSBwbGF0Zm9ybSB0aGVzZSBkYXlzLCB0aGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IEkgc2VlIHRoYXQgYHZtYWxsb2NfZHVtcF9vYmpgIHJlcXVpcmVzIGJvdGggYENPTkZJR19QUklOVEtgICphbmQqIGBDT05GSUdfTU1VYC4gTWFrZXMgc2Vuc2U7IGR1bXAgZnVuY3Rpb25hbGl0eSBuZWVkcyBwcmludGluZyBjYXBhYmlsaXRpZXMsIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHZpcnR1YWwgbWVtb3J5LiBBbHJpZ2h0LCBJIGFsc28gbm90aWNlIGBzaG93X251bWFfaW5mb2AgZGVwZW5kcyBvbiBgQ09ORklHX05VTUFgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkaXZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGBzaG93X251bWFfaW5mb2Agc3BlY2lmaWNhbGx5LCBwcm9iYWJseSB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG93X251bWFfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NTM5Mz1ib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxuLS1cbm1tL3ZtYWxsb2MuYy01NDM0LSAqL1xubW0vdm1hbGxvYy5jOjU0MzU6c3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxubW0vdm1hbGxvYy5jLTU0MzYtXHRcdFx0XHQgdW5zaWduZWQgaW50ICpjb3VudGVycylcbi0tXG5tbS92bWFsbG9jLmM9NTQ3MD1zdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbi0tXG5tbS92bWFsbG9jLmMtNTUzMi1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG5tbS92bWFsbG9jLmM6NTUzMzpcdFx0XHRcdHNob3dfbnVtYV9pbmZvKG0sIHYsIGNvdW50ZXJzKTtcbm1tL3ZtYWxsb2MuYy01NTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEZ1bmN0aW9ucyBmb3IgVGVzdGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciB0ZXN0aW5nLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE5VTUEuIEl0IHNlZW1zIGxpa2UgYENPTkZJR19OVU1BYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGVzdGluZyBgc2hvd19udW1hX2luZm9gLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdC4KCkxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBpcyByZWFkaWx5IGF2YWlsYWJsZT8gYHZtYWxsb2NfZHVtcF9vYmpgIGlzIGFuIGludGVyZXN0aW5nIGNhbmRpZGF0ZSwgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdGllZCB0byBgQ09ORklHX1BSSU5US2AsIHNvIHRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIG9yIHBlcmhhcHMgc29tZSBlYXNpbHkgY29uZmlndXJhYmxlIGNvdmVyYWdlLgoKTm93LCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLi4uIEFoLCB5ZXMsIHRoYXQmIzM5O3MgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgdm1hbGxvYy5jYCwgc28gaXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcgYSBjb3JlIGZ1bmN0aW9uLgoKU28sIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbi4gV2UgaGF2ZToKCiogICBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIC0gQSBsaWtlbHkgY2FuZGlkYXRlIGR1ZSB0byBpdHMgdW5jb25kaXRpb25hbCBjb21waWxhdGlvbi4KKiAgIGB2bWFsbG9jX2R1bXBfb2JqYCAtIFBvdGVudGlhbCBmb3IgcHJpbnRrIGRlYnVnZ2luZyBhbmQgY292ZXJhZ2UuCiogICBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCAtIEhtbS4uLiBJdCYjMzk7cyB0aGUgbWFpbiB3b3JraG9yc2UgaW4gdGVybXMgb2YgYG5yX3BhZ2VzYCwgYW5kIEkgdGhvdWdodCBpdCB3YXMgc3RhdGljLi4uIFdhaXQsIGl0IGlzbiYjMzk7dCAqc3RhdGljKj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uIE5vLCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBleHBvcnRlZC4gT2theSwgc28gaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIE1pZ2h0IGJlIHRyaWNreSB0byB0ZXN0IGRpcmVjdGx5LCBidXQgd29ydGggbG9va2luZyBpbnRvIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyB1c2VkIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NDAyMD1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtNDA2NS1cdCAqXG5tbS92bWFsbG9jLmM6NDA2NjpcdCAqIFBsZWFzZSBub3RlLCB0aGUgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKCkgZmFsbHMtYmFja1xubW0vdm1hbGxvYy5jLTQwNjctXHQgKiB0byBvcmRlci0wIHBhZ2VzIGlmIGhpZ2gtb3JkZXIgYXR0ZW1wdCBpcyB1bnN1Y2Nlc3NmdWwuXG4tLVxubW0vdm1hbGxvYy5jPTQxMzU9c3RhdGljIGdmcF90IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF90IGZsYWdzKVxuLS1cbm1tL3ZtYWxsb2MuYy00MTc5LSAqL1xubW0vdm1hbGxvYy5jOjQxODA6dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbm1tL3ZtYWxsb2MuYy00MTgxLVx0XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtNDMwOC0gKiBTZW1hbnRpY3Mgb2YgQGdmcF9tYXNrIChpbmNsdWRpbmcgcmVjbGFpbS9yZXRyeSBtb2RpZmllcnMgc3VjaCBhc1xubW0vdm1hbGxvYy5jOjQzMDk6ICogX19HRlBfTk9GQUlMKSBhcmUgdGhlIHNhbWUgYXMgaW4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKCkuXG5tbS92bWFsbG9jLmMtNDMxMC0gKlxuLS1cbm1tL3ZtYWxsb2MuYz00MzEzPXZvaWQgKl9fdm1hbGxvY19ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTQzMTUte1xubW0vdm1hbGxvYy5jOjQzMTY6XHRyZXR1cm4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00MzE3LVx0XHRcdFx0Z2ZwX21hc2ssIFBBR0VfS0VSTkVMLCAwLCBub2RlLCBjYWxsZXIpO1xuLS1cbm1tL3ZtYWxsb2MuYz00MzY5PXZvaWQgKnZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZSlcbi0tXG5tbS92bWFsbG9jLmMtNDM3Mi1cdFx0Z2ZwX21hc2sgPSB2bWFsbG9jX2ZpeF9mbGFncyhnZnBfbWFzayk7XG5tbS92bWFsbG9jLmM6NDM3MzpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgMSwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG5tbS92bWFsbG9jLmMtNDM3NC1cdFx0XHRcdFx0ICAgZ2ZwX21hc2ssIFBBR0VfS0VSTkVMLCBWTV9BTExPV19IVUdFX1ZNQVAsXG4tLVxubW0vdm1hbGxvYy5jPTQ0MDg9dm9pZCAqdm1hbGxvY191c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXG5tbS92bWFsbG9jLmMtNDQwOS17XG5tbS92bWFsbG9jLmM6NDQxMDpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgU0hNTEJBLCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG5tbS92bWFsbG9jLmMtNDQxMS1cdFx0XHRcdCAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsXG4tLVxubW0vdm1hbGxvYy5jPTQ2NTI9dm9pZCAqdm1hbGxvY18zMl91c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXG5tbS92bWFsbG9jLmMtNDY1My17XG5tbS92bWFsbG9jLmM6NDY1NDpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgU0hNTEJBLCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG5tbS92bWFsbG9jLmMtNDY1NS1cdFx0XHRcdCAgICBHRlBfVk1BTExPQzMyIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCoqCgpIbW0sIHNvIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gVGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzLCBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkIGluIGEgaGVhZGVyIGZpbGU/IFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSYjMzk7cyBkZXNpZ24gYW5kIGhvdyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIChvciwgcG90ZW50aWFsbHksIG1pc3VzZWQpLiBLbm93aW5nIHdoZXRoZXIgaXQmIzM5O3MgbWVhbnQgdG8gYmUgYW4gaW50ZXJuYWwgaGVscGVyLCBvciBwYXJ0IG9mIGEgbW9yZSBnZW5lcmFsIEFQSSwgaXMga2V5IHRvIGRpYWdub3Npbmcgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC92bWFsbG9jLmg9MTcxPWV4dGVybiB2b2lkICpfX3ZtYWxsb2Nfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzMtXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoxNzQ6ZXh0ZXJuIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzUtXHRcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrLFxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTE3Ny1cdFx0XHRjb25zdCB2b2lkICpjYWxsZXIpIF9fYWxsb2Nfc2l6ZSgxKTtcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjE3ODojZGVmaW5lIF9fdm1hbGxvY19ub2RlX3JhbmdlKC4uLilcdGFsbG9jX2hvb2tzKF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGtlcm5lbCBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IHBsYWNlcyB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoZSBjb2RlIGNoYW5nZSBpcyBpbiBgaW5jbHVkZS9saW51eC92bWFsbG9jLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgbG9va3MgcHJvbWlzaW5nLiBJdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGB2bWFsbG9jYCBmdW5jdGlvbmFsaXR5LCBtYWtpbmcgaXQgYSBuYXR1cmFsIHRhcmdldCwgYnV0Li4uIGlzIGl0ICp0b28qIGdlbmVyaWM/IEl0JiMzOTtzIHRoZSBob3QtcGF0aCwgY2FsbGVkIGZvciAqZXZlcnkqIGB2bWFsbG9jYC4gVGhhdCBtYWtlcyBpdCBsZXNzIHRhcmdldGVkIGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2guCgpBaCwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgY2hhbmdlcyBgdW5zaWduZWQgaW50IG5yX3BhZ2VzYCB0byBgdW5zaWduZWQgbG9uZyBucl9wYWdlc2AuIFRoaXMgaXMgKmNydWNpYWwqLiBUaGlzIG1lYW5zIHRoZSBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyBob3cgbGFyZ2UgYWxsb2NhdGlvbnMgYXJlIGhhbmRsZWQuIEdpdmVuIHRoaXMsIGZ1enppbmcgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBpcyBsb29raW5nIGJldHRlci4gSXQmIzM5O3MgbGVzcyBvZiBhIGhvdCBwYXRoIHRoYW4gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGFuZCBpdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFRoYXQmIzM5O3MgaWRlYWwuCgpgdm1hbGxvY19kdW1wX29iamAgaXMgYWxzbyBhIGdvb2QgY29udGVuZGVyIGZvciBmdXp6aW5nLgoKTm93LCB3aGF0IGFib3V0IGB2ZnJlZV9hdG9taWNgPyBJdCYjMzk7cyBub3QgZGlyZWN0bHkgdG91Y2hlZCwgYnV0IGB2bV9hcmVhX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBpdCwgYW5kICp0aGF0KiBmdW5jdGlvbiBpcy4gU28sIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB2bV9hcmVhX2ZyZWVfcGFnZXNgICppcyogaW5kZWVkIGNhbGxlZCBieSBgdmZyZWVgLiBHb3R0YSBjb3ZlciBhbGwgYmFzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtX2FyZWFfZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MzQ2OD12b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0zNDg1LS8qXG5tbS92bWFsbG9jLmM6MzQ4NjogKiB2bV9hcmVhX2ZyZWVfcGFnZXMgLSBmcmVlIGEgcmFuZ2Ugb2YgcGFnZXMgZnJvbSBhIHZtYWxsb2MgYWxsb2NhdGlvblxubW0vdm1hbGxvYy5jLTM0ODctICogQHZtOiB0aGUgdm1fc3RydWN0IGNvbnRhaW5pbmcgdGhlIHBhZ2VzXG4tLVxubW0vdm1hbGxvYy5jLTM0OTUtICovXG5tbS92bWFsbG9jLmM6MzQ5NjpzdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfaWR4LFxubW0vdm1hbGxvYy5jLTM0OTctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcbi0tXG5tbS92bWFsbG9jLmM9MzUyOD12b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxubW0vdm1hbGxvYy5jLTM1NTMtXG5tbS92bWFsbG9jLmM6MzU1NDpcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgMCwgdm0tXHUwMDNlbnJfcGFnZXMpO1xubW0vdm1hbGxvYy5jLTM1NTUtXHRrdmZyZWUodm0tXHUwMDNlcGFnZXMpO1xuLS1cbm1tL3ZtYWxsb2MuYz00NDg4PXZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxuLS1cbm1tL3ZtYWxsb2MuYy00NTc3LVxubW0vdm1hbGxvYy5jOjQ1Nzg6XHRcdFx0dm1fYXJlYV9mcmVlX3BhZ2VzKHZtLCBuZXdfbnJfcGFnZXMsIG9sZF9ucl9wYWdlcyk7XG5tbS92bWFsbG9jLmMtNDU3OS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyOQoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgd2UgaGFuZGxlIHBhZ2UgY291bnRzIGluIGB2bWFsbG9jYCBhbGxvY2F0aW9ucywgbW92aW5nIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIGluIGBzdHJ1Y3Qgdm1fc3RydWN0YC4gVGhpcyBpcyBhIGJpZyBkZWFsOyBpdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWRkcmVzc2VzIHBvdGVudGlhbCB0cnVuY2F0aW9uIGlzc3VlcyBhbmQsIGNydWNpYWxseSwgdW5sb2NrcyBzdXBwb3J0IGZvciB2bWFsbG9jIGFsbG9jYXRpb25zIGV4Y2VlZGluZyAxNlRCLiBUaGlzIGltcGFjdHMgYG1tL3ZtYWxsb2MuY2AgZGlyZWN0bHkuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSB0b3VjaGVkIG9yIGNhbGwgdGhvc2UgdGhhdCBhcmUuIGB2ZnJlZWAgdWx0aW1hdGVseSB1c2VzIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLCBzbyBgdmZyZWVgIGl0c2VsZiBpcyBhIGhvdC1wYXRoIHRvIHdhdGNoLgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucyBhcyBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nOgoKKiAgIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAKKiAgIGB2bWFsbG9jX2R1bXBfb2JqYAoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgc2V0IHRvIHRlc3QgYWxsIHRoZSBjb2RlIHBhdGhzLiBJdCBsb29rcyBsaWtlOgoKKiAgIGBDT05GSUdfTlVNQWAgaXMgbmVlZGVkIGZvciBgc2hvd19udW1hX2luZm9gLgoqICAgYENPTkZJR19QUklOVEtgIGlzIG5lZWRlZCBmb3IgYHZtYWxsb2NfZHVtcF9vYmpgLgoKSSBjb25maXJtZWQgdGhhdCBgdm1hbGxvY19kdW1wX29iamAgaXMgZGVmaW5lZCBpZiBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfUFJJTlRLYC4KCkkmIzM5O20gYWxzbyBub3RpbmcgdGhhdCBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYHZtYWxsb2NfaW5mb19zaG93YCwgYHNob3dfbnVtYV9pbmZvYCwgYHNldF9hcmVhX2RpcmVjdF9tYXBgLCBgdm1fcmVzZXRfcGVybXNgLCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBhbmQgYF9fdm1hbGxvY19hcmVhX25vZGVgLCBhcmUgc3RhdGljLCBidXQgSSBzaG91bGQgYmUgY2FyZWZ1bCB3aGVuIGxvb2tpbmcgYXQgY2FsbGluZyByZWxhdGlvbnNoaXBzLgoKU28sIGJleW9uZCB0aGUgdHdvIGZ1bmN0aW9ucyBJJiMzOTt2ZSBhbHJlYWR5IGxpc3RlZCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgYW5kIGB2ZnJlZWAgKGFuZCBpdHMgdmFyaWFudHMpIGFyZSBhbHNvIGtleS4gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgY2FsbHMgYF9fdm1hbGxvY19hcmVhX25vZGVgLiBgdmZyZWVgIGNhbGxzIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCByZWNvbW1lbmQgdGhlIGZvbGxvd2luZyBpbiBteSBhbmFseXNpczoKCioqRm9jdXNTeW1ib2xzOioqCgoqICAgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYAoqICAgYHZtYWxsb2NfZHVtcF9vYmpgCgoqKkVuYWJsZUNvbmZpZ3M6KioKCiogICBgTlVNQWAKKiAgIGBQUklOVEtgCgpJIGFsc28gdmVyaWZpZWQgdGhhdCBgUFJJTlRLYCBhbmQgYE5VTUFgIGFyZSBjb21tb25seSBlbmFibGVkIG9uIHg4NiwgYnV0IEkgc3RpbGwgbmVlZCB0byBiZSBhd2FyZSB0aGF0IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIHRoZXkgbWF5IG5vdCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7UFJJTlRLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YmIzM0OywKICAgICYjMzQ7dm1hbGxvY19kdW1wX29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIGBucl9wYWdlc2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIHRvIHN1cHBvcnQgdm1hbGxvYyBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiAxNlRCIChvciBmaXggdHJ1bmNhdGlvbiBidWdzKS4gSXQgdXBkYXRlcyB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYCB0byB1c2UgYHVuc2lnbmVkIGxvbmdgIGZvciBwYWdlIGNvdW50cyBhbmQgaW5kaWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCB3aGljaCB3ZXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgcmVxdWlyZSBgTlVNQWAgYW5kIGBQUklOVEtgIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtQUklOVEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZiYjMzQ7LAogICAgJiMzNDt2bWFsbG9jX2R1bXBfb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgYG5yX3BhZ2VzYCBpbiBgc3RydWN0IHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgdG8gc3VwcG9ydCB2bWFsbG9jIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDE2VEIgKG9yIGZpeCB0cnVuY2F0aW9uIGJ1Z3MpLiBJdCB1cGRhdGVzIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIHRvIHVzZSBgdW5zaWduZWQgbG9uZ2AgZm9yIHBhZ2UgY291bnRzIGFuZCBpbmRpY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHdoaWNoIHdlcmUgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCByZXF1aXJlIGBOVU1BYCBhbmQgYFBSSU5US2AgdG8gdGVzdCB0aGUgbW9kaWZpZWQgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NTk6NTguOTY2NTY3MDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MjA0MzM5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlBSSU5US1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mXCIsXG4gICAgXCJ2bWFsbG9jX2R1bXBfb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiBgbnJfcGFnZXNgIGluIGBzdHJ1Y3Qgdm1fc3RydWN0YCBmcm9tIGB1bnNpZ25lZCBpbnRgIHRvIGB1bnNpZ25lZCBsb25nYCB0byBzdXBwb3J0IHZtYWxsb2MgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gMTZUQiAob3IgZml4IHRydW5jYXRpb24gYnVncykuIEl0IHVwZGF0ZXMgdmFyaW91cyBmdW5jdGlvbnMgaW4gYG1tL3ZtYWxsb2MuY2AgdG8gdXNlIGB1bnNpZ25lZCBsb25nYCBmb3IgcGFnZSBjb3VudHMgYW5kIGluZGljZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgdm1hbGxvY19kdW1wX29iamAgd2hpY2ggd2VyZSBkaXJlY3RseSBtb2RpZmllZCwgYW5kIHJlcXVpcmUgYE5VTUFgIGFuZCBgUFJJTlRLYCB0byB0ZXN0IHRoZSBtb2RpZmllZCBgc2hvd19udW1hX2luZm9gIGFuZCBgdm1hbGxvY19kdW1wX29iamAgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjU5OjU4Ljk2NjU3NjIwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTkwODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWM0NDY1ODVhOTBmMDAzOGYzY2NiNWI2Nzk2NTViYTY4MzJjNzg5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjU5OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcXG5pbmRleCBlNGQ4ZDBhOWYzMGY5Li5hZWQxMjFkNzI5YjAxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcXG5AQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0IHtcXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdHBhZ2Vfb3JkZXI7XFxuICNlbmRpZlxcbi1cXHR1bnNpZ25lZCBpbnRcXHRcXHRucl9wYWdlcztcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5yX3BhZ2VzO1xcbiBcXHRwaHlzX2FkZHJfdFxcdFxcdHBoeXNfYWRkcjtcXG4gXFx0Y29uc3Qgdm9pZFxcdFxcdCpjYWxsZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRyZXF1ZXN0ZWRfc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXFxuaW5kZXggMjZmMzI5NDljMmYyZS4uMTk2ZGE4NzM4Y2YxMCAxMDA2NDRcXG4tLS0gYS9tbS92bWFsbG9jLmNcXG4rKysgYi9tbS92bWFsbG9jLmNcXG5AQCAtMzQwNCw3ICszNDA0LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcilcXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9hcmVhX2RpcmVjdF9tYXAoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpXFxuIHtcXG4tXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuIFxcdC8qIEhVR0VfVk1BTExPQyBwYXNzZXMgc21hbGwgcGFnZXMgdG8gc2V0X2RpcmVjdF9tYXAgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZWEtXFx1MDAzZW5yX3BhZ2VzOyBpKyspXFxuQEAgLTM0MjAsNyArMzQyMCw3IEBAIHN0YXRpYyB2b2lkIHZtX3Jlc2V0X3Blcm1zKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBVTE9OR19NQVgsIGVuZCA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBwYWdlX29yZGVyID0gdm1fYXJlYV9wYWdlX29yZGVyKGFyZWEpO1xcbiBcXHRpbnQgZmx1c2hfZG1hcCA9IDA7XFxuLVxcdGludCBpO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaW5kIHRoZSBzdGFydCBhbmQgZW5kIHJhbmdlIG9mIHRoZSBkaXJlY3QgbWFwcGluZ3MgdG8gbWFrZSBzdXJlIHRoYXRcXG5AQCAtMzQ5MywxMCArMzQ5MywxMCBAQCB2b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxcbiAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVubWFwcGluZyAodnVubWFwX3JhbmdlKSBhbmQgS0FTQU5cXG4gICogcG9pc29uaW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBzdGFydF9pZHgsXFxuLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZW5kX2lkeClcXG4rc3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2lkeCxcXG4rXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXG4gXFx0aWYgKCEodm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fTUFQX1BVVF9QQUdFUykpIHtcXG4gXFx0XFx0Zm9yIChpID0gc3RhcnRfaWR4OyBpIFxcdTAwM2MgZW5kX2lkeDsgaSsrKVxcbkBAIC0zODE5LDEyICszODE5LDEyIEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3Qgdm1hbGxvY19nZnBfYWRqdXN0KGdmcF90IGZsYWdzLCBjb25zdCBib29sIGxhcmdlKVxcbiBcXHRyZXR1cm4gZmxhZ3M7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbiB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfYWxsb2NhdGVkID0gMDtcXG4tXFx0dW5zaWduZWQgaW50IG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcmVtYWluaW5nID0gbnJfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGludCBtYXhfYXR0ZW1wdF9vcmRlciA9IE1BWF9QQUdFX09SREVSO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0aW50IGk7XFxuQEAgLTM4NzIsNyArMzg3Miw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbiBcXHRpZiAoIW9yZGVyKSB7XFxuIFxcdFxcdHdoaWxlIChucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7XFxuLVxcdFxcdFxcdGludCBpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBBIG1heGltdW0gYWxsb3dlZCByZXF1ZXN0IGlzIGhhcmQtY29kZWQgYW5kIGlzIDEwMFxcbkBAIC0zODgwLDcgKzM4ODAsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0ICogbG9uZyBwcmVlbXB0aW9uIG9mZiBzY2VuYXJpbyBpbiB0aGUgYnVsay1hbGxvY2F0b3JcXG4gXFx0XFx0XFx0ICogc28gdGhlIHJhbmdlIGlzIFsxOjEwMF0uXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFUsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcXG4rXFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVTCwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xcbiBcXG4gXFx0XFx0XFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJ3RcXG4gXFx0XFx0XFx0ICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcXG5AQCAtNDAyNiwxMiArNDAyNiwxMiBAQCBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhcnJheV9zaXplO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfc21hbGxfcGFnZXMgPSBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfc21hbGxfcGFnZXMgPSBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdHVuc2lnbmVkIGludCBwYWdlX29yZGVyO1xcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRhcnJheV9zaXplID0gKHVuc2lnbmVkIGxvbmcpbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XFxuK1xcdGFycmF5X3NpemUgPSBucl9zbWFsbF9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKTtcXG4gXFxuIFxcdC8qIF9fR0ZQX05PRkFJTCBhbmQgXFxcIm5vYmxvY2tcXFwiIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXFxuIFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbkBAIC00NTI1LDcgKzQ1MjUsNyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc2l6ZSBcXHUwMDNjPSBvbGRfc2l6ZSkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbmV3X25yX3BhZ2VzID0gUEFHRV9BTElHTihzaXplKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5ld19ucl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdFxcdC8qIFplcm8gb3V0IFxcXCJmcmVlZFxcXCIgbWVtb3J5LCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlYWxsb2MuICovXFxuIFxcdFxcdGlmICh3YW50X2luaXRfb25fZnJlZSgpIHx8IHdhbnRfaW5pdF9vbl9hbGxvYyhmbGFncykpXFxuQEAgLTQ1NTQsNyArNDU1NCw3IEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduXFxuIFxcdFxcdCAgICAhKHZtLVxcdTAwM2VmbGFncyBcXHUwMDI2IChWTV9GTFVTSF9SRVNFVF9QRVJNUyB8IFZNX1VTRVJNQVApKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgZ2ZwX2hhc19pb19mcyhmbGFncykpIHtcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHApO1xcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2xkX25yX3BhZ2VzID0gdm0tXFx1MDAzZW5yX3BhZ2VzO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9sZF9ucl9wYWdlcyA9IHZtLVxcdTAwM2Vucl9wYWdlcztcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFVzZSB0aGUgbm9kZSBsb2NrIHRvIHN5bmNocm9uaXplIHdpdGggY29uY3VycmVudFxcbkBAIC00NTY3LDE2ICs0NTY3LDEzIEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduXFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG4gXFxuIFxcdFxcdFxcdC8qIE5vdGlmeSBrbWVtbGVhayBvZiB0aGUgcmVkdWNlZCBhbGxvY2F0aW9uIHNpemUgYmVmb3JlIHVubWFwcGluZy4gKi9cXG4tXFx0XFx0XFx0a21lbWxlYWtfZnJlZV9wYXJ0KFxcbi1cXHRcXHRcXHRcXHQodm9pZCAqKWFkZHIgKyAoKHVuc2lnbmVkIGxvbmcpbmV3X25yX3BhZ2VzXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbi1cXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZykob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFx0XFx0XFx0a21lbWxlYWtfZnJlZV9wYXJ0KCh2b2lkICopYWRkciArXFxuK1xcdFxcdFxcdFxcdFxcdCAgIChuZXdfbnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIChvbGRfbnJfcGFnZXMgLSBuZXdfbnJfcGFnZXMpXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbiBcXG4tXFx0XFx0XFx0dnVubWFwX3JhbmdlKGFkZHIgKyAoKHVuc2lnbmVkIGxvbmcpbmV3X25yX3BhZ2VzXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuLVxcdFxcdFxcdFxcdCAgICAgYWRkciArICgodW5zaWduZWQgbG9uZylvbGRfbnJfcGFnZXNcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuK1xcdFxcdFxcdHZ1bm1hcF9yYW5nZShhZGRyICsgKG5ld19ucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBhZGRyICsgKG9sZF9ucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuIFxcbiBcXHRcXHRcXHR2bV9hcmVhX2ZyZWVfcGFnZXModm0sIG5ld19ucl9wYWdlcywgb2xkX25yX3BhZ2VzKTtcXG4gXFx0XFx0fVxcbkBAIC01NDAwLDcgKzUzOTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxcbiBcXHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcXG4gXFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4tXFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbiBcXG4gXFx0YWRkciA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpIG9iamVjdCk7XFxuIFxcdHZuID0gYWRkcl90b19ub2RlKGFkZHIpO1xcbkBAIC01NDIwLDcgKzU0MTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxcbiBcXHRucl9wYWdlcyA9IHZtLVxcdTAwM2Vucl9wYWdlcztcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbiBcXG4tXFx0cHJfY29udChcXFwiICV1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxcXG5cXFwiLFxcbitcXHRwcl9jb250KFxcXCIgJWx1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxcXG5cXFwiLFxcbiBcXHRcXHRucl9wYWdlcywgYWRkciwgY2FsbGVyKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01NDM4LDE2ICs1NDM1LDE3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpXFxuIHN0YXRpYyB2b2lkIHNob3dfbnVtYV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZtX3N0cnVjdCAqdixcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCAqY291bnRlcnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG5yO1xcbiBcXHR1bnNpZ25lZCBpbnQgc3RlcCA9IDFVIFxcdTAwM2NcXHUwMDNjIHZtX2FyZWFfcGFnZV9vcmRlcih2KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcbiBcXHRpZiAoIWNvdW50ZXJzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRtZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpO1xcbiBcXG4tXFx0Zm9yIChuciA9IDA7IG5yIFxcdTAwM2Mgdi1cXHUwMDNlbnJfcGFnZXM7IG5yICs9IHN0ZXApXFxuLVxcdFxcdGNvdW50ZXJzW3BhZ2VfdG9fbmlkKHYtXFx1MDAzZXBhZ2VzW25yXSldICs9IHN0ZXA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2LVxcdTAwM2Vucl9wYWdlczsgaSArPSBzdGVwKVxcbitcXHRcXHRjb3VudGVyc1twYWdlX3RvX25pZCh2LVxcdTAwM2VwYWdlc1tpXSldICs9IHN0ZXA7XFxuIFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobnIsIE5fSElHSF9NRU1PUlkpXFxuIFxcdFxcdGlmIChjb3VudGVyc1tucl0pXFxuIFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBOJXU9JXVcXFwiLCBuciwgY291bnRlcnNbbnJdKTtcXG5AQCAtNTUwNSw3ICs1NTAzLDcgQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuIFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlcFNcXFwiLCB2LVxcdTAwM2VjYWxsZXIpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHYtXFx1MDAzZW5yX3BhZ2VzKVxcbi1cXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgcGFnZXM9JWRcXFwiLCB2LVxcdTAwM2Vucl9wYWdlcyk7XFxuK1xcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBwYWdlcz0lbHVcXFwiLCB2LVxcdTAwM2Vucl9wYWdlcyk7XFxuIFxcbiBcXHRcXHRcXHRpZiAodi1cXHUwMDNlcGh5c19hZGRyKVxcbiBcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgcGh5cz0lcGFcXFwiLCBcXHUwMDI2di1cXHUwMDNlcGh5c19hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NTk6NTkuNTA1MjE3Mjc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0NjY1Njc4MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlBSSU5US1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mXCIsXG4gICAgXCJ2bWFsbG9jX2R1bXBfb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiBgbnJfcGFnZXNgIGluIGBzdHJ1Y3Qgdm1fc3RydWN0YCBmcm9tIGB1bnNpZ25lZCBpbnRgIHRvIGB1bnNpZ25lZCBsb25nYCB0byBzdXBwb3J0IHZtYWxsb2MgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gMTZUQiAob3IgZml4IHRydW5jYXRpb24gYnVncykuIEl0IHVwZGF0ZXMgdmFyaW91cyBmdW5jdGlvbnMgaW4gYG1tL3ZtYWxsb2MuY2AgdG8gdXNlIGB1bnNpZ25lZCBsb25nYCBmb3IgcGFnZSBjb3VudHMgYW5kIGluZGljZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgdm1hbGxvY19kdW1wX29iamAgd2hpY2ggd2VyZSBkaXJlY3RseSBtb2RpZmllZCwgYW5kIHJlcXVpcmUgYE5VTUFgIGFuZCBgUFJJTlRLYCB0byB0ZXN0IHRoZSBtb2RpZmllZCBgc2hvd19udW1hX2luZm9gIGFuZCBgdm1hbGxvY19kdW1wX29iamAgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljNDQ2NTg1YTkwZjAwMzhmM2NjYjViNjc5NjU1YmE2ODMyYzc4OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjU5OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuaW5kZXggZTRkOGQwYTlmMzBmOS4uYWVkMTIxZDcyOWIwMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IHZtX3N0cnVjdCB7XG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG4gXHR1bnNpZ25lZCBpbnRcdFx0cGFnZV9vcmRlcjtcbiAjZW5kaWZcbi1cdHVuc2lnbmVkIGludFx0XHRucl9wYWdlcztcbitcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXM7XG4gXHRwaHlzX2FkZHJfdFx0XHRwaHlzX2FkZHI7XG4gXHRjb25zdCB2b2lkXHRcdCpjYWxsZXI7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHJlcXVlc3RlZF9zaXplO1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMjZmMzI5NDljMmYyZS4uMTk2ZGE4NzM4Y2YxMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtMzQwNCw3ICszNDA0LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcilcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FyZWFfZGlyZWN0X21hcChjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLFxuIFx0XHRcdFx0ICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpXG4ge1xuLVx0aW50IGk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHQvKiBIVUdFX1ZNQUxMT0MgcGFzc2VzIHNtYWxsIHBhZ2VzIHRvIHNldF9kaXJlY3RfbWFwICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmVhLVx1MDAzZW5yX3BhZ2VzOyBpKyspXG5AQCAtMzQyMCw3ICszNDIwLDcgQEAgc3RhdGljIHZvaWQgdm1fcmVzZXRfcGVybXMoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSlcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBVTE9OR19NQVgsIGVuZCA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZV9vcmRlciA9IHZtX2FyZWFfcGFnZV9vcmRlcihhcmVhKTtcbiBcdGludCBmbHVzaF9kbWFwID0gMDtcbi1cdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0LypcbiBcdCAqIEZpbmQgdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2Ugb2YgdGhlIGRpcmVjdCBtYXBwaW5ncyB0byBtYWtlIHN1cmUgdGhhdFxuQEAgLTM0OTMsMTAgKzM0OTMsMTAgQEAgdm9pZCB2ZnJlZV9hdG9taWMoY29uc3Qgdm9pZCAqYWRkcilcbiAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVubWFwcGluZyAodnVubWFwX3JhbmdlKSBhbmQgS0FTQU5cbiAgKiBwb2lzb25pbmcgYmVmb3JlIGNhbGxpbmcgdGhpcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBzdGFydF9pZHgsXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBlbmRfaWR4KVxuK3N0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsXG4rXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGlmICghKHZtLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9NQVBfUFVUX1BBR0VTKSkge1xuIFx0XHRmb3IgKGkgPSBzdGFydF9pZHg7IGkgXHUwMDNjIGVuZF9pZHg7IGkrKylcbkBAIC0zODE5LDEyICszODE5LDEyIEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3Qgdm1hbGxvY19nZnBfYWRqdXN0KGdmcF90IGZsYWdzLCBjb25zdCBib29sIGxhcmdlKVxuIFx0cmV0dXJuIGZsYWdzO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcylcbitcdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGludCBucl9hbGxvY2F0ZWQgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl9wYWdlcztcbiBcdHVuc2lnbmVkIGludCBtYXhfYXR0ZW1wdF9vcmRlciA9IE1BWF9QQUdFX09SREVSO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRpbnQgaTtcbkBAIC0zODcyLDcgKzM4NzIsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbiBcdGlmICghb3JkZXIpIHtcbiBcdFx0d2hpbGUgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpIHtcbiBcdFx0XHR1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7XG4tXHRcdFx0aW50IGk7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogQSBtYXhpbXVtIGFsbG93ZWQgcmVxdWVzdCBpcyBoYXJkLWNvZGVkIGFuZCBpcyAxMDBcbkBAIC0zODgwLDcgKzM4ODAsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbiBcdFx0XHQgKiBsb25nIHByZWVtcHRpb24gb2ZmIHNjZW5hcmlvIGluIHRoZSBidWxrLWFsbG9jYXRvclxuIFx0XHRcdCAqIHNvIHRoZSByYW5nZSBpcyBbMToxMDBdLlxuIFx0XHRcdCAqL1xuLVx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVSwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xuK1x0XHRcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVUwsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcbiBcbiBcdFx0XHQvKiBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgY29uc2lkZXIgbWVtcG9saWN5LCB3ZSBjYW4ndFxuIFx0XHRcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG5AQCAtNDAyNiwxMiArNDAyNiwxMiBAQCBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGdldF92bV9hcmVhX3NpemUoYXJlYSk7XG4gXHR1bnNpZ25lZCBsb25nIGFycmF5X3NpemU7XG4tXHR1bnNpZ25lZCBpbnQgbnJfc21hbGxfcGFnZXMgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0dW5zaWduZWQgbG9uZyBucl9zbWFsbF9wYWdlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZV9vcmRlcjtcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdGludCByZXQ7XG4gXG4tXHRhcnJheV9zaXplID0gKHVuc2lnbmVkIGxvbmcpbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4rXHRhcnJheV9zaXplID0gbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4gXG4gXHQvKiBfX0dGUF9OT0ZBSUwgYW5kIFwibm9ibG9ja1wiIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXG4gXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbkBAIC00NTI1LDcgKzQ1MjUsNyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxuIFx0fVxuIFxuIFx0aWYgKHNpemUgXHUwMDNjPSBvbGRfc2l6ZSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgbmV3X25yX3BhZ2VzID0gUEFHRV9BTElHTihzaXplKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdFx0dW5zaWduZWQgbG9uZyBuZXdfbnJfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0XHQvKiBaZXJvIG91dCBcImZyZWVkXCIgbWVtb3J5LCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlYWxsb2MuICovXG4gXHRcdGlmICh3YW50X2luaXRfb25fZnJlZSgpIHx8IHdhbnRfaW5pdF9vbl9hbGxvYyhmbGFncykpXG5AQCAtNDU1NCw3ICs0NTU0LDcgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25cbiBcdFx0ICAgICEodm0tXHUwMDNlZmxhZ3MgXHUwMDI2IChWTV9GTFVTSF9SRVNFVF9QRVJNUyB8IFZNX1VTRVJNQVApKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGdmcF9oYXNfaW9fZnMoZmxhZ3MpKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHApO1xuLVx0XHRcdHVuc2lnbmVkIGludCBvbGRfbnJfcGFnZXMgPSB2bS1cdTAwM2Vucl9wYWdlcztcbitcdFx0XHR1bnNpZ25lZCBsb25nIG9sZF9ucl9wYWdlcyA9IHZtLVx1MDAzZW5yX3BhZ2VzO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVXNlIHRoZSBub2RlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBjb25jdXJyZW50XG5AQCAtNDU2NywxNiArNDU2NywxMyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXG4gXHRcdFx0LyogTm90aWZ5IGttZW1sZWFrIG9mIHRoZSByZWR1Y2VkIGFsbG9jYXRpb24gc2l6ZSBiZWZvcmUgdW5tYXBwaW5nLiAqL1xuLVx0XHRcdGttZW1sZWFrX2ZyZWVfcGFydChcbi1cdFx0XHRcdCh2b2lkICopYWRkciArICgodW5zaWduZWQgbG9uZyluZXdfbnJfcGFnZXNcbi1cdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4tXHRcdFx0XHQodW5zaWduZWQgbG9uZykob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxuLVx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRcdFx0a21lbWxlYWtfZnJlZV9wYXJ0KCh2b2lkICopYWRkciArXG4rXHRcdFx0XHRcdCAgIChuZXdfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdFx0XHQgICAob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxuK1x0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiBcbi1cdFx0XHR2dW5tYXBfcmFuZ2UoYWRkciArICgodW5zaWduZWQgbG9uZyluZXdfbnJfcGFnZXNcbi1cdFx0XHRcdFx0ICAgICBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4tXHRcdFx0XHQgICAgIGFkZHIgKyAoKHVuc2lnbmVkIGxvbmcpb2xkX25yX3BhZ2VzXG4tXHRcdFx0XHRcdCAgICAgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbitcdFx0XHR2dW5tYXBfcmFuZ2UoYWRkciArIChuZXdfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdFx0ICAgICBhZGRyICsgKG9sZF9ucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuIFxuIFx0XHRcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgbmV3X25yX3BhZ2VzLCBvbGRfbnJfcGFnZXMpO1xuIFx0XHR9XG5AQCAtNTQwMCw3ICs1Mzk3LDcgQEAgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuIFxuIFx0YWRkciA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpIG9iamVjdCk7XG4gXHR2biA9IGFkZHJfdG9fbm9kZShhZGRyKTtcbkBAIC01NDIwLDcgKzU0MTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxuIFx0bnJfcGFnZXMgPSB2bS1cdTAwM2Vucl9wYWdlcztcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXG4tXHRwcl9jb250KFwiICV1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxuXCIsXG4rXHRwcl9jb250KFwiICVsdS1wYWdlIHZtYWxsb2MgcmVnaW9uIHN0YXJ0aW5nIGF0ICUjbHggYWxsb2NhdGVkIGF0ICVwU1xcblwiLFxuIFx0XHRucl9wYWdlcywgYWRkciwgY2FsbGVyKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU0MzgsMTYgKzU0MzUsMTcgQEAgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbiBzdGF0aWMgdm9pZCBzaG93X251bWFfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9zdHJ1Y3QgKnYsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50ICpjb3VudGVycylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHR1bnNpZ25lZCBpbnQgc3RlcCA9IDFVIFx1MDAzY1x1MDAzYyB2bV9hcmVhX3BhZ2Vfb3JkZXIodik7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4gXHRpZiAoIWNvdW50ZXJzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpO1xuIFxuLVx0Zm9yIChuciA9IDA7IG5yIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBuciArPSBzdGVwKVxuLVx0XHRjb3VudGVyc1twYWdlX3RvX25pZCh2LVx1MDAzZXBhZ2VzW25yXSldICs9IHN0ZXA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBpICs9IHN0ZXApXG4rXHRcdGNvdW50ZXJzW3BhZ2VfdG9fbmlkKHYtXHUwMDNlcGFnZXNbaV0pXSArPSBzdGVwO1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuciwgTl9ISUdIX01FTU9SWSlcbiBcdFx0aWYgKGNvdW50ZXJzW25yXSlcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwiIE4ldT0ldVwiLCBuciwgY291bnRlcnNbbnJdKTtcbkBAIC01NTA1LDcgKzU1MDMsNyBAQCBzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbiBcdFx0XHRcdHNlcV9wcmludGYobSwgXCIgJXBTXCIsIHYtXHUwMDNlY2FsbGVyKTtcbiBcbiBcdFx0XHRpZiAodi1cdTAwM2Vucl9wYWdlcylcbi1cdFx0XHRcdHNlcV9wcmludGYobSwgXCIgcGFnZXM9JWRcIiwgdi1cdTAwM2Vucl9wYWdlcyk7XG4rXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwiIHBhZ2VzPSVsdVwiLCB2LVx1MDAzZW5yX3BhZ2VzKTtcbiBcbiBcdFx0XHRpZiAodi1cdTAwM2VwaHlzX2FkZHIpXG4gXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwiIHBoeXM9JXBhXCIsIFx1MDAyNnYtXHUwMDNlcGh5c19hZGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjU5OjU5LjUwNTIxOTc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5NjEyMjY0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBBbmFseXNpczogdm1hbGxvYy5jIFR5cGUgQ2hhbmdlKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQncyBidW1waW5nIGBucl9wYWdlc2AgaW4gYHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgYW5kIHByb3BhZ2F0aW5nIHRoZSBjaGFuZ2UgdGhyb3VnaG91dCBgbW0vdm1hbGxvYy5jYC4gVGhlIG1haW4gbW90aXZhdGlvbiBzZWVtcyB0byBiZSBzdXBwb3J0aW5nIGxhcmdlciB2bWFsbG9jIGFsbG9jYXRpb25zLCBleGNlZWRpbmcgdGhlIDRHQiBsaW1pdCBpbXBvc2VkIGJ5IGEgMzItYml0IGB1bnNpZ25lZCBpbnRgLiBPbiA2NC1iaXQgc3lzdGVtcywgYHVuc2lnbmVkIGludGAgaXMgc3RpbGwgb25seSAzMiBiaXRzLiBUaGlzIG1lYW5zIGEgbWF4aW11bSBvZiA0RyBwYWdlcyBvZiBtZW1vcnkuIFdpdGggYHVuc2lnbmVkIGxvbmdgIHdlIGhhdmUgYSBtdWNoIGxhcmdlciBjYXBhY2l0eS5cblxuVGhlIGRpZmYgaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZDogdHlwZSBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucy4gIEkgc2VlIGNoYW5nZXMgaW4gYHNldF9hcmVhX2RpcmVjdF9tYXBgLCBgdm1fcmVzZXRfcGVybXNgLCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX192bWFsbG9jX2FyZWFfbm9kZWAsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2R1bXBfb2JqYCwgYHNob3dfbnVtYV9pbmZvYCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AuICBUaGUgY29kZSBpbiBxdWVzdGlvbiBoYXMgdG8gYmUgY2hlY2tlZCwgYXMgaXQgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEuXG5cbkluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlIGRpZmZpY3VsdHkgb2YgZnV6emluZyB0aGlzIGVmZmVjdGl2ZWx5LCBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIGFsbG9jYXRpbmcgbWFzc2l2ZSBhbW91bnRzIG9mIHZtYWxsb2MgbWVtb3J5IHRvIHRyaWdnZXIgdGhlIGFjdHVhbCBkaWZmZXJlbmNlLCB3aGljaCBpc24ndCBlYXN5IHRvIGRvIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuIEJ1dCB0aGVuIGFnYWluLCBhIGJ1ZyBpbnZvbHZpbmcgdGhlIHRydW5jYXRpb24gb2Ygc2l6ZSwgZXRjIGNvdWxkIGxlYWQgdG8gYSBkaWZmZXJlbmNlIG5vdyB0aGF0IGl0IGlzIGEgNjQtYml0IHZhcmlhYmxlLlxuXG5UaGVuIHRoZSBpbnN0cnVjdGlvbnMgcG9wcGVkIGludG8gbXkgaGVhZC4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyAqbm90KiBhIGRvY3VtZW50YXRpb24gY2hhbmdlLCBub3QgZGVjb3JhdGl2ZSwgYW5kIGl0IGlzIGEgY2hhbmdlIHRvIGEgbnVtZXJpYyBjb25zdGFudCBvciBtYWNybyB0aGF0IGZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqaXMqIHdvcnRoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgZm9jdXMuICBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQ/IFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgc2V0X2FyZWFfZGlyZWN0X21hcGAsIGB2bV9yZXNldF9wZXJtc2AsIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLCBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCwgYHZtYWxsb2NfZHVtcF9vYmpgLCBgc2hvd19udW1hX2luZm9gLCBhbmQgYHZtYWxsb2NfaW5mb19zaG93YC4gIFNpbmNlIHdlIHdhbnQgdG8gZm9jdXMgb24gZnV6emluZyBBUEkgZW50cnlwb2ludHMsIGxldCBtZSB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGZpbHRlciBkb3duIHRoZSBsaXN0LiAgXG5cbkFscmlnaHQsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBsb29rIGxpa2UgQVBJIGVudHJ5cG9pbnRzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGV5J3JlIHN0YXRpYyBvciBub3QuXG5MZXQncyBjaGVjayBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgX192bWFsbG9jX2FyZWFfbm9kZWAgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMDoxMy40NjY0NDg3NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNzk0MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9NDQ1Mz1FWFBPUlRfU1lNQk9MKHZ6YWxsb2Nfbm9kZV9ub3Byb2YpO1xcbi0tXFxubW0vdm1hbGxvYy5jLTQ0ODctICovXFxubW0vdm1hbGxvYy5jOjQ0ODg6dm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxubW0vdm1hbGxvYy5jLTQ0ODktXFx0XFx0XFx0XFx0IGdmcF90IGZsYWdzLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQ2MTItfVxcbm1tL3ZtYWxsb2MuYzo0NjEzOkVYUE9SVF9TWU1CT0wodnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00NjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMDoxMy41OTkyNDkwMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODU1NDc4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gRnVuY3Rpb25zKipcblxuUmlnaHQsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAuLi4geWVzLCB0aGF0J3MgZGVmaW5pdGVseSBhbiBleHBvcnRlZCBmdW5jdGlvbi4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBUaGUgcXVlc3Rpb24gbm93IGlzIGFib3V0IGBfX3ZtYWxsb2NfYXJlYV9ub2RlYC4gSXQncyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXQncyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlIGl0J3MgZGVmaW5lZCBpbi4gQnV0IHRoYXQgZG9lc24ndCBzdG9wIG1lIGZyb20gd2FudGluZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBTbywgbGV0J3MgdHJhY2UgaXRzIHVzYWdlLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSB3aGVyZSBgX192bWFsbG9jX2FyZWFfbm9kZWAgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGtlcm5lbCB0byBkZXRlcm1pbmUgaXRzIGNvbnRyaWJ1dGlvbiB0byBtZW1vcnkgYWxsb2NhdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHByb2Nlc3MsIGV2ZW4gaWYgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gaW50ZXJuYWwgdXNhZ2Ugd2l0aGluIHRoZSBtb2R1bGUuIEtub3dpbmcgKndobyogaXMgY2FsbGluZyBpdCwgYW5kIHVuZGVyICp3aGF0KiBjaXJjdW1zdGFuY2VzLCBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMDoyMC40NTQ3MzEyODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3MTQ2NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdm1hbGxvY19hcmVhX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0zOTUzPXN0YXRpYyB2b2lkIGNsZWFudXBfdm1fYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTcwLS8qXFxubW0vdm1hbGxvYy5jOjM5NzE6ICogSGVscGVyIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgdG8gZGVmZXIgY2xlYW51cFxcbm1tL3ZtYWxsb2MuYy0zOTcyLSAqIG9mIHBhcnRpYWxseSBpbml0aWFsaXplZCB2bV9zdHJ1Y3QgaW4gZXJyb3IgcGF0aHMuXFxuLS1cXG5tbS92bWFsbG9jLmM9NDAxND1tZW1hbGxvY19yZXN0b3JlX3Njb3BlKHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MDE5LVxcbm1tL3ZtYWxsb2MuYzo0MDIwOnN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxcbm1tL3ZtYWxsb2MuYy00MDIxLVxcdFxcdFxcdFxcdCBwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz00MTgwPXZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtNDIzMC1cXHQvKlxcbm1tL3ZtYWxsb2MuYzo0MjMxOlxcdCAqIFByZXBhcmUgYXJndW1lbnRzIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgYW5kXFxubW0vdm1hbGxvYy5jLTQyMzItXFx0ICoga2FzYW5fdW5wb2lzb25fdm1hbGxvYygpLlxcbi0tXFxubW0vdm1hbGxvYy5jLTQyNTQtXFx0LyogQWxsb2NhdGUgcGh5c2ljYWwgcGFnZXMgYW5kIG1hcCB0aGVtIGludG8gdm1hbGxvYyBzcGFjZS4gKi9cXG5tbS92bWFsbG9jLmM6NDI1NTpcXHRyZXQgPSBfX3ZtYWxsb2NfYXJlYV9ub2RlKGFyZWEsIGdmcF9tYXNrLCBwcm90LCBzaGlmdCwgbm9kZSk7XFxubW0vdm1hbGxvYy5jLTQyNTYtXFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjIwLjc5MTg4NDE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NTgzMzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgQ2FsbCBQYXRoKipcblxuUmlnaHQsIHNvIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzIHVzaW5nIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBpbnRlcm5hbGx5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIHBhdHRlcm4gZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNwZWNpZmljIG5vZGVzLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBiZWluZyBjYWxsZWQsIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBjaGFpbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgb2YgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGl0cyBwdXJwb3NlLCB1c2FnZSBjb250ZXh0LCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJ3MgaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBiZWluZyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjIzLjk3NzcyMTUzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTMwNzU0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9NDAyMD1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MDY1LVxcdCAqXFxubW0vdm1hbGxvYy5jOjQwNjY6XFx0ICogUGxlYXNlIG5vdGUsIHRoZSBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoKSBmYWxscy1iYWNrXFxubW0vdm1hbGxvYy5jLTQwNjctXFx0ICogdG8gb3JkZXItMCBwYWdlcyBpZiBoaWdoLW9yZGVyIGF0dGVtcHQgaXMgdW5zdWNjZXNzZnVsLlxcbi0tXFxubW0vdm1hbGxvYy5jPTQxMzU9c3RhdGljIGdmcF90IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF90IGZsYWdzKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQxNzktICovXFxubW0vdm1hbGxvYy5jOjQxODA6dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG5tbS92bWFsbG9jLmMtNDE4MS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bWFsbG9jLmMtNDMwOC0gKiBTZW1hbnRpY3Mgb2YgQGdmcF9tYXNrIChpbmNsdWRpbmcgcmVjbGFpbS9yZXRyeSBtb2RpZmllcnMgc3VjaCBhc1xcbm1tL3ZtYWxsb2MuYzo0MzA5OiAqIF9fR0ZQX05PRkFJTCkgYXJlIHRoZSBzYW1lIGFzIGluIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZigpLlxcbm1tL3ZtYWxsb2MuYy00MzEwLSAqXFxuLS1cXG5tbS92bWFsbG9jLmM9NDMxMz12b2lkICpfX3ZtYWxsb2Nfbm9kZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQzMTUte1xcbm1tL3ZtYWxsb2MuYzo0MzE2OlxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgYWxpZ24sIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbm1tL3ZtYWxsb2MuYy00MzE3LVxcdFxcdFxcdFxcdGdmcF9tYXNrLCBQQUdFX0tFUk5FTCwgMCwgbm9kZSwgY2FsbGVyKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzY5PXZvaWQgKnZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzcyLVxcdFxcdGdmcF9tYXNrID0gdm1hbGxvY19maXhfZmxhZ3MoZ2ZwX21hc2spO1xcbm1tL3ZtYWxsb2MuYzo0MzczOlxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgMSwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxubW0vdm1hbGxvYy5jLTQzNzQtXFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX21hc2ssIFBBR0VfS0VSTkVMLCBWTV9BTExPV19IVUdFX1ZNQVAsXFxuLS1cXG5tbS92bWFsbG9jLmM9NDQwOD12b2lkICp2bWFsbG9jX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5tbS92bWFsbG9jLmMtNDQwOS17XFxubW0vdm1hbGxvYy5jOjQ0MTA6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG5tbS92bWFsbG9jLmMtNDQxMS1cXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLFxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2NTI9dm9pZCAqdm1hbGxvY18zMl91c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXFxubW0vdm1hbGxvYy5jLTQ2NTMte1xcbm1tL3ZtYWxsb2MuYzo0NjU0OlxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgU0hNTEJBLCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxubW0vdm1hbGxvYy5jLTQ2NTUtXFx0XFx0XFx0XFx0ICAgIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDA6MjQuMzcwODAzMzI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4NzY4MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZtYWxsb2MgSW50ZXJuYWxzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgdm1hbGxvYyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGNvcmUgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi4gSXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucywgbGlrZSBgX192bWFsbG9jX25vZGVfbm9wcm9mYCwgYHZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZmAsIGB2bWFsbG9jX3VzZXJfbm9wcm9mYCwgYW5kIGV2ZW4gYHZtYWxsb2NfMzJfdXNlcl9ub3Byb2ZgLiBJdCdzIHR5cGljYWwgdG8gaGF2ZSBhIGNlbnRyYWwgZnVuY3Rpb24gbGlrZSB0aGF0LCBoYW5kbGluZyB0aGUgZnVuZGFtZW50YWwgbG9naWMuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhpbmtpbmcgYWJvdXQgaXQsIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzIGFjdHVhbGx5ICppbXBsZW1lbnRpbmcqIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZXNlIGBub3Byb2ZgIHZhcmlhbnRzIGFyZSBvZnRlbiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbnMuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGl0c2VsZiBpcyBleHBvcnRlZCwgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgYWNjZXNzIGxldmVsIGFuZCBwb3RlbnRpYWwgdXNhZ2Ugc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjI5LjQ1ODQ4NzUyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzM4MzgzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX3ZtYWxsb2Nfbm9kZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjI5LjU2MzgzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTQxMTUwMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgTWVtb3J5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBhYm91dCBgX192bWFsbG9jX25vZGVfcmFuZ2VgLCBidXQgdGhhdCBtaWdodCBub3QgYmUgZXhwb3J0ZWQgYXMgYSBzeW1ib2wuIFRoYXQncyBhIGNvbW1vbiBnb3RjaGEgaW4ga2VybmVsIGRldmVsb3BtZW50LCByaWdodD8gQWx3YXlzIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgcGl2b3QgdG8gc29tZXRoaW5nIEkgKmtub3cqIGlzIHByb2JhYmx5IGFjY2Vzc2libGU6IGB2bWFsbG9jYC4gWWVhaCwgb2theSwgYHZtYWxsb2NgIGl0c2VsZiBzaG91bGQgYmUgZmluZSwgYnV0IEkga25vdyB0aGVyZSBhcmUgdmFyaWF0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGxldmVsIG9mIHByb2ZpbGluZyBuZWVkZWQuIExldCdzIHNlZS4uLiBwZXJoYXBzIGBfX3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgIG9yIGV2ZW4gYHZtYWxsb2Nfbm9wcm9mYCB3aWxsIGJlIGF2YWlsYWJsZSBpbnN0ZWFkLiBUaG9zZSBtaWdodCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgd2l0aG91dCB0aGUgb3ZlcmhlYWQuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoZXkgc3VpdCBteSBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDA6MzUuNzA0OTg4Mzg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwMDEyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdm1hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTgxPWJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpXFxuLS1cXG5tbS92bWFsbG9jLmMtODYtfVxcbm1tL3ZtYWxsb2MuYzo4NzpFWFBPUlRfU1lNQk9MKGlzX3ZtYWxsb2NfYWRkcik7XFxubW0vdm1hbGxvYy5jLTg4LVxcbi0tXFxubW0vdm1hbGxvYy5jPTgzNj1pbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KVxcbi0tXFxubW0vdm1hbGxvYy5jLTg0OS19XFxubW0vdm1hbGxvYy5jOjg1MDpFWFBPUlRfU1lNQk9MX0dQTChpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKTtcXG5tbS92bWFsbG9jLmMtODUxLVxcbi0tXFxubW0vdm1hbGxvYy5jPTg1Nz1zdHJ1Y3QgcGFnZSAqdm1hbGxvY190b19wYWdlKGNvbnN0IHZvaWQgKnZtYWxsb2NfYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy05MTAtfVxcbm1tL3ZtYWxsb2MuYzo5MTE6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX3RvX3BhZ2UpO1xcbm1tL3ZtYWxsb2MuYy05MTItXFxuLS1cXG5tbS92bWFsbG9jLmM9OTE2PXVuc2lnbmVkIGxvbmcgdm1hbGxvY190b19wZm4oY29uc3Qgdm9pZCAqdm1hbGxvY19hZGRyKVxcbi0tXFxubW0vdm1hbGxvYy5jLTkxOS19XFxubW0vdm1hbGxvYy5jOjkyMDpFWFBPUlRfU1lNQk9MKHZtYWxsb2NfdG9fcGZuKTtcXG5tbS92bWFsbG9jLmMtOTIxLVxcbi0tXFxubW0vdm1hbGxvYy5jPTQzMTM9dm9pZCAqX192bWFsbG9jX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzI0LSNpZmRlZiBDT05GSUdfVEVTVF9WTUFMTE9DX01PRFVMRVxcbm1tL3ZtYWxsb2MuYzo0MzI1OkVYUE9SVF9TWU1CT0xfR1BMKF9fdm1hbGxvY19ub2RlX25vcHJvZik7XFxubW0vdm1hbGxvYy5jLTQzMjYtI2VuZGlmXFxuLS1cXG5tbS92bWFsbG9jLmM9NDMyOD12b2lkICpfX3ZtYWxsb2Nfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS92bWFsbG9jLmMtNDMzNC19XFxubW0vdm1hbGxvYy5jOjQzMzU6RVhQT1JUX1NZTUJPTChfX3ZtYWxsb2Nfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDMzNi1cXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzQ5PXZvaWQgKnZtYWxsb2Nfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzUzLX1cXG5tbS92bWFsbG9jLmM6NDM1NDpFWFBPUlRfU1lNQk9MKHZtYWxsb2Nfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDM1NS1cXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzY5PXZvaWQgKnZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00Mzc2LX1cXG5tbS92bWFsbG9jLmM6NDM3NzpFWFBPUlRfU1lNQk9MX0dQTCh2bWFsbG9jX2h1Z2Vfbm9kZV9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00Mzc4LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ0MDg9dm9pZCAqdm1hbGxvY191c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDQxNC19XFxubW0vdm1hbGxvYy5jOjQ0MTU6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX3VzZXJfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDQxNi1cXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDMwPXZvaWQgKnZtYWxsb2Nfbm9kZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00NDM0LX1cXG5tbS92bWFsbG9jLmM6NDQzNTpFWFBPUlRfU1lNQk9MKHZtYWxsb2Nfbm9kZV9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00NDM2LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2MzY9dm9pZCAqdm1hbGxvY18zMl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQ2NDAtfVxcbm1tL3ZtYWxsb2MuYzo0NjQxOkVYUE9SVF9TWU1CT0wodm1hbGxvY18zMl9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00NjQyLVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2NTI9dm9pZCAqdm1hbGxvY18zMl91c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDY1OC19XFxubW0vdm1hbGxvYy5jOjQ2NTk6RVhQT1JUX1NZTUJPTCh2bWFsbG9jXzMyX3VzZXJfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDY2MC1cXG4tLVxcbm1tL3ZtYWxsb2MuYz01MDI3PWludCByZW1hcF92bWFsbG9jX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphZGRyLFxcbi0tXFxubW0vdm1hbGxvYy5jLTUwMzMtfVxcbm1tL3ZtYWxsb2MuYzo1MDM0OkVYUE9SVF9TWU1CT0wocmVtYXBfdm1hbGxvY19yYW5nZSk7XFxubW0vdm1hbGxvYy5jLTUwMzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjM1LjgzMzk5NTYxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTg3OTg1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgdGFyZ2V0IHNlbGVjdGlvbi4gSSBzZWUgYSBsaXN0IG9mIGB2bWFsbG9jXypfbm9wcm9mYCBmdW5jdGlvbnMgZXhwb3J0ZWQ6IGB2bWFsbG9jX25vcHJvZmAsIGBfX3ZtYWxsb2Nfbm9wcm9mYCwgYHZtYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgdm1hbGxvY191c2VyX25vcHJvZmAsIGB2bWFsbG9jXzMyX25vcHJvZmAsIGB2bWFsbG9jXzMyX3VzZXJfbm9wcm9mYCwgYHZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZmAsIGFuZCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLiBSaWdodCwgYHZtYWxsb2NgIGlzIG5vdyBhIG1hY3JvIHJlZGlyZWN0aW5nIHRvIGB2bWFsbG9jX25vcHJvZmAgaW4gbmV3ZXIga2VybmVscywgYSBjb25zZXF1ZW5jZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGluc3RydW1lbnRhdGlvbi4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHdhcm4gYWdhaW5zdCBvdmVybHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtZWFucyBgdm1hbGxvY19ub3Byb2ZgIGl0c2VsZiBpcyBwcm9iYWJseSB0b28gYnJvYWQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLCBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB0aGUgcmVsZXZhbnQgcmVjZW50IGNoYW5nZXMuIExldCdzIHJlLWV4YW1pbmUgdGhvc2UgY2hhbmdlIGxvY2F0aW9uczogYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX192bWFsbG9jX2FyZWFfbm9kZWAsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2R1bXBfb2JqYCwgYHNob3dfbnVtYV9pbmZvYCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AuXG5cbkFscmlnaHQsIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzIGEgc3Ryb25nIGNvbnRlbmRlci4gSXQncyBleHBsaWNpdGx5IHRpZWQgdG8gbWVtb3J5IHJlYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGEgY29tbW9uIGFyZWEgZm9yIGZ1enppbmcuIFdoYXQgZWxzZSBsb29rcyBpbnRlcmVzdGluZyBoZXJlPyBJIHNlZSBgdm1hbGxvY19kdW1wX29iamAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBrbWVtX2R1bXBfb2JqYCBjaGFpbi4gQW5kLCBhaCwgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfaW5mb19zaG93YCBhcmUgYXNzb2NpYXRlZCB3aXRoIGAvcHJvYy92bWFsbG9jaW5mb2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkga25vdyBob3cgdG8gdGFyZ2V0IHByb2NmcyBlbnRyaWVzLiBSZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2Agc2hvdWxkIGRpcmVjdGx5IHRyaWdnZXIgYm90aCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19udW1hX2luZm9gLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgYHZtYWxsb2NfaW5mb19zaG93YCBpcyBpbmRlZWQgYm91bmQgdG8gYSBzcGVjaWZpYyBwcm9jZnMgZmlsZS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYXBwcm9hY2ggZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjQ0LjQyMTk4Mzc3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1Njk3NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NfaW5mb19zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9MzI0ND12b2lkIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMjQ4LVxcdCAqIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB2bSBoYXMgcHJvcGVyIHZhbHVlcy5cXG5tbS92bWFsbG9jLmM6MzI0OTpcXHQgKiBQYWlyIHdpdGggc21wX3JtYigpIGluIHZyZWFkX2l0ZXIoKSBhbmQgdm1hbGxvY19pbmZvX3Nob3coKS5cXG5tbS92bWFsbG9jLmMtMzI1MC1cXHQgKi9cXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDg4PXZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQ1NjAtXFx0XFx0XFx0ICogVXNlIHRoZSBub2RlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBjb25jdXJyZW50XFxubW0vdm1hbGxvYy5jOjQ1NjE6XFx0XFx0XFx0ICogcmVhZGVycyAodm1hbGxvY19pbmZvX3Nob3cpLlxcbm1tL3ZtYWxsb2MuYy00NTYyLVxcdFxcdFxcdCAqL1xcbi0tXFxubW0vdm1hbGxvYy5jPTU0NTQ9c3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDY5LVxcbm1tL3ZtYWxsb2MuYzo1NDcwOnN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbm1tL3ZtYWxsb2MuYy01NDcxLXtcXG4tLVxcbm1tL3ZtYWxsb2MuYz01NTQ5PXN0YXRpYyBpbnQgX19pbml0IHByb2Nfdm1hbGxvY19pbml0KHZvaWQpXFxubW0vdm1hbGxvYy5jLTU1NTAte1xcbm1tL3ZtYWxsb2MuYzo1NTUxOlxcdHByb2NfY3JlYXRlX3NpbmdsZShcXFwidm1hbGxvY2luZm9cXFwiLCAwNDAwLCBOVUxMLCB2bWFsbG9jX2luZm9fc2hvdyk7XFxubW0vdm1hbGxvYy5jLTU1NTItXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjQ0LjU5NzY4NjM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTM2NjE4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIFBhdGNoIG9uIHZtYWxsb2MgVXNhZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGB2bWFsbG9jYCdzIGhhbmRsaW5nIG9mIHBhZ2UgY291bnRzLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHBvc2l0aXZlOyB0aGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyB3ZSBuZWVkIHRvIGJlIHZpZ2lsYW50IGFib3V0LiBMZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBob3cgdGhleSBtaWdodCBpbXBhY3QgZnV6emluZyBlZmZvcnRzLlxuXG5JIHNlZSBpdCdzIGVuYWJsaW5nIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYHByb2NfY3JlYXRlX3NpbmdsZWAgYW5kIGxpbmtpbmcgaXQgdG8gdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzOyBpdCBwcm92aWRlcyBhIHdheSB0byB0cmlnZ2VyIHRoZSBtb2RpZmllZCBjb2RlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBzeXN0ZW1hdGljIHJlcGxhY2VtZW50IG9mIGB1bnNpZ25lZCBpbnRgIHdpdGggYHVuc2lnbmVkIGxvbmdgIGZvciB2YXJpb3VzIHBhZ2UgY291bnQgdmFyaWFibGVzIHdpdGhpbiB0aGUgYHZtYWxsb2NgIHN1YnN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgdi1cdTAwM2Vucl9wYWdlc2AgaW4gYHZtYWxsb2NfaW5mb19zaG93YCwgYG5yYCBpbiBgc2hvd19udW1hX2luZm9gLCBhbmQgYG5yX3BhZ2VzYCBpbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYW5kIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGltcGFjdGVkLCBhbmQgdGhlcmVmb3JlIHdhcnJhbnQgYSBjbG9zZXIgbG9vayBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXJlIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2luZm9fc2hvd2AsIGFuZCBgdm1hbGxvY19kdW1wX29iamAuIEknbGwgaGF2ZSB0byBrZWVwIGluIG1pbmQgdGhhdCBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5bWJvbCBmb3IgZnV6emluZyB1bmxlc3MgaXQncyB0cmlnZ2VyZWQgaW5kaXJlY3RseSAod2hpY2gsIGFzIHdlIGtub3csIGl0IGlzIHRocm91Z2ggdGhlIGAvcHJvYy92bWFsbG9jaW5mb2AgaW50ZXJmYWNlKS4gSG93ZXZlciwgZnJvbSBleHBlcmllbmNlIEkga25vdyB0aGF0IHN5emthbGxlciBjYW4gc29tZXRpbWVzIGZ1enogc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBzdGlsbCBwcmVmZXJhYmxlLCB0aG91Z2gsIHRvIHByaW9yaXRpemUgZXhwb3NlZCBzeW1ib2xzIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgdm1hbGxvY19kdW1wX29iamAgaXMgZXhwb3J0ZWQsIGFzIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBicm9hZGVuIG91ciBmdXp6aW5nIG9wdGlvbnMuIElmIGl0J3Mgbm90LCB3ZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGZ1bmN0aW9uLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSBjYXJlZnVsIGluc3BlY3Rpb24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBgdW5zaWduZWQgbG9uZ2AgY2hhbmdlcyBhZmZlY3QgdGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHRoZSBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIGB2bWFsbG9jYCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjUyLjcxMTM1MTI3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5OTkzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY19kdW1wX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTUzODI9dm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3ZtcylcXG4tLVxcbm1tL3ZtYWxsb2MuYy01MzkyLSNpZmRlZiBDT05GSUdfUFJJTlRLXFxubW0vdm1hbGxvYy5jOjUzOTM6Ym9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcXG5tbS92bWFsbG9jLmMtNTM5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjUyLjgwNzM1NTYxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTEyOTMwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdm1hbGxvY19kdW1wX29iamAqKlxuXG5BbHJpZ2h0LCBzbyBgdm1hbGxvY19kdW1wX29iamAgaXNuJ3QgZGVjbGFyZWQgYXMgYGV4dGVybmAsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogZGVjbGFyZWQgYHN0YXRpY2AgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBUaGF0IHN1Z2dlc3RzIGEgZGVsaWJlcmF0ZSBkZWNpc2lvbjsgaXQgKmNvdWxkKiBiZSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBkZWZpbmluZyBmaWxlLCBldmVuIGlmIHRoZSBsaW5rYWdlIGlzbid0IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhlIGhlYWRlci4gVGhlcmVmb3JlLCB0aGUgZmlyc3Qgc3RlcCBpcyB0byBkZWZpbml0aXZlbHkgZGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVjbGFyZWQgaW4gYSBwdWJsaWMgaGVhZGVyIGZpbGUsIGFsbG93aW5nIGFjY2VzcyBmcm9tIG90aGVyIHNvdXJjZSBmaWxlcy4gVGhpcyB3aWxsIGRldGVybWluZSBpdHMgaW50ZW5kZWQgc2NvcGUgYW5kIHVzYWdlLiBJZiBpdCAqaXMqIGluIGEgaGVhZGVyLCB0aGVuIGl0cyBub24tc3RhdGljIGRlZmluaXRpb24gd291bGQgaW5kaWNhdGUgaXRzIGV4cGVjdGVkIHVzZS4gTGV0J3MgZGlnIGludG8gdGhlIGluY2x1ZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDA6NTguMzIwMjkxMzI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0NzI0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY19kdW1wX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0zMjU9c3RhdGljIGlubGluZSB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzI4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BSSU5USylcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMjk6Ym9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdCk7XFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMwLSNlbHNlXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzMxOnN0YXRpYyBpbmxpbmUgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdCkgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMzItI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjU4Ljc5Mzc3MTcwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODE1NDQyNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB2bWFsbG9jIENvZGUgZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHZtYWxsb2MgY29kZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBpbiBgaW5jbHVkZS9saW51eC92bWFsbG9jLmhgLiBUaGF0J3Mgd2hlcmUgdG8gbG9vay4gTm93LCBJIHNlZSBgdm1hbGxvY19kdW1wX29iamAgYW5kIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAganVtcCBvdXQgaW1tZWRpYXRlbHkuIEdvb2QgY2FuZGlkYXRlcy4gQnV0LCB3YWl0Li4uIGBfX3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgPyBJdCAqaXMqIGEgZ2VuZXJpYywgaG90LXBhdGggZnVuY3Rpb24sIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBgdm1hbGxvY2AsIHNvIG1heWJlIGl0J3MgdGhlIHJpZ2h0IG9uZS5cblxuQnV0LCBoYW5nIG9uLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzbid0IGFjdHVhbGx5IGhvdC1wYXRoOyBpdOKAmXMgc3BlY2lmaWNhbGx5IGZvciByZWFsbG9jYXRpbmcgdm1hbGxvYyBtZW1vcnkuIEhtbSwgaXQncyBjYWxsZWQgYnkgYHZyZWFsbG9jYCBhbmQgYGt2cmVhbGxvY2AsIHJpZ2h0PyBOb3csIHRoZSBiaWcgcXVlc3Rpb24gaXM6IEhvdyBjb21tb24gaXMgYGt2cmVhbGxvY2A/IEkga25vdyBpdCdzIHVzZWQgYSBmYWlyIGJpdCwgYnV0IGl0J3MgcHJvYmFibHkgbGVzcyBvZiBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgdGhhbiBhIHBsYWluIGB2bWFsbG9jYCBjYWxsLlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjay4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgQ09ORklHIG9wdGlvbnMgdGhpcyBtb2RpZmljYXRpb24gbWlnaHQgZGVwZW5kIG9uLiBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3ZtYWxsb2MuY2AuIFRoaXMgaXMgbm9ybWFsbHkgY29tcGlsZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgTWFrZWZpbGUuLi4geWVzLCBpdCBsb29rcyBsaWtlIGB2bWFsbG9jLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cy4gU28sIG5vIG1ham9yIGRlcGVuZGVuY3kgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgzOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMTowNS42MDkyMTc2MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzYyMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTM5LVxcdFxcdFxcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxcXFxubW0vTWFrZWZpbGU6NDA6XFx0XFx0XFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXFxubW0vTWFrZWZpbGUtNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAxOjA1LjY3OTk4NjQ5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzA1NTU5Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zIFJlbGF0ZWQgdG8gVmlydHVhbCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCBob3cgdmFyaW91cyBrZXJuZWwgZmVhdHVyZXMgaW50ZXJhY3Qgd2l0aCBgdm1hbGxvYy5vYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgdGhlbiBgdm1hbGxvYy5vYCBnZXRzIGNvbXBpbGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gR2l2ZW4gdGhhdCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBvbiBwcmFjdGljYWxseSBldmVyeSBwbGF0Zm9ybSB0aGVzZSBkYXlzLCB0aGF0J3MgYWxtb3N0IGEgZ2l2ZW4uIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIHdoYXQgZWxzZSBpcyByZWxldmFudD8gSSBzZWUgdGhhdCBgdm1hbGxvY19kdW1wX29iamAgcmVxdWlyZXMgYm90aCBgQ09ORklHX1BSSU5US2AgKmFuZCogYENPTkZJR19NTVVgLiBNYWtlcyBzZW5zZTsgZHVtcCBmdW5jdGlvbmFsaXR5IG5lZWRzIHByaW50aW5nIGNhcGFiaWxpdGllcywgYW5kIHdlJ3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIG1lbW9yeS4gQWxyaWdodCwgSSBhbHNvIG5vdGljZSBgc2hvd19udW1hX2luZm9gIGRlcGVuZHMgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRpbWUgdG8gZGl2ZSBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGBzaG93X251bWFfaW5mb2Agc3BlY2lmaWNhbGx5LCBwcm9iYWJseSB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU0NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToxNS4zODU1NDkyMjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTEyODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3dfbnVtYV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9NTM5Mz1ib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vdm1hbGxvYy5jLTU0MzQtICovXFxubW0vdm1hbGxvYy5jOjU0MzU6c3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxcbm1tL3ZtYWxsb2MuYy01NDM2LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgKmNvdW50ZXJzKVxcbi0tXFxubW0vdm1hbGxvYy5jPTU0NzA9c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuLS1cXG5tbS92bWFsbG9jLmMtNTUzMi1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXFxubW0vdm1hbGxvYy5jOjU1MzM6XFx0XFx0XFx0XFx0c2hvd19udW1hX2luZm8obSwgdiwgY291bnRlcnMpO1xcbm1tL3ZtYWxsb2MuYy01NTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToxNS40NzM0Njc5MzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzM0MDUzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBGdW5jdGlvbnMgZm9yIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciB0ZXN0aW5nLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE5VTUEuIEl0IHNlZW1zIGxpa2UgYENPTkZJR19OVU1BYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGVzdGluZyBgc2hvd19udW1hX2luZm9gLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdC5cblxuTGV0J3Mgc2VlLCB3aGF0IGVsc2UgaXMgcmVhZGlseSBhdmFpbGFibGU/IGB2bWFsbG9jX2R1bXBfb2JqYCBpcyBhbiBpbnRlcmVzdGluZyBjYW5kaWRhdGUsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgdGllZCB0byBgQ09ORklHX1BSSU5US2AsIHNvIHRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIG9yIHBlcmhhcHMgc29tZSBlYXNpbHkgY29uZmlndXJhYmxlIGNvdmVyYWdlLlxuXG5Ob3csIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAuLi4gQWgsIHllcywgdGhhdCdzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYHZtYWxsb2MuY2AsIHNvIGl0J3MgYWx3YXlzIGF2YWlsYWJsZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyBhIGNvcmUgZnVuY3Rpb24uXG5cblNvLCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbi4gV2UgaGF2ZTpcblxuKiAgIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgLSBBIGxpa2VseSBjYW5kaWRhdGUgZHVlIHRvIGl0cyB1bmNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLlxuKiAgIGB2bWFsbG9jX2R1bXBfb2JqYCAtIFBvdGVudGlhbCBmb3IgcHJpbnRrIGRlYnVnZ2luZyBhbmQgY292ZXJhZ2UuXG4qICAgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgLSBIbW0uLi4gSXQncyB0aGUgbWFpbiB3b3JraG9yc2UgaW4gdGVybXMgb2YgYG5yX3BhZ2VzYCwgYW5kIEkgdGhvdWdodCBpdCB3YXMgc3RhdGljLi4uIFdhaXQsIGl0IGlzbid0ICpzdGF0aWMqPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuLi4gTm8sIGl0J3MgZGVmaW5pdGVseSBub3QgZXhwb3J0ZWQuIE9rYXksIHNvIGl0J3Mgbm90IGV4cG9ydGVkLCBidXQgaXQncyAqbm9uLXN0YXRpYyosIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gTWlnaHQgYmUgdHJpY2t5IHRvIHRlc3QgZGlyZWN0bHksIGJ1dCB3b3J0aCBsb29raW5nIGludG8gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgdXNlZCBpbnRlcm5hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToyOC4xNDY4NzY0NzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjM3OTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz00MDIwPXN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQwNjUtXFx0ICpcXG5tbS92bWFsbG9jLmM6NDA2NjpcXHQgKiBQbGVhc2Ugbm90ZSwgdGhlIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZigpIGZhbGxzLWJhY2tcXG5tbS92bWFsbG9jLmMtNDA2Ny1cXHQgKiB0byBvcmRlci0wIHBhZ2VzIGlmIGhpZ2gtb3JkZXIgYXR0ZW1wdCBpcyB1bnN1Y2Nlc3NmdWwuXFxuLS1cXG5tbS92bWFsbG9jLmM9NDEzNT1zdGF0aWMgZ2ZwX3Qgdm1hbGxvY19maXhfZmxhZ3MoZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDE3OS0gKi9cXG5tbS92bWFsbG9jLmM6NDE4MDp2b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbm1tL3ZtYWxsb2MuYy00MTgxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzA4LSAqIFNlbWFudGljcyBvZiBAZ2ZwX21hc2sgKGluY2x1ZGluZyByZWNsYWltL3JldHJ5IG1vZGlmaWVycyBzdWNoIGFzXFxubW0vdm1hbGxvYy5jOjQzMDk6ICogX19HRlBfTk9GQUlMKSBhcmUgdGhlIHNhbWUgYXMgaW4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKCkuXFxubW0vdm1hbGxvYy5jLTQzMTAtICpcXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzEzPXZvaWQgKl9fdm1hbGxvY19ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtNDMxNS17XFxubW0vdm1hbGxvYy5jOjQzMTY6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBhbGlnbiwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxubW0vdm1hbGxvYy5jLTQzMTctXFx0XFx0XFx0XFx0Z2ZwX21hc2ssIFBBR0VfS0VSTkVMLCAwLCBub2RlLCBjYWxsZXIpO1xcbi0tXFxubW0vdm1hbGxvYy5jPTQzNjk9dm9pZCAqdm1hbGxvY19odWdlX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQzNzItXFx0XFx0Z2ZwX21hc2sgPSB2bWFsbG9jX2ZpeF9mbGFncyhnZnBfbWFzayk7XFxubW0vdm1hbGxvYy5jOjQzNzM6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCAxLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG5tbS92bWFsbG9jLmMtNDM3NC1cXHRcXHRcXHRcXHRcXHQgICBnZnBfbWFzaywgUEFHRV9LRVJORUwsIFZNX0FMTE9XX0hVR0VfVk1BUCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDA4PXZvaWQgKnZtYWxsb2NfdXNlcl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxcbm1tL3ZtYWxsb2MuYy00NDA5LXtcXG5tbS92bWFsbG9jLmM6NDQxMDpcXHRyZXR1cm4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHNpemUsIFNITUxCQSwgIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbm1tL3ZtYWxsb2MuYy00NDExLVxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsXFxuLS1cXG5tbS92bWFsbG9jLmM9NDY1Mj12b2lkICp2bWFsbG9jXzMyX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5tbS92bWFsbG9jLmMtNDY1My17XFxubW0vdm1hbGxvYy5jOjQ2NTQ6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG5tbS92bWFsbG9jLmMtNDY1NS1cXHRcXHRcXHRcXHQgICAgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToyOC41NzkyNjExOTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0MzM4MzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgKipcblxuSG1tLCBzbyBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBpc24ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gVGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzLCBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkIGluIGEgaGVhZGVyIGZpbGU/IFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSdzIGRlc2lnbiBhbmQgaG93IGl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCAob3IsIHBvdGVudGlhbGx5LCBtaXN1c2VkKS4gS25vd2luZyB3aGV0aGVyIGl0J3MgbWVhbnQgdG8gYmUgYW4gaW50ZXJuYWwgaGVscGVyLCBvciBwYXJ0IG9mIGEgbW9yZSBnZW5lcmFsIEFQSSwgaXMga2V5IHRvIGRpYWdub3Npbmcgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAxOjM2LjMyMjY0ODM5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjU5NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0xNzE9ZXh0ZXJuIHZvaWQgKl9fdm1hbGxvY19ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMTczLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjE3NDpleHRlcm4gdm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzUtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMTc3LVxcdFxcdFxcdGNvbnN0IHZvaWQgKmNhbGxlcikgX19hbGxvY19zaXplKDEpO1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjE3ODojZGVmaW5lIF9fdm1hbGxvY19ub2RlX3JhbmdlKC4uLilcXHRhbGxvY19ob29rcyhfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTE3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDE6MzYuNTMyOTE0NzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxODM0MTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3QgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gSSBzZWUgdGhlIGNvZGUgY2hhbmdlIGlzIGluIGBpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBsb29rcyBwcm9taXNpbmcuIEl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBgdm1hbGxvY2AgZnVuY3Rpb25hbGl0eSwgbWFraW5nIGl0IGEgbmF0dXJhbCB0YXJnZXQsIGJ1dC4uLiBpcyBpdCAqdG9vKiBnZW5lcmljPyBJdCdzIHRoZSBob3QtcGF0aCwgY2FsbGVkIGZvciAqZXZlcnkqIGB2bWFsbG9jYC4gVGhhdCBtYWtlcyBpdCBsZXNzIHRhcmdldGVkIGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2guXG5cbkFoLCBidXQgdGhlIHBhdGNoIGl0c2VsZiBjaGFuZ2VzIGB1bnNpZ25lZCBpbnQgbnJfcGFnZXNgIHRvIGB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzYC4gVGhpcyBpcyAqY3J1Y2lhbCouIFRoaXMgbWVhbnMgdGhlIGNoYW5nZSBkaXJlY3RseSBhZmZlY3RzIGhvdyBsYXJnZSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhpcywgZnV6emluZyBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzIGxvb2tpbmcgYmV0dGVyLiBJdCdzIGxlc3Mgb2YgYSBob3QgcGF0aCB0aGFuIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgLCBhbmQgaXQncyBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFRoYXQncyBpZGVhbC5cblxuYHZtYWxsb2NfZHVtcF9vYmpgIGlzIGFsc28gYSBnb29kIGNvbnRlbmRlciBmb3IgZnV6emluZy5cblxuTm93LCB3aGF0IGFib3V0IGB2ZnJlZV9hdG9taWNgPyBJdCdzIG5vdCBkaXJlY3RseSB0b3VjaGVkLCBidXQgYHZtX2FyZWFfZnJlZV9wYWdlc2AgaXMgY2FsbGVkIGJ5IGl0LCBhbmQgKnRoYXQqIGZ1bmN0aW9uIGlzLiBTbywgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCAqaXMqIGluZGVlZCBjYWxsZWQgYnkgYHZmcmVlYC4gR290dGEgY292ZXIgYWxsIGJhc2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMTo0Mi41NTEyNjA0MzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTEzNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX2FyZWFfZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTM0Njg9dm9pZCB2ZnJlZV9hdG9taWMoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNDg1LS8qXFxubW0vdm1hbGxvYy5jOjM0ODY6ICogdm1fYXJlYV9mcmVlX3BhZ2VzIC0gZnJlZSBhIHJhbmdlIG9mIHBhZ2VzIGZyb20gYSB2bWFsbG9jIGFsbG9jYXRpb25cXG5tbS92bWFsbG9jLmMtMzQ4Ny0gKiBAdm06IHRoZSB2bV9zdHJ1Y3QgY29udGFpbmluZyB0aGUgcGFnZXNcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNDk1LSAqL1xcbm1tL3ZtYWxsb2MuYzozNDk2OnN0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsXFxubW0vdm1hbGxvYy5jLTM0OTctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNTI4PXZvaWQgdmZyZWUoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNTUzLVxcbm1tL3ZtYWxsb2MuYzozNTU0OlxcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgMCwgdm0tXFx1MDAzZW5yX3BhZ2VzKTtcXG5tbS92bWFsbG9jLmMtMzU1NS1cXHRrdmZyZWUodm0tXFx1MDAzZXBhZ2VzKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDg4PXZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQ1NzctXFxubW0vdm1hbGxvYy5jOjQ1Nzg6XFx0XFx0XFx0dm1fYXJlYV9mcmVlX3BhZ2VzKHZtLCBuZXdfbnJfcGFnZXMsIG9sZF9ucl9wYWdlcyk7XFxubW0vdm1hbGxvYy5jLTQ1NzktXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMTo0Mi42MjAxODAzNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTAwNTk0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB3ZSBoYW5kbGUgcGFnZSBjb3VudHMgaW4gYHZtYWxsb2NgIGFsbG9jYXRpb25zLCBtb3ZpbmcgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgLiBUaGlzIGlzIGEgYmlnIGRlYWw7IGl0J3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGFkZHJlc3NlcyBwb3RlbnRpYWwgdHJ1bmNhdGlvbiBpc3N1ZXMgYW5kLCBjcnVjaWFsbHksIHVubG9ja3Mgc3VwcG9ydCBmb3Igdm1hbGxvYyBhbGxvY2F0aW9ucyBleGNlZWRpbmcgMTZUQi4gVGhpcyBpbXBhY3RzIGBtbS92bWFsbG9jLmNgIGRpcmVjdGx5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSB0b3VjaGVkIG9yIGNhbGwgdGhvc2UgdGhhdCBhcmUuIGB2ZnJlZWAgdWx0aW1hdGVseSB1c2VzIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLCBzbyBgdmZyZWVgIGl0c2VsZiBpcyBhIGhvdC1wYXRoIHRvIHdhdGNoLlxuXG5NeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlc2UgZnVuY3Rpb25zIGFzIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmc6XG5cbiogICBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgXG4qICAgYHZtYWxsb2NfZHVtcF9vYmpgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCB0byB0ZXN0IGFsbCB0aGUgY29kZSBwYXRocy4gSXQgbG9va3MgbGlrZTpcblxuKiAgIGBDT05GSUdfTlVNQWAgaXMgbmVlZGVkIGZvciBgc2hvd19udW1hX2luZm9gLlxuKiAgIGBDT05GSUdfUFJJTlRLYCBpcyBuZWVkZWQgZm9yIGB2bWFsbG9jX2R1bXBfb2JqYC5cblxuSSBjb25maXJtZWQgdGhhdCBgdm1hbGxvY19kdW1wX29iamAgaXMgZGVmaW5lZCBpZiBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfUFJJTlRLYC5cblxuSSdtIGFsc28gbm90aW5nIHRoYXQgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGB2bWFsbG9jX2luZm9fc2hvd2AsIGBzaG93X251bWFfaW5mb2AsIGBzZXRfYXJlYV9kaXJlY3RfbWFwYCwgYHZtX3Jlc2V0X3Blcm1zYCwgYHZtX2FyZWFfZnJlZV9wYWdlc2AsIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYW5kIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYXJlIHN0YXRpYywgYnV0IEkgc2hvdWxkIGJlIGNhcmVmdWwgd2hlbiBsb29raW5nIGF0IGNhbGxpbmcgcmVsYXRpb25zaGlwcy5cblxuU28sIGJleW9uZCB0aGUgdHdvIGZ1bmN0aW9ucyBJJ3ZlIGFscmVhZHkgbGlzdGVkLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBhbmQgYHZmcmVlYCAoYW5kIGl0cyB2YXJpYW50cykgYXJlIGFsc28ga2V5LiBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBjYWxscyBgX192bWFsbG9jX2FyZWFfbm9kZWAuIGB2ZnJlZWAgY2FsbHMgYHZtX2FyZWFfZnJlZV9wYWdlc2AuXG5cblRoZXJlZm9yZSwgSSdsbCByZWNvbW1lbmQgdGhlIGZvbGxvd2luZyBpbiBteSBhbmFseXNpczpcblxuKipGb2N1c1N5bWJvbHM6KipcblxuKiAgIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmBcbiogICBgdm1hbGxvY19kdW1wX29iamBcblxuKipFbmFibGVDb25maWdzOioqXG5cbiogICBgTlVNQWBcbiogICBgUFJJTlRLYFxuXG5JIGFsc28gdmVyaWZpZWQgdGhhdCBgUFJJTlRLYCBhbmQgYE5VTUFgIGFyZSBjb21tb25seSBlbmFibGVkIG9uIHg4NiwgYnV0IEkgc3RpbGwgbmVlZCB0byBiZSBhd2FyZSB0aGF0IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIHRoZXkgbWF5IG5vdCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjksIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAxOjU0LjAxMDI0MzE0NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDY0OTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiUFJJTlRLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZcIixcbiAgICBcInZtYWxsb2NfZHVtcF9vYmpcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIGBucl9wYWdlc2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIHRvIHN1cHBvcnQgdm1hbGxvYyBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiAxNlRCIChvciBmaXggdHJ1bmNhdGlvbiBidWdzKS4gSXQgdXBkYXRlcyB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYCB0byB1c2UgYHVuc2lnbmVkIGxvbmdgIGZvciBwYWdlIGNvdW50cyBhbmQgaW5kaWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCB3aGljaCB3ZXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgcmVxdWlyZSBgTlVNQWAgYW5kIGBQUklOVEtgIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJQUklOVEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZlwiLFxuICAgIFwidm1hbGxvY19kdW1wX29ialwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgYG5yX3BhZ2VzYCBpbiBgc3RydWN0IHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgdG8gc3VwcG9ydCB2bWFsbG9jIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDE2VEIgKG9yIGZpeCB0cnVuY2F0aW9uIGJ1Z3MpLiBJdCB1cGRhdGVzIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIHRvIHVzZSBgdW5zaWduZWQgbG9uZ2AgZm9yIHBhZ2UgY291bnRzIGFuZCBpbmRpY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHdoaWNoIHdlcmUgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCByZXF1aXJlIGBOVU1BYCBhbmQgYFBSSU5US2AgdG8gdGVzdCB0aGUgbW9kaWZpZWQgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 06:42:05 +0000 UTC FinishedAt: 2026-08-01 07:01:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a8efbe7d22d1d32bb8a5fab8c132bd7f31864735", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "PRINTK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a8efbe7d22d1d32bb8a5fab8c132bd7f31864735", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA", "PRINTK" ], "series_id": "bbd6e812-b789-4a02-a6f8-b4472e51b3ee" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vrealloc_node_align_noprof", "vmalloc_dump_obj" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7UFJJTlRLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YmIzM0OywKICAgICYjMzQ7dm1hbGxvY19kdW1wX29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIGBucl9wYWdlc2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIHRvIHN1cHBvcnQgdm1hbGxvYyBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiAxNlRCIChvciBmaXggdHJ1bmNhdGlvbiBidWdzKS4gSXQgdXBkYXRlcyB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYCB0byB1c2UgYHVuc2lnbmVkIGxvbmdgIGZvciBwYWdlIGNvdW50cyBhbmQgaW5kaWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCB3aGljaCB3ZXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgcmVxdWlyZSBgTlVNQWAgYW5kIGBQUklOVEtgIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljNDQ2NTg1YTkwZjAwMzhmM2NjYjViNjc5NjU1YmE2ODMyYzc4OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjU5OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbmluZGV4IGU0ZDhkMGE5ZjMwZjkuLmFlZDEyMWQ3MjliMDEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbkBAIC02Miw3ICYjNDM7NjIsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0IHtcbiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbiBcdHVuc2lnbmVkIGludFx0XHRwYWdlX29yZGVyO1xuICNlbmRpZlxuLVx0dW5zaWduZWQgaW50XHRcdG5yX3BhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXM7XG4gXHRwaHlzX2FkZHJfdFx0XHRwaHlzX2FkZHI7XG4gXHRjb25zdCB2b2lkXHRcdCpjYWxsZXI7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHJlcXVlc3RlZF9zaXplO1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMjZmMzI5NDljMmYyZS4uMTk2ZGE4NzM4Y2YxMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jXG5AQCAtMzQwNCw3ICYjNDM7MzQwNCw3IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKnJlbW92ZV92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9hcmVhX2RpcmVjdF9tYXAoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSxcbiBcdFx0XHRcdCAgICAgICBpbnQgKCpzZXRfZGlyZWN0X21hcCkoc3RydWN0IHBhZ2UgKnBhZ2UpKVxuIHtcbi1cdGludCBpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdC8qIEhVR0VfVk1BTExPQyBwYXNzZXMgc21hbGwgcGFnZXMgdG8gc2V0X2RpcmVjdF9tYXAgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFyZWEtXHUwMDNlbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuQEAgLTM0MjAsNyAmIzQzOzM0MjAsNyBAQCBzdGF0aWMgdm9pZCB2bV9yZXNldF9wZXJtcyhzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhKVxuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDtcbiBcdHVuc2lnbmVkIGludCBwYWdlX29yZGVyID0gdm1fYXJlYV9wYWdlX29yZGVyKGFyZWEpO1xuIFx0aW50IGZsdXNoX2RtYXAgPSAwO1xuLVx0aW50IGk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0LypcbiBcdCAqIEZpbmQgdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2Ugb2YgdGhlIGRpcmVjdCBtYXBwaW5ncyB0byBtYWtlIHN1cmUgdGhhdFxuQEAgLTM0OTMsMTAgJiM0MzszNDkzLDEwIEBAIHZvaWQgdmZyZWVfYXRvbWljKGNvbnN0IHZvaWQgKmFkZHIpXG4gICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bm1hcHBpbmcgKHZ1bm1hcF9yYW5nZSkgYW5kIEtBU0FOXG4gICogcG9pc29uaW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMuXG4gICovXG4tc3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgc3RhcnRfaWR4LFxuLVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZW5kX2lkeClcbiYjNDM7c3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2lkeCxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHRpZiAoISh2bS1cdTAwM2VmbGFncyBcdTAwMjYgVk1fTUFQX1BVVF9QQUdFUykpIHtcbiBcdFx0Zm9yIChpID0gc3RhcnRfaWR4OyBpIFx1MDAzYyBlbmRfaWR4OyBpJiM0MzsmIzQzOylcbkBAIC0zODE5LDEyICYjNDM7MzgxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGdmcF90IHZtYWxsb2NfZ2ZwX2FkanVzdChnZnBfdCBmbGFncywgY29uc3QgYm9vbCBsYXJnZSlcbiBcdHJldHVybiBmbGFncztcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXG4gdm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsXG4tXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGludCBucl9hbGxvY2F0ZWQgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfYWxsb2NhdGVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG1heF9hdHRlbXB0X29yZGVyID0gTUFYX1BBR0VfT1JERVI7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdGludCBpO1xuQEAgLTM4NzIsNyAmIzQzOzM4NzIsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbiBcdGlmICghb3JkZXIpIHtcbiBcdFx0d2hpbGUgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpIHtcbiBcdFx0XHR1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7XG4tXHRcdFx0aW50IGk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEEgbWF4aW11bSBhbGxvd2VkIHJlcXVlc3QgaXMgaGFyZC1jb2RlZCBhbmQgaXMgMTAwXG5AQCAtMzg4MCw3ICYjNDM7Mzg4MCw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuIFx0XHRcdCAqIGxvbmcgcHJlZW1wdGlvbiBvZmYgc2NlbmFyaW8gaW4gdGhlIGJ1bGstYWxsb2NhdG9yXG4gXHRcdFx0ICogc28gdGhlIHJhbmdlIGlzIFsxOjEwMF0uXG4gXHRcdFx0ICovXG4tXHRcdFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVLCBucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCk7XG4mIzQzO1x0XHRcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVUwsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcbiBcbiBcdFx0XHQvKiBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgY29uc2lkZXIgbWVtcG9saWN5LCB3ZSBjYW4mIzM5O3RcbiBcdFx0XHQgKiB3cm9uZ2x5IHVzZSBuZWFyZXN0IG5vZGUgd2hlbiBuaWQgPT0gTlVNQV9OT19OT0RFLFxuQEAgLTQwMjYsMTIgJiM0Mzs0MDI2LDEyIEBAIHN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cdTAwM2VhZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTtcbiBcdHVuc2lnbmVkIGxvbmcgYXJyYXlfc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBucl9zbWFsbF9wYWdlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9zbWFsbF9wYWdlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZV9vcmRlcjtcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdGludCByZXQ7XG4gXG4tXHRhcnJheV9zaXplID0gKHVuc2lnbmVkIGxvbmcpbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4mIzQzO1x0YXJyYXlfc2l6ZSA9IG5yX3NtYWxsX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopO1xuIFxuIFx0LyogX19HRlBfTk9GQUlMIGFuZCBcJiMzNDtub2Jsb2NrXCYjMzQ7IGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXG4gXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbkBAIC00NTI1LDcgJiM0Mzs0NTI1LDcgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25cbiBcdH1cbiBcbiBcdGlmIChzaXplIFx1MDAzYz0gb2xkX3NpemUpIHtcbi1cdFx0dW5zaWduZWQgaW50IG5ld19ucl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIG5ld19ucl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXG4gXHRcdC8qIFplcm8gb3V0IFwmIzM0O2ZyZWVkXCYjMzQ7IG1lbW9yeSwgcG90ZW50aWFsbHkgZm9yIGZ1dHVyZSByZWFsbG9jLiAqL1xuIFx0XHRpZiAod2FudF9pbml0X29uX2ZyZWUoKSB8fCB3YW50X2luaXRfb25fYWxsb2MoZmxhZ3MpKVxuQEAgLTQ1NTQsNyAmIzQzOzQ1NTQsNyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxuIFx0XHQgICAgISh2bS1cdTAwM2VmbGFncyBcdTAwMjYgKFZNX0ZMVVNIX1JFU0VUX1BFUk1TIHwgVk1fVVNFUk1BUCkpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZ2ZwX2hhc19pb19mcyhmbGFncykpIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcocCk7XG4tXHRcdFx0dW5zaWduZWQgaW50IG9sZF9ucl9wYWdlcyA9IHZtLVx1MDAzZW5yX3BhZ2VzO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIG9sZF9ucl9wYWdlcyA9IHZtLVx1MDAzZW5yX3BhZ2VzO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVXNlIHRoZSBub2RlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBjb25jdXJyZW50XG5AQCAtNDU2NywxNiAmIzQzOzQ1NjcsMTMgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25cbiBcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuIFxuIFx0XHRcdC8qIE5vdGlmeSBrbWVtbGVhayBvZiB0aGUgcmVkdWNlZCBhbGxvY2F0aW9uIHNpemUgYmVmb3JlIHVubWFwcGluZy4gKi9cbi1cdFx0XHRrbWVtbGVha19mcmVlX3BhcnQoXG4tXHRcdFx0XHQodm9pZCAqKWFkZHIgJiM0MzsgKCh1bnNpZ25lZCBsb25nKW5ld19ucl9wYWdlc1xuLVx0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbi1cdFx0XHRcdCh1bnNpZ25lZCBsb25nKShvbGRfbnJfcGFnZXMgLSBuZXdfbnJfcGFnZXMpXG4tXHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiYjNDM7XHRcdFx0a21lbWxlYWtfZnJlZV9wYXJ0KCh2b2lkICopYWRkciAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgKG5ld19ucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHRcdFx0XHQgICAob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxuJiM0MztcdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4gXG4tXHRcdFx0dnVubWFwX3JhbmdlKGFkZHIgJiM0MzsgKCh1bnNpZ25lZCBsb25nKW5ld19ucl9wYWdlc1xuLVx0XHRcdFx0XHQgICAgIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbi1cdFx0XHRcdCAgICAgYWRkciAmIzQzOyAoKHVuc2lnbmVkIGxvbmcpb2xkX25yX3BhZ2VzXG4tXHRcdFx0XHRcdCAgICAgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiYjNDM7XHRcdFx0dnVubWFwX3JhbmdlKGFkZHIgJiM0MzsgKG5ld19ucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHRcdFx0ICAgICBhZGRyICYjNDM7IChvbGRfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiBcbiBcdFx0XHR2bV9hcmVhX2ZyZWVfcGFnZXModm0sIG5ld19ucl9wYWdlcywgb2xkX25yX3BhZ2VzKTtcbiBcdFx0fVxuQEAgLTU0MDAsNyAmIzQzOzUzOTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxuIFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbi1cdHVuc2lnbmVkIGludCBucl9wYWdlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuIFxuIFx0YWRkciA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpIG9iamVjdCk7XG4gXHR2biA9IGFkZHJfdG9fbm9kZShhZGRyKTtcbkBAIC01NDIwLDcgJiM0Mzs1NDE3LDcgQEAgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbiBcdG5yX3BhZ2VzID0gdm0tXHUwMDNlbnJfcGFnZXM7XG4gXHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuIFxuLVx0cHJfY29udChcJiMzNDsgJXUtcGFnZSB2bWFsbG9jIHJlZ2lvbiBzdGFydGluZyBhdCAlI2x4IGFsbG9jYXRlZCBhdCAlcFNcXG5cJiMzNDssXG4mIzQzO1x0cHJfY29udChcJiMzNDsgJWx1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxuXCYjMzQ7LFxuIFx0XHRucl9wYWdlcywgYWRkciwgY2FsbGVyKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU0MzgsMTYgJiM0Mzs1NDM1LDE3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpXG4gc3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxuIFx0XHRcdFx0IHVuc2lnbmVkIGludCAqY291bnRlcnMpXG4ge1xuLVx0dW5zaWduZWQgaW50IG5yO1xuIFx0dW5zaWduZWQgaW50IHN0ZXAgPSAxVSBcdTAwM2NcdTAwM2Mgdm1fYXJlYV9wYWdlX29yZGVyKHYpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4gXHRpZiAoIWNvdW50ZXJzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpO1xuIFxuLVx0Zm9yIChuciA9IDA7IG5yIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBuciAmIzQzOz0gc3RlcClcbi1cdFx0Y291bnRlcnNbcGFnZV90b19uaWQodi1cdTAwM2VwYWdlc1tucl0pXSAmIzQzOz0gc3RlcDtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBpICYjNDM7PSBzdGVwKVxuJiM0MztcdFx0Y291bnRlcnNbcGFnZV90b19uaWQodi1cdTAwM2VwYWdlc1tpXSldICYjNDM7PSBzdGVwO1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuciwgTl9ISUdIX01FTU9SWSlcbiBcdFx0aWYgKGNvdW50ZXJzW25yXSlcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyBOJXU9JXVcJiMzNDssIG5yLCBjb3VudGVyc1tucl0pO1xuQEAgLTU1MDUsNyAmIzQzOzU1MDMsNyBAQCBzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbiBcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ICVwU1wmIzM0Oywgdi1cdTAwM2VjYWxsZXIpO1xuIFxuIFx0XHRcdGlmICh2LVx1MDAzZW5yX3BhZ2VzKVxuLVx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGFnZXM9JWRcJiMzNDssIHYtXHUwMDNlbnJfcGFnZXMpO1xuJiM0MztcdFx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7IHBhZ2VzPSVsdVwmIzM0Oywgdi1cdTAwM2Vucl9wYWdlcyk7XG4gXG4gXHRcdFx0aWYgKHYtXHUwMDNlcGh5c19hZGRyKVxuIFx0XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDsgcGh5cz0lcGFcJiMzNDssIFx1MDAyNnYtXHUwMDNlcGh5c19hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtQUklOVEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZiYjMzQ7LAogICAgJiMzNDt2bWFsbG9jX2R1bXBfb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgYG5yX3BhZ2VzYCBpbiBgc3RydWN0IHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgdG8gc3VwcG9ydCB2bWFsbG9jIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDE2VEIgKG9yIGZpeCB0cnVuY2F0aW9uIGJ1Z3MpLiBJdCB1cGRhdGVzIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIHRvIHVzZSBgdW5zaWduZWQgbG9uZ2AgZm9yIHBhZ2UgY291bnRzIGFuZCBpbmRpY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHdoaWNoIHdlcmUgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCByZXF1aXJlIGBOVU1BYCBhbmQgYFBSSU5US2AgdG8gdGVzdCB0aGUgbW9kaWZpZWQgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWM0NDY1ODVhOTBmMDAzOGYzY2NiNWI2Nzk2NTViYTY4MzJjNzg5NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDY6NTk6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IGU0ZDhkMGE5ZjMwZjkuLmFlZDEyMWQ3MjliMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC02Miw3ICYjNDM7NjIsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0IHsKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQwogCXVuc2lnbmVkIGludAkJcGFnZV9vcmRlcjsKICNlbmRpZgotCXVuc2lnbmVkIGludAkJbnJfcGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCW5yX3BhZ2VzOwogCXBoeXNfYWRkcl90CQlwaHlzX2FkZHI7CiAJY29uc3Qgdm9pZAkJKmNhbGxlcjsKIAl1bnNpZ25lZCBsb25nCQlyZXF1ZXN0ZWRfc2l6ZTsKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAyNmYzMjk0OWMyZjJlLi4xOTZkYTg3MzhjZjEwIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hbGxvYy5jCkBAIC0zNDA0LDcgJiM0MzszNDA0LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXJlYV9kaXJlY3RfbWFwKGNvbnN0IHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsCiAJCQkJICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpCiB7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCS8qIEhVR0VfVk1BTExPQyBwYXNzZXMgc21hbGwgcGFnZXMgdG8gc2V0X2RpcmVjdF9tYXAgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgYXJlYS0mZ3Q7bnJfcGFnZXM7IGkmIzQzOyYjNDM7KQpAQCAtMzQyMCw3ICYjNDM7MzQyMCw3IEBAIHN0YXRpYyB2b2lkIHZtX3Jlc2V0X3Blcm1zKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpCiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKIAl1bnNpZ25lZCBpbnQgcGFnZV9vcmRlciA9IHZtX2FyZWFfcGFnZV9vcmRlcihhcmVhKTsKIAlpbnQgZmx1c2hfZG1hcCA9IDA7Ci0JaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKIAogCS8qCiAJICogRmluZCB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBvZiB0aGUgZGlyZWN0IG1hcHBpbmdzIHRvIG1ha2Ugc3VyZSB0aGF0CkBAIC0zNDkzLDEwICYjNDM7MzQ5MywxMCBAQCB2b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKQogICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB1bm1hcHBpbmcgKHZ1bm1hcF9yYW5nZSkgYW5kIEtBU0FOCiAgKiBwb2lzb25pbmcgYmVmb3JlIGNhbGxpbmcgdGhpcy4KICAqLwotc3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgc3RhcnRfaWR4LAotCQkJICAgICAgIHVuc2lnbmVkIGludCBlbmRfaWR4KQomIzQzO3N0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwogCiAJaWYgKCEodm0tJmd0O2ZsYWdzICZhbXA7IFZNX01BUF9QVVRfUEFHRVMpKSB7CiAJCWZvciAoaSA9IHN0YXJ0X2lkeDsgaSAmbHQ7IGVuZF9pZHg7IGkmIzQzOyYjNDM7KQpAQCAtMzgxOSwxMiAmIzQzOzM4MTksMTIgQEAgc3RhdGljIGlubGluZSBnZnBfdCB2bWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX3QgZmxhZ3MsIGNvbnN0IGJvb2wgbGFyZ2UpCiAJcmV0dXJuIGZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogdm1fYXJlYV9hbGxvY19wYWdlcyhnZnBfdCBnZnAsIGludCBuaWQsCi0JCXVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewotCXVuc2lnbmVkIGludCBucl9hbGxvY2F0ZWQgPSAwOwotCXVuc2lnbmVkIGludCBucl9yZW1haW5pbmcgPSBucl9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzOwogCXVuc2lnbmVkIGludCBtYXhfYXR0ZW1wdF9vcmRlciA9IE1BWF9QQUdFX09SREVSOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBpOwpAQCAtMzg3Miw3ICYjNDM7Mzg3Miw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLAogCWlmICghb3JkZXIpIHsKIAkJd2hpbGUgKG5yX2FsbG9jYXRlZCAmbHQ7IG5yX3BhZ2VzKSB7CiAJCQl1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7Ci0JCQlpbnQgaTsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGk7CiAKIAkJCS8qCiAJCQkgKiBBIG1heGltdW0gYWxsb3dlZCByZXF1ZXN0IGlzIGhhcmQtY29kZWQgYW5kIGlzIDEwMApAQCAtMzg4MCw3ICYjNDM7Mzg4MCw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLAogCQkJICogbG9uZyBwcmVlbXB0aW9uIG9mZiBzY2VuYXJpbyBpbiB0aGUgYnVsay1hbGxvY2F0b3IKIAkJCSAqIHNvIHRoZSByYW5nZSBpcyBbMToxMDBdLgogCQkJICovCi0JCQlucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFUsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTsKJiM0MzsJCQlucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFVMLCBucl9wYWdlcyAtIG5yX2FsbG9jYXRlZCk7CiAKIAkJCS8qIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBjb25zaWRlciBtZW1wb2xpY3ksIHdlIGNhbiYjMzk7dAogCQkJICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSwKQEAgLTQwMjYsMTIgJiM0Mzs0MDI2LDEyIEBAIHN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLAogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtJmd0O2FkZHI7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTsKIAl1bnNpZ25lZCBsb25nIGFycmF5X3NpemU7Ci0JdW5zaWduZWQgaW50IG5yX3NtYWxsX3BhZ2VzID0gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3NtYWxsX3BhZ2VzID0gc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGludCBwYWdlX29yZGVyOwogCXVuc2lnbmVkIGludCBmbGFnczsKIAlpbnQgcmV0OwogCi0JYXJyYXlfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKW5yX3NtYWxsX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopOwomIzQzOwlhcnJheV9zaXplID0gbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7CiAKIAkvKiBfX0dGUF9OT0ZBSUwgYW5kICYjMzQ7bm9ibG9jayYjMzQ7IGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovCiAJaWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykpCkBAIC00NTI1LDcgJiM0Mzs0NTI1LDcgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24KIAl9CiAKIAlpZiAoc2l6ZSAmbHQ7PSBvbGRfc2l6ZSkgewotCQl1bnNpZ25lZCBpbnQgbmV3X25yX3BhZ2VzID0gUEFHRV9BTElHTihzaXplKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJdW5zaWduZWQgbG9uZyBuZXdfbnJfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAKIAkJLyogWmVybyBvdXQgJiMzNDtmcmVlZCYjMzQ7IG1lbW9yeSwgcG90ZW50aWFsbHkgZm9yIGZ1dHVyZSByZWFsbG9jLiAqLwogCQlpZiAod2FudF9pbml0X29uX2ZyZWUoKSB8fCB3YW50X2luaXRfb25fYWxsb2MoZmxhZ3MpKQpAQCAtNDU1NCw3ICYjNDM7NDU1NCw3IEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduCiAJCSAgICAhKHZtLSZndDtmbGFncyAmYW1wOyAoVk1fRkxVU0hfUkVTRVRfUEVSTVMgfCBWTV9VU0VSTUFQKSkgJmFtcDsmYW1wOwogCQkgICAgZ2ZwX2hhc19pb19mcyhmbGFncykpIHsKIAkJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhwKTsKLQkJCXVuc2lnbmVkIGludCBvbGRfbnJfcGFnZXMgPSB2bS0mZ3Q7bnJfcGFnZXM7CiYjNDM7CQkJdW5zaWduZWQgbG9uZyBvbGRfbnJfcGFnZXMgPSB2bS0mZ3Q7bnJfcGFnZXM7CiAKIAkJCS8qCiAJCQkgKiBVc2UgdGhlIG5vZGUgbG9jayB0byBzeW5jaHJvbml6ZSB3aXRoIGNvbmN1cnJlbnQKQEAgLTQ1NjcsMTYgJiM0Mzs0NTY3LDEzIEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduCiAJCQlzcGluX3VubG9jaygmYW1wO3ZuLSZndDtidXN5LmxvY2spOwogCiAJCQkvKiBOb3RpZnkga21lbWxlYWsgb2YgdGhlIHJlZHVjZWQgYWxsb2NhdGlvbiBzaXplIGJlZm9yZSB1bm1hcHBpbmcuICovCi0JCQlrbWVtbGVha19mcmVlX3BhcnQoCi0JCQkJKHZvaWQgKilhZGRyICYjNDM7ICgodW5zaWduZWQgbG9uZyluZXdfbnJfcGFnZXMKLQkJCQkJCSZsdDsmbHQ7IFBBR0VfU0hJRlQpLAotCQkJCSh1bnNpZ25lZCBsb25nKShvbGRfbnJfcGFnZXMgLSBuZXdfbnJfcGFnZXMpCi0JCQkJCSZsdDsmbHQ7IFBBR0VfU0hJRlQpOwomIzQzOwkJCWttZW1sZWFrX2ZyZWVfcGFydCgodm9pZCAqKWFkZHIgJiM0MzsKJiM0MzsJCQkJCSAgIChuZXdfbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCksCiYjNDM7CQkJCQkgICAob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKQomIzQzOwkJCQkJCSZsdDsmbHQ7IFBBR0VfU0hJRlQpOwogCi0JCQl2dW5tYXBfcmFuZ2UoYWRkciAmIzQzOyAoKHVuc2lnbmVkIGxvbmcpbmV3X25yX3BhZ2VzCi0JCQkJCSAgICAgJmx0OyZsdDsgUEFHRV9TSElGVCksCi0JCQkJICAgICBhZGRyICYjNDM7ICgodW5zaWduZWQgbG9uZylvbGRfbnJfcGFnZXMKLQkJCQkJICAgICAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7CQkJdnVubWFwX3JhbmdlKGFkZHIgJiM0MzsgKG5ld19ucl9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkJICAgICBhZGRyICYjNDM7IChvbGRfbnJfcGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVCkpOwogCiAJCQl2bV9hcmVhX2ZyZWVfcGFnZXModm0sIG5ld19ucl9wYWdlcywgb2xkX25yX3BhZ2VzKTsKIAkJfQpAQCAtNTQwMCw3ICYjNDM7NTM5Nyw3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpCiAJc3RydWN0IHZtYXBfYXJlYSAqdmE7CiAJc3RydWN0IHZtYXBfbm9kZSAqdm47CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGludCBucl9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKIAogCWFkZHIgPSBQQUdFX0FMSUdOKCh1bnNpZ25lZCBsb25nKSBvYmplY3QpOwogCXZuID0gYWRkcl90b19ub2RlKGFkZHIpOwpAQCAtNTQyMCw3ICYjNDM7NTQxNyw3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpCiAJbnJfcGFnZXMgPSB2bS0mZ3Q7bnJfcGFnZXM7CiAJc3Bpbl91bmxvY2soJmFtcDt2bi0mZ3Q7YnVzeS5sb2NrKTsKIAotCXByX2NvbnQoJiMzNDsgJXUtcGFnZSB2bWFsbG9jIHJlZ2lvbiBzdGFydGluZyBhdCAlI2x4IGFsbG9jYXRlZCBhdCAlcFNcbiYjMzQ7LAomIzQzOwlwcl9jb250KCYjMzQ7ICVsdS1wYWdlIHZtYWxsb2MgcmVnaW9uIHN0YXJ0aW5nIGF0ICUjbHggYWxsb2NhdGVkIGF0ICVwU1xuJiMzNDssCiAJCW5yX3BhZ2VzLCBhZGRyLCBjYWxsZXIpOwogCiAJcmV0dXJuIHRydWU7CkBAIC01NDM4LDE2ICYjNDM7NTQzNSwxNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KQogc3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LAogCQkJCSB1bnNpZ25lZCBpbnQgKmNvdW50ZXJzKQogewotCXVuc2lnbmVkIGludCBucjsKIAl1bnNpZ25lZCBpbnQgc3RlcCA9IDFVICZsdDsmbHQ7IHZtX2FyZWFfcGFnZV9vcmRlcih2KTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwl1bnNpZ25lZCBpbnQgbnI7CiAKIAlpZiAoIWNvdW50ZXJzKQogCQlyZXR1cm47CiAKIAltZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOwogCi0JZm9yIChuciA9IDA7IG5yICZsdDsgdi0mZ3Q7bnJfcGFnZXM7IG5yICYjNDM7PSBzdGVwKQotCQljb3VudGVyc1twYWdlX3RvX25pZCh2LSZndDtwYWdlc1tucl0pXSAmIzQzOz0gc3RlcDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHYtJmd0O25yX3BhZ2VzOyBpICYjNDM7PSBzdGVwKQomIzQzOwkJY291bnRlcnNbcGFnZV90b19uaWQodi0mZ3Q7cGFnZXNbaV0pXSAmIzQzOz0gc3RlcDsKIAlmb3JfZWFjaF9ub2RlX3N0YXRlKG5yLCBOX0hJR0hfTUVNT1JZKQogCQlpZiAoY291bnRlcnNbbnJdKQogCQkJc2VxX3ByaW50ZihtLCAmIzM0OyBOJXU9JXUmIzM0OywgbnIsIGNvdW50ZXJzW25yXSk7CkBAIC01NTA1LDcgJiM0Mzs1NTAzLDcgQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiAJCQkJc2VxX3ByaW50ZihtLCAmIzM0OyAlcFMmIzM0Oywgdi0mZ3Q7Y2FsbGVyKTsKIAogCQkJaWYgKHYtJmd0O25yX3BhZ2VzKQotCQkJCXNlcV9wcmludGYobSwgJiMzNDsgcGFnZXM9JWQmIzM0Oywgdi0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJCQlzZXFfcHJpbnRmKG0sICYjMzQ7IHBhZ2VzPSVsdSYjMzQ7LCB2LSZndDtucl9wYWdlcyk7CiAKIAkJCWlmICh2LSZndDtwaHlzX2FkZHIpCiAJCQkJc2VxX3ByaW50ZihtLCAmIzM0OyBwaHlzPSVwYSYjMzQ7LCAmYW1wO3YtJmd0O3BoeXNfYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmcgQW5hbHlzaXM6IHZtYWxsb2MuYyBUeXBlIENoYW5nZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBidW1waW5nIGBucl9wYWdlc2AgaW4gYHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgYW5kIHByb3BhZ2F0aW5nIHRoZSBjaGFuZ2UgdGhyb3VnaG91dCBgbW0vdm1hbGxvYy5jYC4gVGhlIG1haW4gbW90aXZhdGlvbiBzZWVtcyB0byBiZSBzdXBwb3J0aW5nIGxhcmdlciB2bWFsbG9jIGFsbG9jYXRpb25zLCBleGNlZWRpbmcgdGhlIDRHQiBsaW1pdCBpbXBvc2VkIGJ5IGEgMzItYml0IGB1bnNpZ25lZCBpbnRgLiBPbiA2NC1iaXQgc3lzdGVtcywgYHVuc2lnbmVkIGludGAgaXMgc3RpbGwgb25seSAzMiBiaXRzLiBUaGlzIG1lYW5zIGEgbWF4aW11bSBvZiA0RyBwYWdlcyBvZiBtZW1vcnkuIFdpdGggYHVuc2lnbmVkIGxvbmdgIHdlIGhhdmUgYSBtdWNoIGxhcmdlciBjYXBhY2l0eS4KClRoZSBkaWZmIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ6IHR5cGUgY2hhbmdlcyBhY3Jvc3MgYSBidW5jaCBvZiBmdW5jdGlvbnMuICBJIHNlZSBjaGFuZ2VzIGluIGBzZXRfYXJlYV9kaXJlY3RfbWFwYCwgYHZtX3Jlc2V0X3Blcm1zYCwgYHZtX2FyZWFfZnJlZV9wYWdlc2AsIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYF9fdm1hbGxvY19hcmVhX25vZGVgLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBzaG93X251bWFfaW5mb2AsIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgLiAgVGhlIGNvZGUgaW4gcXVlc3Rpb24gaGFzIHRvIGJlIGNoZWNrZWQsIGFzIGl0IGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhLgoKSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCB0aGUgZGlmZmljdWx0eSBvZiBmdXp6aW5nIHRoaXMgZWZmZWN0aXZlbHksIHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgYWxsb2NhdGluZyBtYXNzaXZlIGFtb3VudHMgb2Ygdm1hbGxvYyBtZW1vcnkgdG8gdHJpZ2dlciB0aGUgYWN0dWFsIGRpZmZlcmVuY2UsIHdoaWNoIGlzbiYjMzk7dCBlYXN5IHRvIGRvIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuIEJ1dCB0aGVuIGFnYWluLCBhIGJ1ZyBpbnZvbHZpbmcgdGhlIHRydW5jYXRpb24gb2Ygc2l6ZSwgZXRjIGNvdWxkIGxlYWQgdG8gYSBkaWZmZXJlbmNlIG5vdyB0aGF0IGl0IGlzIGEgNjQtYml0IHZhcmlhYmxlLgoKVGhlbiB0aGUgaW5zdHJ1Y3Rpb25zIHBvcHBlZCBpbnRvIG15IGhlYWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzICpub3QqIGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIG5vdCBkZWNvcmF0aXZlLCBhbmQgaXQgaXMgYSBjaGFuZ2UgdG8gYSBudW1lcmljIGNvbnN0YW50IG9yIG1hY3JvIHRoYXQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdy4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoICppcyogd29ydGggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGZvY3VzLiAgV2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0PyBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYHNldF9hcmVhX2RpcmVjdF9tYXBgLCBgdm1fcmVzZXRfcGVybXNgLCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX192bWFsbG9jX2FyZWFfbm9kZWAsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2R1bXBfb2JqYCwgYHNob3dfbnVtYV9pbmZvYCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AuICBTaW5jZSB3ZSB3YW50IHRvIGZvY3VzIG9uIGZ1enppbmcgQVBJIGVudHJ5cG9pbnRzLCBsZXQgbWUgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBmaWx0ZXIgZG93biB0aGUgbGlzdC4gIAoKQWxyaWdodCwgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYF9fdm1hbGxvY19hcmVhX25vZGVgIGxvb2sgbGlrZSBBUEkgZW50cnlwb2ludHMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2hlY2sgdGhlIGNvZGUgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHN0YXRpYyBvciBub3QuCkxldCYjMzk7cyBjaGVjayBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgX192bWFsbG9jX2FyZWFfbm9kZWAgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NDQ1Mz1FWFBPUlRfU1lNQk9MKHZ6YWxsb2Nfbm9kZV9ub3Byb2YpO1xuLS1cbm1tL3ZtYWxsb2MuYy00NDg3LSAqL1xubW0vdm1hbGxvYy5jOjQ0ODg6dm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG5tbS92bWFsbG9jLmMtNDQ4OS1cdFx0XHRcdCBnZnBfdCBmbGFncywgaW50IG5pZClcbi0tXG5tbS92bWFsbG9jLmMtNDYxMi19XG5tbS92bWFsbG9jLmM6NDYxMzpFWFBPUlRfU1lNQk9MKHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00NjE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gRnVuY3Rpb25zKioKClJpZ2h0LCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLi4uIHllcywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGFuIGV4cG9ydGVkIGZ1bmN0aW9uLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuIFRoZSBxdWVzdGlvbiBub3cgaXMgYWJvdXQgYF9fdm1hbGxvY19hcmVhX25vZGVgLiBJdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXQmIzM5O3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBCdXQgdGhhdCBkb2VzbiYjMzk7dCBzdG9wIG1lIGZyb20gd2FudGluZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBTbywgbGV0JiMzOTtzIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoZXJlIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBpcyBpbnZva2VkIHdpdGhpbiB0aGUga2VybmVsIHRvIGRldGVybWluZSBpdHMgY29udHJpYnV0aW9uIHRvIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcHJvY2VzcywgZXZlbiBpZiBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byBpbnRlcm5hbCB1c2FnZSB3aXRoaW4gdGhlIG1vZHVsZS4gS25vd2luZyAqd2hvKiBpcyBjYWxsaW5nIGl0LCBhbmQgdW5kZXIgKndoYXQqIGNpcmN1bXN0YW5jZXMsIGlzIGVzc2VudGlhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3ZtYWxsb2NfYXJlYV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zOTUzPXN0YXRpYyB2b2lkIGNsZWFudXBfdm1fYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS92bWFsbG9jLmMtMzk3MC0vKlxubW0vdm1hbGxvYy5jOjM5NzE6ICogSGVscGVyIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgdG8gZGVmZXIgY2xlYW51cFxubW0vdm1hbGxvYy5jLTM5NzItICogb2YgcGFydGlhbGx5IGluaXRpYWxpemVkIHZtX3N0cnVjdCBpbiBlcnJvciBwYXRocy5cbi0tXG5tbS92bWFsbG9jLmM9NDAxND1tZW1hbGxvY19yZXN0b3JlX3Njb3BlKHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5tbS92bWFsbG9jLmMtNDAxOS1cbm1tL3ZtYWxsb2MuYzo0MDIwOnN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxubW0vdm1hbGxvYy5jLTQwMjEtXHRcdFx0XHQgcGdwcm90X3QgcHJvdCwgdW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQsXG4tLVxubW0vdm1hbGxvYy5jPTQxODA9dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDIzMC1cdC8qXG5tbS92bWFsbG9jLmM6NDIzMTpcdCAqIFByZXBhcmUgYXJndW1lbnRzIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgYW5kXG5tbS92bWFsbG9jLmMtNDIzMi1cdCAqIGthc2FuX3VucG9pc29uX3ZtYWxsb2MoKS5cbi0tXG5tbS92bWFsbG9jLmMtNDI1NC1cdC8qIEFsbG9jYXRlIHBoeXNpY2FsIHBhZ2VzIGFuZCBtYXAgdGhlbSBpbnRvIHZtYWxsb2Mgc3BhY2UuICovXG5tbS92bWFsbG9jLmM6NDI1NTpcdHJldCA9IF9fdm1hbGxvY19hcmVhX25vZGUoYXJlYSwgZ2ZwX21hc2ssIHByb3QsIHNoaWZ0LCBub2RlKTtcbm1tL3ZtYWxsb2MuYy00MjU2LVx0aWYgKCFyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBDYWxsIFBhdGgqKgoKUmlnaHQsIHNvIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzIHVzaW5nIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBpbnRlcm5hbGx5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzcGVjaWZpYyBub2Rlcy4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSBiYWNrIHRoZSBjYWxsIGNoYWluLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgb2YgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGl0cyBwdXJwb3NlLCB1c2FnZSBjb250ZXh0LCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJiMzOTtzIGludm9raW5nIHRoaXMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgYmVpbmcgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz00MDIwPXN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3ZtYWxsb2MuYy00MDY1LVx0ICpcbm1tL3ZtYWxsb2MuYzo0MDY2Olx0ICogUGxlYXNlIG5vdGUsIHRoZSBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoKSBmYWxscy1iYWNrXG5tbS92bWFsbG9jLmMtNDA2Ny1cdCAqIHRvIG9yZGVyLTAgcGFnZXMgaWYgaGlnaC1vcmRlciBhdHRlbXB0IGlzIHVuc3VjY2Vzc2Z1bC5cbi0tXG5tbS92bWFsbG9jLmM9NDEzNT1zdGF0aWMgZ2ZwX3Qgdm1hbGxvY19maXhfZmxhZ3MoZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vdm1hbGxvYy5jLTQxNzktICovXG5tbS92bWFsbG9jLmM6NDE4MDp2b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxubW0vdm1hbGxvYy5jLTQxODEtXHRcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3ZtYWxsb2MuYy00MzA4LSAqIFNlbWFudGljcyBvZiBAZ2ZwX21hc2sgKGluY2x1ZGluZyByZWNsYWltL3JldHJ5IG1vZGlmaWVycyBzdWNoIGFzXG5tbS92bWFsbG9jLmM6NDMwOTogKiBfX0dGUF9OT0ZBSUwpIGFyZSB0aGUgc2FtZSBhcyBpbiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoKS5cbm1tL3ZtYWxsb2MuYy00MzEwLSAqXG4tLVxubW0vdm1hbGxvYy5jPTQzMTM9dm9pZCAqX192bWFsbG9jX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDMxNS17XG5tbS92bWFsbG9jLmM6NDMxNjpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgYWxpZ24sIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxubW0vdm1hbGxvYy5jLTQzMTctXHRcdFx0XHRnZnBfbWFzaywgUEFHRV9LRVJORUwsIDAsIG5vZGUsIGNhbGxlcik7XG4tLVxubW0vdm1hbGxvYy5jPTQzNjk9dm9pZCAqdm1hbGxvY19odWdlX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlKVxuLS1cbm1tL3ZtYWxsb2MuYy00MzcyLVx0XHRnZnBfbWFzayA9IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF9tYXNrKTtcbm1tL3ZtYWxsb2MuYzo0MzczOlx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCAxLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00Mzc0LVx0XHRcdFx0XHQgICBnZnBfbWFzaywgUEFHRV9LRVJORUwsIFZNX0FMTE9XX0hVR0VfVk1BUCxcbi0tXG5tbS92bWFsbG9jLmM9NDQwOD12b2lkICp2bWFsbG9jX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbm1tL3ZtYWxsb2MuYy00NDA5LXtcbm1tL3ZtYWxsb2MuYzo0NDEwOlx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00NDExLVx0XHRcdFx0ICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCxcbi0tXG5tbS92bWFsbG9jLmM9NDY1Mj12b2lkICp2bWFsbG9jXzMyX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbm1tL3ZtYWxsb2MuYy00NjUzLXtcbm1tL3ZtYWxsb2MuYzo0NjU0Olx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00NjU1LVx0XHRcdFx0ICAgIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdm1hbGxvYyBJbnRlcm5hbHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZtYWxsb2MgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIHRoZSBjb3JlIG9mIHRoZSB3aG9sZSBvcGVyYXRpb24uIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucywgbGlrZSBgX192bWFsbG9jX25vZGVfbm9wcm9mYCwgYHZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZmAsIGB2bWFsbG9jX3VzZXJfbm9wcm9mYCwgYW5kIGV2ZW4gYHZtYWxsb2NfMzJfdXNlcl9ub3Byb2ZgLiBJdCYjMzk7cyB0eXBpY2FsIHRvIGhhdmUgYSBjZW50cmFsIGZ1bmN0aW9uIGxpa2UgdGhhdCwgaGFuZGxpbmcgdGhlIGZ1bmRhbWVudGFsIGxvZ2ljLgoKV2FpdCBhIHNlY29uZOKApiB0aGlua2luZyBhYm91dCBpdCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgaXMgYWN0dWFsbHkgKmltcGxlbWVudGluZyogYF9fdm1hbGxvY19ub2RlX3JhbmdlYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlc2UgYG5vcHJvZmAgdmFyaWFudHMgYXJlIG9mdGVuIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9ucy4KCkkgc2hvdWxkIHZlcmlmeSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGl0c2VsZiBpcyBleHBvcnRlZCwgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGFjY2VzcyBsZXZlbCBhbmQgcG90ZW50aWFsIHVzYWdlIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipfX3ZtYWxsb2Nfbm9kZV9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgTWVtb3J5IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYF9fdm1hbGxvY19ub2RlX3JhbmdlYCwgYnV0IHRoYXQgbWlnaHQgbm90IGJlIGV4cG9ydGVkIGFzIGEgc3ltYm9sLiBUaGF0JiMzOTtzIGEgY29tbW9uIGdvdGNoYSBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQsIHJpZ2h0PyBBbHdheXMgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBMZXQgbWUgcXVpY2tseSBwaXZvdCB0byBzb21ldGhpbmcgSSAqa25vdyogaXMgcHJvYmFibHkgYWNjZXNzaWJsZTogYHZtYWxsb2NgLiBZZWFoLCBva2F5LCBgdm1hbGxvY2AgaXRzZWxmIHNob3VsZCBiZSBmaW5lLCBidXQgSSBrbm93IHRoZXJlIGFyZSB2YXJpYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgb2YgcHJvZmlsaW5nIG5lZWRlZC4gTGV0JiMzOTtzIHNlZS4uLiBwZXJoYXBzIGBfX3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgIG9yIGV2ZW4gYHZtYWxsb2Nfbm9wcm9mYCB3aWxsIGJlIGF2YWlsYWJsZSBpbnN0ZWFkLiBUaG9zZSBtaWdodCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgd2l0aG91dCB0aGUgb3ZlcmhlYWQuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoZXkgc3VpdCBteSBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip2bWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz04MT1ib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KVxuLS1cbm1tL3ZtYWxsb2MuYy04Ni19XG5tbS92bWFsbG9jLmM6ODc6RVhQT1JUX1NZTUJPTChpc192bWFsbG9jX2FkZHIpO1xubW0vdm1hbGxvYy5jLTg4LVxuLS1cbm1tL3ZtYWxsb2MuYz04MzY9aW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeClcbi0tXG5tbS92bWFsbG9jLmMtODQ5LX1cbm1tL3ZtYWxsb2MuYzo4NTA6RVhQT1JUX1NZTUJPTF9HUEwoaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcik7XG5tbS92bWFsbG9jLmMtODUxLVxuLS1cbm1tL3ZtYWxsb2MuYz04NTc9c3RydWN0IHBhZ2UgKnZtYWxsb2NfdG9fcGFnZShjb25zdCB2b2lkICp2bWFsbG9jX2FkZHIpXG4tLVxubW0vdm1hbGxvYy5jLTkxMC19XG5tbS92bWFsbG9jLmM6OTExOkVYUE9SVF9TWU1CT0wodm1hbGxvY190b19wYWdlKTtcbm1tL3ZtYWxsb2MuYy05MTItXG4tLVxubW0vdm1hbGxvYy5jPTkxNj11bnNpZ25lZCBsb25nIHZtYWxsb2NfdG9fcGZuKGNvbnN0IHZvaWQgKnZtYWxsb2NfYWRkcilcbi0tXG5tbS92bWFsbG9jLmMtOTE5LX1cbm1tL3ZtYWxsb2MuYzo5MjA6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX3RvX3Bmbik7XG5tbS92bWFsbG9jLmMtOTIxLVxuLS1cbm1tL3ZtYWxsb2MuYz00MzEzPXZvaWQgKl9fdm1hbGxvY19ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTQzMjQtI2lmZGVmIENPTkZJR19URVNUX1ZNQUxMT0NfTU9EVUxFXG5tbS92bWFsbG9jLmM6NDMyNTpFWFBPUlRfU1lNQk9MX0dQTChfX3ZtYWxsb2Nfbm9kZV9ub3Byb2YpO1xubW0vdm1hbGxvYy5jLTQzMjYtI2VuZGlmXG4tLVxubW0vdm1hbGxvYy5jPTQzMjg9dm9pZCAqX192bWFsbG9jX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3ZtYWxsb2MuYy00MzM0LX1cbm1tL3ZtYWxsb2MuYzo0MzM1OkVYUE9SVF9TWU1CT0woX192bWFsbG9jX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDMzNi1cbi0tXG5tbS92bWFsbG9jLmM9NDM0OT12b2lkICp2bWFsbG9jX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxubW0vdm1hbGxvYy5jLTQzNTMtfVxubW0vdm1hbGxvYy5jOjQzNTQ6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDM1NS1cbi0tXG5tbS92bWFsbG9jLmM9NDM2OT12b2lkICp2bWFsbG9jX2h1Z2Vfbm9kZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGUpXG4tLVxubW0vdm1hbGxvYy5jLTQzNzYtfVxubW0vdm1hbGxvYy5jOjQzNzc6RVhQT1JUX1NZTUJPTF9HUEwodm1hbGxvY19odWdlX25vZGVfbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00Mzc4LVxuLS1cbm1tL3ZtYWxsb2MuYz00NDA4PXZvaWQgKnZtYWxsb2NfdXNlcl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbm1tL3ZtYWxsb2MuYy00NDE0LX1cbm1tL3ZtYWxsb2MuYzo0NDE1OkVYUE9SVF9TWU1CT0wodm1hbGxvY191c2VyX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDQxNi1cbi0tXG5tbS92bWFsbG9jLmM9NDQzMD12b2lkICp2bWFsbG9jX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpXG4tLVxubW0vdm1hbGxvYy5jLTQ0MzQtfVxubW0vdm1hbGxvYy5jOjQ0MzU6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX25vZGVfbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00NDM2LVxuLS1cbm1tL3ZtYWxsb2MuYz00NjM2PXZvaWQgKnZtYWxsb2NfMzJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS92bWFsbG9jLmMtNDY0MC19XG5tbS92bWFsbG9jLmM6NDY0MTpFWFBPUlRfU1lNQk9MKHZtYWxsb2NfMzJfbm9wcm9mKTtcbm1tL3ZtYWxsb2MuYy00NjQyLVxuLS1cbm1tL3ZtYWxsb2MuYz00NjUyPXZvaWQgKnZtYWxsb2NfMzJfdXNlcl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbm1tL3ZtYWxsb2MuYy00NjU4LX1cbm1tL3ZtYWxsb2MuYzo0NjU5OkVYUE9SVF9TWU1CT0wodm1hbGxvY18zMl91c2VyX25vcHJvZik7XG5tbS92bWFsbG9jLmMtNDY2MC1cbi0tXG5tbS92bWFsbG9jLmM9NTAyNz1pbnQgcmVtYXBfdm1hbGxvY19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYWRkcixcbi0tXG5tbS92bWFsbG9jLmMtNTAzMy19XG5tbS92bWFsbG9jLmM6NTAzNDpFWFBPUlRfU1lNQk9MKHJlbWFwX3ZtYWxsb2NfcmFuZ2UpO1xubW0vdm1hbGxvYy5jLTUwMzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyB0YXJnZXQgc2VsZWN0aW9uLiBJIHNlZSBhIGxpc3Qgb2YgYHZtYWxsb2NfKl9ub3Byb2ZgIGZ1bmN0aW9ucyBleHBvcnRlZDogYHZtYWxsb2Nfbm9wcm9mYCwgYF9fdm1hbGxvY19ub3Byb2ZgLCBgdm1hbGxvY19ub2RlX25vcHJvZmAsIGB2bWFsbG9jX3VzZXJfbm9wcm9mYCwgYHZtYWxsb2NfMzJfbm9wcm9mYCwgYHZtYWxsb2NfMzJfdXNlcl9ub3Byb2ZgLCBgdm1hbGxvY19odWdlX25vZGVfbm9wcm9mYCwgYW5kIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAuIFJpZ2h0LCBgdm1hbGxvY2AgaXMgbm93IGEgbWFjcm8gcmVkaXJlY3RpbmcgdG8gYHZtYWxsb2Nfbm9wcm9mYCBpbiBuZXdlciBrZXJuZWxzLCBhIGNvbnNlcXVlbmNlIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uLiBNYWtlcyBzZW5zZS4KCkJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHdhcm4gYWdhaW5zdCBvdmVybHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtZWFucyBgdm1hbGxvY19ub3Byb2ZgIGl0c2VsZiBpcyBwcm9iYWJseSB0b28gYnJvYWQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLCBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB0aGUgcmVsZXZhbnQgcmVjZW50IGNoYW5nZXMuIExldCYjMzk7cyByZS1leGFtaW5lIHRob3NlIGNoYW5nZSBsb2NhdGlvbnM6IGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYF9fdm1hbGxvY19hcmVhX25vZGVgLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBzaG93X251bWFfaW5mb2AsIGFuZCBgdm1hbGxvY19pbmZvX3Nob3dgLgoKQWxyaWdodCwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzIGEgc3Ryb25nIGNvbnRlbmRlci4gSXQmIzM5O3MgZXhwbGljaXRseSB0aWVkIHRvIG1lbW9yeSByZWFsbG9jYXRpb25zLCB3aGljaCBpcyBhIGNvbW1vbiBhcmVhIGZvciBmdXp6aW5nLiBXaGF0IGVsc2UgbG9va3MgaW50ZXJlc3RpbmcgaGVyZT8gSSBzZWUgYHZtYWxsb2NfZHVtcF9vYmpgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBga21lbV9kdW1wX29iamAgY2hhaW4uIEFuZCwgYWgsIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AgYXJlIGFzc29jaWF0ZWQgd2l0aCBgL3Byb2Mvdm1hbGxvY2luZm9gLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIGtub3cgaG93IHRvIHRhcmdldCBwcm9jZnMgZW50cmllcy4gUmVhZGluZyBgL3Byb2Mvdm1hbGxvY2luZm9gIHNob3VsZCBkaXJlY3RseSB0cmlnZ2VyIGJvdGggYHZtYWxsb2NfaW5mb19zaG93YCBhbmQgYHNob3dfbnVtYV9pbmZvYC4gSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBpZiBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIGluZGVlZCBib3VuZCB0byBhIHNwZWNpZmljIHByb2NmcyBmaWxlLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBhcHByb2FjaCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY19pbmZvX3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTMyNDQ9dm9pZCBjbGVhcl92bV91bmluaXRpYWxpemVkX2ZsYWcoc3RydWN0IHZtX3N0cnVjdCAqdm0pXG4tLVxubW0vdm1hbGxvYy5jLTMyNDgtXHQgKiB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdm0gaGFzIHByb3BlciB2YWx1ZXMuXG5tbS92bWFsbG9jLmM6MzI0OTpcdCAqIFBhaXIgd2l0aCBzbXBfcm1iKCkgaW4gdnJlYWRfaXRlcigpIGFuZCB2bWFsbG9jX2luZm9fc2hvdygpLlxubW0vdm1hbGxvYy5jLTMyNTAtXHQgKi9cbi0tXG5tbS92bWFsbG9jLmM9NDQ4OD12b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbi0tXG5tbS92bWFsbG9jLmMtNDU2MC1cdFx0XHQgKiBVc2UgdGhlIG5vZGUgbG9jayB0byBzeW5jaHJvbml6ZSB3aXRoIGNvbmN1cnJlbnRcbm1tL3ZtYWxsb2MuYzo0NTYxOlx0XHRcdCAqIHJlYWRlcnMgKHZtYWxsb2NfaW5mb19zaG93KS5cbm1tL3ZtYWxsb2MuYy00NTYyLVx0XHRcdCAqL1xuLS1cbm1tL3ZtYWxsb2MuYz01NDU0PXN0YXRpYyB2b2lkIHNob3dfcHVyZ2VfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxubW0vdm1hbGxvYy5jLTU0NjktXG5tbS92bWFsbG9jLmM6NTQ3MDpzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbm1tL3ZtYWxsb2MuYy01NDcxLXtcbi0tXG5tbS92bWFsbG9jLmM9NTU0OT1zdGF0aWMgaW50IF9faW5pdCBwcm9jX3ZtYWxsb2NfaW5pdCh2b2lkKVxubW0vdm1hbGxvYy5jLTU1NTAte1xubW0vdm1hbGxvYy5jOjU1NTE6XHRwcm9jX2NyZWF0ZV9zaW5nbGUoXCYjMzQ7dm1hbGxvY2luZm9cJiMzNDssIDA0MDAsIE5VTEwsIHZtYWxsb2NfaW5mb19zaG93KTtcbm1tL3ZtYWxsb2MuYy01NTUyLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDcyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCBvbiB2bWFsbG9jIFVzYWdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYHZtYWxsb2NgJiMzOTtzIGhhbmRsaW5nIG9mIHBhZ2UgY291bnRzLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHBvc2l0aXZlOyB0aGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyB3ZSBuZWVkIHRvIGJlIHZpZ2lsYW50IGFib3V0LiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXkgbWlnaHQgaW1wYWN0IGZ1enppbmcgZWZmb3J0cy4KCkkgc2VlIGl0JiMzOTtzIGVuYWJsaW5nIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYHByb2NfY3JlYXRlX3NpbmdsZWAgYW5kIGxpbmtpbmcgaXQgdG8gdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXNpczsgaXQgcHJvdmlkZXMgYSB3YXkgdG8gdHJpZ2dlciB0aGUgbW9kaWZpZWQgY29kZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgc3lzdGVtYXRpYyByZXBsYWNlbWVudCBvZiBgdW5zaWduZWQgaW50YCB3aXRoIGB1bnNpZ25lZCBsb25nYCBmb3IgdmFyaW91cyBwYWdlIGNvdW50IHZhcmlhYmxlcyB3aXRoaW4gdGhlIGB2bWFsbG9jYCBzdWJzeXN0ZW0uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIGB2LSZndDtucl9wYWdlc2AgaW4gYHZtYWxsb2NfaW5mb19zaG93YCwgYG5yYCBpbiBgc2hvd19udW1hX2luZm9gLCBhbmQgYG5yX3BhZ2VzYCBpbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYW5kIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBpbXBhY3RlZCwgYW5kIHRoZXJlZm9yZSB3YXJyYW50IGEgY2xvc2VyIGxvb2sgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFyZSBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19pbmZvX3Nob3dgLCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgaW4gbWluZCB0aGF0IGB2bWFsbG9jX2luZm9fc2hvd2AgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBjYW4mIzM5O3QgYmUgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5bWJvbCBmb3IgZnV6emluZyB1bmxlc3MgaXQmIzM5O3MgdHJpZ2dlcmVkIGluZGlyZWN0bHkgKHdoaWNoLCBhcyB3ZSBrbm93LCBpdCBpcyB0aHJvdWdoIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZSkuIEhvd2V2ZXIsIGZyb20gZXhwZXJpZW5jZSBJIGtub3cgdGhhdCBzeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHN0aWxsIHByZWZlcmFibGUsIHRob3VnaCwgdG8gcHJpb3JpdGl6ZSBleHBvc2VkIHN5bWJvbHMgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgdm1hbGxvY19kdW1wX29iamAgaXMgZXhwb3J0ZWQsIGFzIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBicm9hZGVuIG91ciBmdXp6aW5nIG9wdGlvbnMuIElmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBnb2luZyB0byByZXF1aXJlIGNhcmVmdWwgaW5zcGVjdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRob3NlIGB1bnNpZ25lZCBsb25nYCBjaGFuZ2VzIGFmZmVjdCB0aGUgcG90ZW50aWFsIGZvciBpbnRlZ2VyIG92ZXJmbG93cyBhbmQgdGhlIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgYHZtYWxsb2NgIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY19kdW1wX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NTM4Mj12b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKVxuLS1cbm1tL3ZtYWxsb2MuYy01MzkyLSNpZmRlZiBDT05GSUdfUFJJTlRLXG5tbS92bWFsbG9jLmM6NTM5Mzpib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxubW0vdm1hbGxvYy5jLTUzOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdm1hbGxvY19kdW1wX29iamAqKgoKQWxyaWdodCwgc28gYHZtYWxsb2NfZHVtcF9vYmpgIGlzbiYjMzk7dCBkZWNsYXJlZCBhcyBgZXh0ZXJuYCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIGBzdGF0aWNgIGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gVGhhdCBzdWdnZXN0cyBhIGRlbGliZXJhdGUgZGVjaXNpb247IGl0ICpjb3VsZCogYmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgZGVmaW5pbmcgZmlsZSwgZXZlbiBpZiB0aGUgbGlua2FnZSBpc24mIzM5O3QgZXhwbGljaXRseSBkZWNsYXJlZCBpbiB0aGUgaGVhZGVyLiBUaGVyZWZvcmUsIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGRlZmluaXRpdmVseSBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWNsYXJlZCBpbiBhIHB1YmxpYyBoZWFkZXIgZmlsZSwgYWxsb3dpbmcgYWNjZXNzIGZyb20gb3RoZXIgc291cmNlIGZpbGVzLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGl0cyBpbnRlbmRlZCBzY29wZSBhbmQgdXNhZ2UuIElmIGl0ICppcyogaW4gYSBoZWFkZXIsIHRoZW4gaXRzIG5vbi1zdGF0aWMgZGVmaW5pdGlvbiB3b3VsZCBpbmRpY2F0ZSBpdHMgZXhwZWN0ZWQgdXNlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGluY2x1ZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYWxsb2NfZHVtcF9vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0zMjU9c3RhdGljIGlubGluZSB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMyOC0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUFJJTlRLKVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI5OmJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpO1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMzE6c3RhdGljIGlubGluZSBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KSB7IHJldHVybiBmYWxzZTsgfVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgzOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdm1hbGxvYyBDb2RlIGZvciBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZtYWxsb2MgY29kZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBpbiBgaW5jbHVkZS9saW51eC92bWFsbG9jLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRvIGxvb2suIE5vdywgSSBzZWUgYHZtYWxsb2NfZHVtcF9vYmpgIGFuZCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGp1bXAgb3V0IGltbWVkaWF0ZWx5LiBHb29kIGNhbmRpZGF0ZXMuIEJ1dCwgd2FpdC4uLiBgX192bWFsbG9jX25vZGVfbm9wcm9mYD8gSXQgKmlzKiBhIGdlbmVyaWMsIGhvdC1wYXRoIGZ1bmN0aW9uLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgYHZtYWxsb2NgLCBzbyBtYXliZSBpdCYjMzk7cyB0aGUgcmlnaHQgb25lLgoKQnV0LCBoYW5nIG9uLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzbiYjMzk7dCBhY3R1YWxseSBob3QtcGF0aDsgaXTigJlzIHNwZWNpZmljYWxseSBmb3IgcmVhbGxvY2F0aW5nIHZtYWxsb2MgbWVtb3J5LiBIbW0sIGl0JiMzOTtzIGNhbGxlZCBieSBgdnJlYWxsb2NgIGFuZCBga3ZyZWFsbG9jYCwgcmlnaHQ/IE5vdywgdGhlIGJpZyBxdWVzdGlvbiBpczogSG93IGNvbW1vbiBpcyBga3ZyZWFsbG9jYD8gSSBrbm93IGl0JiMzOTtzIHVzZWQgYSBmYWlyIGJpdCwgYnV0IGl0JiMzOTtzIHByb2JhYmx5IGxlc3Mgb2YgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHRoYW4gYSBwbGFpbiBgdm1hbGxvY2AgY2FsbC4KClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIHN0ZXAgYmFjay4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgQ09ORklHIG9wdGlvbnMgdGhpcyBtb2RpZmljYXRpb24gbWlnaHQgZGVwZW5kIG9uLiBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3ZtYWxsb2MuY2AuIFRoaXMgaXMgbm9ybWFsbHkgY29tcGlsZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgTWFrZWZpbGUuLi4geWVzLCBpdCBsb29rcyBsaWtlIGB2bWFsbG9jLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cy4gU28sIG5vIG1ham9yIGRlcGVuZGVuY3kgaXNzdWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS0zOS1cdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlOjQwOlx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xubW0vTWFrZWZpbGUtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zIFJlbGF0ZWQgdG8gVmlydHVhbCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGhvdyB2YXJpb3VzIGtlcm5lbCBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIGB2bWFsbG9jLm9gLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgdGhlbiBgdm1hbGxvYy5vYCBnZXRzIGNvbXBpbGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gR2l2ZW4gdGhhdCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBvbiBwcmFjdGljYWxseSBldmVyeSBwbGF0Zm9ybSB0aGVzZSBkYXlzLCB0aGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCB3aGF0IGVsc2UgaXMgcmVsZXZhbnQ/IEkgc2VlIHRoYXQgYHZtYWxsb2NfZHVtcF9vYmpgIHJlcXVpcmVzIGJvdGggYENPTkZJR19QUklOVEtgICphbmQqIGBDT05GSUdfTU1VYC4gTWFrZXMgc2Vuc2U7IGR1bXAgZnVuY3Rpb25hbGl0eSBuZWVkcyBwcmludGluZyBjYXBhYmlsaXRpZXMsIGFuZCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHZpcnR1YWwgbWVtb3J5LiBBbHJpZ2h0LCBJIGFsc28gbm90aWNlIGBzaG93X251bWFfaW5mb2AgZGVwZW5kcyBvbiBgQ09ORklHX05VTUFgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkaXZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGBzaG93X251bWFfaW5mb2Agc3BlY2lmaWNhbGx5LCBwcm9iYWJseSB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG93X251bWFfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NTM5Mz1ib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxuLS1cbm1tL3ZtYWxsb2MuYy01NDM0LSAqL1xubW0vdm1hbGxvYy5jOjU0MzU6c3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxubW0vdm1hbGxvYy5jLTU0MzYtXHRcdFx0XHQgdW5zaWduZWQgaW50ICpjb3VudGVycylcbi0tXG5tbS92bWFsbG9jLmM9NTQ3MD1zdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbi0tXG5tbS92bWFsbG9jLmMtNTUzMi1cdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXG5tbS92bWFsbG9jLmM6NTUzMzpcdFx0XHRcdHNob3dfbnVtYV9pbmZvKG0sIHYsIGNvdW50ZXJzKTtcbm1tL3ZtYWxsb2MuYy01NTM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEZ1bmN0aW9ucyBmb3IgVGVzdGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciB0ZXN0aW5nLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE5VTUEuIEl0IHNlZW1zIGxpa2UgYENPTkZJR19OVU1BYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGVzdGluZyBgc2hvd19udW1hX2luZm9gLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdC4KCkxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBpcyByZWFkaWx5IGF2YWlsYWJsZT8gYHZtYWxsb2NfZHVtcF9vYmpgIGlzIGFuIGludGVyZXN0aW5nIGNhbmRpZGF0ZSwgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdGllZCB0byBgQ09ORklHX1BSSU5US2AsIHNvIHRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIG9yIHBlcmhhcHMgc29tZSBlYXNpbHkgY29uZmlndXJhYmxlIGNvdmVyYWdlLgoKTm93LCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLi4uIEFoLCB5ZXMsIHRoYXQmIzM5O3MgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgdm1hbGxvYy5jYCwgc28gaXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcgYSBjb3JlIGZ1bmN0aW9uLgoKU28sIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbi4gV2UgaGF2ZToKCiogICBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIC0gQSBsaWtlbHkgY2FuZGlkYXRlIGR1ZSB0byBpdHMgdW5jb25kaXRpb25hbCBjb21waWxhdGlvbi4KKiAgIGB2bWFsbG9jX2R1bXBfb2JqYCAtIFBvdGVudGlhbCBmb3IgcHJpbnRrIGRlYnVnZ2luZyBhbmQgY292ZXJhZ2UuCiogICBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCAtIEhtbS4uLiBJdCYjMzk7cyB0aGUgbWFpbiB3b3JraG9yc2UgaW4gdGVybXMgb2YgYG5yX3BhZ2VzYCwgYW5kIEkgdGhvdWdodCBpdCB3YXMgc3RhdGljLi4uIFdhaXQsIGl0IGlzbiYjMzk7dCAqc3RhdGljKj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uIE5vLCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBleHBvcnRlZC4gT2theSwgc28gaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIE1pZ2h0IGJlIHRyaWNreSB0byB0ZXN0IGRpcmVjdGx5LCBidXQgd29ydGggbG9va2luZyBpbnRvIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpdCYjMzk7cyB1c2VkIGludGVybmFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9NDAyMD1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtNDA2NS1cdCAqXG5tbS92bWFsbG9jLmM6NDA2NjpcdCAqIFBsZWFzZSBub3RlLCB0aGUgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKCkgZmFsbHMtYmFja1xubW0vdm1hbGxvYy5jLTQwNjctXHQgKiB0byBvcmRlci0wIHBhZ2VzIGlmIGhpZ2gtb3JkZXIgYXR0ZW1wdCBpcyB1bnN1Y2Nlc3NmdWwuXG4tLVxubW0vdm1hbGxvYy5jPTQxMzU9c3RhdGljIGdmcF90IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF90IGZsYWdzKVxuLS1cbm1tL3ZtYWxsb2MuYy00MTc5LSAqL1xubW0vdm1hbGxvYy5jOjQxODA6dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcbm1tL3ZtYWxsb2MuYy00MTgxLVx0XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtNDMwOC0gKiBTZW1hbnRpY3Mgb2YgQGdmcF9tYXNrIChpbmNsdWRpbmcgcmVjbGFpbS9yZXRyeSBtb2RpZmllcnMgc3VjaCBhc1xubW0vdm1hbGxvYy5jOjQzMDk6ICogX19HRlBfTk9GQUlMKSBhcmUgdGhlIHNhbWUgYXMgaW4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKCkuXG5tbS92bWFsbG9jLmMtNDMxMC0gKlxuLS1cbm1tL3ZtYWxsb2MuYz00MzEzPXZvaWQgKl9fdm1hbGxvY19ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTQzMTUte1xubW0vdm1hbGxvYy5jOjQzMTY6XHRyZXR1cm4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHNpemUsIGFsaWduLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcbm1tL3ZtYWxsb2MuYy00MzE3LVx0XHRcdFx0Z2ZwX21hc2ssIFBBR0VfS0VSTkVMLCAwLCBub2RlLCBjYWxsZXIpO1xuLS1cbm1tL3ZtYWxsb2MuYz00MzY5PXZvaWQgKnZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZSlcbi0tXG5tbS92bWFsbG9jLmMtNDM3Mi1cdFx0Z2ZwX21hc2sgPSB2bWFsbG9jX2ZpeF9mbGFncyhnZnBfbWFzayk7XG5tbS92bWFsbG9jLmM6NDM3MzpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgMSwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG5tbS92bWFsbG9jLmMtNDM3NC1cdFx0XHRcdFx0ICAgZ2ZwX21hc2ssIFBBR0VfS0VSTkVMLCBWTV9BTExPV19IVUdFX1ZNQVAsXG4tLVxubW0vdm1hbGxvYy5jPTQ0MDg9dm9pZCAqdm1hbGxvY191c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXG5tbS92bWFsbG9jLmMtNDQwOS17XG5tbS92bWFsbG9jLmM6NDQxMDpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgU0hNTEJBLCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG5tbS92bWFsbG9jLmMtNDQxMS1cdFx0XHRcdCAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsXG4tLVxubW0vdm1hbGxvYy5jPTQ2NTI9dm9pZCAqdm1hbGxvY18zMl91c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXG5tbS92bWFsbG9jLmMtNDY1My17XG5tbS92bWFsbG9jLmM6NDY1NDpcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgU0hNTEJBLCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG5tbS92bWFsbG9jLmMtNDY1NS1cdFx0XHRcdCAgICBHRlBfVk1BTExPQzMyIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCoqCgpIbW0sIHNvIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gVGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzLCBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkIGluIGEgaGVhZGVyIGZpbGU/IFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSYjMzk7cyBkZXNpZ24gYW5kIGhvdyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSB1c2VkIChvciwgcG90ZW50aWFsbHksIG1pc3VzZWQpLiBLbm93aW5nIHdoZXRoZXIgaXQmIzM5O3MgbWVhbnQgdG8gYmUgYW4gaW50ZXJuYWwgaGVscGVyLCBvciBwYXJ0IG9mIGEgbW9yZSBnZW5lcmFsIEFQSSwgaXMga2V5IHRvIGRpYWdub3Npbmcgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC92bWFsbG9jLmg9MTcxPWV4dGVybiB2b2lkICpfX3ZtYWxsb2Nfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgxKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzMtXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoxNzQ6ZXh0ZXJuIHZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzUtXHRcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrLFxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTE3Ny1cdFx0XHRjb25zdCB2b2lkICpjYWxsZXIpIF9fYWxsb2Nfc2l6ZSgxKTtcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjE3ODojZGVmaW5lIF9fdm1hbGxvY19ub2RlX3JhbmdlKC4uLilcdGFsbG9jX2hvb2tzKF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGtlcm5lbCBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IHBsYWNlcyB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuIEkgc2VlIHRoZSBjb2RlIGNoYW5nZSBpcyBpbiBgaW5jbHVkZS9saW51eC92bWFsbG9jLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgbG9va3MgcHJvbWlzaW5nLiBJdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGB2bWFsbG9jYCBmdW5jdGlvbmFsaXR5LCBtYWtpbmcgaXQgYSBuYXR1cmFsIHRhcmdldCwgYnV0Li4uIGlzIGl0ICp0b28qIGdlbmVyaWM/IEl0JiMzOTtzIHRoZSBob3QtcGF0aCwgY2FsbGVkIGZvciAqZXZlcnkqIGB2bWFsbG9jYC4gVGhhdCBtYWtlcyBpdCBsZXNzIHRhcmdldGVkIGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2guCgpBaCwgYnV0IHRoZSBwYXRjaCBpdHNlbGYgY2hhbmdlcyBgdW5zaWduZWQgaW50IG5yX3BhZ2VzYCB0byBgdW5zaWduZWQgbG9uZyBucl9wYWdlc2AuIFRoaXMgaXMgKmNydWNpYWwqLiBUaGlzIG1lYW5zIHRoZSBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyBob3cgbGFyZ2UgYWxsb2NhdGlvbnMgYXJlIGhhbmRsZWQuIEdpdmVuIHRoaXMsIGZ1enppbmcgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBpcyBsb29raW5nIGJldHRlci4gSXQmIzM5O3MgbGVzcyBvZiBhIGhvdCBwYXRoIHRoYW4gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAsIGFuZCBpdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFRoYXQmIzM5O3MgaWRlYWwuCgpgdm1hbGxvY19kdW1wX29iamAgaXMgYWxzbyBhIGdvb2QgY29udGVuZGVyIGZvciBmdXp6aW5nLgoKTm93LCB3aGF0IGFib3V0IGB2ZnJlZV9hdG9taWNgPyBJdCYjMzk7cyBub3QgZGlyZWN0bHkgdG91Y2hlZCwgYnV0IGB2bV9hcmVhX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBpdCwgYW5kICp0aGF0KiBmdW5jdGlvbiBpcy4gU28sIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB2bV9hcmVhX2ZyZWVfcGFnZXNgICppcyogaW5kZWVkIGNhbGxlZCBieSBgdmZyZWVgLiBHb3R0YSBjb3ZlciBhbGwgYmFzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtX2FyZWFfZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MzQ2OD12b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxuLS1cbm1tL3ZtYWxsb2MuYy0zNDg1LS8qXG5tbS92bWFsbG9jLmM6MzQ4NjogKiB2bV9hcmVhX2ZyZWVfcGFnZXMgLSBmcmVlIGEgcmFuZ2Ugb2YgcGFnZXMgZnJvbSBhIHZtYWxsb2MgYWxsb2NhdGlvblxubW0vdm1hbGxvYy5jLTM0ODctICogQHZtOiB0aGUgdm1fc3RydWN0IGNvbnRhaW5pbmcgdGhlIHBhZ2VzXG4tLVxubW0vdm1hbGxvYy5jLTM0OTUtICovXG5tbS92bWFsbG9jLmM6MzQ5NjpzdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfaWR4LFxubW0vdm1hbGxvYy5jLTM0OTctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcbi0tXG5tbS92bWFsbG9jLmM9MzUyOD12b2lkIHZmcmVlKGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxubW0vdm1hbGxvYy5jLTM1NTMtXG5tbS92bWFsbG9jLmM6MzU1NDpcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgMCwgdm0tXHUwMDNlbnJfcGFnZXMpO1xubW0vdm1hbGxvYy5jLTM1NTUtXHRrdmZyZWUodm0tXHUwMDNlcGFnZXMpO1xuLS1cbm1tL3ZtYWxsb2MuYz00NDg4PXZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxuLS1cbm1tL3ZtYWxsb2MuYy00NTc3LVxubW0vdm1hbGxvYy5jOjQ1Nzg6XHRcdFx0dm1fYXJlYV9mcmVlX3BhZ2VzKHZtLCBuZXdfbnJfcGFnZXMsIG9sZF9ucl9wYWdlcyk7XG5tbS92bWFsbG9jLmMtNDU3OS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyOQoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgd2UgaGFuZGxlIHBhZ2UgY291bnRzIGluIGB2bWFsbG9jYCBhbGxvY2F0aW9ucywgbW92aW5nIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIGluIGBzdHJ1Y3Qgdm1fc3RydWN0YC4gVGhpcyBpcyBhIGJpZyBkZWFsOyBpdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHRoYXQgYWRkcmVzc2VzIHBvdGVudGlhbCB0cnVuY2F0aW9uIGlzc3VlcyBhbmQsIGNydWNpYWxseSwgdW5sb2NrcyBzdXBwb3J0IGZvciB2bWFsbG9jIGFsbG9jYXRpb25zIGV4Y2VlZGluZyAxNlRCLiBUaGlzIGltcGFjdHMgYG1tL3ZtYWxsb2MuY2AgZGlyZWN0bHkuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSB0b3VjaGVkIG9yIGNhbGwgdGhvc2UgdGhhdCBhcmUuIGB2ZnJlZWAgdWx0aW1hdGVseSB1c2VzIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLCBzbyBgdmZyZWVgIGl0c2VsZiBpcyBhIGhvdC1wYXRoIHRvIHdhdGNoLgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucyBhcyBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nOgoKKiAgIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAKKiAgIGB2bWFsbG9jX2R1bXBfb2JqYAoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgc2V0IHRvIHRlc3QgYWxsIHRoZSBjb2RlIHBhdGhzLiBJdCBsb29rcyBsaWtlOgoKKiAgIGBDT05GSUdfTlVNQWAgaXMgbmVlZGVkIGZvciBgc2hvd19udW1hX2luZm9gLgoqICAgYENPTkZJR19QUklOVEtgIGlzIG5lZWRlZCBmb3IgYHZtYWxsb2NfZHVtcF9vYmpgLgoKSSBjb25maXJtZWQgdGhhdCBgdm1hbGxvY19kdW1wX29iamAgaXMgZGVmaW5lZCBpZiBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfUFJJTlRLYC4KCkkmIzM5O20gYWxzbyBub3RpbmcgdGhhdCBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYHZtYWxsb2NfaW5mb19zaG93YCwgYHNob3dfbnVtYV9pbmZvYCwgYHNldF9hcmVhX2RpcmVjdF9tYXBgLCBgdm1fcmVzZXRfcGVybXNgLCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBhbmQgYF9fdm1hbGxvY19hcmVhX25vZGVgLCBhcmUgc3RhdGljLCBidXQgSSBzaG91bGQgYmUgY2FyZWZ1bCB3aGVuIGxvb2tpbmcgYXQgY2FsbGluZyByZWxhdGlvbnNoaXBzLgoKU28sIGJleW9uZCB0aGUgdHdvIGZ1bmN0aW9ucyBJJiMzOTt2ZSBhbHJlYWR5IGxpc3RlZCwgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgYW5kIGB2ZnJlZWAgKGFuZCBpdHMgdmFyaWFudHMpIGFyZSBhbHNvIGtleS4gYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgY2FsbHMgYF9fdm1hbGxvY19hcmVhX25vZGVgLiBgdmZyZWVgIGNhbGxzIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCByZWNvbW1lbmQgdGhlIGZvbGxvd2luZyBpbiBteSBhbmFseXNpczoKCioqRm9jdXNTeW1ib2xzOioqCgoqICAgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYAoqICAgYHZtYWxsb2NfZHVtcF9vYmpgCgoqKkVuYWJsZUNvbmZpZ3M6KioKCiogICBgTlVNQWAKKiAgIGBQUklOVEtgCgpJIGFsc28gdmVyaWZpZWQgdGhhdCBgUFJJTlRLYCBhbmQgYE5VTUFgIGFyZSBjb21tb25seSBlbmFibGVkIG9uIHg4NiwgYnV0IEkgc3RpbGwgbmVlZCB0byBiZSBhd2FyZSB0aGF0IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIHRoZXkgbWF5IG5vdCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OywKICAgICYjMzQ7UFJJTlRLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YmIzM0OywKICAgICYjMzQ7dm1hbGxvY19kdW1wX29iaiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIGBucl9wYWdlc2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIHRvIHN1cHBvcnQgdm1hbGxvYyBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiAxNlRCIChvciBmaXggdHJ1bmNhdGlvbiBidWdzKS4gSXQgdXBkYXRlcyB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYCB0byB1c2UgYHVuc2lnbmVkIGxvbmdgIGZvciBwYWdlIGNvdW50cyBhbmQgaW5kaWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCB3aGljaCB3ZXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgcmVxdWlyZSBgTlVNQWAgYW5kIGBQUklOVEtgIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7LAogICAgJiMzNDtQUklOVEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZiYjMzQ7LAogICAgJiMzNDt2bWFsbG9jX2R1bXBfb2JqJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgYG5yX3BhZ2VzYCBpbiBgc3RydWN0IHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgdG8gc3VwcG9ydCB2bWFsbG9jIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDE2VEIgKG9yIGZpeCB0cnVuY2F0aW9uIGJ1Z3MpLiBJdCB1cGRhdGVzIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIHRvIHVzZSBgdW5zaWduZWQgbG9uZ2AgZm9yIHBhZ2UgY291bnRzIGFuZCBpbmRpY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHdoaWNoIHdlcmUgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCByZXF1aXJlIGBOVU1BYCBhbmQgYFBSSU5US2AgdG8gdGVzdCB0aGUgbW9kaWZpZWQgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NTk6NTguOTY2NTY3MDQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MjA0MzM5MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlBSSU5US1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mXCIsXG4gICAgXCJ2bWFsbG9jX2R1bXBfb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiBgbnJfcGFnZXNgIGluIGBzdHJ1Y3Qgdm1fc3RydWN0YCBmcm9tIGB1bnNpZ25lZCBpbnRgIHRvIGB1bnNpZ25lZCBsb25nYCB0byBzdXBwb3J0IHZtYWxsb2MgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gMTZUQiAob3IgZml4IHRydW5jYXRpb24gYnVncykuIEl0IHVwZGF0ZXMgdmFyaW91cyBmdW5jdGlvbnMgaW4gYG1tL3ZtYWxsb2MuY2AgdG8gdXNlIGB1bnNpZ25lZCBsb25nYCBmb3IgcGFnZSBjb3VudHMgYW5kIGluZGljZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgdm1hbGxvY19kdW1wX29iamAgd2hpY2ggd2VyZSBkaXJlY3RseSBtb2RpZmllZCwgYW5kIHJlcXVpcmUgYE5VTUFgIGFuZCBgUFJJTlRLYCB0byB0ZXN0IHRoZSBtb2RpZmllZCBgc2hvd19udW1hX2luZm9gIGFuZCBgdm1hbGxvY19kdW1wX29iamAgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjU5OjU4Ljk2NjU3NjIwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTkwODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWM0NDY1ODVhOTBmMDAzOGYzY2NiNWI2Nzk2NTViYTY4MzJjNzg5NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjU5OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcXG5pbmRleCBlNGQ4ZDBhOWYzMGY5Li5hZWQxMjFkNzI5YjAxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcXG5AQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0IHtcXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdHBhZ2Vfb3JkZXI7XFxuICNlbmRpZlxcbi1cXHR1bnNpZ25lZCBpbnRcXHRcXHRucl9wYWdlcztcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5yX3BhZ2VzO1xcbiBcXHRwaHlzX2FkZHJfdFxcdFxcdHBoeXNfYWRkcjtcXG4gXFx0Y29uc3Qgdm9pZFxcdFxcdCpjYWxsZXI7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRyZXF1ZXN0ZWRfc2l6ZTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXFxuaW5kZXggMjZmMzI5NDljMmYyZS4uMTk2ZGE4NzM4Y2YxMCAxMDA2NDRcXG4tLS0gYS9tbS92bWFsbG9jLmNcXG4rKysgYi9tbS92bWFsbG9jLmNcXG5AQCAtMzQwNCw3ICszNDA0LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcilcXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9hcmVhX2RpcmVjdF9tYXAoY29uc3Qgc3RydWN0IHZtX3N0cnVjdCAqYXJlYSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpXFxuIHtcXG4tXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFxuIFxcdC8qIEhVR0VfVk1BTExPQyBwYXNzZXMgc21hbGwgcGFnZXMgdG8gc2V0X2RpcmVjdF9tYXAgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFyZWEtXFx1MDAzZW5yX3BhZ2VzOyBpKyspXFxuQEAgLTM0MjAsNyArMzQyMCw3IEBAIHN0YXRpYyB2b2lkIHZtX3Jlc2V0X3Blcm1zKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpXFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBVTE9OR19NQVgsIGVuZCA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBwYWdlX29yZGVyID0gdm1fYXJlYV9wYWdlX29yZGVyKGFyZWEpO1xcbiBcXHRpbnQgZmx1c2hfZG1hcCA9IDA7XFxuLVxcdGludCBpO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaW5kIHRoZSBzdGFydCBhbmQgZW5kIHJhbmdlIG9mIHRoZSBkaXJlY3QgbWFwcGluZ3MgdG8gbWFrZSBzdXJlIHRoYXRcXG5AQCAtMzQ5MywxMCArMzQ5MywxMCBAQCB2b2lkIHZmcmVlX2F0b21pYyhjb25zdCB2b2lkICphZGRyKVxcbiAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVubWFwcGluZyAodnVubWFwX3JhbmdlKSBhbmQgS0FTQU5cXG4gICogcG9pc29uaW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBzdGFydF9pZHgsXFxuLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZW5kX2lkeClcXG4rc3RhdGljIHZvaWQgdm1fYXJlYV9mcmVlX3BhZ2VzKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2lkeCxcXG4rXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXG4gXFx0aWYgKCEodm0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fTUFQX1BVVF9QQUdFUykpIHtcXG4gXFx0XFx0Zm9yIChpID0gc3RhcnRfaWR4OyBpIFxcdTAwM2MgZW5kX2lkeDsgaSsrKVxcbkBAIC0zODE5LDEyICszODE5LDEyIEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3Qgdm1hbGxvY19nZnBfYWRqdXN0KGdmcF90IGZsYWdzLCBjb25zdCBib29sIGxhcmdlKVxcbiBcXHRyZXR1cm4gZmxhZ3M7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbiB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpXFxuK1xcdFxcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfYWxsb2NhdGVkID0gMDtcXG4tXFx0dW5zaWduZWQgaW50IG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX2FsbG9jYXRlZCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcmVtYWluaW5nID0gbnJfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGludCBtYXhfYXR0ZW1wdF9vcmRlciA9IE1BWF9QQUdFX09SREVSO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gXFx0aW50IGk7XFxuQEAgLTM4NzIsNyArMzg3Miw3IEBAIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxcbiBcXHRpZiAoIW9yZGVyKSB7XFxuIFxcdFxcdHdoaWxlIChucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9wYWdlcykge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7XFxuLVxcdFxcdFxcdGludCBpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBBIG1heGltdW0gYWxsb3dlZCByZXF1ZXN0IGlzIGhhcmQtY29kZWQgYW5kIGlzIDEwMFxcbkBAIC0zODgwLDcgKzM4ODAsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0ICogbG9uZyBwcmVlbXB0aW9uIG9mZiBzY2VuYXJpbyBpbiB0aGUgYnVsay1hbGxvY2F0b3JcXG4gXFx0XFx0XFx0ICogc28gdGhlIHJhbmdlIGlzIFsxOjEwMF0uXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRucl9wYWdlc19yZXF1ZXN0ID0gbWluKDEwMFUsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcXG4rXFx0XFx0XFx0bnJfcGFnZXNfcmVxdWVzdCA9IG1pbigxMDBVTCwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xcbiBcXG4gXFx0XFx0XFx0LyogbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGNvbnNpZGVyIG1lbXBvbGljeSwgd2UgY2FuJ3RcXG4gXFx0XFx0XFx0ICogd3JvbmdseSB1c2UgbmVhcmVzdCBub2RlIHdoZW4gbmlkID09IE5VTUFfTk9fTk9ERSxcXG5AQCAtNDAyNiwxMiArNDAyNiwxMiBAQCBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS1cXHUwMDNlYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X3ZtX2FyZWFfc2l6ZShhcmVhKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBhcnJheV9zaXplO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfc21hbGxfcGFnZXMgPSBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfc21hbGxfcGFnZXMgPSBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIFxcdHVuc2lnbmVkIGludCBwYWdlX29yZGVyO1xcbiBcXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRhcnJheV9zaXplID0gKHVuc2lnbmVkIGxvbmcpbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XFxuK1xcdGFycmF5X3NpemUgPSBucl9zbWFsbF9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKTtcXG4gXFxuIFxcdC8qIF9fR0ZQX05PRkFJTCBhbmQgXFxcIm5vYmxvY2tcXFwiIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXFxuIFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbkBAIC00NTI1LDcgKzQ1MjUsNyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc2l6ZSBcXHUwMDNjPSBvbGRfc2l6ZSkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbmV3X25yX3BhZ2VzID0gUEFHRV9BTElHTihzaXplKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIG5ld19ucl9wYWdlcyA9IFBBR0VfQUxJR04oc2l6ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdFxcdC8qIFplcm8gb3V0IFxcXCJmcmVlZFxcXCIgbWVtb3J5LCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlYWxsb2MuICovXFxuIFxcdFxcdGlmICh3YW50X2luaXRfb25fZnJlZSgpIHx8IHdhbnRfaW5pdF9vbl9hbGxvYyhmbGFncykpXFxuQEAgLTQ1NTQsNyArNDU1NCw3IEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduXFxuIFxcdFxcdCAgICAhKHZtLVxcdTAwM2VmbGFncyBcXHUwMDI2IChWTV9GTFVTSF9SRVNFVF9QRVJNUyB8IFZNX1VTRVJNQVApKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgZ2ZwX2hhc19pb19mcyhmbGFncykpIHtcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHApO1xcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2xkX25yX3BhZ2VzID0gdm0tXFx1MDAzZW5yX3BhZ2VzO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9sZF9ucl9wYWdlcyA9IHZtLVxcdTAwM2Vucl9wYWdlcztcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIFVzZSB0aGUgbm9kZSBsb2NrIHRvIHN5bmNocm9uaXplIHdpdGggY29uY3VycmVudFxcbkBAIC00NTY3LDE2ICs0NTY3LDEzIEBAIHZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduXFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2bi1cXHUwMDNlYnVzeS5sb2NrKTtcXG4gXFxuIFxcdFxcdFxcdC8qIE5vdGlmeSBrbWVtbGVhayBvZiB0aGUgcmVkdWNlZCBhbGxvY2F0aW9uIHNpemUgYmVmb3JlIHVubWFwcGluZy4gKi9cXG4tXFx0XFx0XFx0a21lbWxlYWtfZnJlZV9wYXJ0KFxcbi1cXHRcXHRcXHRcXHQodm9pZCAqKWFkZHIgKyAoKHVuc2lnbmVkIGxvbmcpbmV3X25yX3BhZ2VzXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbi1cXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZykob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFx0XFx0XFx0a21lbWxlYWtfZnJlZV9wYXJ0KCh2b2lkICopYWRkciArXFxuK1xcdFxcdFxcdFxcdFxcdCAgIChuZXdfbnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIChvbGRfbnJfcGFnZXMgLSBuZXdfbnJfcGFnZXMpXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbiBcXG4tXFx0XFx0XFx0dnVubWFwX3JhbmdlKGFkZHIgKyAoKHVuc2lnbmVkIGxvbmcpbmV3X25yX3BhZ2VzXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuLVxcdFxcdFxcdFxcdCAgICAgYWRkciArICgodW5zaWduZWQgbG9uZylvbGRfbnJfcGFnZXNcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuK1xcdFxcdFxcdHZ1bm1hcF9yYW5nZShhZGRyICsgKG5ld19ucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBhZGRyICsgKG9sZF9ucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuIFxcbiBcXHRcXHRcXHR2bV9hcmVhX2ZyZWVfcGFnZXModm0sIG5ld19ucl9wYWdlcywgb2xkX25yX3BhZ2VzKTtcXG4gXFx0XFx0fVxcbkBAIC01NDAwLDcgKzUzOTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxcbiBcXHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcXG4gXFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4tXFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbiBcXG4gXFx0YWRkciA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpIG9iamVjdCk7XFxuIFxcdHZuID0gYWRkcl90b19ub2RlKGFkZHIpO1xcbkBAIC01NDIwLDcgKzU0MTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxcbiBcXHRucl9wYWdlcyA9IHZtLVxcdTAwM2Vucl9wYWdlcztcXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbiBcXG4tXFx0cHJfY29udChcXFwiICV1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxcXG5cXFwiLFxcbitcXHRwcl9jb250KFxcXCIgJWx1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxcXG5cXFwiLFxcbiBcXHRcXHRucl9wYWdlcywgYWRkciwgY2FsbGVyKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01NDM4LDE2ICs1NDM1LDE3IEBAIGJvb2wgdm1hbGxvY19kdW1wX29iaih2b2lkICpvYmplY3QpXFxuIHN0YXRpYyB2b2lkIHNob3dfbnVtYV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHZtX3N0cnVjdCAqdixcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCAqY291bnRlcnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG5yO1xcbiBcXHR1bnNpZ25lZCBpbnQgc3RlcCA9IDFVIFxcdTAwM2NcXHUwMDNjIHZtX2FyZWFfcGFnZV9vcmRlcih2KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcbiBcXHRpZiAoIWNvdW50ZXJzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRtZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpO1xcbiBcXG4tXFx0Zm9yIChuciA9IDA7IG5yIFxcdTAwM2Mgdi1cXHUwMDNlbnJfcGFnZXM7IG5yICs9IHN0ZXApXFxuLVxcdFxcdGNvdW50ZXJzW3BhZ2VfdG9fbmlkKHYtXFx1MDAzZXBhZ2VzW25yXSldICs9IHN0ZXA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB2LVxcdTAwM2Vucl9wYWdlczsgaSArPSBzdGVwKVxcbitcXHRcXHRjb3VudGVyc1twYWdlX3RvX25pZCh2LVxcdTAwM2VwYWdlc1tpXSldICs9IHN0ZXA7XFxuIFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobnIsIE5fSElHSF9NRU1PUlkpXFxuIFxcdFxcdGlmIChjb3VudGVyc1tucl0pXFxuIFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBOJXU9JXVcXFwiLCBuciwgY291bnRlcnNbbnJdKTtcXG5AQCAtNTUwNSw3ICs1NTAzLDcgQEAgc3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuIFxcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiAlcFNcXFwiLCB2LVxcdTAwM2VjYWxsZXIpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHYtXFx1MDAzZW5yX3BhZ2VzKVxcbi1cXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgcGFnZXM9JWRcXFwiLCB2LVxcdTAwM2Vucl9wYWdlcyk7XFxuK1xcdFxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIiBwYWdlcz0lbHVcXFwiLCB2LVxcdTAwM2Vucl9wYWdlcyk7XFxuIFxcbiBcXHRcXHRcXHRpZiAodi1cXHUwMDNlcGh5c19hZGRyKVxcbiBcXHRcXHRcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCIgcGh5cz0lcGFcXFwiLCBcXHUwMDI2di1cXHUwMDNlcGh5c19hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDY6NTk6NTkuNTA1MjE3Mjc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0NjY1Njc4MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIixcbiAgICBcIlBSSU5US1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mXCIsXG4gICAgXCJ2bWFsbG9jX2R1bXBfb2JqXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgdHlwZSBvZiBgbnJfcGFnZXNgIGluIGBzdHJ1Y3Qgdm1fc3RydWN0YCBmcm9tIGB1bnNpZ25lZCBpbnRgIHRvIGB1bnNpZ25lZCBsb25nYCB0byBzdXBwb3J0IHZtYWxsb2MgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gMTZUQiAob3IgZml4IHRydW5jYXRpb24gYnVncykuIEl0IHVwZGF0ZXMgdmFyaW91cyBmdW5jdGlvbnMgaW4gYG1tL3ZtYWxsb2MuY2AgdG8gdXNlIGB1bnNpZ25lZCBsb25nYCBmb3IgcGFnZSBjb3VudHMgYW5kIGluZGljZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgdm1hbGxvY19kdW1wX29iamAgd2hpY2ggd2VyZSBkaXJlY3RseSBtb2RpZmllZCwgYW5kIHJlcXVpcmUgYE5VTUFgIGFuZCBgUFJJTlRLYCB0byB0ZXN0IHRoZSBtb2RpZmllZCBgc2hvd19udW1hX2luZm9gIGFuZCBgdm1hbGxvY19kdW1wX29iamAgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljNDQ2NTg1YTkwZjAwMzhmM2NjYjViNjc5NjU1YmE2ODMyYzc4OTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA2OjU5OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuaW5kZXggZTRkOGQwYTlmMzBmOS4uYWVkMTIxZDcyOWIwMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IHZtX3N0cnVjdCB7XG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG4gXHR1bnNpZ25lZCBpbnRcdFx0cGFnZV9vcmRlcjtcbiAjZW5kaWZcbi1cdHVuc2lnbmVkIGludFx0XHRucl9wYWdlcztcbitcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXM7XG4gXHRwaHlzX2FkZHJfdFx0XHRwaHlzX2FkZHI7XG4gXHRjb25zdCB2b2lkXHRcdCpjYWxsZXI7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHJlcXVlc3RlZF9zaXplO1xuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMjZmMzI5NDljMmYyZS4uMTk2ZGE4NzM4Y2YxMCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtMzQwNCw3ICszNDA0LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcilcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FyZWFfZGlyZWN0X21hcChjb25zdCBzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLFxuIFx0XHRcdFx0ICAgICAgIGludCAoKnNldF9kaXJlY3RfbWFwKShzdHJ1Y3QgcGFnZSAqcGFnZSkpXG4ge1xuLVx0aW50IGk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4gXG4gXHQvKiBIVUdFX1ZNQUxMT0MgcGFzc2VzIHNtYWxsIHBhZ2VzIHRvIHNldF9kaXJlY3RfbWFwICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhcmVhLVx1MDAzZW5yX3BhZ2VzOyBpKyspXG5AQCAtMzQyMCw3ICszNDIwLDcgQEAgc3RhdGljIHZvaWQgdm1fcmVzZXRfcGVybXMoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSlcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBVTE9OR19NQVgsIGVuZCA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZV9vcmRlciA9IHZtX2FyZWFfcGFnZV9vcmRlcihhcmVhKTtcbiBcdGludCBmbHVzaF9kbWFwID0gMDtcbi1cdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0LypcbiBcdCAqIEZpbmQgdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2Ugb2YgdGhlIGRpcmVjdCBtYXBwaW5ncyB0byBtYWtlIHN1cmUgdGhhdFxuQEAgLTM0OTMsMTAgKzM0OTMsMTAgQEAgdm9pZCB2ZnJlZV9hdG9taWMoY29uc3Qgdm9pZCAqYWRkcilcbiAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVubWFwcGluZyAodnVubWFwX3JhbmdlKSBhbmQgS0FTQU5cbiAgKiBwb2lzb25pbmcgYmVmb3JlIGNhbGxpbmcgdGhpcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCB2bV9hcmVhX2ZyZWVfcGFnZXMoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBzdGFydF9pZHgsXG4tXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBlbmRfaWR4KVxuK3N0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsXG4rXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbiBcbiBcdGlmICghKHZtLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9NQVBfUFVUX1BBR0VTKSkge1xuIFx0XHRmb3IgKGkgPSBzdGFydF9pZHg7IGkgXHUwMDNjIGVuZF9pZHg7IGkrKylcbkBAIC0zODE5LDEyICszODE5LDEyIEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3Qgdm1hbGxvY19nZnBfYWRqdXN0KGdmcF90IGZsYWdzLCBjb25zdCBib29sIGxhcmdlKVxuIFx0cmV0dXJuIGZsYWdzO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xuIHZtX2FyZWFfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwLCBpbnQgbmlkLFxuLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcylcbitcdFx0dW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKVxuIHtcbi1cdHVuc2lnbmVkIGludCBucl9hbGxvY2F0ZWQgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3JlbWFpbmluZyA9IG5yX3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZyBucl9hbGxvY2F0ZWQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9yZW1haW5pbmcgPSBucl9wYWdlcztcbiBcdHVuc2lnbmVkIGludCBtYXhfYXR0ZW1wdF9vcmRlciA9IE1BWF9QQUdFX09SREVSO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXHRpbnQgaTtcbkBAIC0zODcyLDcgKzM4NzIsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbiBcdGlmICghb3JkZXIpIHtcbiBcdFx0d2hpbGUgKG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfcGFnZXMpIHtcbiBcdFx0XHR1bnNpZ25lZCBpbnQgbnIsIG5yX3BhZ2VzX3JlcXVlc3Q7XG4tXHRcdFx0aW50IGk7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBpO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogQSBtYXhpbXVtIGFsbG93ZWQgcmVxdWVzdCBpcyBoYXJkLWNvZGVkIGFuZCBpcyAxMDBcbkBAIC0zODgwLDcgKzM4ODAsNyBAQCB2bV9hcmVhX2FsbG9jX3BhZ2VzKGdmcF90IGdmcCwgaW50IG5pZCxcbiBcdFx0XHQgKiBsb25nIHByZWVtcHRpb24gb2ZmIHNjZW5hcmlvIGluIHRoZSBidWxrLWFsbG9jYXRvclxuIFx0XHRcdCAqIHNvIHRoZSByYW5nZSBpcyBbMToxMDBdLlxuIFx0XHRcdCAqL1xuLVx0XHRcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVSwgbnJfcGFnZXMgLSBucl9hbGxvY2F0ZWQpO1xuK1x0XHRcdG5yX3BhZ2VzX3JlcXVlc3QgPSBtaW4oMTAwVUwsIG5yX3BhZ2VzIC0gbnJfYWxsb2NhdGVkKTtcbiBcbiBcdFx0XHQvKiBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgY29uc2lkZXIgbWVtcG9saWN5LCB3ZSBjYW4ndFxuIFx0XHRcdCAqIHdyb25nbHkgdXNlIG5lYXJlc3Qgbm9kZSB3aGVuIG5pZCA9PSBOVU1BX05PX05PREUsXG5AQCAtNDAyNiwxMiArNDAyNiwxMiBAQCBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtXHUwMDNlYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGdldF92bV9hcmVhX3NpemUoYXJlYSk7XG4gXHR1bnNpZ25lZCBsb25nIGFycmF5X3NpemU7XG4tXHR1bnNpZ25lZCBpbnQgbnJfc21hbGxfcGFnZXMgPSBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0dW5zaWduZWQgbG9uZyBucl9zbWFsbF9wYWdlcyA9IHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHR1bnNpZ25lZCBpbnQgcGFnZV9vcmRlcjtcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbiBcdGludCByZXQ7XG4gXG4tXHRhcnJheV9zaXplID0gKHVuc2lnbmVkIGxvbmcpbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4rXHRhcnJheV9zaXplID0gbnJfc21hbGxfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4gXG4gXHQvKiBfX0dGUF9OT0ZBSUwgYW5kIFwibm9ibG9ja1wiIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovXG4gXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbkBAIC00NTI1LDcgKzQ1MjUsNyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxuIFx0fVxuIFxuIFx0aWYgKHNpemUgXHUwMDNjPSBvbGRfc2l6ZSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgbmV3X25yX3BhZ2VzID0gUEFHRV9BTElHTihzaXplKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdFx0dW5zaWduZWQgbG9uZyBuZXdfbnJfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFxuIFx0XHQvKiBaZXJvIG91dCBcImZyZWVkXCIgbWVtb3J5LCBwb3RlbnRpYWxseSBmb3IgZnV0dXJlIHJlYWxsb2MuICovXG4gXHRcdGlmICh3YW50X2luaXRfb25fZnJlZSgpIHx8IHdhbnRfaW5pdF9vbl9hbGxvYyhmbGFncykpXG5AQCAtNDU1NCw3ICs0NTU0LDcgQEAgdm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25cbiBcdFx0ICAgICEodm0tXHUwMDNlZmxhZ3MgXHUwMDI2IChWTV9GTFVTSF9SRVNFVF9QRVJNUyB8IFZNX1VTRVJNQVApKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGdmcF9oYXNfaW9fZnMoZmxhZ3MpKSB7XG4gXHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHApO1xuLVx0XHRcdHVuc2lnbmVkIGludCBvbGRfbnJfcGFnZXMgPSB2bS1cdTAwM2Vucl9wYWdlcztcbitcdFx0XHR1bnNpZ25lZCBsb25nIG9sZF9ucl9wYWdlcyA9IHZtLVx1MDAzZW5yX3BhZ2VzO1xuIFxuIFx0XHRcdC8qXG4gXHRcdFx0ICogVXNlIHRoZSBub2RlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBjb25jdXJyZW50XG5AQCAtNDU2NywxNiArNDU2NywxMyBAQCB2b2lkICp2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZihjb25zdCB2b2lkICpwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnblxuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXG4gXHRcdFx0LyogTm90aWZ5IGttZW1sZWFrIG9mIHRoZSByZWR1Y2VkIGFsbG9jYXRpb24gc2l6ZSBiZWZvcmUgdW5tYXBwaW5nLiAqL1xuLVx0XHRcdGttZW1sZWFrX2ZyZWVfcGFydChcbi1cdFx0XHRcdCh2b2lkICopYWRkciArICgodW5zaWduZWQgbG9uZyluZXdfbnJfcGFnZXNcbi1cdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4tXHRcdFx0XHQodW5zaWduZWQgbG9uZykob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxuLVx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRcdFx0a21lbWxlYWtfZnJlZV9wYXJ0KCh2b2lkICopYWRkciArXG4rXHRcdFx0XHRcdCAgIChuZXdfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdFx0XHQgICAob2xkX25yX3BhZ2VzIC0gbmV3X25yX3BhZ2VzKVxuK1x0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiBcbi1cdFx0XHR2dW5tYXBfcmFuZ2UoYWRkciArICgodW5zaWduZWQgbG9uZyluZXdfbnJfcGFnZXNcbi1cdFx0XHRcdFx0ICAgICBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4tXHRcdFx0XHQgICAgIGFkZHIgKyAoKHVuc2lnbmVkIGxvbmcpb2xkX25yX3BhZ2VzXG4tXHRcdFx0XHRcdCAgICAgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbitcdFx0XHR2dW5tYXBfcmFuZ2UoYWRkciArIChuZXdfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdFx0ICAgICBhZGRyICsgKG9sZF9ucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuIFxuIFx0XHRcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgbmV3X25yX3BhZ2VzLCBvbGRfbnJfcGFnZXMpO1xuIFx0XHR9XG5AQCAtNTQwMCw3ICs1Mzk3LDcgQEAgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbiBcdHN0cnVjdCB2bWFwX2FyZWEgKnZhO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuIFxuIFx0YWRkciA9IFBBR0VfQUxJR04oKHVuc2lnbmVkIGxvbmcpIG9iamVjdCk7XG4gXHR2biA9IGFkZHJfdG9fbm9kZShhZGRyKTtcbkBAIC01NDIwLDcgKzU0MTcsNyBAQCBib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxuIFx0bnJfcGFnZXMgPSB2bS1cdTAwM2Vucl9wYWdlcztcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4gXG4tXHRwcl9jb250KFwiICV1LXBhZ2Ugdm1hbGxvYyByZWdpb24gc3RhcnRpbmcgYXQgJSNseCBhbGxvY2F0ZWQgYXQgJXBTXFxuXCIsXG4rXHRwcl9jb250KFwiICVsdS1wYWdlIHZtYWxsb2MgcmVnaW9uIHN0YXJ0aW5nIGF0ICUjbHggYWxsb2NhdGVkIGF0ICVwU1xcblwiLFxuIFx0XHRucl9wYWdlcywgYWRkciwgY2FsbGVyKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTU0MzgsMTYgKzU0MzUsMTcgQEAgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcbiBzdGF0aWMgdm9pZCBzaG93X251bWFfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9zdHJ1Y3QgKnYsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50ICpjb3VudGVycylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHR1bnNpZ25lZCBpbnQgc3RlcCA9IDFVIFx1MDAzY1x1MDAzYyB2bV9hcmVhX3BhZ2Vfb3JkZXIodik7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR1bnNpZ25lZCBpbnQgbnI7XG4gXG4gXHRpZiAoIWNvdW50ZXJzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtZW1zZXQoY291bnRlcnMsIDAsIG5yX25vZGVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCkpO1xuIFxuLVx0Zm9yIChuciA9IDA7IG5yIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBuciArPSBzdGVwKVxuLVx0XHRjb3VudGVyc1twYWdlX3RvX25pZCh2LVx1MDAzZXBhZ2VzW25yXSldICs9IHN0ZXA7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB2LVx1MDAzZW5yX3BhZ2VzOyBpICs9IHN0ZXApXG4rXHRcdGNvdW50ZXJzW3BhZ2VfdG9fbmlkKHYtXHUwMDNlcGFnZXNbaV0pXSArPSBzdGVwO1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuciwgTl9ISUdIX01FTU9SWSlcbiBcdFx0aWYgKGNvdW50ZXJzW25yXSlcbiBcdFx0XHRzZXFfcHJpbnRmKG0sIFwiIE4ldT0ldVwiLCBuciwgY291bnRlcnNbbnJdKTtcbkBAIC01NTA1LDcgKzU1MDMsNyBAQCBzdGF0aWMgaW50IHZtYWxsb2NfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcClcbiBcdFx0XHRcdHNlcV9wcmludGYobSwgXCIgJXBTXCIsIHYtXHUwMDNlY2FsbGVyKTtcbiBcbiBcdFx0XHRpZiAodi1cdTAwM2Vucl9wYWdlcylcbi1cdFx0XHRcdHNlcV9wcmludGYobSwgXCIgcGFnZXM9JWRcIiwgdi1cdTAwM2Vucl9wYWdlcyk7XG4rXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwiIHBhZ2VzPSVsdVwiLCB2LVx1MDAzZW5yX3BhZ2VzKTtcbiBcbiBcdFx0XHRpZiAodi1cdTAwM2VwaHlzX2FkZHIpXG4gXHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwiIHBoeXM9JXBhXCIsIFx1MDAyNnYtXHUwMDNlcGh5c19hZGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA2OjU5OjU5LjUwNTIxOTc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5NjEyMjY0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBBbmFseXNpczogdm1hbGxvYy5jIFR5cGUgQ2hhbmdlKipcblxuT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHRoYXQncyBidW1waW5nIGBucl9wYWdlc2AgaW4gYHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgYW5kIHByb3BhZ2F0aW5nIHRoZSBjaGFuZ2UgdGhyb3VnaG91dCBgbW0vdm1hbGxvYy5jYC4gVGhlIG1haW4gbW90aXZhdGlvbiBzZWVtcyB0byBiZSBzdXBwb3J0aW5nIGxhcmdlciB2bWFsbG9jIGFsbG9jYXRpb25zLCBleGNlZWRpbmcgdGhlIDRHQiBsaW1pdCBpbXBvc2VkIGJ5IGEgMzItYml0IGB1bnNpZ25lZCBpbnRgLiBPbiA2NC1iaXQgc3lzdGVtcywgYHVuc2lnbmVkIGludGAgaXMgc3RpbGwgb25seSAzMiBiaXRzLiBUaGlzIG1lYW5zIGEgbWF4aW11bSBvZiA0RyBwYWdlcyBvZiBtZW1vcnkuIFdpdGggYHVuc2lnbmVkIGxvbmdgIHdlIGhhdmUgYSBtdWNoIGxhcmdlciBjYXBhY2l0eS5cblxuVGhlIGRpZmYgaXRzZWxmIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZDogdHlwZSBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucy4gIEkgc2VlIGNoYW5nZXMgaW4gYHNldF9hcmVhX2RpcmVjdF9tYXBgLCBgdm1fcmVzZXRfcGVybXNgLCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCwgYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX192bWFsbG9jX2FyZWFfbm9kZWAsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2R1bXBfb2JqYCwgYHNob3dfbnVtYV9pbmZvYCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AuICBUaGUgY29kZSBpbiBxdWVzdGlvbiBoYXMgdG8gYmUgY2hlY2tlZCwgYXMgaXQgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWEuXG5cbkluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlIGRpZmZpY3VsdHkgb2YgZnV6emluZyB0aGlzIGVmZmVjdGl2ZWx5LCBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIGFsbG9jYXRpbmcgbWFzc2l2ZSBhbW91bnRzIG9mIHZtYWxsb2MgbWVtb3J5IHRvIHRyaWdnZXIgdGhlIGFjdHVhbCBkaWZmZXJlbmNlLCB3aGljaCBpc24ndCBlYXN5IHRvIGRvIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuIEJ1dCB0aGVuIGFnYWluLCBhIGJ1ZyBpbnZvbHZpbmcgdGhlIHRydW5jYXRpb24gb2Ygc2l6ZSwgZXRjIGNvdWxkIGxlYWQgdG8gYSBkaWZmZXJlbmNlIG5vdyB0aGF0IGl0IGlzIGEgNjQtYml0IHZhcmlhYmxlLlxuXG5UaGVuIHRoZSBpbnN0cnVjdGlvbnMgcG9wcGVkIGludG8gbXkgaGVhZC4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyAqbm90KiBhIGRvY3VtZW50YXRpb24gY2hhbmdlLCBub3QgZGVjb3JhdGl2ZSwgYW5kIGl0IGlzIGEgY2hhbmdlIHRvIGEgbnVtZXJpYyBjb25zdGFudCBvciBtYWNybyB0aGF0IGZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCAqaXMqIHdvcnRoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgZm9jdXMuICBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQ/IFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgc2V0X2FyZWFfZGlyZWN0X21hcGAsIGB2bV9yZXNldF9wZXJtc2AsIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLCBgdm1fYXJlYV9hbGxvY19wYWdlc2AsIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCwgYHZtYWxsb2NfZHVtcF9vYmpgLCBgc2hvd19udW1hX2luZm9gLCBhbmQgYHZtYWxsb2NfaW5mb19zaG93YC4gIFNpbmNlIHdlIHdhbnQgdG8gZm9jdXMgb24gZnV6emluZyBBUEkgZW50cnlwb2ludHMsIGxldCBtZSB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGZpbHRlciBkb3duIHRoZSBsaXN0LiAgXG5cbkFscmlnaHQsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBsb29rIGxpa2UgQVBJIGVudHJ5cG9pbnRzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNoZWNrIHRoZSBjb2RlIHRvIHNlZSBpZiB0aGV5J3JlIHN0YXRpYyBvciBub3QuXG5MZXQncyBjaGVjayBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGFuZCBgX192bWFsbG9jX2FyZWFfbm9kZWAgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMDoxMy40NjY0NDg3NzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNzk0MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9NDQ1Mz1FWFBPUlRfU1lNQk9MKHZ6YWxsb2Nfbm9kZV9ub3Byb2YpO1xcbi0tXFxubW0vdm1hbGxvYy5jLTQ0ODctICovXFxubW0vdm1hbGxvYy5jOjQ0ODg6dm9pZCAqdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxubW0vdm1hbGxvYy5jLTQ0ODktXFx0XFx0XFx0XFx0IGdmcF90IGZsYWdzLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQ2MTItfVxcbm1tL3ZtYWxsb2MuYzo0NjEzOkVYUE9SVF9TWU1CT0wodnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00NjE0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMDoxMy41OTkyNDkwMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODU1NDc4NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gRnVuY3Rpb25zKipcblxuUmlnaHQsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAuLi4geWVzLCB0aGF0J3MgZGVmaW5pdGVseSBhbiBleHBvcnRlZCBmdW5jdGlvbi4gTm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBUaGUgcXVlc3Rpb24gbm93IGlzIGFib3V0IGBfX3ZtYWxsb2NfYXJlYV9ub2RlYC4gSXQncyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogaXQncyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlIGl0J3MgZGVmaW5lZCBpbi4gQnV0IHRoYXQgZG9lc24ndCBzdG9wIG1lIGZyb20gd2FudGluZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBTbywgbGV0J3MgdHJhY2UgaXRzIHVzYWdlLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSB3aGVyZSBgX192bWFsbG9jX2FyZWFfbm9kZWAgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGtlcm5lbCB0byBkZXRlcm1pbmUgaXRzIGNvbnRyaWJ1dGlvbiB0byBtZW1vcnkgYWxsb2NhdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHByb2Nlc3MsIGV2ZW4gaWYgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gaW50ZXJuYWwgdXNhZ2Ugd2l0aGluIHRoZSBtb2R1bGUuIEtub3dpbmcgKndobyogaXMgY2FsbGluZyBpdCwgYW5kIHVuZGVyICp3aGF0KiBjaXJjdW1zdGFuY2VzLCBpcyBlc3NlbnRpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMDoyMC40NTQ3MzEyODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3MTQ2NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdm1hbGxvY19hcmVhX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0zOTUzPXN0YXRpYyB2b2lkIGNsZWFudXBfdm1fYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTcwLS8qXFxubW0vdm1hbGxvYy5jOjM5NzE6ICogSGVscGVyIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgdG8gZGVmZXIgY2xlYW51cFxcbm1tL3ZtYWxsb2MuYy0zOTcyLSAqIG9mIHBhcnRpYWxseSBpbml0aWFsaXplZCB2bV9zdHJ1Y3QgaW4gZXJyb3IgcGF0aHMuXFxuLS1cXG5tbS92bWFsbG9jLmM9NDAxND1tZW1hbGxvY19yZXN0b3JlX3Njb3BlKHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MDE5LVxcbm1tL3ZtYWxsb2MuYzo0MDIwOnN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxcbm1tL3ZtYWxsb2MuYy00MDIxLVxcdFxcdFxcdFxcdCBwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz00MTgwPXZvaWQgKl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtNDIzMC1cXHQvKlxcbm1tL3ZtYWxsb2MuYzo0MjMxOlxcdCAqIFByZXBhcmUgYXJndW1lbnRzIGZvciBfX3ZtYWxsb2NfYXJlYV9ub2RlKCkgYW5kXFxubW0vdm1hbGxvYy5jLTQyMzItXFx0ICoga2FzYW5fdW5wb2lzb25fdm1hbGxvYygpLlxcbi0tXFxubW0vdm1hbGxvYy5jLTQyNTQtXFx0LyogQWxsb2NhdGUgcGh5c2ljYWwgcGFnZXMgYW5kIG1hcCB0aGVtIGludG8gdm1hbGxvYyBzcGFjZS4gKi9cXG5tbS92bWFsbG9jLmM6NDI1NTpcXHRyZXQgPSBfX3ZtYWxsb2NfYXJlYV9ub2RlKGFyZWEsIGdmcF9tYXNrLCBwcm90LCBzaGlmdCwgbm9kZSk7XFxubW0vdm1hbGxvYy5jLTQyNTYtXFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjIwLjc5MTg4NDE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4NTgzMzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgQ2FsbCBQYXRoKipcblxuUmlnaHQsIHNvIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzIHVzaW5nIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCBpbnRlcm5hbGx5LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIHBhdHRlcm4gZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHNwZWNpZmljIG5vZGVzLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogaXQncyBiZWluZyBjYWxsZWQsIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBjaGFpbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGxlcnMgb2YgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGl0cyBwdXJwb3NlLCB1c2FnZSBjb250ZXh0LCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJ3MgaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBiZWluZyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjIzLjk3NzcyMTUzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTMwNzU0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9NDAyMD1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MDY1LVxcdCAqXFxubW0vdm1hbGxvYy5jOjQwNjY6XFx0ICogUGxlYXNlIG5vdGUsIHRoZSBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoKSBmYWxscy1iYWNrXFxubW0vdm1hbGxvYy5jLTQwNjctXFx0ICogdG8gb3JkZXItMCBwYWdlcyBpZiBoaWdoLW9yZGVyIGF0dGVtcHQgaXMgdW5zdWNjZXNzZnVsLlxcbi0tXFxubW0vdm1hbGxvYy5jPTQxMzU9c3RhdGljIGdmcF90IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF90IGZsYWdzKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQxNzktICovXFxubW0vdm1hbGxvYy5jOjQxODA6dm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG5tbS92bWFsbG9jLmMtNDE4MS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bWFsbG9jLmMtNDMwOC0gKiBTZW1hbnRpY3Mgb2YgQGdmcF9tYXNrIChpbmNsdWRpbmcgcmVjbGFpbS9yZXRyeSBtb2RpZmllcnMgc3VjaCBhc1xcbm1tL3ZtYWxsb2MuYzo0MzA5OiAqIF9fR0ZQX05PRkFJTCkgYXJlIHRoZSBzYW1lIGFzIGluIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZigpLlxcbm1tL3ZtYWxsb2MuYy00MzEwLSAqXFxuLS1cXG5tbS92bWFsbG9jLmM9NDMxMz12b2lkICpfX3ZtYWxsb2Nfbm9kZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQzMTUte1xcbm1tL3ZtYWxsb2MuYzo0MzE2OlxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgYWxpZ24sIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbm1tL3ZtYWxsb2MuYy00MzE3LVxcdFxcdFxcdFxcdGdmcF9tYXNrLCBQQUdFX0tFUk5FTCwgMCwgbm9kZSwgY2FsbGVyKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzY5PXZvaWQgKnZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzcyLVxcdFxcdGdmcF9tYXNrID0gdm1hbGxvY19maXhfZmxhZ3MoZ2ZwX21hc2spO1xcbm1tL3ZtYWxsb2MuYzo0MzczOlxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgMSwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxubW0vdm1hbGxvYy5jLTQzNzQtXFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX21hc2ssIFBBR0VfS0VSTkVMLCBWTV9BTExPV19IVUdFX1ZNQVAsXFxuLS1cXG5tbS92bWFsbG9jLmM9NDQwOD12b2lkICp2bWFsbG9jX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5tbS92bWFsbG9jLmMtNDQwOS17XFxubW0vdm1hbGxvYy5jOjQ0MTA6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG5tbS92bWFsbG9jLmMtNDQxMS1cXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLFxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2NTI9dm9pZCAqdm1hbGxvY18zMl91c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXFxubW0vdm1hbGxvYy5jLTQ2NTMte1xcbm1tL3ZtYWxsb2MuYzo0NjU0OlxcdHJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2Yoc2l6ZSwgU0hNTEJBLCAgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxubW0vdm1hbGxvYy5jLTQ2NTUtXFx0XFx0XFx0XFx0ICAgIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDA6MjQuMzcwODAzMzI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4NzY4MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZtYWxsb2MgSW50ZXJuYWxzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgdm1hbGxvYyBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGNvcmUgb2YgdGhlIHdob2xlIG9wZXJhdGlvbi4gSXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucywgbGlrZSBgX192bWFsbG9jX25vZGVfbm9wcm9mYCwgYHZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZmAsIGB2bWFsbG9jX3VzZXJfbm9wcm9mYCwgYW5kIGV2ZW4gYHZtYWxsb2NfMzJfdXNlcl9ub3Byb2ZgLiBJdCdzIHR5cGljYWwgdG8gaGF2ZSBhIGNlbnRyYWwgZnVuY3Rpb24gbGlrZSB0aGF0LCBoYW5kbGluZyB0aGUgZnVuZGFtZW50YWwgbG9naWMuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhpbmtpbmcgYWJvdXQgaXQsIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGlzIGFjdHVhbGx5ICppbXBsZW1lbnRpbmcqIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZXNlIGBub3Byb2ZgIHZhcmlhbnRzIGFyZSBvZnRlbiB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbnMuXG5cbkkgc2hvdWxkIHZlcmlmeSB0aGF0IGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgIGl0c2VsZiBpcyBleHBvcnRlZCwgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQncyBhIGtleSBkZXRhaWwgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgYWNjZXNzIGxldmVsIGFuZCBwb3RlbnRpYWwgdXNhZ2Ugc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjI5LjQ1ODQ4NzUyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzM4MzgzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipfX3ZtYWxsb2Nfbm9kZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjI5LjU2MzgzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTQxMTUwMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgTWVtb3J5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBhYm91dCBgX192bWFsbG9jX25vZGVfcmFuZ2VgLCBidXQgdGhhdCBtaWdodCBub3QgYmUgZXhwb3J0ZWQgYXMgYSBzeW1ib2wuIFRoYXQncyBhIGNvbW1vbiBnb3RjaGEgaW4ga2VybmVsIGRldmVsb3BtZW50LCByaWdodD8gQWx3YXlzIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgcGl2b3QgdG8gc29tZXRoaW5nIEkgKmtub3cqIGlzIHByb2JhYmx5IGFjY2Vzc2libGU6IGB2bWFsbG9jYC4gWWVhaCwgb2theSwgYHZtYWxsb2NgIGl0c2VsZiBzaG91bGQgYmUgZmluZSwgYnV0IEkga25vdyB0aGVyZSBhcmUgdmFyaWF0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGxldmVsIG9mIHByb2ZpbGluZyBuZWVkZWQuIExldCdzIHNlZS4uLiBwZXJoYXBzIGBfX3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgIG9yIGV2ZW4gYHZtYWxsb2Nfbm9wcm9mYCB3aWxsIGJlIGF2YWlsYWJsZSBpbnN0ZWFkLiBUaG9zZSBtaWdodCBvZmZlciB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQgd2l0aG91dCB0aGUgb3ZlcmhlYWQuIEkgbmVlZCB0byBiZSBzdXJlIGJlZm9yZSBJIHN0YXJ0IGRvd24gdGhhdCBwYXRoLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoZXkgc3VpdCBteSBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDA6MzUuNzA0OTg4Mzg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwMDEyMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdm1hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTgxPWJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpXFxuLS1cXG5tbS92bWFsbG9jLmMtODYtfVxcbm1tL3ZtYWxsb2MuYzo4NzpFWFBPUlRfU1lNQk9MKGlzX3ZtYWxsb2NfYWRkcik7XFxubW0vdm1hbGxvYy5jLTg4LVxcbi0tXFxubW0vdm1hbGxvYy5jPTgzNj1pbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KVxcbi0tXFxubW0vdm1hbGxvYy5jLTg0OS19XFxubW0vdm1hbGxvYy5jOjg1MDpFWFBPUlRfU1lNQk9MX0dQTChpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKTtcXG5tbS92bWFsbG9jLmMtODUxLVxcbi0tXFxubW0vdm1hbGxvYy5jPTg1Nz1zdHJ1Y3QgcGFnZSAqdm1hbGxvY190b19wYWdlKGNvbnN0IHZvaWQgKnZtYWxsb2NfYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy05MTAtfVxcbm1tL3ZtYWxsb2MuYzo5MTE6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX3RvX3BhZ2UpO1xcbm1tL3ZtYWxsb2MuYy05MTItXFxuLS1cXG5tbS92bWFsbG9jLmM9OTE2PXVuc2lnbmVkIGxvbmcgdm1hbGxvY190b19wZm4oY29uc3Qgdm9pZCAqdm1hbGxvY19hZGRyKVxcbi0tXFxubW0vdm1hbGxvYy5jLTkxOS19XFxubW0vdm1hbGxvYy5jOjkyMDpFWFBPUlRfU1lNQk9MKHZtYWxsb2NfdG9fcGZuKTtcXG5tbS92bWFsbG9jLmMtOTIxLVxcbi0tXFxubW0vdm1hbGxvYy5jPTQzMTM9dm9pZCAqX192bWFsbG9jX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzI0LSNpZmRlZiBDT05GSUdfVEVTVF9WTUFMTE9DX01PRFVMRVxcbm1tL3ZtYWxsb2MuYzo0MzI1OkVYUE9SVF9TWU1CT0xfR1BMKF9fdm1hbGxvY19ub2RlX25vcHJvZik7XFxubW0vdm1hbGxvYy5jLTQzMjYtI2VuZGlmXFxuLS1cXG5tbS92bWFsbG9jLmM9NDMyOD12b2lkICpfX3ZtYWxsb2Nfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS92bWFsbG9jLmMtNDMzNC19XFxubW0vdm1hbGxvYy5jOjQzMzU6RVhQT1JUX1NZTUJPTChfX3ZtYWxsb2Nfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDMzNi1cXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzQ5PXZvaWQgKnZtYWxsb2Nfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzUzLX1cXG5tbS92bWFsbG9jLmM6NDM1NDpFWFBPUlRfU1lNQk9MKHZtYWxsb2Nfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDM1NS1cXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzY5PXZvaWQgKnZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00Mzc2LX1cXG5tbS92bWFsbG9jLmM6NDM3NzpFWFBPUlRfU1lNQk9MX0dQTCh2bWFsbG9jX2h1Z2Vfbm9kZV9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00Mzc4LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ0MDg9dm9pZCAqdm1hbGxvY191c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDQxNC19XFxubW0vdm1hbGxvYy5jOjQ0MTU6RVhQT1JUX1NZTUJPTCh2bWFsbG9jX3VzZXJfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDQxNi1cXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDMwPXZvaWQgKnZtYWxsb2Nfbm9kZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy00NDM0LX1cXG5tbS92bWFsbG9jLmM6NDQzNTpFWFBPUlRfU1lNQk9MKHZtYWxsb2Nfbm9kZV9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00NDM2LVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2MzY9dm9pZCAqdm1hbGxvY18zMl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQ2NDAtfVxcbm1tL3ZtYWxsb2MuYzo0NjQxOkVYUE9SVF9TWU1CT0wodm1hbGxvY18zMl9ub3Byb2YpO1xcbm1tL3ZtYWxsb2MuYy00NjQyLVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ2NTI9dm9pZCAqdm1hbGxvY18zMl91c2VyX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDY1OC19XFxubW0vdm1hbGxvYy5jOjQ2NTk6RVhQT1JUX1NZTUJPTCh2bWFsbG9jXzMyX3VzZXJfbm9wcm9mKTtcXG5tbS92bWFsbG9jLmMtNDY2MC1cXG4tLVxcbm1tL3ZtYWxsb2MuYz01MDI3PWludCByZW1hcF92bWFsbG9jX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphZGRyLFxcbi0tXFxubW0vdm1hbGxvYy5jLTUwMzMtfVxcbm1tL3ZtYWxsb2MuYzo1MDM0OkVYUE9SVF9TWU1CT0wocmVtYXBfdm1hbGxvY19yYW5nZSk7XFxubW0vdm1hbGxvYy5jLTUwMzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjM1LjgzMzk5NTYxOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTg3OTg1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgdGFyZ2V0IHNlbGVjdGlvbi4gSSBzZWUgYSBsaXN0IG9mIGB2bWFsbG9jXypfbm9wcm9mYCBmdW5jdGlvbnMgZXhwb3J0ZWQ6IGB2bWFsbG9jX25vcHJvZmAsIGBfX3ZtYWxsb2Nfbm9wcm9mYCwgYHZtYWxsb2Nfbm9kZV9ub3Byb2ZgLCBgdm1hbGxvY191c2VyX25vcHJvZmAsIGB2bWFsbG9jXzMyX25vcHJvZmAsIGB2bWFsbG9jXzMyX3VzZXJfbm9wcm9mYCwgYHZtYWxsb2NfaHVnZV9ub2RlX25vcHJvZmAsIGFuZCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLiBSaWdodCwgYHZtYWxsb2NgIGlzIG5vdyBhIG1hY3JvIHJlZGlyZWN0aW5nIHRvIGB2bWFsbG9jX25vcHJvZmAgaW4gbmV3ZXIga2VybmVscywgYSBjb25zZXF1ZW5jZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGluc3RydW1lbnRhdGlvbi4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHdhcm4gYWdhaW5zdCBvdmVybHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gVGhhdCBtZWFucyBgdm1hbGxvY19ub3Byb2ZgIGl0c2VsZiBpcyBwcm9iYWJseSB0b28gYnJvYWQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLCBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB0aGUgcmVsZXZhbnQgcmVjZW50IGNoYW5nZXMuIExldCdzIHJlLWV4YW1pbmUgdGhvc2UgY2hhbmdlIGxvY2F0aW9uczogYHZtX2FyZWFfYWxsb2NfcGFnZXNgLCBgX192bWFsbG9jX2FyZWFfbm9kZWAsIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2R1bXBfb2JqYCwgYHNob3dfbnVtYV9pbmZvYCwgYW5kIGB2bWFsbG9jX2luZm9fc2hvd2AuXG5cbkFscmlnaHQsIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzIGEgc3Ryb25nIGNvbnRlbmRlci4gSXQncyBleHBsaWNpdGx5IHRpZWQgdG8gbWVtb3J5IHJlYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGEgY29tbW9uIGFyZWEgZm9yIGZ1enppbmcuIFdoYXQgZWxzZSBsb29rcyBpbnRlcmVzdGluZyBoZXJlPyBJIHNlZSBgdm1hbGxvY19kdW1wX29iamAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBrbWVtX2R1bXBfb2JqYCBjaGFpbi4gQW5kLCBhaCwgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfaW5mb19zaG93YCBhcmUgYXNzb2NpYXRlZCB3aXRoIGAvcHJvYy92bWFsbG9jaW5mb2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkga25vdyBob3cgdG8gdGFyZ2V0IHByb2NmcyBlbnRyaWVzLiBSZWFkaW5nIGAvcHJvYy92bWFsbG9jaW5mb2Agc2hvdWxkIGRpcmVjdGx5IHRyaWdnZXIgYm90aCBgdm1hbGxvY19pbmZvX3Nob3dgIGFuZCBgc2hvd19udW1hX2luZm9gLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaWYgYHZtYWxsb2NfaW5mb19zaG93YCBpcyBpbmRlZWQgYm91bmQgdG8gYSBzcGVjaWZpYyBwcm9jZnMgZmlsZS4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgYXBwcm9hY2ggZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjQ0LjQyMTk4Mzc3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1Njk3NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NfaW5mb19zaG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9MzI0ND12b2lkIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMjQ4LVxcdCAqIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB2bSBoYXMgcHJvcGVyIHZhbHVlcy5cXG5tbS92bWFsbG9jLmM6MzI0OTpcXHQgKiBQYWlyIHdpdGggc21wX3JtYigpIGluIHZyZWFkX2l0ZXIoKSBhbmQgdm1hbGxvY19pbmZvX3Nob3coKS5cXG5tbS92bWFsbG9jLmMtMzI1MC1cXHQgKi9cXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDg4PXZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQ1NjAtXFx0XFx0XFx0ICogVXNlIHRoZSBub2RlIGxvY2sgdG8gc3luY2hyb25pemUgd2l0aCBjb25jdXJyZW50XFxubW0vdm1hbGxvYy5jOjQ1NjE6XFx0XFx0XFx0ICogcmVhZGVycyAodm1hbGxvY19pbmZvX3Nob3cpLlxcbm1tL3ZtYWxsb2MuYy00NTYyLVxcdFxcdFxcdCAqL1xcbi0tXFxubW0vdm1hbGxvYy5jPTU0NTQ9c3RhdGljIHZvaWQgc2hvd19wdXJnZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy01NDY5LVxcbm1tL3ZtYWxsb2MuYzo1NDcwOnN0YXRpYyBpbnQgdm1hbGxvY19pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKVxcbm1tL3ZtYWxsb2MuYy01NDcxLXtcXG4tLVxcbm1tL3ZtYWxsb2MuYz01NTQ5PXN0YXRpYyBpbnQgX19pbml0IHByb2Nfdm1hbGxvY19pbml0KHZvaWQpXFxubW0vdm1hbGxvYy5jLTU1NTAte1xcbm1tL3ZtYWxsb2MuYzo1NTUxOlxcdHByb2NfY3JlYXRlX3NpbmdsZShcXFwidm1hbGxvY2luZm9cXFwiLCAwNDAwLCBOVUxMLCB2bWFsbG9jX2luZm9fc2hvdyk7XFxubW0vdm1hbGxvYy5jLTU1NTItXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjQ0LjU5NzY4NjM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTM2NjE4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFByb3Bvc2VkIFBhdGNoIG9uIHZtYWxsb2MgVXNhZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGB2bWFsbG9jYCdzIGhhbmRsaW5nIG9mIHBhZ2UgY291bnRzLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHBvc2l0aXZlOyB0aGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyB3ZSBuZWVkIHRvIGJlIHZpZ2lsYW50IGFib3V0LiBMZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzIGFuZCBob3cgdGhleSBtaWdodCBpbXBhY3QgZnV6emluZyBlZmZvcnRzLlxuXG5JIHNlZSBpdCdzIGVuYWJsaW5nIHRoZSBgL3Byb2Mvdm1hbGxvY2luZm9gIGludGVyZmFjZSwgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYHByb2NfY3JlYXRlX3NpbmdsZWAgYW5kIGxpbmtpbmcgaXQgdG8gdGhlIGB2bWFsbG9jX2luZm9fc2hvd2AgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzOyBpdCBwcm92aWRlcyBhIHdheSB0byB0cmlnZ2VyIHRoZSBtb2RpZmllZCBjb2RlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBzeXN0ZW1hdGljIHJlcGxhY2VtZW50IG9mIGB1bnNpZ25lZCBpbnRgIHdpdGggYHVuc2lnbmVkIGxvbmdgIGZvciB2YXJpb3VzIHBhZ2UgY291bnQgdmFyaWFibGVzIHdpdGhpbiB0aGUgYHZtYWxsb2NgIHN1YnN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgdi1cdTAwM2Vucl9wYWdlc2AgaW4gYHZtYWxsb2NfaW5mb19zaG93YCwgYG5yYCBpbiBgc2hvd19udW1hX2luZm9gLCBhbmQgYG5yX3BhZ2VzYCBpbiBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgLCBgdm1hbGxvY19kdW1wX29iamAsIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYW5kIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYC5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGltcGFjdGVkLCBhbmQgdGhlcmVmb3JlIHdhcnJhbnQgYSBjbG9zZXIgbG9vayBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXJlIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAsIGB2bWFsbG9jX2luZm9fc2hvd2AsIGFuZCBgdm1hbGxvY19kdW1wX29iamAuIEknbGwgaGF2ZSB0byBrZWVwIGluIG1pbmQgdGhhdCBgdm1hbGxvY19pbmZvX3Nob3dgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5bWJvbCBmb3IgZnV6emluZyB1bmxlc3MgaXQncyB0cmlnZ2VyZWQgaW5kaXJlY3RseSAod2hpY2gsIGFzIHdlIGtub3csIGl0IGlzIHRocm91Z2ggdGhlIGAvcHJvYy92bWFsbG9jaW5mb2AgaW50ZXJmYWNlKS4gSG93ZXZlciwgZnJvbSBleHBlcmllbmNlIEkga25vdyB0aGF0IHN5emthbGxlciBjYW4gc29tZXRpbWVzIGZ1enogc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBzdGlsbCBwcmVmZXJhYmxlLCB0aG91Z2gsIHRvIHByaW9yaXRpemUgZXhwb3NlZCBzeW1ib2xzIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgdm1hbGxvY19kdW1wX29iamAgaXMgZXhwb3J0ZWQsIGFzIHRoYXQgd291bGQgc2lnbmlmaWNhbnRseSBicm9hZGVuIG91ciBmdXp6aW5nIG9wdGlvbnMuIElmIGl0J3Mgbm90LCB3ZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGZ1bmN0aW9uLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSBjYXJlZnVsIGluc3BlY3Rpb24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBgdW5zaWduZWQgbG9uZ2AgY2hhbmdlcyBhZmZlY3QgdGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MgYW5kIHRoZSBpbXBhY3QgdGhpcyBoYXMgb24gdGhlIGB2bWFsbG9jYCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDcyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjUyLjcxMTM1MTI3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5OTkzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY19kdW1wX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTUzODI9dm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3ZtcylcXG4tLVxcbm1tL3ZtYWxsb2MuYy01MzkyLSNpZmRlZiBDT05GSUdfUFJJTlRLXFxubW0vdm1hbGxvYy5jOjUzOTM6Ym9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdClcXG5tbS92bWFsbG9jLmMtNTM5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjUyLjgwNzM1NTYxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTEyOTMwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdm1hbGxvY19kdW1wX29iamAqKlxuXG5BbHJpZ2h0LCBzbyBgdm1hbGxvY19kdW1wX29iamAgaXNuJ3QgZGVjbGFyZWQgYXMgYGV4dGVybmAsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBIb3dldmVyLCB0aGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogZGVjbGFyZWQgYHN0YXRpY2AgaW1tZWRpYXRlbHkgcGlxdWVkIG15IGludGVyZXN0LiBUaGF0IHN1Z2dlc3RzIGEgZGVsaWJlcmF0ZSBkZWNpc2lvbjsgaXQgKmNvdWxkKiBiZSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBkZWZpbmluZyBmaWxlLCBldmVuIGlmIHRoZSBsaW5rYWdlIGlzbid0IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhlIGhlYWRlci4gVGhlcmVmb3JlLCB0aGUgZmlyc3Qgc3RlcCBpcyB0byBkZWZpbml0aXZlbHkgZGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVjbGFyZWQgaW4gYSBwdWJsaWMgaGVhZGVyIGZpbGUsIGFsbG93aW5nIGFjY2VzcyBmcm9tIG90aGVyIHNvdXJjZSBmaWxlcy4gVGhpcyB3aWxsIGRldGVybWluZSBpdHMgaW50ZW5kZWQgc2NvcGUgYW5kIHVzYWdlLiBJZiBpdCAqaXMqIGluIGEgaGVhZGVyLCB0aGVuIGl0cyBub24tc3RhdGljIGRlZmluaXRpb24gd291bGQgaW5kaWNhdGUgaXRzIGV4cGVjdGVkIHVzZS4gTGV0J3MgZGlnIGludG8gdGhlIGluY2x1ZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDA6NTguMzIwMjkxMzI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0NzI0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hbGxvY19kdW1wX29ialwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0zMjU9c3RhdGljIGlubGluZSB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzI4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1BSSU5USylcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMjk6Ym9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdCk7XFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzMwLSNlbHNlXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzMxOnN0YXRpYyBpbmxpbmUgYm9vbCB2bWFsbG9jX2R1bXBfb2JqKHZvaWQgKm9iamVjdCkgeyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMzItI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAwOjU4Ljc5Mzc3MTcwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODE1NDQyNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB2bWFsbG9jIENvZGUgZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHZtYWxsb2MgY29kZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBpbiBgaW5jbHVkZS9saW51eC92bWFsbG9jLmhgLiBUaGF0J3Mgd2hlcmUgdG8gbG9vay4gTm93LCBJIHNlZSBgdm1hbGxvY19kdW1wX29iamAgYW5kIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAganVtcCBvdXQgaW1tZWRpYXRlbHkuIEdvb2QgY2FuZGlkYXRlcy4gQnV0LCB3YWl0Li4uIGBfX3ZtYWxsb2Nfbm9kZV9ub3Byb2ZgPyBJdCAqaXMqIGEgZ2VuZXJpYywgaG90LXBhdGggZnVuY3Rpb24sIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBgdm1hbGxvY2AsIHNvIG1heWJlIGl0J3MgdGhlIHJpZ2h0IG9uZS5cblxuQnV0LCBoYW5nIG9uLCBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzbid0IGFjdHVhbGx5IGhvdC1wYXRoOyBpdOKAmXMgc3BlY2lmaWNhbGx5IGZvciByZWFsbG9jYXRpbmcgdm1hbGxvYyBtZW1vcnkuIEhtbSwgaXQncyBjYWxsZWQgYnkgYHZyZWFsbG9jYCBhbmQgYGt2cmVhbGxvY2AsIHJpZ2h0PyBOb3csIHRoZSBiaWcgcXVlc3Rpb24gaXM6IEhvdyBjb21tb24gaXMgYGt2cmVhbGxvY2A/IEkga25vdyBpdCdzIHVzZWQgYSBmYWlyIGJpdCwgYnV0IGl0J3MgcHJvYmFibHkgbGVzcyBvZiBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgdGhhbiBhIHBsYWluIGB2bWFsbG9jYCBjYWxsLlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjay4gSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgQ09ORklHIG9wdGlvbnMgdGhpcyBtb2RpZmljYXRpb24gbWlnaHQgZGVwZW5kIG9uLiBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL3ZtYWxsb2MuY2AuIFRoaXMgaXMgbm9ybWFsbHkgY29tcGlsZWQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBPa2F5LCB0aGUgTWFrZWZpbGUuLi4geWVzLCBpdCBsb29rcyBsaWtlIGB2bWFsbG9jLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIHByZXR0eSBtdWNoIGFsd2F5cy4gU28sIG5vIG1ham9yIGRlcGVuZGVuY3kgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgzOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMTowNS42MDkyMTc2MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzYyMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTM5LVxcdFxcdFxcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxcXFxubW0vTWFrZWZpbGU6NDA6XFx0XFx0XFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXFxubW0vTWFrZWZpbGUtNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAxOjA1LjY3OTk4NjQ5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzA1NTU5Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zIFJlbGF0ZWQgdG8gVmlydHVhbCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCBob3cgdmFyaW91cyBrZXJuZWwgZmVhdHVyZXMgaW50ZXJhY3Qgd2l0aCBgdm1hbGxvYy5vYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpZiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgdGhlbiBgdm1hbGxvYy5vYCBnZXRzIGNvbXBpbGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gR2l2ZW4gdGhhdCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBvbiBwcmFjdGljYWxseSBldmVyeSBwbGF0Zm9ybSB0aGVzZSBkYXlzLCB0aGF0J3MgYWxtb3N0IGEgZ2l2ZW4uIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIHdoYXQgZWxzZSBpcyByZWxldmFudD8gSSBzZWUgdGhhdCBgdm1hbGxvY19kdW1wX29iamAgcmVxdWlyZXMgYm90aCBgQ09ORklHX1BSSU5US2AgKmFuZCogYENPTkZJR19NTVVgLiBNYWtlcyBzZW5zZTsgZHVtcCBmdW5jdGlvbmFsaXR5IG5lZWRzIHByaW50aW5nIGNhcGFiaWxpdGllcywgYW5kIHdlJ3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIG1lbW9yeS4gQWxyaWdodCwgSSBhbHNvIG5vdGljZSBgc2hvd19udW1hX2luZm9gIGRlcGVuZHMgb24gYENPTkZJR19OVU1BYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRpbWUgdG8gZGl2ZSBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUgZm9yIGBzaG93X251bWFfaW5mb2Agc3BlY2lmaWNhbGx5LCBwcm9iYWJseSB3aXRoaW4gYG1tL3ZtYWxsb2MuY2AsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBhbmQgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhvc2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU0NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToxNS4zODU1NDkyMjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTEyODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3dfbnVtYV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3ZtYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bWFsbG9jLmM9NTM5Mz1ib29sIHZtYWxsb2NfZHVtcF9vYmoodm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vdm1hbGxvYy5jLTU0MzQtICovXFxubW0vdm1hbGxvYy5jOjU0MzU6c3RhdGljIHZvaWQgc2hvd19udW1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgdm1fc3RydWN0ICp2LFxcbm1tL3ZtYWxsb2MuYy01NDM2LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgKmNvdW50ZXJzKVxcbi0tXFxubW0vdm1hbGxvYy5jPTU0NzA9c3RhdGljIGludCB2bWFsbG9jX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApXFxuLS1cXG5tbS92bWFsbG9jLmMtNTUzMi1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpXFxubW0vdm1hbGxvYy5jOjU1MzM6XFx0XFx0XFx0XFx0c2hvd19udW1hX2luZm8obSwgdiwgY291bnRlcnMpO1xcbm1tL3ZtYWxsb2MuYy01NTM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToxNS40NzM0Njc5MzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzM0MDUzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBGdW5jdGlvbnMgZm9yIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIHJlbGV2YW50IGZvciB0ZXN0aW5nLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE5VTUEuIEl0IHNlZW1zIGxpa2UgYENPTkZJR19OVU1BYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGVzdGluZyBgc2hvd19udW1hX2luZm9gLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4gdGhhdC5cblxuTGV0J3Mgc2VlLCB3aGF0IGVsc2UgaXMgcmVhZGlseSBhdmFpbGFibGU/IGB2bWFsbG9jX2R1bXBfb2JqYCBpcyBhbiBpbnRlcmVzdGluZyBjYW5kaWRhdGUsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgdGllZCB0byBgQ09ORklHX1BSSU5US2AsIHNvIHRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIG9yIHBlcmhhcHMgc29tZSBlYXNpbHkgY29uZmlndXJhYmxlIGNvdmVyYWdlLlxuXG5Ob3csIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAuLi4gQWgsIHllcywgdGhhdCdzIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYHZtYWxsb2MuY2AsIHNvIGl0J3MgYWx3YXlzIGF2YWlsYWJsZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGVzdGluZyBhIGNvcmUgZnVuY3Rpb24uXG5cblNvLCBsZXQncyBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbi4gV2UgaGF2ZTpcblxuKiAgIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgLSBBIGxpa2VseSBjYW5kaWRhdGUgZHVlIHRvIGl0cyB1bmNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLlxuKiAgIGB2bWFsbG9jX2R1bXBfb2JqYCAtIFBvdGVudGlhbCBmb3IgcHJpbnRrIGRlYnVnZ2luZyBhbmQgY292ZXJhZ2UuXG4qICAgYF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZmAgLSBIbW0uLi4gSXQncyB0aGUgbWFpbiB3b3JraG9yc2UgaW4gdGVybXMgb2YgYG5yX3BhZ2VzYCwgYW5kIEkgdGhvdWdodCBpdCB3YXMgc3RhdGljLi4uIFdhaXQsIGl0IGlzbid0ICpzdGF0aWMqPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuLi4gTm8sIGl0J3MgZGVmaW5pdGVseSBub3QgZXhwb3J0ZWQuIE9rYXksIHNvIGl0J3Mgbm90IGV4cG9ydGVkLCBidXQgaXQncyAqbm9uLXN0YXRpYyosIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gTWlnaHQgYmUgdHJpY2t5IHRvIHRlc3QgZGlyZWN0bHksIGJ1dCB3b3J0aCBsb29raW5nIGludG8gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0J3MgdXNlZCBpbnRlcm5hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToyOC4xNDY4NzY0NzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjM3OTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz00MDIwPXN0YXRpYyB2b2lkICpfX3ZtYWxsb2NfYXJlYV9ub2RlKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQwNjUtXFx0ICpcXG5tbS92bWFsbG9jLmM6NDA2NjpcXHQgKiBQbGVhc2Ugbm90ZSwgdGhlIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZigpIGZhbGxzLWJhY2tcXG5tbS92bWFsbG9jLmMtNDA2Ny1cXHQgKiB0byBvcmRlci0wIHBhZ2VzIGlmIGhpZ2gtb3JkZXIgYXR0ZW1wdCBpcyB1bnN1Y2Nlc3NmdWwuXFxuLS1cXG5tbS92bWFsbG9jLmM9NDEzNT1zdGF0aWMgZ2ZwX3Qgdm1hbGxvY19maXhfZmxhZ3MoZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS92bWFsbG9jLmMtNDE3OS0gKi9cXG5tbS92bWFsbG9jLmM6NDE4MDp2b2lkICpfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbm1tL3ZtYWxsb2MuYy00MTgxLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MzA4LSAqIFNlbWFudGljcyBvZiBAZ2ZwX21hc2sgKGluY2x1ZGluZyByZWNsYWltL3JldHJ5IG1vZGlmaWVycyBzdWNoIGFzXFxubW0vdm1hbGxvYy5jOjQzMDk6ICogX19HRlBfTk9GQUlMKSBhcmUgdGhlIHNhbWUgYXMgaW4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKCkuXFxubW0vdm1hbGxvYy5jLTQzMTAtICpcXG4tLVxcbm1tL3ZtYWxsb2MuYz00MzEzPXZvaWQgKl9fdm1hbGxvY19ub2RlX25vcHJvZih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtNDMxNS17XFxubW0vdm1hbGxvYy5jOjQzMTY6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBhbGlnbiwgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXFxubW0vdm1hbGxvYy5jLTQzMTctXFx0XFx0XFx0XFx0Z2ZwX21hc2ssIFBBR0VfS0VSTkVMLCAwLCBub2RlLCBjYWxsZXIpO1xcbi0tXFxubW0vdm1hbGxvYy5jPTQzNjk9dm9pZCAqdm1hbGxvY19odWdlX25vZGVfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlKVxcbi0tXFxubW0vdm1hbGxvYy5jLTQzNzItXFx0XFx0Z2ZwX21hc2sgPSB2bWFsbG9jX2ZpeF9mbGFncyhnZnBfbWFzayk7XFxubW0vdm1hbGxvYy5jOjQzNzM6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCAxLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG5tbS92bWFsbG9jLmMtNDM3NC1cXHRcXHRcXHRcXHRcXHQgICBnZnBfbWFzaywgUEFHRV9LRVJORUwsIFZNX0FMTE9XX0hVR0VfVk1BUCxcXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDA4PXZvaWQgKnZtYWxsb2NfdXNlcl9ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplKVxcbm1tL3ZtYWxsb2MuYy00NDA5LXtcXG5tbS92bWFsbG9jLmM6NDQxMDpcXHRyZXR1cm4gX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHNpemUsIFNITUxCQSwgIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbm1tL3ZtYWxsb2MuYy00NDExLVxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsXFxuLS1cXG5tbS92bWFsbG9jLmM9NDY1Mj12b2lkICp2bWFsbG9jXzMyX3VzZXJfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5tbS92bWFsbG9jLmMtNDY1My17XFxubW0vdm1hbGxvYy5jOjQ2NTQ6XFx0cmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZihzaXplLCBTSE1MQkEsICBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCxcXG5tbS92bWFsbG9jLmMtNDY1NS1cXHRcXHRcXHRcXHQgICAgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMToyOC41NzkyNjExOTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0MzM4MzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgKipcblxuSG1tLCBzbyBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBpc24ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gVGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzLCBpcyB0aGlzIGZ1bmN0aW9uIGV4cG9ydGVkIGluIGEgaGVhZGVyIGZpbGU/IFVuZGVyc3RhbmRpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSdzIGRlc2lnbiBhbmQgaG93IGl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCAob3IsIHBvdGVudGlhbGx5LCBtaXN1c2VkKS4gS25vd2luZyB3aGV0aGVyIGl0J3MgbWVhbnQgdG8gYmUgYW4gaW50ZXJuYWwgaGVscGVyLCBvciBwYXJ0IG9mIGEgbW9yZSBnZW5lcmFsIEFQSSwgaXMga2V5IHRvIGRpYWdub3Npbmcgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAxOjM2LjMyMjY0ODM5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjU5NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdm1hbGxvY19ub2RlX3JhbmdlX25vcHJvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0xNzE9ZXh0ZXJuIHZvaWQgKl9fdm1hbGxvY19ub3Byb2YodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMTczLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjE3NDpleHRlcm4gdm9pZCAqX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbixcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0xNzUtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMTc3LVxcdFxcdFxcdGNvbnN0IHZvaWQgKmNhbGxlcikgX19hbGxvY19zaXplKDEpO1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjE3ODojZGVmaW5lIF9fdm1hbGxvY19ub2RlX3JhbmdlKC4uLilcXHRhbGxvY19ob29rcyhfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTE3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6MDE6MzYuNTMyOTE0NzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxODM0MTg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3QgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gSSBzZWUgdGhlIGNvZGUgY2hhbmdlIGlzIGluIGBpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBsb29rcyBwcm9taXNpbmcuIEl0J3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBgdm1hbGxvY2AgZnVuY3Rpb25hbGl0eSwgbWFraW5nIGl0IGEgbmF0dXJhbCB0YXJnZXQsIGJ1dC4uLiBpcyBpdCAqdG9vKiBnZW5lcmljPyBJdCdzIHRoZSBob3QtcGF0aCwgY2FsbGVkIGZvciAqZXZlcnkqIGB2bWFsbG9jYC4gVGhhdCBtYWtlcyBpdCBsZXNzIHRhcmdldGVkIGZvciBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2guXG5cbkFoLCBidXQgdGhlIHBhdGNoIGl0c2VsZiBjaGFuZ2VzIGB1bnNpZ25lZCBpbnQgbnJfcGFnZXNgIHRvIGB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzYC4gVGhpcyBpcyAqY3J1Y2lhbCouIFRoaXMgbWVhbnMgdGhlIGNoYW5nZSBkaXJlY3RseSBhZmZlY3RzIGhvdyBsYXJnZSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZC4gR2l2ZW4gdGhpcywgZnV6emluZyBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgIGlzIGxvb2tpbmcgYmV0dGVyLiBJdCdzIGxlc3Mgb2YgYSBob3QgcGF0aCB0aGFuIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZV9ub3Byb2ZgLCBhbmQgaXQncyBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFRoYXQncyBpZGVhbC5cblxuYHZtYWxsb2NfZHVtcF9vYmpgIGlzIGFsc28gYSBnb29kIGNvbnRlbmRlciBmb3IgZnV6emluZy5cblxuTm93LCB3aGF0IGFib3V0IGB2ZnJlZV9hdG9taWNgPyBJdCdzIG5vdCBkaXJlY3RseSB0b3VjaGVkLCBidXQgYHZtX2FyZWFfZnJlZV9wYWdlc2AgaXMgY2FsbGVkIGJ5IGl0LCBhbmQgKnRoYXQqIGZ1bmN0aW9uIGlzLiBTbywgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgdm1fYXJlYV9mcmVlX3BhZ2VzYCAqaXMqIGluZGVlZCBjYWxsZWQgYnkgYHZmcmVlYC4gR290dGEgY292ZXIgYWxsIGJhc2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMTo0Mi41NTEyNjA0MzZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTEzNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX2FyZWFfZnJlZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTM0Njg9dm9pZCB2ZnJlZV9hdG9taWMoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNDg1LS8qXFxubW0vdm1hbGxvYy5jOjM0ODY6ICogdm1fYXJlYV9mcmVlX3BhZ2VzIC0gZnJlZSBhIHJhbmdlIG9mIHBhZ2VzIGZyb20gYSB2bWFsbG9jIGFsbG9jYXRpb25cXG5tbS92bWFsbG9jLmMtMzQ4Ny0gKiBAdm06IHRoZSB2bV9zdHJ1Y3QgY29udGFpbmluZyB0aGUgcGFnZXNcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNDk1LSAqL1xcbm1tL3ZtYWxsb2MuYzozNDk2OnN0YXRpYyB2b2lkIHZtX2FyZWFfZnJlZV9wYWdlcyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsXFxubW0vdm1hbGxvYy5jLTM0OTctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX2lkeClcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zNTI4PXZvaWQgdmZyZWUoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNTUzLVxcbm1tL3ZtYWxsb2MuYzozNTU0OlxcdHZtX2FyZWFfZnJlZV9wYWdlcyh2bSwgMCwgdm0tXFx1MDAzZW5yX3BhZ2VzKTtcXG5tbS92bWFsbG9jLmMtMzU1NS1cXHRrdmZyZWUodm0tXFx1MDAzZXBhZ2VzKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz00NDg4PXZvaWQgKnZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTQ1NzctXFxubW0vdm1hbGxvYy5jOjQ1Nzg6XFx0XFx0XFx0dm1fYXJlYV9mcmVlX3BhZ2VzKHZtLCBuZXdfbnJfcGFnZXMsIG9sZF9ucl9wYWdlcyk7XFxubW0vdm1hbGxvYy5jLTQ1NzktXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzowMTo0Mi42MjAxODAzNjFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzOTAwNTk0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB3ZSBoYW5kbGUgcGFnZSBjb3VudHMgaW4gYHZtYWxsb2NgIGFsbG9jYXRpb25zLCBtb3ZpbmcgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgLiBUaGlzIGlzIGEgYmlnIGRlYWw7IGl0J3MgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB0aGF0IGFkZHJlc3NlcyBwb3RlbnRpYWwgdHJ1bmNhdGlvbiBpc3N1ZXMgYW5kLCBjcnVjaWFsbHksIHVubG9ja3Mgc3VwcG9ydCBmb3Igdm1hbGxvYyBhbGxvY2F0aW9ucyBleGNlZWRpbmcgMTZUQi4gVGhpcyBpbXBhY3RzIGBtbS92bWFsbG9jLmNgIGRpcmVjdGx5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBkaXJlY3RseSB0b3VjaGVkIG9yIGNhbGwgdGhvc2UgdGhhdCBhcmUuIGB2ZnJlZWAgdWx0aW1hdGVseSB1c2VzIGB2bV9hcmVhX2ZyZWVfcGFnZXNgLCBzbyBgdmZyZWVgIGl0c2VsZiBpcyBhIGhvdC1wYXRoIHRvIHdhdGNoLlxuXG5NeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlc2UgZnVuY3Rpb25zIGFzIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmc6XG5cbiogICBgdnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZgXG4qICAgYHZtYWxsb2NfZHVtcF9vYmpgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNldCB0byB0ZXN0IGFsbCB0aGUgY29kZSBwYXRocy4gSXQgbG9va3MgbGlrZTpcblxuKiAgIGBDT05GSUdfTlVNQWAgaXMgbmVlZGVkIGZvciBgc2hvd19udW1hX2luZm9gLlxuKiAgIGBDT05GSUdfUFJJTlRLYCBpcyBuZWVkZWQgZm9yIGB2bWFsbG9jX2R1bXBfb2JqYC5cblxuSSBjb25maXJtZWQgdGhhdCBgdm1hbGxvY19kdW1wX29iamAgaXMgZGVmaW5lZCBpZiBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfUFJJTlRLYC5cblxuSSdtIGFsc28gbm90aW5nIHRoYXQgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGB2bWFsbG9jX2luZm9fc2hvd2AsIGBzaG93X251bWFfaW5mb2AsIGBzZXRfYXJlYV9kaXJlY3RfbWFwYCwgYHZtX3Jlc2V0X3Blcm1zYCwgYHZtX2FyZWFfZnJlZV9wYWdlc2AsIGB2bV9hcmVhX2FsbG9jX3BhZ2VzYCwgYW5kIGBfX3ZtYWxsb2NfYXJlYV9ub2RlYCwgYXJlIHN0YXRpYywgYnV0IEkgc2hvdWxkIGJlIGNhcmVmdWwgd2hlbiBsb29raW5nIGF0IGNhbGxpbmcgcmVsYXRpb25zaGlwcy5cblxuU28sIGJleW9uZCB0aGUgdHdvIGZ1bmN0aW9ucyBJJ3ZlIGFscmVhZHkgbGlzdGVkLCBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBhbmQgYHZmcmVlYCAoYW5kIGl0cyB2YXJpYW50cykgYXJlIGFsc28ga2V5LiBgX192bWFsbG9jX25vZGVfcmFuZ2Vfbm9wcm9mYCBjYWxscyBgX192bWFsbG9jX2FyZWFfbm9kZWAuIGB2ZnJlZWAgY2FsbHMgYHZtX2FyZWFfZnJlZV9wYWdlc2AuXG5cblRoZXJlZm9yZSwgSSdsbCByZWNvbW1lbmQgdGhlIGZvbGxvd2luZyBpbiBteSBhbmFseXNpczpcblxuKipGb2N1c1N5bWJvbHM6KipcblxuKiAgIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmBcbiogICBgdm1hbGxvY19kdW1wX29iamBcblxuKipFbmFibGVDb25maWdzOioqXG5cbiogICBgTlVNQWBcbiogICBgUFJJTlRLYFxuXG5JIGFsc28gdmVyaWZpZWQgdGhhdCBgUFJJTlRLYCBhbmQgYE5VTUFgIGFyZSBjb21tb25seSBlbmFibGVkIG9uIHg4NiwgYnV0IEkgc3RpbGwgbmVlZCB0byBiZSBhd2FyZSB0aGF0IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIHRoZXkgbWF5IG5vdCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjksIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjAxOjU0LjAxMDI0MzE0NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDY0OTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQVwiLFxuICAgIFwiUFJJTlRLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnJlYWxsb2Nfbm9kZV9hbGlnbl9ub3Byb2ZcIixcbiAgICBcInZtYWxsb2NfZHVtcF9vYmpcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSB0eXBlIG9mIGBucl9wYWdlc2AgaW4gYHN0cnVjdCB2bV9zdHJ1Y3RgIGZyb20gYHVuc2lnbmVkIGludGAgdG8gYHVuc2lnbmVkIGxvbmdgIHRvIHN1cHBvcnQgdm1hbGxvYyBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiAxNlRCIChvciBmaXggdHJ1bmNhdGlvbiBidWdzKS4gSXQgdXBkYXRlcyB2YXJpb3VzIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYCB0byB1c2UgYHVuc2lnbmVkIGxvbmdgIGZvciBwYWdlIGNvdW50cyBhbmQgaW5kaWNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZmAgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCB3aGljaCB3ZXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgcmVxdWlyZSBgTlVNQWAgYW5kIGBQUklOVEtgIHRvIHRlc3QgdGhlIG1vZGlmaWVkIGBzaG93X251bWFfaW5mb2AgYW5kIGB2bWFsbG9jX2R1bXBfb2JqYCBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCIsXG4gICAgXCJQUklOVEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2cmVhbGxvY19ub2RlX2FsaWduX25vcHJvZlwiLFxuICAgIFwidm1hbGxvY19kdW1wX29ialwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHR5cGUgb2YgYG5yX3BhZ2VzYCBpbiBgc3RydWN0IHZtX3N0cnVjdGAgZnJvbSBgdW5zaWduZWQgaW50YCB0byBgdW5zaWduZWQgbG9uZ2AgdG8gc3VwcG9ydCB2bWFsbG9jIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDE2VEIgKG9yIGZpeCB0cnVuY2F0aW9uIGJ1Z3MpLiBJdCB1cGRhdGVzIHZhcmlvdXMgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgIHRvIHVzZSBgdW5zaWduZWQgbG9uZ2AgZm9yIHBhZ2UgY291bnRzIGFuZCBpbmRpY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHZyZWFsbG9jX25vZGVfYWxpZ25fbm9wcm9mYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHdoaWNoIHdlcmUgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCByZXF1aXJlIGBOVU1BYCBhbmQgYFBSSU5US2AgdG8gdGVzdCB0aGUgbW9kaWZpZWQgYHNob3dfbnVtYV9pbmZvYCBhbmQgYHZtYWxsb2NfZHVtcF9vYmpgIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[1] Phase: Succeeded StartedAt: 2026-08-01 07:02:15 +0000 UTC FinishedAt: 2026-08-01 07:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 07:02:15 +0000 UTC FinishedAt: 2026-08-01 07:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2] Phase: Succeeded StartedAt: 2026-08-01 07:02:15 +0000 UTC FinishedAt: 2026-08-01 10:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 07:02:15 +0000 UTC FinishedAt: 2026-08-01 10:58:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 07:02:15 +0000 UTC FinishedAt: 2026-08-01 07:02:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 07:02:15 +0000 UTC FinishedAt: 2026-08-01 07:02:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5556m/series-workflow5556m-convert-artifact-1212318173/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 07:02:26 +0000 UTC FinishedAt: 2026-08-01 07:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 07:02:26 +0000 UTC FinishedAt: 2026-08-01 07:27:11 +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:*6a60697c-9a35-4f78-a41a-9c14ec077e2f,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-workflow5556m/series-workflow5556m-convert-artifact-1212318173/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": "58a3ef74-7460-42e8-bba9-b9e371a98c79", "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-workflow5556m/series-workflow5556m-build-action-1422218515/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 07:02:26 +0000 UTC FinishedAt: 2026-08-01 07:27:01 +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:*6a60697c-9a35-4f78-a41a-9c14ec077e2f,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-workflow5556m/series-workflow5556m-convert-artifact-1212318173/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": "58a3ef74-7460-42e8-bba9-b9e371a98c79", "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-workflow5556m/series-workflow5556m-build-action-1422218515/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 07:27:11 +0000 UTC FinishedAt: 2026-08-01 07:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 07:27:11 +0000 UTC FinishedAt: 2026-08-01 07:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 07:27:11 +0000 UTC FinishedAt: 2026-08-01 07:27:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 07:27:11 +0000 UTC FinishedAt: 2026-08-01 07:27:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5556m/series-workflow5556m-convert-artifact-2726876600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 07:27:34 +0000 UTC FinishedAt: 2026-08-01 07:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 07:27:35 +0000 UTC FinishedAt: 2026-08-01 07:29:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*58a3ef74-7460-42e8-bba9-b9e371a98c79,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-workflow5556m/series-workflow5556m-build-action-1422218515/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-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 07:29:33 +0000 UTC FinishedAt: 2026-08-01 07:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 07:29:33 +0000 UTC FinishedAt: 2026-08-01 07:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 07:29:33 +0000 UTC FinishedAt: 2026-08-01 07:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 07:29:33 +0000 UTC FinishedAt: 2026-08-01 07:51:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6a60697c-9a35-4f78-a41a-9c14ec077e2f,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-workflow5556m/series-workflow5556m-convert-artifact-2726876600/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": "716c3a86-00e8-4ce2-8498-0a626f027703", "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-workflow5556m/series-workflow5556m-build-action-1352461988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 07:29:33 +0000 UTC FinishedAt: 2026-08-01 07:51:11 +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:*6a60697c-9a35-4f78-a41a-9c14ec077e2f,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-workflow5556m/series-workflow5556m-convert-artifact-2726876600/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": "716c3a86-00e8-4ce2-8498-0a626f027703", "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-workflow5556m/series-workflow5556m-build-action-1352461988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 07:51:22 +0000 UTC FinishedAt: 2026-08-01 07:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 07:51:22 +0000 UTC FinishedAt: 2026-08-01 07:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 07:51:22 +0000 UTC FinishedAt: 2026-08-01 07:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 07:51:22 +0000 UTC FinishedAt: 2026-08-01 07:53:05 +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:*716c3a86-00e8-4ce2-8498-0a626f027703,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-workflow5556m/series-workflow5556m-build-action-1352461988/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-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 07:53:15 +0000 UTC FinishedAt: 2026-08-01 10:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 07:53:15 +0000 UTC FinishedAt: 2026-08-01 10:58:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},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:*58a3ef74-7460-42e8-bba9-b9e371a98c79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*716c3a86-00e8-4ce2-8498-0a626f027703,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-workflow5556m/series-workflow5556m-build-action-1422218515/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-workflow5556m/series-workflow5556m-build-action-1352461988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 07:53:15 +0000 UTC FinishedAt: 2026-08-01 07:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 07:53:15 +0000 UTC FinishedAt: 2026-08-01 07:53:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},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-workflow5556m/series-workflow5556m-convert-artifact-234213649/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 07:53:15 +0000 UTC FinishedAt: 2026-08-01 07:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 07:53:15 +0000 UTC FinishedAt: 2026-08-01 07:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 07:53:15 +0000 UTC FinishedAt: 2026-08-01 07:53:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 07:53:50 +0000 UTC FinishedAt: 2026-08-01 10:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5556m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vrealloc_node_align_noprof","vmalloc_dump_obj"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a8efbe7d22d1d32bb8a5fab8c132bd7f31864735","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA","PRINTK"],"series_id":"bbd6e812-b789-4a02-a6f8-b4472e51b3ee","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 07:53:50 +0000 UTC FinishedAt: 2026-08-01 10:58:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*58a3ef74-7460-42e8-bba9-b9e371a98c79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*716c3a86-00e8-4ce2-8498-0a626f027703,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-workflow5556m/series-workflow5556m-build-action-1422218515/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-workflow5556m/series-workflow5556m-build-action-1352461988/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-workflow5556m/series-workflow5556m-convert-artifact-234213649/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,}