Name: series-workflow9qxb9 Phase: Succeeded StartedAt: 2026-09-01 02:27:35 +0000 UTC FinishedAt: 2026-09-01 04:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[0] Phase: Succeeded StartedAt: 2026-09-01 02:27:35 +0000 UTC FinishedAt: 2026-09-01 02:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 02:27:35 +0000 UTC FinishedAt: 2026-09-01 02:30:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_CRYPTO", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_CRYPTO", "DEBUG_INFO_BTF" ], "series_id": "d559e7d9-d78e-4d7f-b037-00d9815ed5a0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_crypto_ctx_create", "bpf_crypto_ctx_release", "bpf_crypto_ctx_acquire", "bpf_crypto_ctx_release_dtor", "bpf_crypto_decrypt", "bpf_crypto_encrypt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9DUllQVE8mIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY3J5cHRvX2N0eF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvciYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2RlY3J5cHQmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19lbmNyeXB0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXG5cbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSBjb250ZXh0IGBzdHJ1Y3QgYnBmX2NyeXB0b19jdHhgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgZW51bSBicGZfY3J5cHRvX2FsZ29faWRgIGFuZCB0aGUgYGFlc19rZXlgIHVuaW9uKSBhcmUgemVyby1pbml0aWFsaXplZC4gS2V5IHNldHVwIGlzIGhhbmRsZWQgYnkgYGFlc19wcmVwYXJla2V5KClgLiBDbGVhbnVwIGlzIGhhbmRsZWQgdmlhIGBrZnJlZV9zZW5zaXRpdmUoKWAuXG4yLiBCdWZmZXJzIFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXHUwMDNlPSBzcmNfbGVuYCkuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZy9jb250cm9sIGZsb3cuXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgY3J5cHRvIHN1cHBvcnQgYnkgcmVtb3ZpbmcgdGhlIGR5bmFtaWMgY3J5cHRvIHR5cGUgcmVnaXN0cmF0aW9uIGludGVyZmFjZSBhbmQgaW1wbGVtZW50aW5nIGRpcmVjdCBBRVMtQ0JDIGFuZCBBRVMtRUNCIGxpYnJhcnkgaW50ZWdyYXRpb24uIEl0IGludHJvZHVjZXMgQ09ORklHX0JQRl9DUllQVE8gYW5kIG1vZGlmaWVzIHRoZSBCUEYgY3J5cHRvIGtmdW5jIGhhbmRsZXJzIChjb250ZXh0IGNyZWF0aW9uLCBrZXkgc2V0dXAsIGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCksIG1ha2luZyB0aGVzZSBmdW5jdGlvbnMgaW1wb3J0YW50IHRhcmdldHMgZm9yIEJQRiBwcm9ncmFtIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5N2I0MDkyMjNlMjUxZTBhMjBiODg5YWI3YTc2YjU5NzgzMjhmY2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjoyOToyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYTE5ZGE3NGQwMGM5Li4xNmYxMzI3MGNlMWY5IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtNDkzNiw4ICYjNDM7NDkzNiw2IEBAIEJQRiBbQ1JZUFRPXVxuIE06XHRWYWRpbSBGZWRvcmVua28gXHUwMDNjdmFkaW0uZmVkb3JlbmtvQGxpbnV4LmRldlx1MDAzZVxuIEw6XHRicGZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbi1GOlx0Y3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY1xuLUY6XHRpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaFxuIEY6XHRrZXJuZWwvYnBmL2NyeXB0by5jXG4gXG4gQlBGIFtET0NVTUVOVEFUSU9OXSAoUmVsYXRlZCB0byBTdGFuZGFyZGl6YXRpb24pXG5kaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlXG5pbmRleCA4Mzg2ZDU1YTk3NTVlLi4zM2JiNWFkNTk1ZThmIDEwMDY0NFxuLS0tIGEvY3J5cHRvL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9jcnlwdG8vTWFrZWZpbGVcbkBAIC0yMiw5ICYjNDM7MjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gbHNrY2lwaGVyLm9cbiBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gc2tjaXBoZXIub1xuIFxuIG9iai0kKENPTkZJR19DUllQVE9fU0tDSVBIRVIyKSAmIzQzOz0gY3J5cHRvX3NrY2lwaGVyLm9cbi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSlcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgJiM0Mzs9IGJwZl9jcnlwdG9fc2tjaXBoZXIub1xuLWVuZGlmXG4gXG4gb2JqLSQoQ09ORklHX0NSWVBUT19TRVFJVikgJiM0Mzs9IHNlcWl2Lm9cbiBvYmotJChDT05GSUdfQ1JZUFRPX0VDSEFJTklWKSAmIzQzOz0gZWNoYWluaXYub1xuZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDgzICYjNDM7MCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhLCBJbmMgKi9cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NjcnlwdG8vc2tjaXBoZXIuaFx1MDAzZVxuLVxuLXN0YXRpYyB2b2lkICpicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnbylcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2FsbG9jX2xza2NpcGhlcihhbGdvLCAwLCAwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0odm9pZCAqdGZtKVxuLXtcbi1cdGNyeXB0b19mcmVlX2xza2NpcGhlcih0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvKGNvbnN0IGNoYXIgKmFsZ28pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19oYXNfc2tjaXBoZXIoYWxnbywgQ1JZUFRPX0FMR19UWVBFX0xTS0NJUEhFUiwgQ1JZUFRPX0FMR19UWVBFX01BU0spO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3NldGtleSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pO1xuLX1cbi1cbi1zdGF0aWMgdTMyIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh2b2lkICp0Zm0pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplKHZvaWQgKnRmbSlcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodGZtKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodm9pZCAqdGZtKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSBicGZfY3J5cHRvX2xza2NpcGhlcl90eXBlID0ge1xuLVx0LmFsbG9jX3RmbVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0sXG4tXHQuZnJlZV90Zm1cdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0sXG4tXHQuaGFzX2FsZ29cdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28sXG4tXHQuc2V0a2V5XHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5LFxuLVx0LmVuY3J5cHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCxcbi1cdC5kZWNyeXB0XHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQsXG4tXHQuaXZzaXplXHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplLFxuLVx0LnN0YXRlc2l6ZVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUsXG4tXHQuZ2V0X2ZsYWdzXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyxcbi1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLVx0Lm5hbWVcdFx0PSBcJiMzNDtza2NpcGhlclwmIzM0Oyxcbi19O1xuLVxuLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKVxuLXtcbi1cdHJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZClcbi17XG4tXHRpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tXHRXQVJOX09OX09OQ0UoZXJyKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTtcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xuLU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1N5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRlwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBhNDFlNzFkNGUyZDlmLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsMjQgJiM0MzswLDAgQEBcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuLSNpZm5kZWYgX0JQRl9DUllQVE9fSFxuLSNkZWZpbmUgX0JQRl9DUllQVE9fSFxuLVxuLXN0cnVjdCBicGZfY3J5cHRvX3R5cGUge1xuLVx0dm9pZCAqKCphbGxvY190Zm0pKGNvbnN0IGNoYXIgKmFsZ28pO1xuLVx0dm9pZCAoKmZyZWVfdGZtKSh2b2lkICp0Zm0pO1xuLVx0aW50ICgqaGFzX2FsZ28pKGNvbnN0IGNoYXIgKmFsZ28pO1xuLVx0aW50ICgqc2V0a2V5KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pO1xuLVx0aW50ICgqc2V0YXV0aHNpemUpKHZvaWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKTtcbi1cdGludCAoKmVuY3J5cHQpKHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTtcbi1cdGludCAoKmRlY3J5cHQpKHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTtcbi1cdHVuc2lnbmVkIGludCAoKml2c2l6ZSkodm9pZCAqdGZtKTtcbi1cdHVuc2lnbmVkIGludCAoKnN0YXRlc2l6ZSkodm9pZCAqdGZtKTtcbi1cdHUzMiAoKmdldF9mbGFncykodm9pZCAqdGZtKTtcbi1cdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuLVx0Y2hhciBuYW1lWzE0XTtcbi19O1xuLVxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSk7XG4taW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xuLVxuLSNlbmRpZiAvKiBfQlBGX0NSWVBUT19IICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXG5pbmRleCBlYjNkZTM1NzM0ZjA5Li44MjI1OTliNDJiZTJlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL0tjb25maWdcbkBAIC04Nyw2ICYjNDM7ODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiBcbiYjNDM7Y29uZmlnIEJQRl9DUllQVE9cbiYjNDM7XHRkZWZfYm9vbCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiM0MztcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNcbiYjNDM7XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfRUNCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgUHJvdmlkZSB0aGUga2Z1bmNzIG5lZWRlZCBmb3IgQlBGIHByb2dyYW1zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHRcbiYjNDM7XHQgIGRhdGEuIFRoZSBzdXBwb3J0ZWQgYWxnb3JpdGhtcyBhcmUgQUVTLUNCQyBhbmQgQUVTLUVDQi5cbiYjNDM7XG4gc291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gXG4gY29uZmlnIEJQRl9MU01cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL01ha2VmaWxlIGIva2VybmVsL2JwZi9NYWtlZmlsZVxuaW5kZXggOTAyNTVkODBlNWJlNi4uYWIyZTVkMjc4MmU2ZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvTWFrZWZpbGVcbkBAIC01NSw5ICYjNDM7NTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAjIHNlbWFudGljcyB3aXRoaW4gcGFob2xlIGFyZSByZXZpc2l0ZWQgYWNjb3JkaW5nbHkuXG4gb2JqLSR7Q09ORklHX0JQRl9MU019ICYjNDM7PSBicGZfbHNtX3Byb3RvLm8gYnBmX2xzbS5vXG4gZW5kaWZcbi1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG4tb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbi1lbmRpZlxuJiM0MztvYmotJChDT05GSUdfQlBGX0NSWVBUTykgJiM0Mzs9IGNyeXB0by5vXG4gb2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbiBcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY3J5cHRvLmMgYi9rZXJuZWwvYnBmL2NyeXB0by5jXG5pbmRleCA1MWY4OWNlY2VmYjRkLi44Y2RjMTZmOWIzNzRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jcnlwdG8uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jcnlwdG8uY1xuQEAgLTEsMTkgJiM0MzsxLDEzIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhLCBJbmMgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9jcnlwdG8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9tZW1fYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NjcnlwdG8vc2tjaXBoZXIuaFx1MDAzZVxuLVxuLXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCB7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLX07XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtY2JjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2Flcy1lY2IuaFx1MDAzZVxuIFxuIC8qIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3QgKi9cbiAvKipcbkBAIC0zNiw5NCAmIzQzOzMwLDUzIEBAIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7XG4gXHR1MzIgYXV0aHNpemU7XG4gfTtcbiBcbi1zdGF0aWMgTElTVF9IRUFEKGJwZl9jcnlwdG9fdHlwZXMpO1xuLXN0YXRpYyBERUNMQVJFX1JXU0VNKGJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbiYjNDM7ZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xuJiM0MztcdEJQRl9BTEdPX0FFU19DQkMsXG4mIzQzO1x0QlBGX0FMR09fQUVTX0VDQixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuJiM0MztcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcbiYjNDM7XHRjb25zdCBjaGFyICphbGdvX25hbWU7XG4mIzQzO1x0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbiYjNDM7fSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtza2NpcGhlclwmIzM0OywgXCYjMzQ7Y2JjKGFlcylcJiMzNDssIEJQRl9BTEdPX0FFU19DQkMgfSxcbiYjNDM7XHR7IFwmIzM0O3NrY2lwaGVyXCYjMzQ7LCBcJiMzNDtlY2IoYWVzKVwmIzM0OywgQlBGX0FMR09fQUVTX0VDQiB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0IGVudW0gYnBmX2NyeXB0b19hbGdvX2lkICppZF9yZXQpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXHUwMDNldHlwZSxcbiYjNDM7XHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNldHlwZSkpID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4mIzQzO1x0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZWFsZ28pKSA9PSAwKSB7XG4mIzQzO1x0XHRcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiBcbiAvKipcbiAgKiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggLSByZWZjb3VudGVkIEJQRiBjcnlwdG8gY29udGV4dCBzdHJ1Y3R1cmVcbi0gKiBAdHlwZTpcdFRoZSBwb2ludGVyIHRvIGJwZiBjcnlwdG8gdHlwZVxuLSAqIEB0Zm06XHRUaGUgcG9pbnRlciB0byBpbnN0YW5jZSBvZiBjcnlwdG8gQVBJIHN0cnVjdC5cbi0gKiBAc2l2X2xlbjogICAgU2l6ZSBvZiBJViBhbmQgc3RhdGUgc3RvcmFnZSBmb3IgY2lwaGVyXG4mIzQzOyAqIEBhbGdvOlx0VGhlIGNyeXB0byBhbGdvcml0aG0gSURcbiYjNDM7ICogQGtleTpcdFRoZSBjcnlwdG8ga2V5XG4gICogQHJjdTpcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cbiAgKiBAdXNhZ2U6XHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXG4gICpcdFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXG4gICpcdFx0UkNVIHNhZmV0eS5cbiAgKi9cbiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHZvaWQgKnRmbTtcbi1cdHUzMiBzaXZfbGVuO1xuJiM0MztcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IGFlc19rZXkgYWVzO1xuJiM0MztcdH0ga2V5O1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdHJlZmNvdW50X3QgdXNhZ2U7XG4gfTtcbiBcbi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXG4te1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVx0aW50IGVyciA9IC1FQlVTWTtcbi1cbi1cdGRvd25fd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XG4tXHRcdGlmICghc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCB0eXBlLVx1MDAzZW5hbWUpKVxuLVx0XHRcdGdvdG8gdW5sb2NrO1xuLVx0fVxuLVxuLVx0bm9kZSA9IGttYWxsb2Nfb2JqKCpub2RlKTtcbi1cdGVyciA9IC1FTk9NRU07XG4tXHRpZiAoIW5vZGUpXG4tXHRcdGdvdG8gdW5sb2NrO1xuLVxuLVx0bm9kZS1cdTAwM2V0eXBlID0gdHlwZTtcbi1cdGxpc3RfYWRkKFx1MDAyNm5vZGUtXHUwMDNlbGlzdCwgXHUwMDI2YnBmX2NyeXB0b190eXBlcyk7XG4tXHRlcnIgPSAwO1xuLVxuLXVubG9jazpcbi1cdHVwX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7XG4tXG4taW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXG4te1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVx0aW50IGVyciA9IC1FTk9FTlQ7XG4tXG4tXHRkb3duX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2YnBmX2NyeXB0b190eXBlcywgbGlzdCkge1xuLVx0XHRpZiAoc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCB0eXBlLVx1MDAzZW5hbWUpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuLVx0XHRrZnJlZShub2RlKTtcbi1cdFx0ZXJyID0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHR1cF93cml0ZShcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZSk7XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKmJwZl9jcnlwdG9fZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcbi17XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlID0gRVJSX1BUUigtRU5PRU5UKTtcbi1cdHN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTtcbi1cbi1cdGRvd25fcmVhZChcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcbi1cdFx0aWYgKHN0cmNtcChub2RlLVx1MDAzZXR5cGUtXHUwMDNlbmFtZSwgbmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh0cnlfbW9kdWxlX2dldChub2RlLVx1MDAzZXR5cGUtXHUwMDNlb3duZXIpKVxuLVx0XHRcdHR5cGUgPSBub2RlLVx1MDAzZXR5cGU7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVx0dXBfcmVhZChcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXG4tXHRyZXR1cm4gdHlwZTtcbi19XG4tXG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuIFxuIC8qKlxuQEAgLTE0Niw3ICYjNDM7OTksNiBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxuIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXG4gXHRcdCAgICAgIGludCAqZXJyKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGU7XG4gXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcbiBcbiBcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cdTAwM2VyZXNlcnZlZFswXSB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcbkBAIC0xNTUsNjkgJiM0MzsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHR0eXBlID0gYnBmX2NyeXB0b19nZXRfdHlwZShwYXJhbXMtXHUwMDNldHlwZSk7XG4tXHRpZiAoSVNfRVJSKHR5cGUpKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKHR5cGUpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGlmICghdHlwZS1cdTAwM2VoYXNfYWxnbyhwYXJhbXMtXHUwMDNlYWxnbykpIHtcbi1cdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLVx0fVxuLVxuLVx0aWYgKCEhcGFyYW1zLVx1MDAzZWF1dGhzaXplIF4gISF0eXBlLVx1MDAzZXNldGF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbi1cdGlmICghcGFyYW1zLVx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihwYXJhbXMtXHUwMDNla2V5KSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbiBcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0KmVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2V0eXBlID0gdHlwZTtcbi1cdGN0eC1cdTAwM2V0Zm0gPSB0eXBlLVx1MDAzZWFsbG9jX3RmbShwYXJhbXMtXHUwMDNlYWxnbyk7XG4tXHRpZiAoSVNfRVJSKGN0eC1cdTAwM2V0Zm0pKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKGN0eC1cdTAwM2V0Zm0pO1xuLVx0XHRnb3RvIGVycl9mcmVlX2N0eDtcbiYjNDM7XHRpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgXHUwMDI2Y3R4LVx1MDAzZWFsZ28pKSB7XG4mIzQzO1x0XHQqZXJyID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2VhdXRoc2l6ZSkge1xuLVx0XHQqZXJyID0gdHlwZS1cdTAwM2VzZXRhdXRoc2l6ZShjdHgtXHUwMDNldGZtLCBwYXJhbXMtXHUwMDNlYXV0aHNpemUpO1xuLVx0XHRpZiAoKmVycilcbi1cdFx0XHRnb3RvIGVycl9mcmVlX3RmbTtcbiYjNDM7XHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuJiM0MztcdGNhc2UgQlBGX0FMR09fQUVTX0VDQjpcbiYjNDM7XHRcdGlmIChwYXJhbXMtXHUwMDNlYXV0aHNpemUpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0KmVyciA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzLCBwYXJhbXMtXHUwMDNla2V5LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgcGFyYW1zLVx1MDAzZWtleV9sZW4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFdBUk5fT04oMSk7XG4mIzQzO1x0XHQqZXJyID0gLUVOT0VOVDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0KmVyciA9IHR5cGUtXHUwMDNlc2V0a2V5KGN0eC1cdTAwM2V0Zm0sIHBhcmFtcy1cdTAwM2VrZXksIHBhcmFtcy1cdTAwM2VrZXlfbGVuKTtcbi1cdGlmICgqZXJyKVxuLVx0XHRnb3RvIGVycl9mcmVlX3RmbTtcbi1cbi1cdGlmICh0eXBlLVx1MDAzZWdldF9mbGFncyhjdHgtXHUwMDNldGZtKSBcdTAwMjYgQ1JZUFRPX1RGTV9ORUVEX0tFWSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfZnJlZV90Zm07XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoKmVycikge1xuJiM0MztcdFx0a2ZyZWVfc2Vuc2l0aXZlKGN0eCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VzaXZfbGVuID0gdHlwZS1cdTAwM2VpdnNpemUoY3R4LVx1MDAzZXRmbSkgJiM0MzsgdHlwZS1cdTAwM2VzdGF0ZXNpemUoY3R4LVx1MDAzZXRmbSk7XG4tXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2Y3R4LVx1MDAzZXVzYWdlLCAxKTtcbi1cbiBcdHJldHVybiBjdHg7XG4tXG4tZXJyX2ZyZWVfdGZtOlxuLVx0dHlwZS1cdTAwM2VmcmVlX3RmbShjdHgtXHUwMDNldGZtKTtcbi1lcnJfZnJlZV9jdHg6XG4tXHRrZnJlZShjdHgpO1xuLWVycl9tb2R1bGVfcHV0OlxuLVx0bW9kdWxlX3B1dCh0eXBlLVx1MDAzZW93bmVyKTtcbi1cbi1cdHJldHVybiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5AQCAtMjI1LDkgJiM0MzsxNDgsNyBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcbiBcbiBcdGN0eCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgsIHJjdSk7XG4tXHRjdHgtXHUwMDNldHlwZS1cdTAwM2VmcmVlX3RmbShjdHgtXHUwMDNldGZtKTtcbi1cdG1vZHVsZV9wdXQoY3R4LVx1MDAzZXR5cGUtXHUwMDNlb3duZXIpO1xuLVx0a2ZyZWUoY3R4KTtcbiYjNDM7XHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3LDI3ICYjNDM7MTg4LDUzIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcbiB9XG4gQ0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpO1xuIFxuJiM0MztzdGF0aWMgaW50IGJwZl9hZXNfY2JjX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbiYjNDM7XHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcbiYjNDM7e1xuJiM0MztcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gXHUwMDNjIHNyY19sZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoZGVjcnlwdClcbiYjNDM7XHRcdGFlc19jYmNfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRhZXNfY2JjX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxuJiM0MztcdFx0XHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGl2X2xlbiAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKGRlY3J5cHQpXG4mIzQzO1x0XHRhZXNfZWNiX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRhZXNfZWNiX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0LFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXYsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdixcbiBcdFx0XHQgICAgYm9vbCBkZWNyeXB0KVxuIHtcbi1cdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBzaXZfbGVuO1xuJiM0MztcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gXHRjb25zdCB1OCAqcHNyYztcbiBcdHU4ICpwZHN0LCAqcGl2O1xuLVx0aW50IGVycjtcbiBcbiBcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwO1xuJiM0MztcdGl2X2xlbiA9IGl2ID8gX19icGZfZHlucHRyX3NpemUoaXYpIDogMDtcbiBcdHNyY19sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShzcmMpO1xuIFx0ZHN0X2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKGRzdCk7XG4tXHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4gfHwgc3JjX2xlbiBcdTAwM2UgZHN0X2xlbilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoc2l2X2xlbiAhPSBjdHgtXHUwMDNlc2l2X2xlbilcbiYjNDM7XHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cHNyYyA9IF9fYnBmX2R5bnB0cl9kYXRhKHNyYywgc3JjX2xlbik7XG5AQCAtMjk3LDE0ICYjNDM7MjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdGlmICghcGRzdClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwaXYgPSBzaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoc2l2LCBzaXZfbGVuKSA6IE5VTEw7XG4tXHRpZiAoc2l2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbiYjNDM7XHRwaXYgPSBpdl9sZW4gPyBfX2JwZl9keW5wdHJfZGF0YV9ydyhpdiwgaXZfbGVuKSA6IE5VTEw7XG4mIzQzO1x0aWYgKGl2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRlcnIgPSBkZWNyeXB0ID8gY3R4LVx1MDAzZXR5cGUtXHUwMDNlZGVjcnlwdChjdHgtXHUwMDNldGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpXG4tXHRcdCAgICAgIDogY3R4LVx1MDAzZXR5cGUtXHUwMDNlZW5jcnlwdChjdHgtXHUwMDNldGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpO1xuLVxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuJiM0MztcdFx0cmV0dXJuIGJwZl9hZXNfY2JjX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdixcbiYjNDM7XHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4mIzQzO1x0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuJiM0MztcdFx0cmV0dXJuIGJwZl9hZXNfZWNiX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdixcbiYjNDM7XHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMzEyLDIwICYjNDM7MjY1LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGVuY3J5cHRlZCBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBkc3Q6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuLSAqIEBzaXZfX251bGxhYmxlOlx0YnBmX2R5bnB0ciB0byBJViBkYXRhIGFuZCBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgZGVjcnlwdG9yLiBNYXkgYmUgTlVMTC5cbiYjNDM7ICogQGl2X19udWxsYWJsZTpcdGJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuXG4gICpcbiAgKiBEZWNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNpdl9fbnVsbGFibGUpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcbiBcbi1cdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBzaXZfa2VybiwgdHJ1ZSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIHRydWUpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzMsMjAgJiM0MzsyODYsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuJiM0MzsgKiBAaXZfX251bGxhYmxlOlx0YnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC5cbiAgKlxuICAqIEVuY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC5cbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19lbmNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYyxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkc3QsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc2l2X19udWxsYWJsZSlcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3Rfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZHN0O1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNpdl9fbnVsbGFibGU7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIGZhbHNlKTtcbiB9XG4gXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfQ1JZUFRPJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19kZWNyeXB0JiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fZW5jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTdiNDA5MjIzZTI1MWUwYTIwYjg4OWFiN2E3NmI1OTc4MzI4ZmNlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6Mjk6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDNhMTlkYTc0ZDAwYzkuLjE2ZjEzMjcwY2UxZjkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC00OTM2LDggJiM0Mzs0OTM2LDYgQEAgQlBGIFtDUllQVE9dCiBNOglWYWRpbSBGZWRvcmVua28gJmx0O3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXYmZ3Q7CiBMOglicGZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GOgljcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jCi1GOglpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaAogRjoJa2VybmVsL2JwZi9jcnlwdG8uYwogCiBCUEYgW0RPQ1VNRU5UQVRJT05dIChSZWxhdGVkIHRvIFN0YW5kYXJkaXphdGlvbikKZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCA4Mzg2ZDU1YTk3NTVlLi4zM2JiNWFkNTk1ZThmIDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvY3J5cHRvL01ha2VmaWxlCkBAIC0yMiw5ICYjNDM7MjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gbHNrY2lwaGVyLm8KIGNyeXB0b19za2NpcGhlci15ICYjNDM7PSBza2NpcGhlci5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fU0tDSVBIRVIyKSAmIzQzOz0gY3J5cHRvX3NrY2lwaGVyLm8KLWlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KQotb2JqLSQoQ09ORklHX0NSWVBUT19TS0NJUEhFUjIpICYjNDM7PSBicGZfY3J5cHRvX3NrY2lwaGVyLm8KLWVuZGlmCiAKIG9iai0kKENPTkZJR19DUllQVE9fU0VRSVYpICYjNDM7PSBzZXFpdi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0VDSEFJTklWKSAmIzQzOz0gZWNoYWluaXYubwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYyBiL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDAKLS0tIGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDgzICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovCi0jaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9icGZfY3J5cHRvLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7Y3J5cHRvL3NrY2lwaGVyLmgmZ3Q7Ci0KLXN0YXRpYyB2b2lkICpicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnbykKLXsKLQlyZXR1cm4gY3J5cHRvX2FsbG9jX2xza2NpcGhlcihhbGdvLCAwLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0odm9pZCAqdGZtKQotewotCWNyeXB0b19mcmVlX2xza2NpcGhlcih0Zm0pOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvKGNvbnN0IGNoYXIgKmFsZ28pCi17Ci0JcmV0dXJuIGNyeXB0b19oYXNfc2tjaXBoZXIoYWxnbywgQ1JZUFRPX0FMR19UWVBFX0xTS0NJUEhFUiwgQ1JZUFRPX0FMR19UWVBFX01BU0spOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3NldGtleSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCi17Ci0JcmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pOwotfQotCi1zdGF0aWMgdTMyIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh2b2lkICp0Zm0pCi17Ci0JcmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHRmbSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplKHZvaWQgKnRmbSkKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodGZtKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodm9pZCAqdGZtKQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh0Zm0pOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LAotCQkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LAotCQkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSBicGZfY3J5cHRvX2xza2NpcGhlcl90eXBlID0gewotCS5hbGxvY190Zm0JPSBicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0sCi0JLmZyZWVfdGZtCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0sCi0JLmhhc19hbGdvCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28sCi0JLnNldGtleQkJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksCi0JLmVuY3J5cHQJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LAotCS5kZWNyeXB0CT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCwKLQkuaXZzaXplCQk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSwKLQkuc3RhdGVzaXplCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplLAotCS5nZXRfZmxhZ3MJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3MsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICYjMzQ7c2tjaXBoZXImIzM0OywKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKQotewotCXJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoJmFtcDticGZfY3J5cHRvX2xza2NpcGhlcl90eXBlKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGJwZl9jcnlwdG9fc2tjaXBoZXJfZXhpdCh2b2lkKQotewotCWludCBlcnIgPSBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZSgmYW1wO2JwZl9jcnlwdG9fbHNrY2lwaGVyX3R5cGUpOwotCVdBUk5fT05fT05DRShlcnIpOwotfQotCi1tb2R1bGVfaW5pdChicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQpOwotbW9kdWxlX2V4aXQoYnBmX2NyeXB0b19za2NpcGhlcl9leGl0KTsKLU1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U3ltbWV0cmljIGtleSBjaXBoZXIgc3VwcG9ydCBmb3IgQlBGJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQxZTcxZDRlMmQ5Zi4uMDAwMDAwMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDI0ICYjNDM7MCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCi0jaWZuZGVmIF9CUEZfQ1JZUFRPX0gKLSNkZWZpbmUgX0JQRl9DUllQVE9fSAotCi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlIHsKLQl2b2lkICooKmFsbG9jX3RmbSkoY29uc3QgY2hhciAqYWxnbyk7Ci0Jdm9pZCAoKmZyZWVfdGZtKSh2b2lkICp0Zm0pOwotCWludCAoKmhhc19hbGdvKShjb25zdCBjaGFyICphbGdvKTsKLQlpbnQgKCpzZXRrZXkpKHZvaWQgKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbik7Ci0JaW50ICgqc2V0YXV0aHNpemUpKHZvaWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKTsKLQlpbnQgKCplbmNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7Ci0JaW50ICgqZGVjcnlwdCkodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOwotCXVuc2lnbmVkIGludCAoKml2c2l6ZSkodm9pZCAqdGZtKTsKLQl1bnNpZ25lZCBpbnQgKCpzdGF0ZXNpemUpKHZvaWQgKnRmbSk7Ci0JdTMyICgqZ2V0X2ZsYWdzKSh2b2lkICp0Zm0pOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCWNoYXIgbmFtZVsxNF07Ci19OwotCi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpOwotaW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpOwotCi0jZW5kaWYgLyogX0JQRl9DUllQVE9fSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnCmluZGV4IGViM2RlMzU3MzRmMDkuLjgyMjU5OWI0MmJlMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL0tjb25maWcKQEAgLTg3LDYgJiM0Mzs4NywxNSBAQCBjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRgogCiAJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBZLgogCiYjNDM7Y29uZmlnIEJQRl9DUllQVE8KJiM0MzsJZGVmX2Jvb2wgeQomIzQzOwlkZXBlbmRzIG9uIEJQRl9TWVNDQUxMCiYjNDM7CXNlbGVjdCBDUllQVE9fTElCX0FFU19DQkMKJiM0MzsJc2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQgomIzQzOwloZWxwCiYjNDM7CSAgUHJvdmlkZSB0aGUga2Z1bmNzIG5lZWRlZCBmb3IgQlBGIHByb2dyYW1zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHQKJiM0MzsJICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuCiYjNDM7CiBzb3VyY2UgJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZyYjMzQ7CiAKIGNvbmZpZyBCUEZfTFNNCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL01ha2VmaWxlIGIva2VybmVsL2JwZi9NYWtlZmlsZQppbmRleCA5MDI1NWQ4MGU1YmU2Li5hYjJlNWQyNzgyZTZlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvTWFrZWZpbGUKQEAgLTU1LDkgJiM0Mzs1NSw3IEBAIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2subwogIyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5Lgogb2JqLSR7Q09ORklHX0JQRl9MU019ICYjNDM7PSBicGZfbHNtX3Byb3RvLm8gYnBmX2xzbS5vCiBlbmRpZgotaWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKQotb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm8KLWVuZGlmCiYjNDM7b2JqLSQoQ09ORklHX0JQRl9DUllQVE8pICYjNDM7PSBjcnlwdG8ubwogb2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC8KIAogb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY3J5cHRvLmMgYi9rZXJuZWwvYnBmL2NyeXB0by5jCmluZGV4IDUxZjg5Y2VjZWZiNGQuLjhjZGMxNmY5YjM3NGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY3J5cHRvLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jcnlwdG8uYwpAQCAtMSwxOSAmIzQzOzEsMTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhLCBJbmMgKi8KICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9icGZfY3J5cHRvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX21lbV9hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zl9pZHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zY2F0dGVybGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwotI2luY2x1ZGUgJmx0O2NyeXB0by9za2NpcGhlci5oJmd0OwotCi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgewotCWNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3J5cHRvL2Flcy1jYmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3J5cHRvL2Flcy1lY2IuaCZndDsKIAogLyogQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdCAqLwogLyoqCkBAIC0zNiw5NCAmIzQzOzMwLDUzIEBAIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7CiAJdTMyIGF1dGhzaXplOwogfTsKIAotc3RhdGljIExJU1RfSEVBRChicGZfY3J5cHRvX3R5cGVzKTsKLXN0YXRpYyBERUNMQVJFX1JXU0VNKGJwZl9jcnlwdG9fdHlwZXNfc2VtKTsKJiM0MztlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCB7CiYjNDM7CUJQRl9BTEdPX0FFU19DQkMsCiYjNDM7CUJQRl9BTEdPX0FFU19FQ0IsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHsKJiM0MzsJY29uc3QgY2hhciAqdHlwZV9uYW1lOwomIzQzOwljb25zdCBjaGFyICphbGdvX25hbWU7CiYjNDM7CWVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287CiYjNDM7fSBicGZfY3J5cHRvX2FsZ29zW10gPSB7CiYjNDM7CXsgJiMzNDtza2NpcGhlciYjMzQ7LCAmIzM0O2NiYyhhZXMpJiMzNDssIEJQRl9BTEdPX0FFU19DQkMgfSwKJiM0MzsJeyAmIzM0O3NrY2lwaGVyJiMzNDssICYjMzQ7ZWNiKGFlcykmIzM0OywgQlBGX0FMR09fQUVTX0VDQiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KQomIzQzO3sKJiM0MzsJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy0mZ3Q7dHlwZSwKJiM0MzsJCQkgICAgc2l6ZW9mKHBhcmFtcy0mZ3Q7dHlwZSkpID09IDAgJmFtcDsmYW1wOwomIzQzOwkJICAgIHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvX25hbWUsIHBhcmFtcy0mZ3Q7YWxnbywKJiM0MzsJCQkgICAgc2l6ZW9mKHBhcmFtcy0mZ3Q7YWxnbykpID09IDApIHsKJiM0MzsJCQkqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKIC8qKgogICogc3RydWN0IGJwZl9jcnlwdG9fY3R4IC0gcmVmY291bnRlZCBCUEYgY3J5cHRvIGNvbnRleHQgc3RydWN0dXJlCi0gKiBAdHlwZToJVGhlIHBvaW50ZXIgdG8gYnBmIGNyeXB0byB0eXBlCi0gKiBAdGZtOglUaGUgcG9pbnRlciB0byBpbnN0YW5jZSBvZiBjcnlwdG8gQVBJIHN0cnVjdC4KLSAqIEBzaXZfbGVuOiAgICBTaXplIG9mIElWIGFuZCBzdGF0ZSBzdG9yYWdlIGZvciBjaXBoZXIKJiM0MzsgKiBAYWxnbzoJVGhlIGNyeXB0byBhbGdvcml0aG0gSUQKJiM0MzsgKiBAa2V5OglUaGUgY3J5cHRvIGtleQogICogQHJjdToJVGhlIFJDVSBoZWFkIHVzZWQgdG8gZnJlZSB0aGUgY3J5cHRvIGNvbnRleHQgd2l0aCBSQ1Ugc2FmZXR5LgogICogQHVzYWdlOglPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlCiAgKgkJbWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzCiAgKgkJUkNVIHNhZmV0eS4KICAqLwogc3RydWN0IGJwZl9jcnlwdG9fY3R4IHsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlOwotCXZvaWQgKnRmbTsKLQl1MzIgc2l2X2xlbjsKJiM0MzsJZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbzsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IGFlc19rZXkgYWVzOwomIzQzOwl9IGtleTsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCXJlZmNvdW50X3QgdXNhZ2U7CiB9OwogCi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpCi17Ci0Jc3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlOwotCWludCBlcnIgPSAtRUJVU1k7Ci0KLQlkb3duX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDticGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7Ci0JCWlmICghc3RyY21wKG5vZGUtJmd0O3R5cGUtJmd0O25hbWUsIHR5cGUtJmd0O25hbWUpKQotCQkJZ290byB1bmxvY2s7Ci0JfQotCi0Jbm9kZSA9IGttYWxsb2Nfb2JqKCpub2RlKTsKLQllcnIgPSAtRU5PTUVNOwotCWlmICghbm9kZSkKLQkJZ290byB1bmxvY2s7Ci0KLQlub2RlLSZndDt0eXBlID0gdHlwZTsKLQlsaXN0X2FkZCgmYW1wO25vZGUtJmd0O2xpc3QsICZhbXA7YnBmX2NyeXB0b190eXBlcyk7Ci0JZXJyID0gMDsKLQotdW5sb2NrOgotCXVwX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7Ci0KLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKQotewotCXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTsKLQlpbnQgZXJyID0gLUVOT0VOVDsKLQotCWRvd25fd3JpdGUoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYW1wO2JwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHsKLQkJaWYgKHN0cmNtcChub2RlLSZndDt0eXBlLSZndDtuYW1lLCB0eXBlLSZndDtuYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bGlzdCk7Ci0JCWtmcmVlKG5vZGUpOwotCQllcnIgPSAwOwotCQlicmVhazsKLQl9Ci0JdXBfd3JpdGUoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqYnBmX2NyeXB0b19nZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQotewotCWNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUgPSBFUlJfUFRSKC1FTk9FTlQpOwotCXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTsKLQotCWRvd25fcmVhZCgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7YnBmX2NyeXB0b190eXBlcywgbGlzdCkgewotCQlpZiAoc3RyY21wKG5vZGUtJmd0O3R5cGUtJmd0O25hbWUsIG5hbWUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KG5vZGUtJmd0O3R5cGUtJmd0O293bmVyKSkKLQkJCXR5cGUgPSBub2RlLSZndDt0eXBlOwotCQlicmVhazsKLQl9Ci0JdXBfcmVhZCgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQotCXJldHVybiB0eXBlOwotfQotCiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAKIC8qKgpAQCAtMTQ2LDcgJiM0Mzs5OSw2IEBAIF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqCiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LAogCQkgICAgICBpbnQgKmVycikKIHsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlOwogCXN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4OwogCiAJaWYgKCFwYXJhbXMgfHwgcGFyYW1zLSZndDtyZXNlcnZlZFswXSB8fCBwYXJhbXMtJmd0O3Jlc2VydmVkWzFdIHx8CkBAIC0xNTUsNjkgJiM0MzsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeiwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JdHlwZSA9IGJwZl9jcnlwdG9fZ2V0X3R5cGUocGFyYW1zLSZndDt0eXBlKTsKLQlpZiAoSVNfRVJSKHR5cGUpKSB7Ci0JCSplcnIgPSBQVFJfRVJSKHR5cGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoIXR5cGUtJmd0O2hhc19hbGdvKHBhcmFtcy0mZ3Q7YWxnbykpIHsKLQkJKmVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIGVycl9tb2R1bGVfcHV0OwotCX0KLQotCWlmICghIXBhcmFtcy0mZ3Q7YXV0aHNpemUgXiAhIXR5cGUtJmd0O3NldGF1dGhzaXplKSB7Ci0JCSplcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKLQl9Ci0KLQlpZiAoIXBhcmFtcy0mZ3Q7a2V5X2xlbiB8fCBwYXJhbXMtJmd0O2tleV9sZW4gJmd0OyBzaXplb2YocGFyYW1zLSZndDtrZXkpKSB7Ci0JCSplcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9tb2R1bGVfcHV0OwotCX0KLQogCWN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpOwogCWlmICghY3R4KSB7CiAJCSplcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9tb2R1bGVfcHV0OwomIzQzOwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JY3R4LSZndDt0eXBlID0gdHlwZTsKLQljdHgtJmd0O3RmbSA9IHR5cGUtJmd0O2FsbG9jX3RmbShwYXJhbXMtJmd0O2FsZ28pOwotCWlmIChJU19FUlIoY3R4LSZndDt0Zm0pKSB7Ci0JCSplcnIgPSBQVFJfRVJSKGN0eC0mZ3Q7dGZtKTsKLQkJZ290byBlcnJfZnJlZV9jdHg7CiYjNDM7CWlmICghYnBmX2NyeXB0b19maW5kX2FsZ28ocGFyYW1zLCAmYW1wO2N0eC0mZ3Q7YWxnbykpIHsKJiM0MzsJCSplcnIgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHBhcmFtcy0mZ3Q7YXV0aHNpemUpIHsKLQkJKmVyciA9IHR5cGUtJmd0O3NldGF1dGhzaXplKGN0eC0mZ3Q7dGZtLCBwYXJhbXMtJmd0O2F1dGhzaXplKTsKLQkJaWYgKCplcnIpCi0JCQlnb3RvIGVycl9mcmVlX3RmbTsKJiM0MzsJc3dpdGNoIChjdHgtJmd0O2FsZ28pIHsKJiM0MzsJY2FzZSBCUEZfQUxHT19BRVNfQ0JDOgomIzQzOwljYXNlIEJQRl9BTEdPX0FFU19FQ0I6CiYjNDM7CQlpZiAocGFyYW1zLSZndDthdXRoc2l6ZSkKJiM0MzsJCQkqZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQllbHNlCiYjNDM7CQkJKmVyciA9IGFlc19wcmVwYXJla2V5KCZhbXA7Y3R4LSZndDtrZXkuYWVzLCBwYXJhbXMtJmd0O2tleSwKJiM0MzsJCQkJCSAgICAgIHBhcmFtcy0mZ3Q7a2V5X2xlbik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVdBUk5fT04oMSk7CiYjNDM7CQkqZXJyID0gLUVOT0VOVDsKJiM0MzsJCWJyZWFrOwogCX0KIAotCSplcnIgPSB0eXBlLSZndDtzZXRrZXkoY3R4LSZndDt0Zm0sIHBhcmFtcy0mZ3Q7a2V5LCBwYXJhbXMtJmd0O2tleV9sZW4pOwotCWlmICgqZXJyKQotCQlnb3RvIGVycl9mcmVlX3RmbTsKLQotCWlmICh0eXBlLSZndDtnZXRfZmxhZ3MoY3R4LSZndDt0Zm0pICZhbXA7IENSWVBUT19URk1fTkVFRF9LRVkpIHsKLQkJKmVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX2ZyZWVfdGZtOwomIzQzO291dDoKJiM0MzsJaWYgKCplcnIpIHsKJiM0MzsJCWtmcmVlX3NlbnNpdGl2ZShjdHgpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JY3R4LSZndDtzaXZfbGVuID0gdHlwZS0mZ3Q7aXZzaXplKGN0eC0mZ3Q7dGZtKSAmIzQzOyB0eXBlLSZndDtzdGF0ZXNpemUoY3R4LSZndDt0Zm0pOwotCiAJcmVmY291bnRfc2V0KCZhbXA7Y3R4LSZndDt1c2FnZSwgMSk7Ci0KIAlyZXR1cm4gY3R4OwotCi1lcnJfZnJlZV90Zm06Ci0JdHlwZS0mZ3Q7ZnJlZV90Zm0oY3R4LSZndDt0Zm0pOwotZXJyX2ZyZWVfY3R4OgotCWtmcmVlKGN0eCk7Ci1lcnJfbW9kdWxlX3B1dDoKLQltb2R1bGVfcHV0KHR5cGUtJmd0O293bmVyKTsKLQotCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCkBAIC0yMjUsOSAmIzQzOzE0OCw3IEBAIHN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIAlzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDsKIAogCWN0eCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgsIHJjdSk7Ci0JY3R4LSZndDt0eXBlLSZndDtmcmVlX3RmbShjdHgtJmd0O3RmbSk7Ci0JbW9kdWxlX3B1dChjdHgtJmd0O3R5cGUtJmd0O293bmVyKTsKLQlrZnJlZShjdHgpOwomIzQzOwlrZnJlZV9zZW5zaXRpdmUoY3R4KTsKIH0KIAogLyoqCkBAIC0yNjcsMjcgJiM0MzsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KQogfQogQ0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpOwogCiYjNDM7c3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sCiYjNDM7CQkJICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KQomIzQzO3sKJiM0MzsJaWYgKGl2X2xlbiAhPSBBRVNfQkxPQ0tfU0laRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gJmx0OyBzcmNfbGVuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChkZWNyeXB0KQomIzQzOwkJYWVzX2NiY19kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgJmFtcDtjdHgtJmd0O2tleS5hZXMpOwomIzQzOwllbHNlCiYjNDM7CQlhZXNfY2JjX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCAmYW1wO2N0eC0mZ3Q7a2V5LmFlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9hZXNfZWNiX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbiwKJiM0MzsJCQkgICAgIHU4ICppdiwgdTMyIGl2X2xlbiwKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpCiYjNDM7ewomIzQzOwlpZiAoaXZfbGVuICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuICZsdDsgc3JjX2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoZGVjcnlwdCkKJiM0MzsJCWFlc19lY2JfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgJmFtcDtjdHgtJmd0O2tleS5hZXMpOwomIzQzOwllbHNlCiYjNDM7CQlhZXNfZWNiX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sICZhbXA7Y3R4LSZndDtrZXkuYWVzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogCQkJICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsCi0JCQkgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdiwKIAkJCSAgICBib29sIGRlY3J5cHQpCiB7Ci0JdTMyIHNyY19sZW4sIGRzdF9sZW4sIHNpdl9sZW47CiYjNDM7CXUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47CiAJY29uc3QgdTggKnBzcmM7CiAJdTggKnBkc3QsICpwaXY7Ci0JaW50IGVycjsKIAogCWlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwOwomIzQzOwlpdl9sZW4gPSBpdiA/IF9fYnBmX2R5bnB0cl9zaXplKGl2KSA6IDA7CiAJc3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7CiAJZHN0X2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKGRzdCk7Ci0JaWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuIHx8IHNyY19sZW4gJmd0OyBkc3RfbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzaXZfbGVuICE9IGN0eC0mZ3Q7c2l2X2xlbikKJiM0MzsJaWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pOwpAQCAtMjk3LDE0ICYjNDM7MjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKIAlpZiAoIXBkc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGl2ID0gc2l2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KHNpdiwgc2l2X2xlbikgOiBOVUxMOwotCWlmIChzaXZfbGVuICZhbXA7JmFtcDsgIXBpdikKJiM0MzsJcGl2ID0gaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoaXYsIGl2X2xlbikgOiBOVUxMOwomIzQzOwlpZiAoaXZfbGVuICZhbXA7JmFtcDsgIXBpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBkZWNyeXB0ID8gY3R4LSZndDt0eXBlLSZndDtkZWNyeXB0KGN0eC0mZ3Q7dGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpCi0JCSAgICAgIDogY3R4LSZndDt0eXBlLSZndDtlbmNyeXB0KGN0eC0mZ3Q7dGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpOwotCi0JcmV0dXJuIGVycjsKJiM0MzsJc3dpdGNoIChjdHgtJmd0O2FsZ28pIHsKJiM0MzsJY2FzZSBCUEZfQUxHT19BRVNfQ0JDOgomIzQzOwkJcmV0dXJuIGJwZl9hZXNfY2JjX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdiwKJiM0MzsJCQkJCSBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7CiYjNDM7CWNhc2UgQlBGX0FMR09fQUVTX0VDQjoKJiM0MzsJCXJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsCiYjNDM7CQkJCQkgaXZfbGVuLCBjdHgsIGRlY3J5cHQpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0zMTIsMjAgJiM0MzsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogICogQGN0eDoJCVRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCiAgKiBAc3JjOgkJYnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCiAgKiBAZHN0OgkJYnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCi0gKiBAc2l2X19udWxsYWJsZToJYnBmX2R5bnB0ciB0byBJViBkYXRhIGFuZCBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgZGVjcnlwdG9yLiBNYXkgYmUgTlVMTC4KJiM0MzsgKiBAaXZfX251bGxhYmxlOglicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLgogICoKICAqIERlY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC4KICAqLwogX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkc3QsCi0JCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNpdl9fbnVsbGFibGUpCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpCiB7CiAJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjX2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNyYzsKIAljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3Rfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZHN0OwotCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilpdl9fbnVsbGFibGU7CiAKLQlyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2Vybiwgc2l2X2tlcm4sIHRydWUpOwomIzQzOwlyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7CiB9CiAKIC8qKgpAQCAtMzMzLDIwICYjNDM7Mjg2LDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAgKiBAY3R4OgkJVGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci4KICAqIEBzcmM6CQlicGZfZHlucHRyIHRvIHRoZSBwbGFpbiBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgogICogQGRzdDoJCWJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgotICogQHNpdl9fbnVsbGFibGU6CWJwZl9keW5wdHIgdG8gSVYgZGF0YSBhbmQgc3RhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IGRlY3J5cHRvci4gTWF5IGJlIE5VTEwuCiYjNDM7ICogQGl2X19udWxsYWJsZToJYnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC4KICAqCiAgKiBFbmNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LAotCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKQomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKQogewogCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7CiAJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDsKLQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc2l2X19udWxsYWJsZTsKJiM0MzsJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlOwogCi0JcmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7CiYjNDM7CXJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCBmYWxzZSk7CiB9CiAKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQ3J5cHRvIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gb3B0aW1pemluZyB0aGUgQlBGIGNyeXB0byBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgcmVtb3ZpbmcgdGhlIG9sZCBgY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaGAgZmlsZXMg4oCTIHNvIHRoZSBsZWdhY3kgY29kZSBpcyBnb25lLiBJbnN0ZWFkLCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIGBjb25maWcgQlBGX0NSWVBUT2Agb3B0aW9uIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCB3aGljaCBpcyBzZXQgdG8gYHlgIGlmIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYW5kIGFsc28gc2VsZWN0aW5nIGJvdGggYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgLiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBlbmFibGVzIHRoZSB1c2Ugb2YgQUVTLUNCQyBhbmQgQUVTLUVDQiBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSBjaGFuZ2UgaW4gdGhlIE1ha2VmaWxlIGNvbmZpcm1zIHRoaXMgd2l0aCBgb2JqLSQoQ09ORklHX0JQRl9DUllQVE8pICYjNDM7PSBjcnlwdG8ub2AuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgYXBwZWFycyB0byBiZSBpbiBga2VybmVsL2JwZi9jcnlwdG8uY2AuIFRoZXkmIzM5O3JlIHJlZmFjdG9yaW5nIHRoZSBjcnlwdG8gaGFuZGxpbmcsIG1vdmluZyBhd2F5IGZyb20gdGhlIGdlbmVyaWMgY3J5cHRvIHRmbSByZWdpc3RyYXRpb24gaW50ZXJmYWNlLiBUaGUgYWltIHNlZW1zIHRvIGJlIHRvIHN0cmVhbWxpbmUgdGhpbmdzIGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIGBDUllQVE9fTElCX0FFU19DQkNgIGFuZCBgQ1JZUFRPX0xJQl9BRVNfRUNCYCBpbXBsZW1lbnRhdGlvbnMgdmlhIGtmdW5jcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBuZXcga2Z1bmNzOiBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VgLCBgYnBmX2NyeXB0b19kZWNyeXB0YCwgYW5kIGBicGZfY3J5cHRvX2VuY3J5cHRgLgoKTm93LCBpcyB0aGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmc/IExldCYjMzk7cyBzZWUuIFRoZSBlbnRyeSBwb2ludHMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGVzZSBuZXcga2Z1bmNzLCBhbG9uZyB3aXRoIG90aGVycyBzdWNoIGFzIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3JgIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gQlBGIHByb2dyYW1zLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGEgbG90LiBUaGV5JiMzOTtyZSByZXBsYWNpbmcgdGhlIGdlbmVyaWMgY3J5cHRvIGRyaXZlciBiYWNrZW5kIHdpdGggZGlyZWN0IGNhbGxzIHRvIGBhZXNfY2JjX2VuY3J5cHRgLCBgYWVzX2NiY19kZWNyeXB0YCwgYGFlc19lY2JfZW5jcnlwdGAsIGFuZCBgYWVzX2VjYl9kZWNyeXB0YC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBwYXJhbWV0ZXIgY2hlY2tpbmcsIGJ1ZmZlciB2YWxpZGF0aW9uLCBjb250ZXh0IGxpZmVjeWNsZSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBBbnkgZXJyb3IgaGVyZSBoYXMgbGFyZ2UgcG90ZW50aWFsIGltcGFjdC4KCkkgbmVlZCB0byBpbnNwZWN0IGBrZXJuZWwvYnBmL2NyeXB0by5jYCBhbmQgYEtjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmdW5jdGlvbnMgaW52b2x2ZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIHN5bWJvbHMgYW5kIHJlYWQgdGhlIGNvZGUgdG8gaGF2ZSBhIGdvb2QgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY3J5cHRvXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY3J5cHRvLmMtMTMtLyoqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE0OiAqIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAtIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3R1cmVcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTUtICogQHR5cGU6XHRUaGUgc3RyaW5nIG9mIGNyeXB0byBvcGVyYXRpb24gdHlwZS5cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIzLSAqL1xua2VybmVsL2JwZi9jcnlwdG8uYzoyNDpzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xua2VybmVsL2JwZi9jcnlwdG8uYy0yNS1cdGNoYXIgdHlwZVsxNF07XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zMi1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MzM6ZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xua2VybmVsL2JwZi9jcnlwdG8uYy0zNC1cdEJQRl9BTEdPX0FFU19DQkMsXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYz0zOD1zdGF0aWMgY29uc3Qgc3RydWN0IHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTQwLVx0Y29uc3QgY2hhciAqYWxnb19uYW1lO1xua2VybmVsL2JwZi9jcnlwdG8uYzo0MTpcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG5rZXJuZWwvYnBmL2NyeXB0by5jOjQyOn0gYnBmX2NyeXB0b19hbGdvc1tdID0ge1xua2VybmVsL2JwZi9jcnlwdG8uYy00My1cdHsgXCYjMzQ7c2tjaXBoZXJcJiMzNDssIFwmIzM0O2NiYyhhZXMpXCYjMzQ7LCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy00Ni1cbmtlcm5lbC9icGYvY3J5cHRvLmM6NDc6c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsXG5rZXJuZWwvYnBmL2NyeXB0by5jOjQ4Olx0XHRcdFx0IGVudW0gYnBmX2NyeXB0b19hbGdvX2lkICppZF9yZXQpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTQ5LXtcbmtlcm5lbC9icGYvY3J5cHRvLmM6NTA6XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvY3J5cHRvLmM6NTE6XHRcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXHUwMDNldHlwZSxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNTItXHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNldHlwZSkpID09IDAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2NyeXB0by5jOjUzOlx0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG5rZXJuZWwvYnBmL2NyeXB0by5jLTU0LVx0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZWFsZ28pKSA9PSAwKSB7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjU1Olx0XHRcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XG5rZXJuZWwvYnBmL2NyeXB0by5jLTU2LVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtNjItLyoqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjYzOiAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxua2VybmVsL2JwZi9jcnlwdG8uYy02NC0gKiBAYWxnbzpcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy03MC0gKi9cbmtlcm5lbC9icGYvY3J5cHRvLmM6NzE6c3RydWN0IGJwZl9jcnlwdG9fY3R4IHtcbmtlcm5lbC9icGYvY3J5cHRvLmM6NzI6XHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvO1xua2VybmVsL2JwZi9jcnlwdG8uYy03My1cdHVuaW9uIHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTgwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTgyLS8qKlxua2VybmVsL2JwZi9jcnlwdG8uYzo4MzogKiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoKSAtIENyZWF0ZSBhIG11dGFibGUgQlBGIGNyeXB0byBjb250ZXh0Llxua2VybmVsL2JwZi9jcnlwdG8uYy04NC0gKlxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtODYtICogYSBCUEYgcHJvZ3JhbS4gVGhlIGNyeXB0byBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXJcbmtlcm5lbC9icGYvY3J5cHRvLmM6ODc6ICogYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKS5cbmtlcm5lbC9icGYvY3J5cHRvLmMtODgtICogQXMgY3J5cHRvIEFQSSBmdW5jdGlvbnMgdXNlIEdGUF9LRVJORUwgYWxsb2NhdGlvbnMsIHRoaXMgZnVuY3Rpb24gY2FuXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy05MC0gKlxua2VybmVsL2JwZi9jcnlwdG8uYzo5MTogKiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoKSBhbGxvY2F0ZXMgbWVtb3J5IGZvciBjcnlwdG8gY29udGV4dC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtOTItICogSXQgbWF5IHJldHVybiBOVUxMIGlmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUuXG5rZXJuZWwvYnBmL2NyeXB0by5jOjkzOiAqIEBwYXJhbXM6XHRwb2ludGVyIHRvIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB3aGljaCBjb250YWlucyBhbGwgdGhlXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk0LSAqXHRcdGRldGFpbHMgbmVlZGVkIHRvIGluaXRpYWxpc2UgY3J5cHRvIGNvbnRleHQuXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk1OiAqIEBwYXJhbXNfX3N6Olx0c2l6ZSBvZiBzdGV1Y3QgYnBmX2NyeXB0b19wYXJhbXMgdXNlZiBieSBicGYgcHJvZ3JhbVxua2VybmVsL2JwZi9jcnlwdG8uYy05Ni0gKiBAZXJyOlx0aW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtOTctICovXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk4Ol9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk5OmJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEwMC1cdFx0ICAgICAgaW50ICplcnIpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEwMS17XG5rZXJuZWwvYnBmL2NyeXB0by5jOjEwMjpcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xua2VybmVsL2JwZi9jcnlwdG8uYy0xMDMtXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEwNC1cdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cdTAwM2VyZXNlcnZlZFswXSB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTA1Olx0ICAgIHBhcmFtc19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcykpIHtcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTA2LVx0XHQqZXJyID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTExNS1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTE2Olx0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xua2VybmVsL2JwZi9jcnlwdG8uYy0xMTctXHRcdCplcnIgPSAtRU5PRU5UO1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MTQ2PXN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTQ3LXtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTQ4Olx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG5rZXJuZWwvYnBmL2NyeXB0by5jLTE0OS1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTUwOlx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTUxLVx0a2ZyZWVfc2Vuc2l0aXZlKGN0eCk7XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0xNTQtLyoqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE1NTogKiBicGZfY3J5cHRvX2N0eF9hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGNyeXB0byBjb250ZXh0Llxua2VybmVsL2JwZi9jcnlwdG8uYy0xNTYtICogQGN0eDogVGhlIEJQRiBjcnlwdG8gY29udGV4dCBiZWluZyBhY3F1aXJlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtMTYwLSAqIG11c3QgZWl0aGVyIGJlIGVtYmVkZGVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IgZnJlZWQgd2l0aFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjE6ICogYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpLlxua2VybmVsL2JwZi9jcnlwdG8uYy0xNjItICovXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE2MzpfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjQ6YnBmX2NyeXB0b19jdHhfYWNxdWlyZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTY1LXtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE3MS0vKipcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTcyOiAqIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBwcmV2aW91c2x5IGFjcXVpcmVkIEJQRiBjcnlwdG8gY29udGV4dC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtMTczLSAqIEBjdHg6IFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyByZWxlYXNlZC5cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE3OC0gKi9cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTc5Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTgwLXtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE4NC1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTg1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTg2LXtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTg3Olx0YnBmX2NyeXB0b19jdHhfcmVsZWFzZShjdHgpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0xODgtfVxua2VybmVsL2JwZi9jcnlwdG8uYzoxODk6Q0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0xOTAtXG5rZXJuZWwvYnBmL2NyeXB0by5jPTE5MT1zdGF0aWMgaW50IGJwZl9hZXNfY2JjX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTkyLVx0XHRcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxua2VybmVsL2JwZi9jcnlwdG8uYzoxOTM6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxua2VybmVsL2JwZi9jcnlwdG8uYy0xOTQte1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MjA2PXN0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxua2VybmVsL2JwZi9jcnlwdG8uYy0yMDctXHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG5rZXJuZWwvYnBmL2NyeXB0by5jOjIwODpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIwOS17XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0yMjAtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjIyMTpzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIyMi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtMjYzLS8qKlxua2VybmVsL2JwZi9jcnlwdG8uYzoyNjQ6ICogYnBmX2NyeXB0b19kZWNyeXB0KCkgLSBEZWNyeXB0IGJ1ZmZlciB1c2luZyBjb25maWd1cmVkIGNvbnRleHQgYW5kIElWIHByb3ZpZGVkLlxua2VybmVsL2JwZi9jcnlwdG8uYy0yNjUtICogQGN0eDpcdFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI3MS0gKi9cbmtlcm5lbC9icGYvY3J5cHRvLmM6MjcyOl9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI3My1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0yODAtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI4MTpcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjgyLX1cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI4NC0vKipcbmtlcm5lbC9icGYvY3J5cHRvLmM6Mjg1OiAqIGJwZl9jcnlwdG9fZW5jcnlwdCgpIC0gRW5jcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtMjg2LSAqIEBjdHg6XHRcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0yOTItICovXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI5MzpfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19lbmNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxua2VybmVsL2JwZi9jcnlwdG8uYy0yOTQtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtMzAxLVxua2VybmVsL2JwZi9jcnlwdG8uYzozMDI6XHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0zMDMtfVxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MzA3PUJURl9LRlVOQ1NfU1RBUlQoY3J5cHRfaW5pdF9rZnVuY19idGZfaWRzKVxua2VybmVsL2JwZi9jcnlwdG8uYzozMDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxua2VybmVsL2JwZi9jcnlwdG8uYzozMDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMxMDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19jdHhfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxua2VybmVsL2JwZi9jcnlwdG8uYy0zMTEtQlRGX0tGVU5DU19FTkQoY3J5cHRfaW5pdF9rZnVuY19idGZfaWRzKVxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MzE4PUJURl9LRlVOQ1NfU1RBUlQoY3J5cHRfa2Z1bmNfYnRmX2lkcylcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzE5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2RlY3J5cHQsIEtGX1JDVSlcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzIwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2VuY3J5cHQsIEtGX1JDVSlcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzIxLUJURl9LRlVOQ1NfRU5EKGNyeXB0X2tmdW5jX2J0Zl9pZHMpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYz0zMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGNyeXB0X2tmdW5jX3NldCA9IHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMyNy1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MzI4OkJURl9JRF9MSVNUKGJwZl9jcnlwdG9fZHRvcl9pZHMpXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMyOTpCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzMwOkJURl9JRChmdW5jLCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMzMS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MzMyPXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zMzQtXHRpbnQgcmV0O1xua2VybmVsL2JwZi9jcnlwdG8uYzozMzU6XHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2NyeXB0b19kdG9yc1tdID0ge1xua2VybmVsL2JwZi9jcnlwdG8uYy0zMzYtXHRcdHtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzM3Olx0XHRcdC5idGZfaWRcdCAgICAgID0gYnBmX2NyeXB0b19kdG9yX2lkc1swXSxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzM4Olx0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfY3J5cHRvX2R0b3JfaWRzWzFdXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMzOS1cdFx0fSxcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM0Ni1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNyeXB0X2luaXRfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzQ3Olx0cmV0dXJuICByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9jcnlwdG9fZHRvcnMsXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM0ODpcdFx0XHRcdFx0XHQgICBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fZHRvcnMpLFxua2VybmVsL2JwZi9jcnlwdG8uYy0zNDktXHRcdFx0XHRcdFx0ICAgVEhJU19NT0RVTEUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NTcxPUJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ1NzItI2lmZGVmIENPTkZJR19DUllQVE9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0NTczOkJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ1NzQtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENyeXB0byBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQlBGX0NSWVBUT2AuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyB3aGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3Igc2V0IGluIG9yZGVyIGZvciBgQlBGX0NSWVBUT2AgdG8gd29yayBjb3JyZWN0bHkuCgpTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgYWNjb21wYW55aW5nIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9DUllQVE9gLiBSZWFkaW5nIHRoYXQgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHQgIHN0aWxsIHJlZW5hYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMCBsYXRlciBvbiwgb3IgcGVybWFuZW50bHlcbiAgODE6XHRcdCAgZGlzYWJsZSBpdCBieSBzZXR0aW5nIGl0IHRvIDEgKGZyb20gd2hpY2ggbm8gb3RoZXIgdHJhbnNpdGlvbiB0b1xuICA4MjpcdFx0ICAwIGlzIHBvc3NpYmxlIGFueW1vcmUpLlxuICA4MzpcdFxuICA4NDpcdFx0ICBVbnByaXZpbGVnZWQgQlBGIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBjZXJ0YWluIHBvdGVudGlhbFxuICA4NTpcdFx0ICBzcGVjdWxhdGl2ZSBleGVjdXRpb24gc2lkZS1jaGFubmVsIHZ1bG5lcmFiaWxpdGllcyBvbiB1bm1pdGlnYXRlZFxuICA4NjpcdFx0ICBhZmZlY3RlZCBoYXJkd2FyZS5cbiAgODc6XHRcbiAgODg6XHRcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiAgODk6XHRcbiAgOTA6XHRjb25maWcgQlBGX0NSWVBUT1xuICA5MTpcdFx0ZGVmX2Jvb2wgeVxuICA5MjpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICA5MzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ1xuICA5NDpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQlxuICA5NTpcdFx0aGVscFxuICA5NjpcdFx0ICBQcm92aWRlIHRoZSBrZnVuY3MgbmVlZGVkIGZvciBCUEYgcHJvZ3JhbXMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdFxuICA5NzpcdFx0ICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuXG4gIDk4Olx0XG4gIDk5Olx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIEJQRl9MU01cbiAxMDI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gMTAzOlx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAxMDQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAxMDU6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAxMDY6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuIDEwNzpcdFx0aGVscFxuIDEwODpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTA5Olx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgQlBGIHN0dWZmLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgY29yZS4gVG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBmaXJzdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoZSBCUEYgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KClRoZW4sIHRvIHJlYWxseSBncmFzcCB0aGUgcnVudGltZSBiZWhhdmlvciBhbmQsIGNydWNpYWxseSwgdGhlIHNlY3VyaXR5IGFzcGVjdHMsIEkgKmhhdmUqIHRvIGRlbHZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSB2ZXJpZmllciBpcyB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzZWN1cml0eSBtb2RlbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCB0aGUgY2hlY2tzIGl0IHBlcmZvcm1zLCBhbmQgaG93IGl0IGVuc3VyZXMgdGhhdCB0aGUgQlBGIHByb2dyYW1zIGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgYXJlIHNhZmUgYW5kIHdvbiYjMzk7dCBjcmFzaCB0aGUgc3lzdGVtIG9yIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgY29udHJvbCBmbG93IGFuYWx5c2lzLCByZWdpc3RlciB2YWxpZGF0aW9uLCBhbmQgdGhlIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBleHBsb2l0cywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzKSBoYXBwZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0NSWVBUTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy04OS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5MDpjb25maWcgQlBGX0NSWVBUT1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NTc9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0JQRl9DUllQVE8pICYjNDM7PSBjcnlwdG8ub1xua2VybmVsL2JwZi9NYWtlZmlsZS01OS1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEJQRiB2ZXJpZmllciBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgaXRzZWxmLiBNeSBiZXN0IGd1ZXNzIGlzIHRoYXQgdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUgaXMgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSB0aGUgdmVyaWZpZXIgaXNuJiMzOTt0IGhhbmRsaW5nIHByb3Blcmx5LCBvciBwZXJoYXBzIGFuIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgdmVyaWZpY2F0aW9uIHJ1bGVzLiBUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDQ1NzIuIFRoYXQgbG9jYXRpb24gZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmFzZWQgb24gbXkgcHJpb3IgYW5hbHlzaXMgb2Ygc2ltaWxhciBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTY1Olx0I2lmZGVmIENPTkZJR19DR1JPVVBTXG40NTY2Olx0QlRGX0lEKHN0cnVjdCwgY2dyb3VwKVxuNDU2NzpcdCNlbmRpZlxuNDU2ODpcdCNpZmRlZiBDT05GSUdfQlBGX0pJVFxuNDU2OTpcdEJURl9JRChzdHJ1Y3QsIGJwZl9jcHVtYXNrKVxuNDU3MDpcdCNlbmRpZlxuNDU3MTpcdEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuNDU3MjpcdCNpZmRlZiBDT05GSUdfQ1JZUFRPXG40NTczOlx0QlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG40NTc0Olx0I2VuZGlmXG40NTc1Olx0I2lmZGVmIENPTkZJR19JTkVUXG40NTc2Olx0QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuNDU3NzpcdCNlbmRpZlxuNDU3ODpcdEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG40NTc5Olx0XG40NTgwOlx0c3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxuNDU4MTpcdHtcbjQ1ODI6XHRcdGlmICghYnRmX2lzX2tlcm5lbChidGYpKVxuNDU4MzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQ1ODQ6XHRcdHJldHVybiBidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNnJjdV9wcm90ZWN0ZWRfdHlwZXMsIGJ0Zl9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjAzCgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUsIGFuZCBlbmFibGluZyBgQlBGX1NZU0NBTExgIGF1dG9tYXRpY2FsbHkgYnJpbmdzIGluIGBCUEZfQ1JZUFRPYCAod2hpY2ggZGVwZW5kcyBvbiBpdCkuIGBCUEZfQ1JZUFRPYCB0aGVuIHNlbGVjdHMgYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgLCB3aGljaCBtYWtlcyBzZW5zZS4gYEJQRl9TWVNDQUxMYCBpcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBgQlBGX0NSWVBUT2AgaXMgdGhlIG5ldyBhZGRpdGlvbiBoZXJlLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcz8gV2VsbCwgYEJQRl9TWVNDQUxMYCBkZXBlbmRzIG9uIGBCUEZgLCB3aGljaCBpcyBhIGdpdmVuLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEJQRl9DUllQVE9gLCBgQlBGX1NZU0NBTExgLCBvciBgREVCVUdfSU5GT19CVEZgIGFyZSBuZWVkZWQgZm9yIGtmdW5jcy4gQWgsIHllcywgZm9yIHRob3NlIGtmdW5jcyAoYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgKSwgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgdHlwaWNhbGx5IHJlcXVpcmVkLiBHb29kIHRvIGtub3cuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBzeW1ib2xzLCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBvbmVzIHdlJiMzOTtsbCByZWFsbHkgYmUgZm9jdXNpbmcgb24uIEluIGBrZXJuZWwvYnBmL2NyeXB0by5jYCwgdGhlIGtmdW5jcyBhcmU6IGBicGZfY3J5cHRvX2N0eF9jcmVhdGVgLCBgYnBmX2NyeXB0b19jdHhfcmVsZWFzZWAsIGBicGZfY3J5cHRvX2N0eF9hY3F1aXJlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcmAsIGBicGZfY3J5cHRvX2RlY3J5cHRgLCBhbmQgYGJwZl9jcnlwdG9fZW5jcnlwdGAuIFRoZXNlIGFyZSB0aGUgbm9uLXN0YXRpYyBrZnVuY3MgZXhwb3NlZCB0byBCVEYgLyBCUEYgdmVyaWZpZXIuCgpBbHJpZ2h0LCBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBUaGlzIHBhdGNoIGlzIGEgYmlnIGRlYWwuIEl0JiMzOTtzIGNvbXBsZXRlbHkgcmV3b3JraW5nIHRoZSBCUEYgY3J5cHRvIGJhY2tlbmQuIFdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBza2NpcGhlciB0Zm1zIHRvIGRpcmVjdCBgYWVzX2NiY2AgLyBgYWVzX2VjYmAgbGlicmFyeSBmdW5jdGlvbnMuIFRoaXMgaW1wYWN0cyB2YWxpZGF0aW9uLCBtZW1vcnkgbWFuYWdlbWVudCAoc3BlY2lmaWNhbGx5IGBrZnJlZV9zZW5zaXRpdmVgKSwgdGhlIGNvcmUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGV4ZWN1dGlvbiBwYXRoLCBhbGdvcml0aG0gbG9va3VwLCBhbmQgdGhlIGtmdW5jIGludGVyZmFjZXMgdGhlbXNlbHZlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LCByZWFjaGFibGUgdmlhIHRoZSBgc3lzX2JwZmAgc3lzY2FsbCDigJMgZGVmaW5pdGVseSB3b3J0aCBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uCgpUaGVyZWZvcmUsIHRoZSBjb25maWdzIHRvIGVuYWJsZSBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfQ1JZUFRPYCwgYW5kIGBERUJVR19JTkZPX0JURmAuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBicGZfY3J5cHRvX2N0eF9jcmVhdGVgLCBgYnBmX2NyeXB0b19jdHhfcmVsZWFzZWAsIGBicGZfY3J5cHRvX2N0eF9hY3F1aXJlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcmAsIGBicGZfY3J5cHRvX2RlY3J5cHRgLCBhbmQgYGJwZl9jcnlwdG9fZW5jcnlwdGAuCgpGaW5hbGx5LCBhIHF1aWNrIGZpbmFsIGNoZWNrIG9mIGFsbCByZXF1aXJlbWVudHMgYW5kIGZvcm1hdCBvZiBgc2V0LXJlc3VsdHNgLgoKYFdvcnRoRnV6emluZ2A6IHRydWUKYEVuYWJsZUNvbmZpZ3NgOiBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O0JQRl9DUllQVE8mIzM0OywgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7XQpgRm9jdXNTeW1ib2xzYDogWyYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssICYjMzQ7YnBmX2NyeXB0b19jdHhfcmVsZWFzZSYjMzQ7LCAmIzM0O2JwZl9jcnlwdG9fY3R4X2FjcXVpcmUmIzM0OywgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywgJiMzNDticGZfY3J5cHRvX2RlY3J5cHQmIzM0OywgJiMzNDticGZfY3J5cHRvX2VuY3J5cHQmIzM0O10KYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24uCgpPa2F5LCByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfQ1JZUFRPJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19kZWNyeXB0JiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fZW5jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfQ1JZUFRPJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19kZWNyeXB0JiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fZW5jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXG5cbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSBjb250ZXh0IGBzdHJ1Y3QgYnBmX2NyeXB0b19jdHhgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgZW51bSBicGZfY3J5cHRvX2FsZ29faWRgIGFuZCB0aGUgYGFlc19rZXlgIHVuaW9uKSBhcmUgemVyby1pbml0aWFsaXplZC4gS2V5IHNldHVwIGlzIGhhbmRsZWQgYnkgYGFlc19wcmVwYXJla2V5KClgLiBDbGVhbnVwIGlzIGhhbmRsZWQgdmlhIGBrZnJlZV9zZW5zaXRpdmUoKWAuXG4yLiBCdWZmZXJzIFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXHUwMDNlPSBzcmNfbGVuYCkuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZy9jb250cm9sIGZsb3cuXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3YjQwOTIyM2UyNTFlMGEyMGI4ODlhYjdhNzZiNTk3ODMyOGZjZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAyOjI5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAzYTE5ZGE3NGQwMGM5Li4xNmYxMzI3MGNlMWY5IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtNDkzNiw4ICYjNDM7NDkzNiw2IEBAIEJQRiBbQ1JZUFRPXQogTToJVmFkaW0gRmVkb3JlbmtvICZsdDt2YWRpbS5mZWRvcmVua29AbGludXguZGV2Jmd0OwogTDoJYnBmQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYwotRjoJaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmgKIEY6CWtlcm5lbC9icGYvY3J5cHRvLmMKIAogQlBGIFtET0NVTUVOVEFUSU9OXSAoUmVsYXRlZCB0byBTdGFuZGFyZGl6YXRpb24pCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggODM4NmQ1NWE5NzU1ZS4uMzNiYjVhZDU5NWU4ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2NyeXB0by9NYWtlZmlsZQpAQCAtMjIsOSAmIzQzOzIyLDYgQEAgY3J5cHRvX3NrY2lwaGVyLXkgJiM0Mzs9IGxza2NpcGhlci5vCiBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gc2tjaXBoZXIubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgJiM0Mzs9IGNyeXB0b19za2NpcGhlci5vCi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSkKLW9iai0kKENPTkZJR19DUllQVE9fU0tDSVBIRVIyKSAmIzQzOz0gYnBmX2NyeXB0b19za2NpcGhlci5vCi1lbmRpZgogCiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSAmIzQzOz0gc2VxaXYubwogb2JqLSQoQ09ORklHX0NSWVBUT19FQ0hBSU5JVikgJiM0Mzs9IGVjaGFpbml2Lm8KZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg3OThkM2U4Yzg3Li4wMDAwMDAwMDAwMDAwCi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw4MyAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqLwotI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvYnBmX2NyeXB0by5oJmd0OwotI2luY2x1ZGUgJmx0O2NyeXB0by9za2NpcGhlci5oJmd0OwotCi1zdGF0aWMgdm9pZCAqYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ28pCi17Ci0JcmV0dXJuIGNyeXB0b19hbGxvY19sc2tjaXBoZXIoYWxnbywgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtKHZvaWQgKnRmbSkKLXsKLQljcnlwdG9fZnJlZV9sc2tjaXBoZXIodGZtKTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyhjb25zdCBjaGFyICphbGdvKQotewotCXJldHVybiBjcnlwdG9faGFzX3NrY2lwaGVyKGFsZ28sIENSWVBUT19BTEdfVFlQRV9MU0tDSVBIRVIsIENSWVBUT19BTEdfVFlQRV9NQVNLKTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3NldGtleSh0Zm0sIGtleSwga2V5bGVuKTsKLX0KLQotc3RhdGljIHUzMiBicGZfY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3Modm9pZCAqdGZtKQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh0Zm0pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh2b2lkICp0Zm0pCi17Ci0JcmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfaXZzaXplKHRmbSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHZvaWQgKnRmbSkKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodGZtKTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwKLQkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTggKnNpdikKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwKLQkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTggKnNpdikKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgYnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSA9IHsKLQkuYWxsb2NfdGZtCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtLAotCS5mcmVlX3RmbQk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtLAotCS5oYXNfYWxnbwk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvLAotCS5zZXRrZXkJCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5LAotCS5lbmNyeXB0CT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCwKLQkuZGVjcnlwdAk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQsCi0JLml2c2l6ZQkJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUsCi0JLnN0YXRlc2l6ZQk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSwKLQkuZ2V0X2ZsYWdzCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAmIzM0O3NrY2lwaGVyJiMzNDssCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKCZhbXA7YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZCkKLXsKLQlpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoJmFtcDticGZfY3J5cHRvX2xza2NpcGhlcl90eXBlKTsKLQlXQVJOX09OX09OQ0UoZXJyKTsKLX0KLQotbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTsKLW1vZHVsZV9leGl0KGJwZl9jcnlwdG9fc2tjaXBoZXJfZXhpdCk7Ci1NT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O1N5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MWU3MWQ0ZTJkOWYuLjAwMDAwMDAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmgKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwyNCAmIzQzOzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwotI2lmbmRlZiBfQlBGX0NSWVBUT19ICi0jZGVmaW5lIF9CUEZfQ1JZUFRPX0gKLQotc3RydWN0IGJwZl9jcnlwdG9fdHlwZSB7Ci0Jdm9pZCAqKCphbGxvY190Zm0pKGNvbnN0IGNoYXIgKmFsZ28pOwotCXZvaWQgKCpmcmVlX3RmbSkodm9pZCAqdGZtKTsKLQlpbnQgKCpoYXNfYWxnbykoY29uc3QgY2hhciAqYWxnbyk7Ci0JaW50ICgqc2V0a2V5KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pOwotCWludCAoKnNldGF1dGhzaXplKSh2b2lkICp0Zm0sIHVuc2lnbmVkIGludCBhdXRoc2l6ZSk7Ci0JaW50ICgqZW5jcnlwdCkodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOwotCWludCAoKmRlY3J5cHQpKHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKLQl1bnNpZ25lZCBpbnQgKCppdnNpemUpKHZvaWQgKnRmbSk7Ci0JdW5zaWduZWQgaW50ICgqc3RhdGVzaXplKSh2b2lkICp0Zm0pOwotCXUzMiAoKmdldF9mbGFncykodm9pZCAqdGZtKTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQljaGFyIG5hbWVbMTRdOwotfTsKLQotaW50IGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTsKLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTsKLQotI2VuZGlmIC8qIF9CUEZfQ1JZUFRPX0ggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvS2NvbmZpZyBiL2tlcm5lbC9icGYvS2NvbmZpZwppbmRleCBlYjNkZTM1NzM0ZjA5Li44MjI1OTliNDJiZTJlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9LY29uZmlnCkBAIC04Nyw2ICYjNDM7ODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkYKIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS4KIAomIzQzO2NvbmZpZyBCUEZfQ1JZUFRPCiYjNDM7CWRlZl9ib29sIHkKJiM0MzsJZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTAomIzQzOwlzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDCiYjNDM7CXNlbGVjdCBDUllQVE9fTElCX0FFU19FQ0IKJiM0MzsJaGVscAomIzQzOwkgIFByb3ZpZGUgdGhlIGtmdW5jcyBuZWVkZWQgZm9yIEJQRiBwcm9ncmFtcyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0CiYjNDM7CSAgZGF0YS4gVGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSBBRVMtQ0JDIGFuZCBBRVMtRUNCLgomIzQzOwogc291cmNlICYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWcmIzM0OwogCiBjb25maWcgQlBGX0xTTQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9NYWtlZmlsZSBiL2tlcm5lbC9icGYvTWFrZWZpbGUKaW5kZXggOTAyNTVkODBlNWJlNi4uYWIyZTVkMjc4MmU2ZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL01ha2VmaWxlCkBAIC01NSw5ICYjNDM7NTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm8KICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS4KIG9iai0ke0NPTkZJR19CUEZfTFNNfSAmIzQzOz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ubwogZW5kaWYKLWlmbmVxICgkKENPTkZJR19DUllQVE8pLCkKLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vCi1lbmRpZgomIzQzO29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSAmIzQzOz0gY3J5cHRvLm8KIG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvCiAKIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJlbG9fY29yZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NyeXB0by5jIGIva2VybmVsL2JwZi9jcnlwdG8uYwppbmRleCA1MWY4OWNlY2VmYjRkLi44Y2RjMTZmOWIzNzRhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY3J5cHRvLmMKQEAgLTEsMTkgJiM0MzsxLDEzIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvYnBmX2NyeXB0by5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9tZW1fYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsdGVyLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc2NhdHRlcmxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKLSNpbmNsdWRlICZsdDtjcnlwdG8vc2tjaXBoZXIuaCZndDsKLQotc3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0IHsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07CiYjNDM7I2luY2x1ZGUgJmx0O2NyeXB0by9hZXMtY2JjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2NyeXB0by9hZXMtZWNiLmgmZ3Q7CiAKIC8qIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3QgKi8KIC8qKgpAQCAtMzYsOTQgJiM0MzszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgewogCXUzMiBhdXRoc2l6ZTsKIH07CiAKLXN0YXRpYyBMSVNUX0hFQUQoYnBmX2NyeXB0b190eXBlcyk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7CiYjNDM7ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgewomIzQzOwlCUEZfQUxHT19BRVNfQ0JDLAomIzQzOwlCUEZfQUxHT19BRVNfRUNCLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB7CiYjNDM7CWNvbnN0IGNoYXIgKnR5cGVfbmFtZTsKJiM0MzsJY29uc3QgY2hhciAqYWxnb19uYW1lOwomIzQzOwllbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvOwomIzQzO30gYnBmX2NyeXB0b19hbGdvc1tdID0gewomIzQzOwl7ICYjMzQ7c2tjaXBoZXImIzM0OywgJiMzNDtjYmMoYWVzKSYjMzQ7LCBCUEZfQUxHT19BRVNfQ0JDIH0sCiYjNDM7CXsgJiMzNDtza2NpcGhlciYjMzQ7LCAmIzM0O2VjYihhZXMpJiMzNDssIEJQRl9BTEdPX0FFU19FQ0IgfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9jcnlwdG9fZmluZF9hbGdvKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkgZW51bSBicGZfY3J5cHRvX2FsZ29faWQgKmlkX3JldCkKJiM0Mzt7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtJmd0O3R5cGUsCiYjNDM7CQkJICAgIHNpemVvZihwYXJhbXMtJmd0O3R5cGUpKSA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICBzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnb19uYW1lLCBwYXJhbXMtJmd0O2FsZ28sCiYjNDM7CQkJICAgIHNpemVvZihwYXJhbXMtJmd0O2FsZ28pKSA9PSAwKSB7CiYjNDM7CQkJKmlkX3JldCA9IGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnbzsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogCiAvKioKICAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZQotICogQHR5cGU6CVRoZSBwb2ludGVyIHRvIGJwZiBjcnlwdG8gdHlwZQotICogQHRmbToJVGhlIHBvaW50ZXIgdG8gaW5zdGFuY2Ugb2YgY3J5cHRvIEFQSSBzdHJ1Y3QuCi0gKiBAc2l2X2xlbjogICAgU2l6ZSBvZiBJViBhbmQgc3RhdGUgc3RvcmFnZSBmb3IgY2lwaGVyCiYjNDM7ICogQGFsZ286CVRoZSBjcnlwdG8gYWxnb3JpdGhtIElECiYjNDM7ICogQGtleToJVGhlIGNyeXB0byBrZXkKICAqIEByY3U6CVRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS4KICAqIEB1c2FnZToJT2JqZWN0IHJlZmVyZW5jZSBjb3VudGVyLiBXaGVuIHRoZSByZWZjb3VudCBnb2VzIHRvIDAsIHRoZQogICoJCW1lbW9yeSBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZSBCUEYgYWxsb2NhdG9yLCB3aGljaCBwcm92aWRlcwogICoJCVJDVSBzYWZldHkuCiAgKi8KIHN0cnVjdCBicGZfY3J5cHRvX2N0eCB7Ci0JY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTsKLQl2b2lkICp0Zm07Ci0JdTMyIHNpdl9sZW47CiYjNDM7CWVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCBhZXNfa2V5IGFlczsKJiM0MzsJfSBrZXk7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAlyZWZjb3VudF90IHVzYWdlOwogfTsKIAotaW50IGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKQotewotCXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTsKLQlpbnQgZXJyID0gLUVCVVNZOwotCi0JZG93bl93cml0ZSgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7YnBmX2NyeXB0b190eXBlcywgbGlzdCkgewotCQlpZiAoIXN0cmNtcChub2RlLSZndDt0eXBlLSZndDtuYW1lLCB0eXBlLSZndDtuYW1lKSkKLQkJCWdvdG8gdW5sb2NrOwotCX0KLQotCW5vZGUgPSBrbWFsbG9jX29iaigqbm9kZSk7Ci0JZXJyID0gLUVOT01FTTsKLQlpZiAoIW5vZGUpCi0JCWdvdG8gdW5sb2NrOwotCi0Jbm9kZS0mZ3Q7dHlwZSA9IHR5cGU7Ci0JbGlzdF9hZGQoJmFtcDtub2RlLSZndDtsaXN0LCAmYW1wO2JwZl9jcnlwdG9fdHlwZXMpOwotCWVyciA9IDA7Ci0KLXVubG9jazoKLQl1cF93cml0ZSgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUpOwotCi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSkKLXsKLQlzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7Ci0JaW50IGVyciA9IC1FTk9FTlQ7Ci0KLQlkb3duX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDticGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7Ci0JCWlmIChzdHJjbXAobm9kZS0mZ3Q7dHlwZS0mZ3Q7bmFtZSwgdHlwZS0mZ3Q7bmFtZSkpCi0JCQljb250aW51ZTsKLQotCQlsaXN0X2RlbCgmYW1wO25vZGUtJmd0O2xpc3QpOwotCQlrZnJlZShub2RlKTsKLQkJZXJyID0gMDsKLQkJYnJlYWs7Ci0JfQotCXVwX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKmJwZl9jcnlwdG9fZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKLXsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlID0gRVJSX1BUUigtRU5PRU5UKTsKLQlzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7Ci0KLQlkb3duX3JlYWQoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYW1wO2JwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHsKLQkJaWYgKHN0cmNtcChub2RlLSZndDt0eXBlLSZndDtuYW1lLCBuYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh0cnlfbW9kdWxlX2dldChub2RlLSZndDt0eXBlLSZndDtvd25lcikpCi0JCQl0eXBlID0gbm9kZS0mZ3Q7dHlwZTsKLQkJYnJlYWs7Ci0JfQotCXVwX3JlYWQoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0KLQlyZXR1cm4gdHlwZTsKLX0KLQogX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogCiAvKioKQEAgLTE0Niw3ICYjNDM7OTksNiBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKgogYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeiwKIAkJICAgICAgaW50ICplcnIpCiB7Ci0JY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTsKIAlzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDsKIAogCWlmICghcGFyYW1zIHx8IHBhcmFtcy0mZ3Q7cmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLSZndDtyZXNlcnZlZFsxXSB8fApAQCAtMTU1LDY5ICYjNDM7MTA3LDQwIEBAIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osCiAJCXJldHVybiBOVUxMOwogCX0KIAotCXR5cGUgPSBicGZfY3J5cHRvX2dldF90eXBlKHBhcmFtcy0mZ3Q7dHlwZSk7Ci0JaWYgKElTX0VSUih0eXBlKSkgewotCQkqZXJyID0gUFRSX0VSUih0eXBlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKCF0eXBlLSZndDtoYXNfYWxnbyhwYXJhbXMtJmd0O2FsZ28pKSB7Ci0JCSplcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKLQl9Ci0KLQlpZiAoISFwYXJhbXMtJmd0O2F1dGhzaXplIF4gISF0eXBlLSZndDtzZXRhdXRoc2l6ZSkgewotCQkqZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gZXJyX21vZHVsZV9wdXQ7Ci0JfQotCi0JaWYgKCFwYXJhbXMtJmd0O2tleV9sZW4gfHwgcGFyYW1zLSZndDtrZXlfbGVuICZndDsgc2l6ZW9mKHBhcmFtcy0mZ3Q7a2V5KSkgewotCQkqZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKLQl9Ci0KIAljdHggPSBremFsbG9jX29iaigqY3R4KTsKIAlpZiAoIWN0eCkgewogCQkqZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKJiM0MzsJCXJldHVybiBOVUxMOwogCX0KIAotCWN0eC0mZ3Q7dHlwZSA9IHR5cGU7Ci0JY3R4LSZndDt0Zm0gPSB0eXBlLSZndDthbGxvY190Zm0ocGFyYW1zLSZndDthbGdvKTsKLQlpZiAoSVNfRVJSKGN0eC0mZ3Q7dGZtKSkgewotCQkqZXJyID0gUFRSX0VSUihjdHgtJmd0O3RmbSk7Ci0JCWdvdG8gZXJyX2ZyZWVfY3R4OwomIzQzOwlpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgJmFtcDtjdHgtJmd0O2FsZ28pKSB7CiYjNDM7CQkqZXJyID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0OwogCX0KIAotCWlmIChwYXJhbXMtJmd0O2F1dGhzaXplKSB7Ci0JCSplcnIgPSB0eXBlLSZndDtzZXRhdXRoc2l6ZShjdHgtJmd0O3RmbSwgcGFyYW1zLSZndDthdXRoc2l6ZSk7Ci0JCWlmICgqZXJyKQotCQkJZ290byBlcnJfZnJlZV90Zm07CiYjNDM7CXN3aXRjaCAoY3R4LSZndDthbGdvKSB7CiYjNDM7CWNhc2UgQlBGX0FMR09fQUVTX0NCQzoKJiM0MzsJY2FzZSBCUEZfQUxHT19BRVNfRUNCOgomIzQzOwkJaWYgKHBhcmFtcy0mZ3Q7YXV0aHNpemUpCiYjNDM7CQkJKmVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZWxzZQomIzQzOwkJCSplcnIgPSBhZXNfcHJlcGFyZWtleSgmYW1wO2N0eC0mZ3Q7a2V5LmFlcywgcGFyYW1zLSZndDtrZXksCiYjNDM7CQkJCQkgICAgICBwYXJhbXMtJmd0O2tleV9sZW4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OKDEpOwomIzQzOwkJKmVyciA9IC1FTk9FTlQ7CiYjNDM7CQlicmVhazsKIAl9CiAKLQkqZXJyID0gdHlwZS0mZ3Q7c2V0a2V5KGN0eC0mZ3Q7dGZtLCBwYXJhbXMtJmd0O2tleSwgcGFyYW1zLSZndDtrZXlfbGVuKTsKLQlpZiAoKmVycikKLQkJZ290byBlcnJfZnJlZV90Zm07Ci0KLQlpZiAodHlwZS0mZ3Q7Z2V0X2ZsYWdzKGN0eC0mZ3Q7dGZtKSAmYW1wOyBDUllQVE9fVEZNX05FRURfS0VZKSB7Ci0JCSplcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9mcmVlX3RmbTsKJiM0MztvdXQ6CiYjNDM7CWlmICgqZXJyKSB7CiYjNDM7CQlrZnJlZV9zZW5zaXRpdmUoY3R4KTsKJiM0MzsJCXJldHVybiBOVUxMOwogCX0KIAotCWN0eC0mZ3Q7c2l2X2xlbiA9IHR5cGUtJmd0O2l2c2l6ZShjdHgtJmd0O3RmbSkgJiM0MzsgdHlwZS0mZ3Q7c3RhdGVzaXplKGN0eC0mZ3Q7dGZtKTsKLQogCXJlZmNvdW50X3NldCgmYW1wO2N0eC0mZ3Q7dXNhZ2UsIDEpOwotCiAJcmV0dXJuIGN0eDsKLQotZXJyX2ZyZWVfdGZtOgotCXR5cGUtJmd0O2ZyZWVfdGZtKGN0eC0mZ3Q7dGZtKTsKLWVycl9mcmVlX2N0eDoKLQlrZnJlZShjdHgpOwotZXJyX21vZHVsZV9wdXQ6Ci0JbW9kdWxlX3B1dCh0eXBlLSZndDtvd25lcik7Ci0KLQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQpAQCAtMjI1LDkgJiM0MzsxNDgsNyBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiAJc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7CiAKIAljdHggPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9jcnlwdG9fY3R4LCByY3UpOwotCWN0eC0mZ3Q7dHlwZS0mZ3Q7ZnJlZV90Zm0oY3R4LSZndDt0Zm0pOwotCW1vZHVsZV9wdXQoY3R4LSZndDt0eXBlLSZndDtvd25lcik7Ci0Ja2ZyZWUoY3R4KTsKJiM0MzsJa2ZyZWVfc2Vuc2l0aXZlKGN0eCk7CiB9CiAKIC8qKgpAQCAtMjY3LDI3ICYjNDM7MTg4LDUzIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eCkKIH0KIENGSV9OT1NFQUwoYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKTsKIAomIzQzO3N0YXRpYyBpbnQgYnBmX2Flc19jYmNfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLAomIzQzOwkJCSAgICAgdTggKml2LCB1MzIgaXZfbGVuLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdCkKJiM0Mzt7CiYjNDM7CWlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuICZsdDsgc3JjX2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoZGVjcnlwdCkKJiM0MzsJCWFlc19jYmNfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsICZhbXA7Y3R4LSZndDtrZXkuYWVzKTsKJiM0MzsJZWxzZQomIzQzOwkJYWVzX2NiY19lbmNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgJmFtcDtjdHgtJmd0O2tleS5hZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfYWVzX2VjYl9jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sCiYjNDM7CQkJICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KQomIzQzO3sKJiM0MzsJaWYgKGl2X2xlbiAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiAmbHQ7IHNyY19sZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGRlY3J5cHQpCiYjNDM7CQlhZXNfZWNiX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sICZhbXA7Y3R4LSZndDtrZXkuYWVzKTsKJiM0MzsJZWxzZQomIzQzOwkJYWVzX2VjYl9lbmNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCAmYW1wO2N0eC0mZ3Q7a2V5LmFlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0LAotCQkJICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsCiAJCQkgICAgYm9vbCBkZWNyeXB0KQogewotCXUzMiBzcmNfbGVuLCBkc3RfbGVuLCBzaXZfbGVuOwomIzQzOwl1MzIgc3JjX2xlbiwgZHN0X2xlbiwgaXZfbGVuOwogCWNvbnN0IHU4ICpwc3JjOwogCXU4ICpwZHN0LCAqcGl2OwotCWludCBlcnI7CiAKIAlpZiAoX19icGZfZHlucHRyX2lzX3Jkb25seShkc3QpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNpdl9sZW4gPSBzaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShzaXYpIDogMDsKJiM0MzsJaXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwOwogCXNyY19sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShzcmMpOwogCWRzdF9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShkc3QpOwotCWlmICghc3JjX2xlbiB8fCAhZHN0X2xlbiB8fCBzcmNfbGVuICZndDsgZHN0X2xlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc2l2X2xlbiAhPSBjdHgtJmd0O3Npdl9sZW4pCiYjNDM7CWlmICghc3JjX2xlbiB8fCAhZHN0X2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwc3JjID0gX19icGZfZHlucHRyX2RhdGEoc3JjLCBzcmNfbGVuKTsKQEAgLTI5NywxNCAmIzQzOzI0NCwyMCBAQCBzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAJaWYgKCFwZHN0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBpdiA9IHNpdl9sZW4gPyBfX2JwZl9keW5wdHJfZGF0YV9ydyhzaXYsIHNpdl9sZW4pIDogTlVMTDsKLQlpZiAoc2l2X2xlbiAmYW1wOyZhbXA7ICFwaXYpCiYjNDM7CXBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDsKJiM0MzsJaWYgKGl2X2xlbiAmYW1wOyZhbXA7ICFwaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0gZGVjcnlwdCA/IGN0eC0mZ3Q7dHlwZS0mZ3Q7ZGVjcnlwdChjdHgtJmd0O3RmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KQotCQkgICAgICA6IGN0eC0mZ3Q7dHlwZS0mZ3Q7ZW5jcnlwdChjdHgtJmd0O3RmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTsKLQotCXJldHVybiBlcnI7CiYjNDM7CXN3aXRjaCAoY3R4LSZndDthbGdvKSB7CiYjNDM7CWNhc2UgQlBGX0FMR09fQUVTX0NCQzoKJiM0MzsJCXJldHVybiBicGZfYWVzX2NiY19jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsCiYjNDM7CQkJCQkgaXZfbGVuLCBjdHgsIGRlY3J5cHQpOwomIzQzOwljYXNlIEJQRl9BTEdPX0FFU19FQ0I6CiYjNDM7CQlyZXR1cm4gYnBmX2Flc19lY2JfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LAomIzQzOwkJCQkJIGl2X2xlbiwgY3R4LCBkZWNyeXB0KTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiB9CiAKIC8qKgpAQCAtMzEyLDIwICYjNDM7MjY1LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKICAqIEBjdHg6CQlUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgogICogQHNyYzoJCWJwZl9keW5wdHIgdG8gdGhlIGVuY3J5cHRlZCBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgogICogQGRzdDoJCWJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgotICogQHNpdl9fbnVsbGFibGU6CWJwZl9keW5wdHIgdG8gSVYgZGF0YSBhbmQgc3RhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IGRlY3J5cHRvci4gTWF5IGJlIE5VTEwuCiYjNDM7ICogQGl2X19udWxsYWJsZToJYnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC4KICAqCiAgKiBEZWNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LAotCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKQomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKQogewogCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7CiAJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDsKLQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc2l2X19udWxsYWJsZTsKJiM0MzsJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlOwogCi0JcmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCB0cnVlKTsKJiM0MzsJcmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIHRydWUpOwogfQogCiAvKioKQEAgLTMzMywyMCAmIzQzOzI4NiwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19kZWNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogICogQGN0eDoJCVRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCiAgKiBAc3JjOgkJYnBmX2R5bnB0ciB0byB0aGUgcGxhaW4gZGF0YS4gTXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci4KICAqIEBkc3Q6CQlicGZfZHlucHRyIHRvIHRoZSBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdC4gTXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci4KLSAqIEBzaXZfX251bGxhYmxlOglicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLgomIzQzOyAqIEBpdl9fbnVsbGFibGU6CWJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuCiAgKgogICogRW5jcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLgogICovCiBfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19lbmNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsCiAJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc2l2X19udWxsYWJsZSkKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSkKIHsKIAljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjOwogCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRzdF9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkc3Q7Ci0JY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNpdl9fbnVsbGFibGU7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTsKIAotCXJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBzaXZfa2VybiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpOwogfQogCiBfX2JwZl9rZnVuY19lbmRfZGVmcygpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBDcnlwdG8gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcyBvciBtZW1vcnkgbGVha3MuCgpGaXJzdCwgSSBuZWVkIHRvIGdyYXNwIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMuIEl0IHNlZW1zIHdlJiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBnZW5lcmljIEJQRiBjcnlwdG8gZHluYW1pYyByZWdpc3RyYXRpb24gZnJhbWV3b3JrICh1c2luZyBgY3J5cHRvIHRmbWAgQVBJIGZvciBgc2tjaXBoZXJgIGFuZCBgbHNrY2lwaGVyYCkgYW5kIG9wdGluZyBmb3IgYSBkaXJlY3QgaW1wbGVtZW50YXRpb24gbGV2ZXJhZ2luZyB0aGUgYGNyeXB0by9hZXMtY2JjLmhgIGFuZCBgY3J5cHRvL2Flcy1lY2IuaGAgaGVscGVycyAoYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgKS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHNoaWZ0LCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlsczoKCiogICBUaGUgcGF0Y2ggcmVtb3ZlcyBgY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaGAsIHN1Z2dlc3RpbmcgYSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgZnJhbWV3b3JrLgoqICAgSW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGl0JiMzOTtzIGFkZGluZyBgY29uZmlnIEJQRl9DUllQVE9gIGFuZCBzZWxlY3RpbmcgYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgLCB3aGljaCBjb25maXJtcyB0aGUgQUVTLXNwZWNpZmljIGZvY3VzLgoqICAgVGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlIHdpdGhpbiBga2VybmVsL2JwZi9jcnlwdG8uY2AuIEhlcmUmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIHRoZSBtb3N0OgogICAgKiAgIFRoZSBgYnBmX2NyeXB0b190eXBlc2AgcmVnaXN0cnkgYW5kIHRoZSBgdGZtYC1iYXNlZCBkaXNwYXRjaCBhcmUgZ29uZSwgcmVwbGFjZWQgYnkgYSBoYXJkY29kZWQgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBmb3IgQUVTIENCQyBhbmQgRUNCLiBUaGlzIGlzIGEgc2ltcGxpZmljYXRpb24gYnV0IGNvdWxkIGludHJvZHVjZSBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgogICAgKiAgIFRoZSBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBoYXMgYmVlbiBtb2RpZmllZC4gSXQgbm93IGNvbnRhaW5zIGFuIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAsIGEgdW5pb24gZm9yIHRoZSBBRVMga2V5IChgc3RydWN0IGFlc19rZXlgKSwgYW4gYHJjdV9oZWFkYCwgYW5kIGEgYHJlZmNvdW50X3RgLiBUaGlzIGxvb2tzIGdlbmVyYWxseSBzb3VuZCwgYW5kIEkgc2VlIGl0JiMzOTtzIG5vdyB6ZXJvLWluaXRpYWxpemVkIGJ5IGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KICAgICogICBgYnBmX2NyeXB0b19jdHhfY3JlYXRlKClgIGlzIHdoZXJlIEkgd2FudCB0byBsb29rIGNsb3NlbHkuIEl0JiMzOTtzIGRvaW5nIHNvbWUgcGFyYW1ldGVyIGNoZWNraW5nLCBjYWxsaW5nIGBhZXNfcHJlcGFyZWtleWAsIGFuZCBoYW5kbGluZyBlcnJvcnMgYnkgZnJlZWluZyB0aGUgY29udGV4dCB3aXRoIGBrZnJlZV9zZW5zaXRpdmVgLiBUaGlzIHNlZW1zIHJlYXNvbmFibGUsIGJ1dCBgYWVzX3ByZXBhcmVrZXlgIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KICAgICogICBgY3J5cHRvX2ZyZWVfY2IoKWAgdXNlcyBga2ZyZWVfc2Vuc2l0aXZlYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHNlbnNpdGl2ZSBrZXkgbWF0ZXJpYWwuCiAgICAqICAgVGhlIGBicGZfYWVzX2NiY19jcnlwdGAgYW5kIGBicGZfYWVzX2VjYl9jcnlwdGAgZnVuY3Rpb25zIGFyZSBwcmVzZW50IHdpdGggc2FuaXR5IGNoZWNrcyAoSVYgbGVuZ3RoLCBzb3VyY2UvZGVzdGluYXRpb24gbGVuZ3RoIGNoZWNrcykuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgQUVTIG9wZXJhdGlvbnMgYXJlIGRlbGVnYXRlZCB0byBgYWVzX2NiY19kZWNyeXB0YC9gYWVzX2NiY19lbmNyeXB0YCBhbmQgYGFlc19lY2JfZGVjcnlwdGAvYGFlc19lY2JfZW5jcnlwdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbXkgbmV4dCBhcmVhIG9mIGZvY3VzLgogICAgKiAgIGBicGZfY3J5cHRvX2NyeXB0YCBzZWVtcyB0byBiZSB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIHRoYXQgZG9lcyBzaXplIGNoZWNraW5nLCBleHRyYWN0cyB0aGUgcG9pbnRlcnMsIGFuZCBkaXNwYXRjaGVzIHRvIHRoZSBBRVMgQ0JDIG9yIEVDQiBmdW5jdGlvbnMuIEl0IGFsc28gY2FsbHMgdGhlIGBfX2JwZl9keW5wdHJfaXNfcmRvbmx5YCBhbmQgYF9fYnBmX2R5bnB0cl9kYXRhYCBmYW1pbHkgb2YgZnVuY3Rpb25zLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgc291cmNlLCBkZXN0aW5hdGlvbiwgYW5kIElWIGJ1ZmZlcnMuCgpNeSBtYWluIGNvbmNlcm5zIHJpZ2h0IG5vdyByZXZvbHZlIGFyb3VuZCB0aGVzZSBhc3BlY3RzOgoKMS4gICoqYGFlc19wcmVwYXJla2V5YDoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgbGVhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBgc3RydWN0IGFlc19rZXlgLgoyLiAgKipgYWVzX2NiY19lbmNyeXB0L2RlY3J5cHRgIGFuZCBgYWVzX2VjYl9lbmNyeXB0L2RlY3J5cHRgOioqIEkgaGF2ZSB0byBhbmFseXplIHRoZXNlIGltcGxlbWVudGF0aW9ucyBmb3IgYW55IHN1YnRsZSBmbGF3cyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgcGFkZGluZyBpc3N1ZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBpbnB1dCBkYXRhIGlzIGhhbmRsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHJlYWRpbmcgYmV5b25kIHRoZSBwcm92aWRlZCBidWZmZXJzLgozLiAgKipEYXRhIG1vdmVtZW50OioqIHRoZSBgX19icGZfZHlucHRyX2RhdGFgIGNhbGxzLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIHNvdXJjZSwgZGVzdGluYXRpb24gYW5kIElWIGJ1ZmZlcnMgYXJlIGFsbCBoYW5kbGVkIHNhZmVseS4KNC4gICoqYHN0cnVjdCBhZXNfa2V5YDoqKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGNyaXRpY2FsIGZvciBjaGVja2luZyBwYWRkaW5nIGJ5dGVzLgoKSSB3aWxsIGNvbmR1Y3QgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBkZWZpbml0aW9ucyBvZiBgc3RydWN0IGFlc19rZXlgLCBgYWVzX3ByZXBhcmVrZXlgLCBhbmQgdGhlIEFFUyBlbmNyeXB0L2RlY3J5cHQgZnVuY3Rpb25zLCB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBvY2N1cnJlbmNlcyBvZiB0aGVzZSBmdW5jdGlvbnMgb3IgZGVmaW5pdGlvbnMsIHNvIGFzIG5vdCB0byBtaXNzIGFueSBkZXRhaWwuIEJhc2VkIG9uIG15IGZpbmRpbmdzLCBJJiMzOTtsbCBkZWNpZGUgaWYgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYW4gZXh0cmEgbGF5ZXIgb2Ygc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Flc19wcmVwYXJla2V5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYz0yMzQ9c3RhdGljIGludCBhZXNic194dHNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmluX2tleSxcbi0tXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtMjQ0LVx0a2V5X2xlbiAvPSAyO1xuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jOjI0NTpcdGVyciA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmN0eC1cdTAwM2VmYWxsYmFjaywgaW5fa2V5LCBrZXlfbGVuKTtcbmFyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYy0yNDYtXHRpZiAoZXJyKVxuLS1cbmNyeXB0by9hZXMuYz0yNj1zdGF0aWMgaW50IGNyeXB0b19hZXNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksXG4tLVxuY3J5cHRvL2Flcy5jLTMwLVxuY3J5cHRvL2Flcy5jOjMxOlx0cmV0dXJuIGFlc19wcmVwYXJla2V5KGtleSwgaW5fa2V5LCBrZXlfbGVuKTtcbmNyeXB0by9hZXMuYy0zMi19XG4tLVxuY3J5cHRvL2Flcy5jPTIxMz1jcnlwdG9fYWVzX3NrY2lwaGVyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksXG4tLVxuY3J5cHRvL2Flcy5jLTIxNy1cbmNyeXB0by9hZXMuYzoyMTg6XHRyZXR1cm4gYWVzX3ByZXBhcmVrZXkoa2V5LCBpbl9rZXksIGtleV9sZW4pO1xuY3J5cHRvL2Flcy5jLTIxOS19XG4tLVxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYz0xMDI1PXN0YXRpYyBpbnQgY2hjcl91cGRhdGVfdHdlYWsoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgdTggKml2LFxuLS1cbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTA0Ni1cdFx0XHQ9PSBDSENSX0tFWUNUWF9DSVBIRVJfS0VZX1NJWkVfMTkyKVxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYzoxMDQ3Olx0XHRyZXQgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZhZXMsIGtleSwga2V5bGVuIC0gOCk7XG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jLTEwNDgtXHRlbHNlXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwNDk6XHRcdHJldCA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmFlcywga2V5LCBrZXlsZW4pO1xuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYy0xMDUwLVx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtMTktICpcdGxhc3QgY2lwaGVydGV4dCBibG9jayAob3IgbGVmdCB1bmNoYW5nZWQgaWYgQGxlbiA9PSAwKS5cbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDoyMDogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KCkgb3IgYWVzX3ByZXBhcmVlbmNrZXkoKVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTIxLSAqXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTI3PXZvaWQgYWVzX2NiY19lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTM3LSAqXHRsYXN0IGNpcGhlcnRleHQgYmxvY2sgKG9yIGxlZnQgdW5jaGFuZ2VkIGlmIEBsZW4gPT0gMCkuXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg6Mzg6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtMzktICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg9NDU9dm9pZCBhZXNfY2JjX2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNTQtICogQGl2OiBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLCBjbG9iYmVyZWQgYnkgdGhpcyBmdW5jdGlvblxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjU1OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKSBvciBhZXNfcHJlcGFyZWVuY2tleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNTYtICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg9NTk9dm9pZCBhZXNfY2JjX2N0c19lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTY4LSAqIEBpdjogVGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciwgY2xvYmJlcmVkIGJ5IHRoaXMgZnVuY3Rpb25cbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDo2OTogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KClcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC03MC0gKlxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1jdHIuaC0xOC0gKiBAY3RyOiBUaGUgY291bnRlci4gIEl0IHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgY2VpbChAbGVuIC8gQUVTX0JMT0NLX1NJWkUpLlxuaW5jbHVkZS9jcnlwdG8vYWVzLWN0ci5oOjE5OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKSBvciBhZXNfcHJlcGFyZWVuY2tleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtMjAtICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmg9MzQ9dm9pZCBhZXNfY3RyKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWN0ci5oLTQ1LSAqIEBpdjogVGhlIGluaXRpYWxpemF0aW9uIHZlY3RvclxuaW5jbHVkZS9jcnlwdG8vYWVzLWN0ci5oOjQ2OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKSBvciBhZXNfcHJlcGFyZWVuY2tleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtNDctICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMTctICogQGxlbjogTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY3J5cHQuICBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgQUVTX0JMT0NLX1NJWkUuXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MTg6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaC0xOS0gKlxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaD0yOD12b2lkIGFlc19lY2JfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLCBhZXNfZW5jcnlwdF9hcmcga2V5KTtcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMzUtICogQGxlbjogTnVtYmVyIG9mIGJ5dGVzIHRvIGRlY3J5cHQuICBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgQUVTX0JMT0NLX1NJWkUuXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MzY6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMzctICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zMDg9dm9pZCBhZXNfc3BhcmM2NF9jdHJfY3J5cHRfMjU2KGNvbnN0IHU2NCAqa2V5LCBjb25zdCB1NjQgKmlucHV0LCB1NjQgKm91dHB1dCxcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMTItLyoqXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMTM6ICogYWVzX3ByZXBhcmVrZXkoKSAtIFByZXBhcmUgYW4gQUVTIGtleSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvblxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzE0LSAqIEBrZXk6IChvdXRwdXQpIFRoZSBrZXkgc3RydWN0dXJlIHRvIGluaXRpYWxpemVcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzQtICovXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMzU6aW50IGFlc19wcmVwYXJla2V5KHN0cnVjdCBhZXNfa2V5ICprZXksIGNvbnN0IHU4ICppbl9rZXksIHNpemVfdCBrZXlfbGVuKTtcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMzNi1cbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zNzc9dm9pZCBhZXNfZW5jcnlwdChhZXNfZW5jcnlwdF9hcmcga2V5LCB1OCBvdXRbYXRfbGVhc3QgQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4MS0gKiBhZXNfZGVjcnlwdCgpIC0gRGVjcnlwdCBhIHNpbmdsZSBBRVMgYmxvY2tcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM4MjogKiBAa2V5OiBUaGUgQUVTIGtleSwgcHJldmlvdXNseSBpbml0aWFsaXplZCBieSBhZXNfcHJlcGFyZWtleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zODMtICogQG91dDogQnVmZmVyIHRvIHN0b3JlIHRoZSBwbGFpbnRleHQgYmxvY2tcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTk5PWJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0xMjYtXHRcdGVsc2Vcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTI3Olx0XHRcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZjdHgtXHUwMDNla2V5LmFlcywgcGFyYW1zLVx1MDAzZWtleSxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTI4LVx0XHRcdFx0XHQgICAgICBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4tLVxubGliL2NyeXB0by9hZXMuYz00MTE9c3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgYWVzX2RlY3J5cHRfZ2VuZXJpYyhjb25zdCB1MzIgaW52X3JuZGtleXNbXSxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTQ1MC0gKlxubGliL2NyeXB0by9hZXMuYzo0NTE6ICogYWVzX3ByZXBhcmVrZXlfYXJjaCgpIGlzIHBhc3NlZCBhbiBvcHRpb25hbCBwb2ludGVyICYjMzk7aW52X2smIzM5OyB3aGljaCBwb2ludHMgdG9cbmxpYi9jcnlwdG8vYWVzLmMtNDUyLSAqIHRoZSBhcmVhIHRvIHN0b3JlIHRoZSBwcmVwYXJlZCBkZWNyeXB0aW9uIGtleS4gIEl0IHdpbGwgYmUgTlVMTCBpZiB0aGUgdXNlclxubGliL2NyeXB0by9hZXMuYzo0NTM6ICogaXMgcmVxdWVzdGluZyBlbmNyeXB0aW9uLW9ubHkuICBhZXNfcHJlcGFyZWtleV9hcmNoKCkgaXMgYWxzbyBwYXNzZWQgYSB2YWxpZFxubGliL2NyeXB0by9hZXMuYy00NTQtICogJiMzOTtrZXlfbGVuJiMzOTsgYW5kICYjMzk7bnJvdW5kcyYjMzk7LCBjb3JyZXNwb25kaW5nIHRvIEFFUy0xMjgsIEFFUy0xOTIsIG9yIEFFUy0yNTYuXG4tLVxubGliL2NyeXB0by9hZXMuYy00NjEtXG5saWIvY3J5cHRvL2Flcy5jOjQ2MjpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcbmxpYi9jcnlwdG8vYWVzLmMtNDYzLVx0XHRcdFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTQ3Nz1zdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXG4tLVxubGliL2NyeXB0by9hZXMuYy00ODQtXG5saWIvY3J5cHRvL2Flcy5jOjQ4NTpzdGF0aWMgaW50IF9fYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19lbmNrZXkgKmVuY19rZXksXG5saWIvY3J5cHRvL2Flcy5jLTQ4Ni1cdFx0XHQgICAgdW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTQ5Mi1cdGVuY19rZXktXHUwMDNlbnJvdW5kcyA9IDYgJiM0Mzsga2V5X2xlbiAvIDQ7XG5saWIvY3J5cHRvL2Flcy5jOjQ5MzpcdGFlc19wcmVwYXJla2V5X2FyY2goXHUwMDI2ZW5jX2tleS1cdTAwM2VrLCBpbnZfaywgaW5fa2V5LCBrZXlfbGVuLFxubGliL2NyeXB0by9hZXMuYy00OTQtXHRcdFx0ICAgIGVuY19rZXktXHUwMDNlbnJvdW5kcyk7XG4tLVxubGliL2NyeXB0by9hZXMuYy00OTctXG5saWIvY3J5cHRvL2Flcy5jOjQ5ODppbnQgYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSwgc2l6ZV90IGtleV9sZW4pXG5saWIvY3J5cHRvL2Flcy5jLTQ5OS17XG5saWIvY3J5cHRvL2Flcy5jOjUwMDpcdHJldHVybiBfX2Flc19wcmVwYXJla2V5KChzdHJ1Y3QgYWVzX2VuY2tleSAqKWtleSwgXHUwMDI2a2V5LVx1MDAzZWludl9rLFxubGliL2NyeXB0by9hZXMuYy01MDEtXHRcdFx0XHRpbl9rZXksIGtleV9sZW4pO1xubGliL2NyeXB0by9hZXMuYy01MDItfVxubGliL2NyeXB0by9hZXMuYzo1MDM6RVhQT1JUX1NZTUJPTChhZXNfcHJlcGFyZWtleSk7XG5saWIvY3J5cHRvL2Flcy5jLTUwNC1cbmxpYi9jcnlwdG8vYWVzLmM9NTA1PWludCBhZXNfcHJlcGFyZWVuY2tleShzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbilcbmxpYi9jcnlwdG8vYWVzLmMtNTA2LXtcbmxpYi9jcnlwdG8vYWVzLmM6NTA3Olx0cmV0dXJuIF9fYWVzX3ByZXBhcmVrZXkoa2V5LCBOVUxMLCBpbl9rZXksIGtleV9sZW4pO1xubGliL2NyeXB0by9hZXMuYy01MDgtfVxuLS1cbmxpYi9jcnlwdG8vYWVzLmM9NTI2PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZmlwc190ZXN0KHZvaWQpXG4tLVxubGliL2NyeXB0by9hZXMuYy01MzAtXG5saWIvY3J5cHRvL2Flcy5jOjUzMTpcdGlmIChhZXNfcHJlcGFyZWtleShcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcbmxpYi9jcnlwdG8vYWVzLmMtNTMyLVx0XHRwYW5pYyhcJiMzNDthZXM6IEZJUFMgc2VsZi10ZXN0IGZhaWxlZCAocHJlcGFyZWtleSlcXG5cJiMzNDspO1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9ODE0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZWNiX2ZpcHNfdGVzdCh2b2lkKVxuLS1cbmxpYi9jcnlwdG8vYWVzLmMtODE4LVxubGliL2NyeXB0by9hZXMuYzo4MTk6XHRpZiAoYWVzX3ByZXBhcmVrZXkoXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXG5saWIvY3J5cHRvL2Flcy5jLTgyMC1cdFx0cGFuaWMoXCYjMzQ7YWVzOiBFQ0IgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcblwmIzM0Oyk7XG4tLVxubGliL2NyeXB0by9hZXMuYz0xMDI0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfY2JjX2ZpcHNfdGVzdCh2b2lkKVxuLS1cbmxpYi9jcnlwdG8vYWVzLmMtMTAyOS1cbmxpYi9jcnlwdG8vYWVzLmM6MTAzMDpcdGlmIChhZXNfcHJlcGFyZWtleShcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcbmxpYi9jcnlwdG8vYWVzLmMtMTAzMS1cdFx0cGFuaWMoXCYjMzQ7YWVzOiBDQkMgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcblwmIzM0Oyk7XG4tLVxubGliL2NyeXB0by9hZXMuYz0xMDQ3PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfY2JjX2N0c19maXBzX3Rlc3Qodm9pZClcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTEwNTgtXG5saWIvY3J5cHRvL2Flcy5jOjEwNTk6XHRpZiAoYWVzX3ByZXBhcmVrZXkoXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXG5saWIvY3J5cHRvL2Flcy5jLTEwNjAtXHRcdHBhbmljKFwmIzM0O2FlczogQ0JDLUNUUyBGSVBTIHNlbGYtdGVzdCBmYWlsZWQgKHByZXBhcmVrZXkpXFxuXCYjMzQ7KTtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTEyMDY9aW50IGFlc194dHNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX3h0c19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTEyMTQtXHQvKiBGaXJzdCBoYWxmIG9mIFhUUyBrZXkgaXMgdGhlIG1haW4ga2V5ICovXG5saWIvY3J5cHRvL2Flcy5jOjEyMTU6XHRlcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZrZXktXHUwMDNlbWFpbl9rZXksIGluX2tleSwga2V5X2xlbiAvIDIpO1xubGliL2NyeXB0by9hZXMuYy0xMjE2LVx0aWYgKHVubGlrZWx5KGVycikpXG4tLVxubGliL2NyeXB0by9hcm0vYWVzLmg9MTI9YXNtbGlua2FnZSB2b2lkIF9fYWVzX2FybV9kZWNyeXB0KGNvbnN0IHUzMiBpbnZfcmtbXSwgaW50IHJvdW5kcyxcbi0tXG5saWIvY3J5cHRvL2FybS9hZXMuaC0xNS1cbmxpYi9jcnlwdG8vYXJtL2Flcy5oOjE2OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxubGliL2NyeXB0by9hcm0vYWVzLmgtMTctXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg9NDE9c3RhdGljIHZvaWQgYWVzX2V4cGFuZGtleV9hcm02NCh1MzIgcm5ka2V5c1tdLCB1MzIgKmludl9ybmRrZXlzLFxuLS1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmgtMTA3LVxubGliL2NyeXB0by9hcm02NC9hZXMuaDoxMDg6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL2FybTY0L2Flcy5oLTEwOS1cdFx0XHRcdHVuaW9uIGFlc19pbnZrZXlfYXJjaCAqaW52X2ssXG4tLVxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oPTM4PXN0YXRpYyB2b2lkIHNwZV9lbmQodm9pZClcbi0tXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNDQtXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg6NDU6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNDYtXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD0xMDk9c3RhdGljIHZvaWQgcm5ka2V5X2Zyb21fdnN4KHUzMiBvdXRbNF0sIGNvbnN0IHUzMiBpbls0XSwgYm9vbCBhcHBseV9pbnZfbWl4KVxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xMjgtXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg6MTI5OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oLTEzMC1cdFx0XHRcdHVuaW9uIGFlc19pbnZrZXlfYXJjaCAqaW52X2ssXG4tLVxubGliL2NyeXB0by9yaXNjdi9hZXMuaD0xNT12b2lkIGFlc19kZWNyeXB0X3p2a25lZChjb25zdCB1MzIgcm5ka2V5c1tdLCBpbnQga2V5X2xlbixcbi0tXG5saWIvY3J5cHRvL3Jpc2N2L2Flcy5oLTE3LVxubGliL2NyeXB0by9yaXNjdi9hZXMuaDoxODpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmgtMTktXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vczM5MC9hZXMuaD0xMj1zdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGhhdmVfY3BhY2ZfYWVzMjU2KTtcbi0tXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtMTktICovXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg6MjA6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtMjEtXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg9NDU9dm9pZCBhZXNfc3BhcmM2NF9kZWNyeXB0XzI1Nihjb25zdCB1NjQgKmtleSwgY29uc3QgdTMyICppbnB1dCwgdTMyICpvdXRwdXQpO1xubGliL2NyeXB0by9zcGFyYy9hZXMuaC00Ni1cbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg6NDc6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oLTQ4LVx0XHRcdFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcbi0tXG5saWIvY3J5cHRvL3g4Ni9hZXMuaD0xOD12b2lkIGFlc19kZWNyeXB0X2Flc25pKGNvbnN0IHUzMiBpbnZfcm5ka2V5c1tdLCBpbnQgbnJvdW5kcyxcbi0tXG5saWIvY3J5cHRvL3g4Ni9hZXMuaC0zMS0gKi9cbmxpYi9jcnlwdG8veDg2L2Flcy5oOjMyOnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxubGliL2NyeXB0by94ODYvYWVzLmgtMzMtXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQlBGIENyeXB0byBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBtYWRlIGluIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjcnlwdG8gQlBGIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXTigJlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgYW55IG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZGlmZnMgY2FyZWZ1bGx5IHRvIHNwb3QgYW55IHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBzZWN1cml0eSBvciBwZXJmb3JtYW5jZS4KClRoZW4sIHRvIGdldCBhIGhvbGlzdGljIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gcmVhZCB0aGUgZW50aXJlIGBrZXJuZWwvYnBmL2NyeXB0by5jYCBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbS4gSSB3YW50IHRvIHRob3JvdWdobHkgZXhhbWluZSBob3cgZHlucHRycyBhbmQgdGhlIEJQRiBjb250ZXh0IGFyZSBiZWluZyB1dGlsaXplZCBhbmQgYWxsb2NhdGVkIHdpdGhpbiB0aGUgY3J5cHRvIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgY29uc3RydWN0cyB0byBlbnN1cmUgdGhleSBhcmUgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIHdpdGggbm8gbWVtb3J5IGxlYWtzLCBhbmQgdGhhdCB0aGUgY29udGV4dHMgYXJlIGJlaW5nIGhhbmRsZWQgc2FmZWx5LiBUaGlzIHRob3JvdWdoIHJldmlldyBpcyBjcnVjaWFsIGZvciBCUEYgY29kZSwgYXMgZXJyb3JzIGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgZXh0cmEgYXR0ZW50aW9uIHRvIGFueSBwb2ludGVyIGFyaXRobWV0aWMgb3Igb2ZmLWJ5LW9uZSBlcnJvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jcnlwdG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX21lbV9hbGxvYy5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2Flcy1jYmMuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtZWNiLmhcdTAwM2VcbiAgMTE6XHRcbiAgMTI6XHQvKiBCUEYgY3J5cHRvIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgc3RydWN0ICovXG4gIDEzOlx0LyoqXG4gIDE0Olx0ICogc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zIC0gQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdHVyZVxuICAxNTpcdCAqIEB0eXBlOlx0VGhlIHN0cmluZyBvZiBjcnlwdG8gb3BlcmF0aW9uIHR5cGUuXG4gIDE2Olx0ICogQHJlc2VydmVkOlx0UmVzZXJ2ZWQgbWVtYmVyLCB3aWxsIGJlIHJldXNlZCBmb3IgbW9yZSBvcHRpb25zIGluIGZ1dHVyZVxuICAxNzpcdCAqXHRcdFZhbHVlczpcbiAgMTg6XHQgKlx0XHQgIDBcbiAgMTk6XHQgKiBAYWxnbzpcdFRoZSBzdHJpbmcgb2YgYWxnb3JpdGhtIHRvIGluaXRpYWxpemUuXG4gIDIwOlx0ICogQGtleTpcdFRoZSBjaXBoZXIga2V5IHVzZWQgdG8gaW5pdCBjcnlwdG8gYWxnb3JpdGhtLlxuICAyMTpcdCAqIEBrZXlfbGVuOlx0VGhlIGxlbmd0aCBvZiBjaXBoZXIga2V5LlxuICAyMjpcdCAqIEBhdXRoc2l6ZTpcdFRoZSBsZW5ndGggb2YgYXV0aGVudGljYXRpb24gdGFnIHVzZWQgYnkgYWxnb3JpdGhtLlxuICAyMzpcdCAqL1xuICAyNDpcdHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7XG4gIDI1Olx0XHRjaGFyIHR5cGVbMTRdO1xuICAyNjpcdFx0dTggcmVzZXJ2ZWRbMl07XG4gIDI3Olx0XHRjaGFyIGFsZ29bMTI4XTtcbiAgMjg6XHRcdHU4IGtleVsyNTZdO1xuICAyOTpcdFx0dTMyIGtleV9sZW47XG4gIDMwOlx0XHR1MzIgYXV0aHNpemU7XG4gIDMxOlx0fTtcbiAgMzI6XHRcbiAgMzM6XHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCB7XG4gIDM0Olx0XHRCUEZfQUxHT19BRVNfQ0JDLFxuICAzNTpcdFx0QlBGX0FMR09fQUVTX0VDQixcbiAgMzY6XHR9O1xuICAzNzpcdFxuICAzODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuICAzOTpcdFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lO1xuICA0MDpcdFx0Y29uc3QgY2hhciAqYWxnb19uYW1lO1xuICA0MTpcdFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbiAgNDI6XHR9IGJwZl9jcnlwdG9fYWxnb3NbXSA9IHtcbiAgNDM6XHRcdHsgXCYjMzQ7c2tjaXBoZXJcJiMzNDssIFwmIzM0O2NiYyhhZXMpXCYjMzQ7LCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4gIDQ0Olx0XHR7IFwmIzM0O3NrY2lwaGVyXCYjMzQ7LCBcJiMzNDtlY2IoYWVzKVwmIzM0OywgQlBGX0FMR09fQUVTX0VDQiB9LFxuICA0NTpcdH07XG4gIDQ2Olx0XG4gIDQ3Olx0c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsXG4gIDQ4Olx0XHRcdFx0XHQgZW51bSBicGZfY3J5cHRvX2FsZ29faWQgKmlkX3JldClcbiAgNDk6XHR7XG4gIDUwOlx0XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHtcbiAgNTE6XHRcdFx0aWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy1cdTAwM2V0eXBlLFxuICA1MjpcdFx0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZXR5cGUpKSA9PSAwIFx1MDAyNlx1MDAyNlxuICA1MzpcdFx0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4gIDU0Olx0XHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNlYWxnbykpID09IDApIHtcbiAgNTU6XHRcdFx0XHQqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvO1xuICA1NjpcdFx0XHRcdHJldHVybiB0cnVlO1xuICA1NzpcdFx0XHR9XG4gIDU4Olx0XHR9XG4gIDU5Olx0XHRyZXR1cm4gZmFsc2U7XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qKlxuICA2MzpcdCAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxuICA2NDpcdCAqIEBhbGdvOlx0VGhlIGNyeXB0byBhbGdvcml0aG0gSURcbiAgNjU6XHQgKiBAa2V5Olx0VGhlIGNyeXB0byBrZXlcbiAgNjY6XHQgKiBAcmN1Olx0VGhlIFJDVSBoZWFkIHVzZWQgdG8gZnJlZSB0aGUgY3J5cHRvIGNvbnRleHQgd2l0aCBSQ1Ugc2FmZXR5LlxuICA2NzpcdCAqIEB1c2FnZTpcdE9iamVjdCByZWZlcmVuY2UgY291bnRlci4gV2hlbiB0aGUgcmVmY291bnQgZ29lcyB0byAwLCB0aGVcbiAgNjg6XHQgKlx0XHRtZW1vcnkgaXMgcmVsZWFzZWQgYmFjayB0byB0aGUgQlBGIGFsbG9jYXRvciwgd2hpY2ggcHJvdmlkZXNcbiAgNjk6XHQgKlx0XHRSQ1Ugc2FmZXR5LlxuICA3MDpcdCAqL1xuICA3MTpcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCB7XG4gIDcyOlx0XHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvO1xuICA3MzpcdFx0dW5pb24ge1xuICA3NDpcdFx0XHRzdHJ1Y3QgYWVzX2tleSBhZXM7XG4gIDc1Olx0XHR9IGtleTtcbiAgNzY6XHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gIDc3Olx0XHRyZWZjb3VudF90IHVzYWdlO1xuICA3ODpcdH07XG4gIDc5Olx0XG4gIDgwOlx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICA4MTpcdFxuICA4MjpcdC8qKlxuICA4MzpcdCAqIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSgpIC0gQ3JlYXRlIGEgbXV0YWJsZSBCUEYgY3J5cHRvIGNvbnRleHQuXG4gIDg0Olx0ICpcbiAgODU6XHQgKiBBbGxvY2F0ZXMgYSBjcnlwdG8gY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkLCBhY3F1aXJlZCwgYW5kIHJlbGVhc2VkIGJ5XG4gIDg2Olx0ICogYSBCUEYgcHJvZ3JhbS4gVGhlIGNyeXB0byBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXJcbiAgODc6XHQgKiBiZSBlbWJlZGRlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yIGZyZWVkIHdpdGggYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpLlxuICA4ODpcdCAqIEFzIGNyeXB0byBBUEkgZnVuY3Rpb25zIHVzZSBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLCB0aGlzIGZ1bmN0aW9uIGNhblxuICA4OTpcdCAqIG9ubHkgYmUgdXNlZCBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuICA5MDpcdCAqXG4gIDkxOlx0ICogYnBmX2NyeXB0b19jdHhfY3JlYXRlKCkgYWxsb2NhdGVzIG1lbW9yeSBmb3IgY3J5cHRvIGNvbnRleHQuXG4gIDkyOlx0ICogSXQgbWF5IHJldHVybiBOVUxMIGlmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUuXG4gIDkzOlx0ICogQHBhcmFtczpcdHBvaW50ZXIgdG8gc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGVcbiAgOTQ6XHQgKlx0XHRkZXRhaWxzIG5lZWRlZCB0byBpbml0aWFsaXNlIGNyeXB0byBjb250ZXh0LlxuICA5NTpcdCAqIEBwYXJhbXNfX3N6Olx0c2l6ZSBvZiBzdGV1Y3QgYnBmX2NyeXB0b19wYXJhbXMgdXNlZiBieSBicGYgcHJvZ3JhbVxuICA5NjpcdCAqIEBlcnI6XHRpbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxuICA5NzpcdCAqL1xuICA5ODpcdF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXG4gIDk5Olx0YnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiAxMDA6XHRcdFx0ICAgICAgaW50ICplcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTg2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGtlcm5lbC9icGYvY3J5cHRvLmNgLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIGdvaW5nIHRvIGJlIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gaGVyZSwgY29uc2lkZXJpbmcgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGNyeXB0b2dyYXBoeSB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdGhlIGVCUEYgcHJvZ3JhbXMsIGFuZCB3aGF0IGxldmVsIG9mIGNvbnRyb2wgdGhlIEJQRiBjb2RlIGhhcyBvdmVyIHRoZXNlIG9wZXJhdGlvbnMuIEFyZSB0aGV5IHByb3ZpZGluZyB0aGUgYmFyZSBtZXRhbCBpbnN0cnVjdGlvbnMsIG9yIG1vcmUgaGlnaC1sZXZlbCBhYnN0cmFjdGlvbnM/CgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUaGlzIGlzIGtlcm5lbCBzcGFjZSwgc28gYW55IHZ1bG5lcmFiaWxpdHkgaGVyZSBjb3VsZCBiZSBkZXZhc3RhdGluZy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBoYXJkZW5lZCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgb2J2aW91cyBhdHRhY2sgc3VyZmFjZSB0aGF0IG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcXVlc3Rpb24gb2YgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBrZXJuZWwgY3J5cHRvZ3JhcGhpYyBtb2R1bGVzLiBBcmUgdGhleSBsZXZlcmFnaW5nIGV4aXN0aW5nIGNyeXB0byBBUEkgY2FsbHMsIG9yIGJ1aWxkaW5nIHNvbWV0aGluZyBlbnRpcmVseSBuZXcgZm9yIHRoZSBCUEYgZW52aXJvbm1lbnQ/IFRoZSBkZXNpZ24gY2hvaWNlcyBoZXJlIHdpbGwgc3BlYWsgdm9sdW1lcyBhYm91dCB0aGUgZ29hbHMgb2YgdGhlIGRldmVsb3BlcnMgYW5kIHRoZSB0cmFkZS1vZmZzIHRoZXkgbWFkZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBmdW5jdGlvbiBjYWxscywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZmluZCB0aGF0IHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCB0aG9yb3VnaGx5IHJldmlld2VkLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY3J5cHRvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHR7XG4gMTAyOlx0XHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcbiAxMDM6XHRcbiAxMDQ6XHRcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cdTAwM2VyZXNlcnZlZFswXSB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcbiAxMDU6XHRcdCAgICBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpKSB7XG4gMTA2Olx0XHRcdCplcnIgPSAtRUlOVkFMO1xuIDEwNzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMDg6XHRcdH1cbiAxMDk6XHRcbiAxMTA6XHRcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIDExMTpcdFx0aWYgKCFjdHgpIHtcbiAxMTI6XHRcdFx0KmVyciA9IC1FTk9NRU07XG4gMTEzOlx0XHRcdHJldHVybiBOVUxMO1xuIDExNDpcdFx0fVxuIDExNTpcdFxuIDExNjpcdFx0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xuIDExNzpcdFx0XHQqZXJyID0gLUVOT0VOVDtcbiAxMTg6XHRcdFx0Z290byBvdXQ7XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4gMTIyOlx0XHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XG4gMTIzOlx0XHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XG4gMTI0Olx0XHRcdGlmIChwYXJhbXMtXHUwMDNlYXV0aHNpemUpXG4gMTI1Olx0XHRcdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuIDEyNjpcdFx0XHRlbHNlXG4gMTI3Olx0XHRcdFx0KmVyciA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzLCBwYXJhbXMtXHUwMDNla2V5LFxuIDEyODpcdFx0XHRcdFx0XHQgICAgICBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4gMTI5Olx0XHRcdGJyZWFrO1xuIDEzMDpcdFx0ZGVmYXVsdDpcbiAxMzE6XHRcdFx0V0FSTl9PTigxKTtcbiAxMzI6XHRcdFx0KmVyciA9IC1FTk9FTlQ7XG4gMTMzOlx0XHRcdGJyZWFrO1xuIDEzNDpcdFx0fVxuIDEzNTpcdFxuIDEzNjpcdG91dDpcbiAxMzc6XHRcdGlmICgqZXJyKSB7XG4gMTM4Olx0XHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuIDEzOTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNDA6XHRcdH1cbiAxNDE6XHRcbiAxNDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNldXNhZ2UsIDEpO1xuIDE0MzpcdFx0cmV0dXJuIGN0eDtcbiAxNDQ6XHR9XG4gMTQ1Olx0XG4gMTQ2Olx0c3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIDE0NzpcdHtcbiAxNDg6XHRcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xuIDE0OTpcdFxuIDE1MDpcdFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcbiAxNTE6XHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuIDE1MjpcdH1cbiAxNTM6XHRcbiAxNTQ6XHQvKipcbiAxNTU6XHQgKiBicGZfY3J5cHRvX2N0eF9hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGNyeXB0byBjb250ZXh0LlxuIDE1NjpcdCAqIEBjdHg6IFRoZSBCUEYgY3J5cHRvIGNvbnRleHQgYmVpbmcgYWNxdWlyZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWRcbiAxNTc6XHQgKlx0ICAgICBwb2ludGVyLlxuIDE1ODpcdCAqXG4gMTU5Olx0ICogQWNxdWlyZXMgYSByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuIFRoZSBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb25cbiAxNjA6XHQgKiBtdXN0IGVpdGhlciBiZSBlbWJlZGRlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yIGZyZWVkIHdpdGhcbiAxNjE6XHQgKiBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkuXG4gMTYyOlx0ICovXG4gMTYzOlx0X19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcbiAxNjQ6XHRicGZfY3J5cHRvX2N0eF9hY3F1aXJlKHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4KVxuIDE2NTpcdHtcbiAxNjY6XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmN0eC1cdTAwM2V1c2FnZSkpXG4gMTY3Olx0XHRcdHJldHVybiBOVUxMO1xuIDE2ODpcdFx0cmV0dXJuIGN0eDtcbiAxNjk6XHR9XG4gMTcwOlx0XG4gMTcxOlx0LyoqXG4gMTcyOlx0ICogYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIHByZXZpb3VzbHkgYWNxdWlyZWQgQlBGIGNyeXB0byBjb250ZXh0LlxuIDE3MzpcdCAqIEBjdHg6IFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyByZWxlYXNlZC5cbiAxNzQ6XHQgKlxuIDE3NTpcdCAqIFJlbGVhc2VzIGEgcHJldmlvdXNseSBhY3F1aXJlZCByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuIFdoZW4gdGhlIGZpbmFsXG4gMTc2Olx0ICogcmVmZXJlbmNlIG9mIHRoZSBCUEYgY3J5cHRvIGNvbnRleHQgaGFzIGJlZW4gcmVsZWFzZWQsIGl0cyBtZW1vcnlcbiAxNzc6XHQgKiB3aWxsIGJlIHJlbGVhc2VkLlxuIDE3ODpcdCAqL1xuIDE3OTpcdF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcbiAxODA6XHR7XG4gMTgxOlx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2V1c2FnZSkpXG4gMTgyOlx0XHRcdGNhbGxfcmN1KFx1MDAyNmN0eC1cdTAwM2VyY3UsIGNyeXB0b19mcmVlX2NiKTtcbiAxODM6XHR9XG4gMTg0Olx0XG4gMTg1Olx0X19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxuIDE4NjpcdHtcbiAxODc6XHRcdGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoY3R4KTtcbiAxODg6XHR9XG4gMTg5Olx0Q0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpO1xuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBpbnQgYnBmX2Flc19jYmNfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxuIDE5MjpcdFx0XHRcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxuIDE5MzpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcbiAxOTQ6XHR7XG4gMTk1Olx0XHRpZiAoaXZfbGVuICE9IEFFU19CTE9DS19TSVpFKVxuIDE5NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxOTc6XHRcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcdTAwM2Mgc3JjX2xlbilcbiAxOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTk5Olx0XHRpZiAoZGVjcnlwdClcbiAyMDA6XHRcdFx0YWVzX2NiY19kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGtlcm5lbCBjb2RlLCB0aGlua2luZyBvdXQgbG91ZCBhcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBjcnlwdG8uY2AgKExpbmVzIDIwMS0zMTApKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgbGluZXMgaW4gYGtlcm5lbC9icGYvY3J5cHRvLmNgLiAgTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIG1vZHVsZSBhbmQgZUJQRiBpbiBnZW5lcmFsLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgdGhlIGNvcmUgY3J5cHRvZ3JhcGh5IHByaW1pdGl2ZXMgZXhwb3NlZCB2aWEgZUJQRiwgbGlrZWx5IGludm9sdmluZyB0aGUgYGJwZl9jcnlwdG9fKmAgaGVscGVyIGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgYmV0IHdlJiMzOTtyZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIGhhc2ggY2FsY3VsYXRpb25zLCBlbmNyeXB0aW9uLCBwZXJoYXBzIGV2ZW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBsaWtlIEhNQUMuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBCUEYgVk0sIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLCBiZWNhdXNlIHRob3NlIGFyZSBvZnRlbiB0cmlja3kgaW4gdGhlIGtlcm5lbCBzcGFjZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkYXRhIGJlaW5nIHBhc3NlZCBpbiBmcm9tIHVzZXItc3BhY2UgdmlhIGVCUEYgcHJvZ3JhbXMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIGFyZ3VtZW50cyBhcmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgKGxpa2UgbGVuZ3RoKS4gSSYjMzk7bGwgYWxzbyB0cnkgdG8gaW5mZXIgaG93IHRoZSBjb2RlIGlzIG9wdGltaXplZCwgYW5kIHdoZXRoZXIgdGhlIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzIGFyZSBhcHByb3ByaWF0ZSBmb3IgYSBrZXJuZWwgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcyB0aGF0IGFyZSBiZWluZyBmYXZvcmVkIGhlcmUsIG9yIGlmIHRoZSBjb2RlIGlzIG1vcmUgZ2VuZXJpYyBpbiBpdHMgYXBwcm9hY2guIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyB3b3VsZCBiZSBvcHRpbWl6ZWQgZm9yIGNvbW1vbiB1c2FnZXMuIEkgYWxzbyB3b25kZXIgaWYgdGhlc2UgZnVuY3Rpb25zIHN1cHBvcnQgZGlmZmVyZW50IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmZWF0dXJlcywgYW5kIGlmIHNvLCBob3cgdGhhdOKAmXMgaGFuZGxlZCB3aXRoaW4gdGhlIGVCUEYgZnJhbWV3b3JrLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGZ1biBwYXJ0ISBMZXQmIzM5O3MgZ2V0IHJlYWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jcnlwdG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMTpcdFx0ZWxzZVxuIDIwMjpcdFx0XHRhZXNfY2JjX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4gMjAzOlx0XHRyZXR1cm4gMDtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0c3RhdGljIGludCBicGZfYWVzX2VjYl9jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXG4gMjA3Olx0XHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4gMjA4Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuIDIwOTpcdHtcbiAyMTA6XHRcdGlmIChpdl9sZW4gIT0gMClcbiAyMTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjEyOlx0XHRpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gXHUwMDNjIHNyY19sZW4pXG4gMjEzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIxNDpcdFx0aWYgKGRlY3J5cHQpXG4gMjE1Olx0XHRcdGFlc19lY2JfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuIDIxNjpcdFx0ZWxzZVxuIDIxNzpcdFx0XHRhZXNfZWNiX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiAyMTg6XHRcdHJldHVybiAwO1xuIDIxOTpcdH1cbiAyMjA6XHRcbiAyMjE6XHRzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gMjIyOlx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcbiAyMjM6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0LFxuIDIyNDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdixcbiAyMjU6XHRcdFx0XHQgICAgYm9vbCBkZWNyeXB0KVxuIDIyNjpcdHtcbiAyMjc6XHRcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gMjI4Olx0XHRjb25zdCB1OCAqcHNyYztcbiAyMjk6XHRcdHU4ICpwZHN0LCAqcGl2O1xuIDIzMDpcdFxuIDIzMTpcdFx0aWYgKF9fYnBmX2R5bnB0cl9pc19yZG9ubHkoZHN0KSlcbiAyMzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjMzOlx0XG4gMjM0Olx0XHRpdl9sZW4gPSBpdiA/IF9fYnBmX2R5bnB0cl9zaXplKGl2KSA6IDA7XG4gMjM1Olx0XHRzcmNfbGVuID0gX19icGZfZHlucHRyX3NpemUoc3JjKTtcbiAyMzY6XHRcdGRzdF9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShkc3QpO1xuIDIzNzpcdFx0aWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKVxuIDIzODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMzk6XHRcbiAyNDA6XHRcdHBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pO1xuIDI0MTpcdFx0aWYgKCFwc3JjKVxuIDI0MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDM6XHRcdHBkc3QgPSBfX2JwZl9keW5wdHJfZGF0YV9ydyhkc3QsIGRzdF9sZW4pO1xuIDI0NDpcdFx0aWYgKCFwZHN0KVxuIDI0NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDY6XHRcbiAyNDc6XHRcdHBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDtcbiAyNDg6XHRcdGlmIChpdl9sZW4gXHUwMDI2XHUwMDI2ICFwaXYpXG4gMjQ5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI1MDpcdFxuIDI1MTpcdFx0c3dpdGNoIChjdHgtXHUwMDNlYWxnbykge1xuIDI1MjpcdFx0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuIDI1MzpcdFx0XHRyZXR1cm4gYnBmX2Flc19jYmNfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxuIDI1NDpcdFx0XHRcdFx0XHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xuIDI1NTpcdFx0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuIDI1NjpcdFx0XHRyZXR1cm4gYnBmX2Flc19lY2JfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxuIDI1NzpcdFx0XHRcdFx0XHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xuIDI1ODpcdFx0ZGVmYXVsdDpcbiAyNTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjYwOlx0XHR9XG4gMjYxOlx0fVxuIDI2MjpcdFxuIDI2MzpcdC8qKlxuIDI2NDpcdCAqIGJwZl9jcnlwdG9fZGVjcnlwdCgpIC0gRGVjcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cbiAyNjU6XHQgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI2NjpcdCAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGVuY3J5cHRlZCBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI2NzpcdCAqIEBkc3Q6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI2ODpcdCAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuIDI2OTpcdCAqXG4gMjcwOlx0ICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuIDI3MTpcdCAqL1xuIDI3MjpcdF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gMjczOlx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIDI3NDpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbiAyNzU6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpXG4gMjc2Olx0e1xuIDI3NzpcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjX2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNyYztcbiAyNzg6XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRzdF9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkc3Q7XG4gMjc5Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilpdl9fbnVsbGFibGU7XG4gMjgwOlx0XG4gMjgxOlx0XHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7XG4gMjgyOlx0fVxuIDI4MzpcdFxuIDI4NDpcdC8qKlxuIDI4NTpcdCAqIGJwZl9jcnlwdG9fZW5jcnlwdCgpIC0gRW5jcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cbiAyODY6XHQgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI4NzpcdCAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gMjg4Olx0ICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gMjg5Olx0ICogQGl2X19udWxsYWJsZTpcdGJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuXG4gMjkwOlx0ICpcbiAyOTE6XHQgKiBFbmNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuXG4gMjkyOlx0ICovXG4gMjkzOlx0X19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZW5jcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAyOTQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXG4gMjk1Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LFxuIDI5NjpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiAyOTc6XHR7XG4gMjk4Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIDI5OTpcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbiAzMDA6XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEkmIzM5O20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBoZXJlLgoKRmlyc3QsIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYC4gVGhpcyBsb29rcyBwcmV0dHkgc29saWQuIGBremFsbG9jX29iamAgaXMgYSBnb29kIGNob2ljZSBmb3IgaW5pdGlhbGl6YXRpb24sIGVuc3VyaW5nIHRoZSBgY3R4YCBzdHJ1Y3QgaXMgemVyb2VkLiBUaGUgYGJwZl9jcnlwdG9fZmluZF9hbGdvYCBhbmQgYGFlc19wcmVwYXJla2V5YCBjYWxscyBzZWVtIHN0YW5kYXJkLCBoYW5kbGluZyBhbGdvcml0aG0gYW5kIGtleSBzZXR1cCwgYW5kIHRoZSBrZXkgbGVuZ3RoIGNoZWNrcyBpbiBgYWVzX3ByZXBhcmVrZXlgICgxNiwgMjQsIG9yIDMyIGJ5dGVzKSBhcmUgaW1wb3J0YW50LiBUaGUgYGtmcmVlX3NlbnNpdGl2ZShjdHgpYCBvbiBlcnJvciBhbmQgdGhlIHJlZmNvdW50IG9mIDEgc2V0dXAgYSBzdHJhaWdodGZvcndhcmQgbGlmZXRpbWUgbWFuYWdlbWVudC4KCk5leHQsIEkmIzM5O20gZXhhbWluaW5nIGBicGZfYWVzX2NiY19jcnlwdGAuIFRoZSBsZW5ndGggY2hlY2tzIGZvciB0aGUgSVYgKGBpdl9sZW4gPT0gQUVTX0JMT0NLX1NJWkVgKSBhbmQgc291cmNlL2Rlc3RpbmF0aW9uIGJ1ZmZlcnMgKGBzcmNfbGVuYCBtdWx0aXBsZSBvZiBgQUVTX0JMT0NLX1NJWkVgIGFuZCBgZHN0X2xlbiAmZ3Q7PSBzcmNfbGVuYCkgYXJlIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgYnVmZmVyIG92ZXJmbG93cyBhbmQgdW5kZXJmbG93cy4gVGhlIHVzZSBvZiBkeW5wdHIgaGVscGVycyBmdXJ0aGVyIHN0cmVuZ3RoZW5zIHRoaXMuIFNhbWUgZm9yIGBicGZfYWVzX2VjYl9jcnlwdGAgd2l0aCB0aGUgSVYgY2hlY2sgKGBpdl9sZW4gPT0gMGApIGFuZCB0aGUgc291cmNlL2Rlc3RpbmF0aW9uIGxlbmd0aCBjaGVja3MuCgpUaGVuIEkmIzM5O20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgd2F5cyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgY2FuIGxlYWsgdG8gdXNlcnNwYWNlLiBCUEYgZHlucHRycyBhcmUgcG9pbnRpbmcgdG8gY2FsbGVyLXByb3ZpZGVkIGJ1ZmZlcnMsIHdoaWNoIGlzIGdvb2QuIFRoZSBgY3R4YCBpcyB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYC4gVGhlIGBhZXNfcHJlcGFyZWtleWAgY2FsbCBpbml0aWFsaXplcyB0aGUga2V5IHNjaGVkdWxlLCBgYWxnb2AgaXMgaW5pdGlhbGl6ZWQgYnkgYGJwZl9jcnlwdG9fZmluZF9hbGdvYC4gTm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoZSBmcmVlaW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5IHdpdGggYGtmcmVlX3NlbnNpdGl2ZWAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgc3VidGxlIGVkZ2UgY2FzZXM/IElzIHRoZXJlIGEgY2hhbmNlIGBhZXNfcHJlcGFyZWtleWAgY291bGQgbGVhdmUgc29tZXRoaW5nIHVuaW5pdGlhbGl6ZWQgaW4gdGhlIGBzdHJ1Y3QgYWVzX2tleWA/IEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBhZXNfa2V5YCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZXNfcHJlcGFyZWtleWAgdG8gbWFrZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGFlc19rZXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jPTUzPXN0cnVjdCBhZXNic194dHNfY3R4IHtcbmFyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYy01NC1cdHN0cnVjdCBhZXNic19jdHhcdGtleTtcbmFyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYzo1NTpcdHN0cnVjdCBhZXNfa2V5XHRcdGZhbGxiYWNrO1xuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jLTU2LVx0c3RydWN0IGFlc19lbmNrZXlcdHR3ZWFrX2tleTtcbi0tXG5jcnlwdG8vYWVzLmMtMjItXG5jcnlwdG8vYWVzLmM6MjM6c3RhdGljX2Fzc2VydChfX2FsaWdub2ZfXyhzdHJ1Y3QgYWVzX2tleSkgXHUwMDNjPSBDUllQVE9fTUlOQUxJR04pO1xuY3J5cHRvL2Flcy5jLTI0LXN0YXRpY19hc3NlcnQoX19hbGlnbm9mX18oc3RydWN0IGFlc19lbmNrZXkpIFx1MDAzYz0gQ1JZUFRPX01JTkFMSUdOKTtcbi0tXG5jcnlwdG8vYWVzLmM9MjY9c3RhdGljIGludCBjcnlwdG9fYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxuLS1cbmNyeXB0by9hZXMuYy0yOC17XG5jcnlwdG8vYWVzLmM6Mjk6XHRzdHJ1Y3QgYWVzX2tleSAqa2V5ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hZXMuYy0zMC1cbi0tXG5jcnlwdG8vYWVzLmM9MzQ9c3RhdGljIHZvaWQgY3J5cHRvX2Flc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcbmNyeXB0by9hZXMuYy0zNS17XG5jcnlwdG8vYWVzLmM6MzY6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hZXMuYy0zNy1cbi0tXG5jcnlwdG8vYWVzLmM9NDE9c3RhdGljIHZvaWQgY3J5cHRvX2Flc19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcbmNyeXB0by9hZXMuYy00Mi17XG5jcnlwdG8vYWVzLmM6NDM6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hZXMuYy00NC1cbi0tXG5jcnlwdG8vYWVzLmM9MTM5PXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7XG4tLVxuY3J5cHRvL2Flcy5jLTE0NC1cdC5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsXG5jcnlwdG8vYWVzLmM6MTQ1Olx0LmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcbmNyeXB0by9hZXMuYy0xNDYtXHQuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLFxuLS1cbmNyeXB0by9hZXMuYz0yMTM9Y3J5cHRvX2Flc19za2NpcGhlcl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxuLS1cbmNyeXB0by9hZXMuYy0yMTUte1xuY3J5cHRvL2Flcy5jOjIxNjpcdHN0cnVjdCBhZXNfa2V5ICprZXkgPSBjcnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7XG5jcnlwdG8vYWVzLmMtMjE3LVxuLS1cbmNyeXB0by9hZXMuYz0zNDg9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBjcnlwdG9fYWVzX2VjYl9lbmNyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpXG5jcnlwdG8vYWVzLmMtMzQ5LXtcbmNyeXB0by9hZXMuYzozNTA6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID1cbmNyeXB0by9hZXMuYy0zNTEtXHRcdGNyeXB0b19za2NpcGhlcl9jdHgoY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpKTtcbi0tXG5jcnlwdG8vYWVzLmM9MzYwPXN0YXRpYyBfX21heWJlX3VudXNlZCBpbnQgY3J5cHRvX2Flc19lY2JfZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTM2MS17XG5jcnlwdG8vYWVzLmM6MzYyOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtMzYzLVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTM3ND1zdGF0aWMgdm9pZCBjcnlwdG9fYWVzX2NiY19lbmNyeXB0X3NnKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsXG5jcnlwdG8vYWVzLmMtMzc1LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNyeXB0bGVuLFxuY3J5cHRvL2Flcy5jOjM3NjpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpXG5jcnlwdG8vYWVzLmMtMzc3LXtcbi0tXG5jcnlwdG8vYWVzLmM9MzgyPXN0YXRpYyB2b2lkIGNyeXB0b19hZXNfY2JjX2RlY3J5cHRfc2coc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSxcbmNyeXB0by9hZXMuYy0zODMtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY3J5cHRsZW4sXG5jcnlwdG8vYWVzLmM6Mzg0Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcbmNyeXB0by9hZXMuYy0zODUte1xuLS1cbmNyeXB0by9hZXMuYz0zOTA9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBjcnlwdG9fYWVzX2NiY19lbmNyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpXG5jcnlwdG8vYWVzLmMtMzkxLXtcbmNyeXB0by9hZXMuYzozOTI6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID1cbmNyeXB0by9hZXMuYy0zOTMtXHRcdGNyeXB0b19za2NpcGhlcl9jdHgoY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpKTtcbi0tXG5jcnlwdG8vYWVzLmM9NDAxPXN0YXRpYyBfX21heWJlX3VudXNlZCBpbnQgY3J5cHRvX2Flc19jYmNfZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTQwMi17XG5jcnlwdG8vYWVzLmM6NDAzOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDA0LVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTQyMD1jcnlwdG9fYWVzX2NiY19jdHNfY3J5cHRfbm9ubGluZWFyKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGJvb2wgZW5jKVxuY3J5cHRvL2Flcy5jLTQyMS17XG5jcnlwdG8vYWVzLmM6NDIyOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDIzLVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTQ1ND1jcnlwdG9fYWVzX2NiY19jdHNfZW5jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTQ1NS17XG5jcnlwdG8vYWVzLmM6NDU2Olx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDU3LVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTQ3MT1jcnlwdG9fYWVzX2NiY19jdHNfZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTQ3Mi17XG5jcnlwdG8vYWVzLmM6NDczOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDc0LVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTYwOD1zdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBza2NpcGhlcl9hbGdzW10gPSB7XG4tLVxuY3J5cHRvL2Flcy5jLTYxNC1cdFx0LmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLFxuY3J5cHRvL2Flcy5jOjYxNTpcdFx0LmJhc2UuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGFlc19rZXkpLFxuY3J5cHRvL2Flcy5jLTYxNi1cdFx0LmJhc2UuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLFxuLS1cbmNyeXB0by9hZXMuYy02MjktXHRcdC5iYXNlLmNyYV9ibG9ja3NpemUgPSBBRVNfQkxPQ0tfU0laRSxcbmNyeXB0by9hZXMuYzo2MzA6XHRcdC5iYXNlLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcbmNyeXB0by9hZXMuYy02MzEtXHRcdC5iYXNlLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSxcbi0tXG5jcnlwdG8vYWVzLmMtNjQ1LVx0XHQuYmFzZS5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsXG5jcnlwdG8vYWVzLmM6NjQ2Olx0XHQuYmFzZS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVzX2tleSksXG5jcnlwdG8vYWVzLmMtNjQ3LVx0XHQuYmFzZS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYz0xMDI1PXN0YXRpYyBpbnQgY2hjcl91cGRhdGVfdHdlYWsoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgdTggKml2LFxuLS1cbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTAzMC1cdHN0cnVjdCBjaGNyX3NrY2lwaGVyX3JlcV9jdHggKnJlcWN0eCA9IHNrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7XG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwMzE6XHRzdHJ1Y3QgYWVzX2tleSBhZXM7XG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jLTEwMzItXHRpbnQgcmV0LCBpO1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaD00NT12b2lkIGFlc19jYmNfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjQ2Olx0XHQgICAgIHU4IGl2W2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSwgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSk7XG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNDctXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTczPXZvaWQgYWVzX2NiY19jdHNfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTc0LVx0XHRcdCB1OCBpdlthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg6NzU6XHRcdFx0IGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpO1xuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTc2LVxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaD00Nj12b2lkIGFlc19lY2JfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9jcnlwdG8vYWVzLWVjYi5oOjQ3Olx0XHQgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpO1xuaW5jbHVkZS9jcnlwdG8vYWVzLWVjYi5oLTQ4LVxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy14dHMuaD0xOT1zdHJ1Y3QgYWVzX3h0c19rZXkge1xuaW5jbHVkZS9jcnlwdG8vYWVzLXh0cy5oLTIwLVx0LyogcHJpdmF0ZTogKi9cbmluY2x1ZGUvY3J5cHRvL2Flcy14dHMuaDoyMTpcdHN0cnVjdCBhZXNfa2V5IG1haW5fa2V5O1xuaW5jbHVkZS9jcnlwdG8vYWVzLXh0cy5oLTIyLVx0c3RydWN0IGFlc19lbmNrZXkgdHdlYWtfa2V5O1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTU5PXVuaW9uIGFlc19pbnZrZXlfYXJjaCB7XG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtODYtICpcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjg3OiAqIE5vdGUgdGhhdCB0aGlzIHN0cnVjdCBpcyBhYm91dCBoYWxmIHRoZSBzaXplIG9mIHN0cnVjdCBhZXNfa2V5LiAgVGhpcyBpc1xuaW5jbHVkZS9jcnlwdG8vYWVzLmg6ODg6ICogc2VwYXJhdGUgZnJvbSBzdHJ1Y3QgYWVzX2tleSBzbyB0aGF0IG1vZGVzIHRoYXQgbmVlZCBvbmx5IEFFUyBlbmNyeXB0aW9uXG5pbmNsdWRlL2NyeXB0by9hZXMuaC04OS0gKiAoZS5nLiBBRVMtR0NNLCBBRVMtQ1RSLCBBRVMtQ01BQywgdHdlYWsga2V5IGluIEFFUy1YVFMpIGRvbiYjMzk7dCBpbmN1ciB0aGUgdGltZVxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTk3PXN0cnVjdCBhZXNfZW5ja2V5IHtcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMDQtLyoqXG5pbmNsdWRlL2NyeXB0by9hZXMuaDoxMDU6ICogc3RydWN0IGFlc19rZXkgLSBBbiBBRVMga2V5IHByZXBhcmVkIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMDYtICogQGFlc19lbmNrZXk6IENvbW1vbiBmaWVsZHMgYW5kIHRoZSBrZXkgcHJlcGFyZWQgZm9yIGVuY3J5cHRpb25cbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMTItICovXG5pbmNsdWRlL2NyeXB0by9hZXMuaDoxMTM6c3RydWN0IGFlc19rZXkge1xuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMTE0LVx0c3RydWN0IGFlc19lbmNrZXk7IC8qIEluY2x1ZGUgYWxsIGZpZWxkcyBvZiBhZXNfZW5ja2V5LiAqL1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTMwOD12b2lkIGFlc19zcGFyYzY0X2N0cl9jcnlwdF8yNTYoY29uc3QgdTY0ICprZXksIGNvbnN0IHU2NCAqaW5wdXQsIHU2NCAqb3V0cHV0LFxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMyMy0gKlxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzI0OiAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHplcm9pemluZyBib3RoIHRoZSBzdHJ1Y3QgYWVzX2tleSBhbmQgdGhlIHJhd1xuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzI1LSAqIGtleSBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzM0LSAqL1xuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzM1OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbik7XG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzYtXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzQ1LSAqIGNpcGhlci4gIFR5cGljYWxseSB0aGlzIGludm9sdmVzIGV4cGFuZGluZyB0aGUgcmF3IGtleSBpbnRvIG9ubHkgdGhlIHN0YW5kYXJkXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozNDY6ICogcm91bmQga2V5cywgcmVzdWx0aW5nIGluIGEgc3RydWN0IGFib3V0IGhhbGYgdGhlIHNpemUgb2Ygc3RydWN0IGFlc19rZXkuXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNDctICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zNjM9dHlwZWRlZiB1bmlvbiB7XG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNjQtXHRjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqZW5jX2tleTtcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM2NTpcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICpmdWxsX2tleTtcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM2Ni19IGFlc19lbmNyeXB0X2FyZyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7XG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzcwLSAqIEBrZXk6IFRoZSBBRVMga2V5LCBhcyBhIHBvaW50ZXIgdG8gZWl0aGVyIGFuIGVuY3J5cHRpb24tb25seSBrZXlcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM3MTogKlx0IChzdHJ1Y3QgYWVzX2VuY2tleSkgb3IgYSBmdWxsLCBiaWRpcmVjdGlvbmFsIGtleSAoc3RydWN0IGFlc19rZXkpLlxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzcyLSAqIEBvdXQ6IEJ1ZmZlciB0byBzdG9yZSB0aGUgY2lwaGVydGV4dCBibG9ja1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTM3Nz12b2lkIGFlc19lbmNyeXB0KGFlc19lbmNyeXB0X2FyZyBrZXksIHU4IG91dFthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzg3LSAqL1xuaW5jbHVkZS9jcnlwdG8vYWVzLmg6Mzg4OnZvaWQgYWVzX2RlY3J5cHQoY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSwgdTggb3V0W2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4OS1cdFx0IGNvbnN0IHU4IGluW2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSk7XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYz03MT1zdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtNzMtXHR1bmlvbiB7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjc0Olx0XHRzdHJ1Y3QgYWVzX2tleSBhZXM7XG5rZXJuZWwvYnBmL2NyeXB0by5jLTc1LVx0fSBrZXk7XG4tLVxubGliL2NyeXB0by9hZXMuYz00NzA9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vYWVzLmMtNDc2LVxubGliL2NyeXB0by9hZXMuYzo0Nzc6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9hZXMuYy00NzgtXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmxpYi9jcnlwdG8vYWVzLmM9NDg1PXN0YXRpYyBpbnQgX19hZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2VuY2tleSAqZW5jX2tleSxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTQ5Ny1cbmxpYi9jcnlwdG8vYWVzLmM6NDk4OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbilcbmxpYi9jcnlwdG8vYWVzLmMtNDk5LXtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTUxNj1FWFBPUlRfU1lNQk9MKGFlc19lbmNyeXB0KTtcbmxpYi9jcnlwdG8vYWVzLmMtNTE3LVxubGliL2NyeXB0by9hZXMuYzo1MTg6dm9pZCBhZXNfZGVjcnlwdChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LCB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxubGliL2NyeXB0by9hZXMuYy01MTktXHRcdCBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXG4tLVxubGliL2NyeXB0by9hZXMuYz01MjY9c3RhdGljIHZvaWQgX19pbml0IGFlc19maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtNTI3LXtcbmxpYi9jcnlwdG8vYWVzLmM6NTI4Olx0c3RydWN0IGFlc19rZXkga2V5O1xubGliL2NyeXB0by9hZXMuYy01MjktXHR1OCBkYXRhW0FFU19CTE9DS19TSVpFXTtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTc3Mz1zdGF0aWMgYm9vbCBhZXNfZWNiX2RlY3J5cHRfYXJjaCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxubGliL2NyeXB0by9hZXMuYzo3NzQ6XHRcdFx0XHQgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcbmxpYi9jcnlwdG8vYWVzLmMtNzc1LXtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTc5Nj12b2lkIGFlc19lY2JfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxubGliL2NyeXB0by9hZXMuYzo3OTc6XHRcdCAgICAgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcbmxpYi9jcnlwdG8vYWVzLmMtNzk4LXtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTgxND1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2VjYl9maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtODE1LXtcbmxpYi9jcnlwdG8vYWVzLmM6ODE2Olx0c3RydWN0IGFlc19rZXkga2V5O1xubGliL2NyeXB0by9hZXMuYy04MTctXHR1OCBkYXRhW3NpemVvZihmaXBzX3Rlc3RfZGF0YSldO1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9ODUzPXN0YXRpYyBib29sIGFlc19jYmNfZGVjcnlwdF9hcmNoKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG5saWIvY3J5cHRvL2Flcy5jLTg1NC1cdFx0XHRcdCB1OCBpdltBRVNfQkxPQ0tfU0laRV0sXG5saWIvY3J5cHRvL2Flcy5jOjg1NTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxubGliL2NyeXB0by9hZXMuYy04NTYte1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9ODg3PXZvaWQgYWVzX2NiY19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sIHU4IGl2W0FFU19CTE9DS19TSVpFXSxcbmxpYi9jcnlwdG8vYWVzLmM6ODg4Olx0XHQgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpXG5saWIvY3J5cHRvL2Flcy5jLTg4OS17XG4tLVxubGliL2NyeXB0by9hZXMuYz05MzU9c3RhdGljIGJvb2wgYWVzX2NiY19jdHNfZGVjcnlwdF9hcmNoKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG5saWIvY3J5cHRvL2Flcy5jLTkzNi1cdFx0XHRcdCAgICAgdTggaXZbQUVTX0JMT0NLX1NJWkVdLFxubGliL2NyeXB0by9hZXMuYzo5Mzc6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpXG5saWIvY3J5cHRvL2Flcy5jLTkzOC17XG4tLVxubGliL2NyeXB0by9hZXMuYz05ODI9dm9pZCBhZXNfY2JjX2N0c19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG5saWIvY3J5cHRvL2Flcy5jOjk4MzpcdFx0XHQgdTggaXZbQUVTX0JMT0NLX1NJWkVdLCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxubGliL2NyeXB0by9hZXMuYy05ODQte1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9MTAyND1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtMTAyNS17XG5saWIvY3J5cHRvL2Flcy5jOjEwMjY6XHRzdHJ1Y3QgYWVzX2tleSBrZXk7XG5saWIvY3J5cHRvL2Flcy5jLTEwMjctXHR1OCBpdltBRVNfQkxPQ0tfU0laRV07XG4tLVxubGliL2NyeXB0by9hZXMuYz0xMDQ3PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfY2JjX2N0c19maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtMTA0OC17XG5saWIvY3J5cHRvL2Flcy5jOjEwNDk6XHRzdHJ1Y3QgYWVzX2tleSBrZXk7XG5saWIvY3J5cHRvL2Flcy5jLTEwNTAtXHR1OCBpdltBRVNfQkxPQ0tfU0laRV07XG4tLVxubGliL2NyeXB0by9hcm0vYWVzLmg9MjQ9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vYXJtL2Flcy5oLTQwLVxubGliL2NyeXB0by9hcm0vYWVzLmg6NDE6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9hcm0vYWVzLmgtNDItXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg9MTYxPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcbi0tXG5saWIvY3J5cHRvL2FybTY0L2Flcy5oLTE3Mi1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg6MTczOnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmgtMTc0LVx0XHRcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcbi0tXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg9NjE9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC02OS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaDo3MDpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNzEtXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD0xNjY9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xOTUtXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg6MTk2OnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSwgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xOTctXHRcdFx0ICAgICBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXG4tLVxubGliL2NyeXB0by9yaXNjdi9hZXMuaD0yNj1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXG4tLVxubGliL2NyeXB0by9yaXNjdi9hZXMuaC0zOC1cbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmg6Mzk6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9yaXNjdi9hZXMuaC00MC1cdFx0XHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXG4tLVxubGliL2NyeXB0by9zMzkwL2Flcy5oPTczPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcbi0tXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtODEtXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg6ODI6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9zMzkwL2Flcy5oLTgzLVx0XHRcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcbi0tXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oPTg2PXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcbi0tXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oLTEwNC1cbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg6MTA1OnN0YXRpYyB2b2lkIGFlc19zcGFyYzY0X2RlY3J5cHQoY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtMTA2LVx0XHRcdFx0Y29uc3QgdTMyICppbnB1dCwgdTMyICpvdXRwdXQpXG4tLVxubGliL2NyeXB0by9zcGFyYy9hZXMuaC0xMTUtXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oOjExNjpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oLTExNy1cdFx0XHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXG4tLVxubGliL2NyeXB0by94ODYvYWVzLmg9NTI9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8veDg2L2Flcy5oLTY0LVxubGliL2NyeXB0by94ODYvYWVzLmg6NjU6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by94ODYvYWVzLmgtNjYtXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ4NwoJCQkJCQkJb3V0cHV0OiAyOTQKCQkJCQkJCXRob3VnaHRzOiA1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIEtNU0FOIGlzICpyZWFsbHkqIG5lZWRlZCBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIEJQRiBjcnlwdG8gc3Vic3lzdGVtLCBzaGlmdGluZyBmcm9tIHRoZSBgY3J5cHRvX3RmbWAgZHluYW1pYyByZWdpc3RyYXRpb24gYXBwcm9hY2ggdG8gZGlyZWN0IEFFUyBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGxzLiBXZSYjMzk7cmUgZ2V0dGluZyByaWQgb2YgYGJwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIHVwZGF0aW5nIHRoZSBgYnBmX2NyeXB0b19jdHhgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gbWVtb3J5IGNvbnNpZGVyYXRpb25zLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBLTVNBTiBpcyBhbGwgYWJvdXQuIFRoZSBrZXkgcGFydCBpcyB0aGF0IGBzdHJ1Y3QgYnBmX2NyeXB0b19jdHhgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoICpndWFyYW50ZWVzKiB0aGF0IGV2ZXJ5dGhpbmcgaXMgemVyb2VkIG91dCBmcm9tIHRoZSBnZXQtZ28uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmdpbmcgYXJvdW5kLiBUaGUga2V5IHNjaGVkdWxlIHdpdGhpbiBgY3R4LSZndDtrZXkuYWVzYCBpcyB0aGVuIHByZXBhcmVkIHdpdGggYGFlc19wcmVwYXJla2V5YC4gVGhhdCBzb2xpZGlmaWVzIHRoZSBrZXkgbWF0ZXJpYWwuCgpMb29raW5nIGF0IGRhdGEgdHJhbnNmZXJzLCB3ZSYjMzk7dmUgZ290IGR5bnB0cnMgZm9yIHRoZSBpbnB1dC9vdXRwdXQgYnVmZmVycyBhbmQgdGhlIElWLiBDcml0aWNhbGx5LCB3ZSBoYXZlIGNoZWNrcyBpbiBgYnBmX2Flc19jYmNfY3J5cHRgIGFuZCBgYnBmX2Flc19lY2JfY3J5cHRgIGZvciBidWZmZXIgYm91bmRzIGFuZCBhbGlnbm1lbnQuIE5hbWVseSwgYGl2X2xlbiAhPSBBRVNfQkxPQ0tfU0laRWAsIGBzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiAmbHQ7IHNyY19sZW5gLiBBbHNvLCBpbiBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYCwgdGhlIGBwYXJhbXNgIGFyZSB2YWxpZGF0ZWQgd2l0aCBjaGVja3MgZm9yIGBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpYCBhbmQgYHJlc2VydmVkYCBmaWVsZHMuIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgdGFraW5nIGRhdGEgZGlyZWN0bHkgZnJvbSBjYWxsZXIgZHlucHRycyBhbmQgd3JpdGluZyBlbmNyeXB0ZWQvZGVjcnlwdGVkIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRlc3RpbmF0aW9uIGR5bnB0cnMuIFRoaXMgaXMgZ29vZDogbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgYW5kIG5vIGluZm9ybWF0aW9uIGxlYWtzLgoKRXNzZW50aWFsbHksIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgaGVyZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlcnNwYWNlLgoKRmluYWxseSwgd2hpbGUgd2UgY2FuIGFsd2F5cyBydW4gaW50byBtZW1vcnkgaXNzdWVzIHdpdGggQlBGIChlLmcuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGJ1ZmZlciBvdmVycnVucyksIGFueSBpc3N1ZXMgd2l0aCBkeW5wdHJzLCBtZW1vcnkgYm91bmRhcmllcyBhbmQgbGlmZXRpbWVzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciB0aGUgQlBGIHZlcmlmaWVyIGR5bnB0ciBjaGVja3MuIFdlICpkb24mIzM5O3QqIHJlcXVpcmUgS01TQU4gaGVyZS4gTXkgY29uY2x1c2lvbjogYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBCUEYgY3J5cHRvIGtmdW5jcyBpbXBsZW1lbnRhdGlvbiBieSByZXBsYWNpbmcgdGhlIGdlbmVyaWMgY3J5cHRvIHRmbSByZWdpc3RyYXRpb24gYXJjaGl0ZWN0dXJlIHdpdGggZGlyZWN0IGludm9jYXRpb25zIG9mIEFFUyBsaWJyYXJ5IGZ1bmN0aW9ucyAoQ1JZUFRPX0xJQl9BRVNfQ0JDIGFuZCBDUllQVE9fTElCX0FFU19FQ0IpLiBcblxuTWVtb3J5IHNhZmV0eSBhbmFseXNpczpcbjEuIE1lbW9yeSBBbGxvY2F0aW9uIFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIGNvbnRleHQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAgYW5kIHRoZSBgYWVzX2tleWAgdW5pb24pIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBLZXkgc2V0dXAgaXMgaGFuZGxlZCBieSBgYWVzX3ByZXBhcmVrZXkoKWAuIENsZWFudXAgaXMgaGFuZGxlZCB2aWEgYGtmcmVlX3NlbnNpdGl2ZSgpYC5cbjIuIEJ1ZmZlcnMgXHUwMDI2IEluZm8gTGVha3M6IERhdGEgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvcGVyYXRlIGRpcmVjdGx5IG9uIGR5bnB0ciBidWZmZXJzIHN1cHBsaWVkIGJ5IEJQRiBwcm9ncmFtcyBhZnRlciB2ZXJpZnlpbmcgYmxvY2sgYWxpZ25tZW50IGFuZCBib3VuZHMgKGBBRVNfQkxPQ0tfU0laRWAgY2hlY2tzLCBgZHN0X2xlbiBcdTAwM2U9IHNyY19sZW5gKS4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nL2NvbnRyb2wgZmxvdy5cbjMuIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgZHlucHRyIGFjY2Vzc2VzLCBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9uIGJ1Z3MsIG9yIGxpZmV0aW1lL3JlZmNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgQlBGIHZlcmlmaWVyL2RlYnVnIGluZnJhc3RydWN0dXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmNzIGltcGxlbWVudGF0aW9uIGJ5IHJlcGxhY2luZyB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBhcmNoaXRlY3R1cmUgd2l0aCBkaXJlY3QgaW52b2NhdGlvbnMgb2YgQUVTIGxpYnJhcnkgZnVuY3Rpb25zIChDUllQVE9fTElCX0FFU19DQkMgYW5kIENSWVBUT19MSUJfQUVTX0VDQikuIFxuXG5NZW1vcnkgc2FmZXR5IGFuYWx5c2lzOlxuMS4gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgY29udGV4dCBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBhbmQgdGhlIGBhZXNfa2V5YCB1bmlvbikgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEtleSBzZXR1cCBpcyBoYW5kbGVkIGJ5IGBhZXNfcHJlcGFyZWtleSgpYC4gQ2xlYW51cCBpcyBoYW5kbGVkIHZpYSBga2ZyZWVfc2Vuc2l0aXZlKClgLlxuMi4gQnVmZmVycyBcdTAwMjYgSW5mbyBMZWFrczogRGF0YSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9wZXJhdGUgZGlyZWN0bHkgb24gZHlucHRyIGJ1ZmZlcnMgc3VwcGxpZWQgYnkgQlBGIHByb2dyYW1zIGFmdGVyIHZlcmlmeWluZyBibG9jayBhbGlnbm1lbnQgYW5kIGJvdW5kcyAoYEFFU19CTE9DS19TSVpFYCBjaGVja3MsIGBkc3RfbGVuIFx1MDAzZT0gc3JjX2xlbmApLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcvY29udHJvbCBmbG93LlxuMy4gU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBkeW5wdHIgYWNjZXNzZXMsIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb24gYnVncywgb3IgbGlmZXRpbWUvcmVmY291bnRpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBCUEYgdmVyaWZpZXIvZGVidWcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOToyNS4yMjkzNTY3NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIwMjYwNjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0NSWVBUT1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X2FjcXVpcmVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLFxuICAgIFwiYnBmX2NyeXB0b19kZWNyeXB0XCIsXG4gICAgXCJicGZfY3J5cHRvX2VuY3J5cHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmNzIGltcGxlbWVudGF0aW9uIGJ5IHJlcGxhY2luZyB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBhcmNoaXRlY3R1cmUgd2l0aCBkaXJlY3QgaW52b2NhdGlvbnMgb2YgQUVTIGxpYnJhcnkgZnVuY3Rpb25zIChDUllQVE9fTElCX0FFU19DQkMgYW5kIENSWVBUT19MSUJfQUVTX0VDQikuIFxcblxcbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XFxuMS4gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIGNvbnRleHQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAgYW5kIHRoZSBgYWVzX2tleWAgdW5pb24pIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBLZXkgc2V0dXAgaXMgaGFuZGxlZCBieSBgYWVzX3ByZXBhcmVrZXkoKWAuIENsZWFudXAgaXMgaGFuZGxlZCB2aWEgYGtmcmVlX3NlbnNpdGl2ZSgpYC5cXG4yLiBCdWZmZXJzIFxcdTAwMjYgSW5mbyBMZWFrczogRGF0YSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9wZXJhdGUgZGlyZWN0bHkgb24gZHlucHRyIGJ1ZmZlcnMgc3VwcGxpZWQgYnkgQlBGIHByb2dyYW1zIGFmdGVyIHZlcmlmeWluZyBibG9jayBhbGlnbm1lbnQgYW5kIGJvdW5kcyAoYEFFU19CTE9DS19TSVpFYCBjaGVja3MsIGBkc3RfbGVuIFxcdTAwM2U9IHNyY19sZW5gKS4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nL2NvbnRyb2wgZmxvdy5cXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEJQRiBjcnlwdG8gc3VwcG9ydCBieSByZW1vdmluZyB0aGUgZHluYW1pYyBjcnlwdG8gdHlwZSByZWdpc3RyYXRpb24gaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRpbmcgZGlyZWN0IEFFUy1DQkMgYW5kIEFFUy1FQ0IgbGlicmFyeSBpbnRlZ3JhdGlvbi4gSXQgaW50cm9kdWNlcyBDT05GSUdfQlBGX0NSWVBUTyBhbmQgbW9kaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmMgaGFuZGxlcnMgKGNvbnRleHQgY3JlYXRpb24sIGtleSBzZXR1cCwgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50KSwgbWFraW5nIHRoZXNlIGZ1bmN0aW9ucyBpbXBvcnRhbnQgdGFyZ2V0cyBmb3IgQlBGIHByb2dyYW0gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6MjUuMjI5MzYzNzA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwNjkxMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTdiNDA5MjIzZTI1MWUwYTIwYjg4OWFiN2E3NmI1OTc4MzI4ZmNlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjI5OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAzYTE5ZGE3NGQwMGM5Li4xNmYxMzI3MGNlMWY5IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtNDkzNiw4ICs0OTM2LDYgQEAgQlBGIFtDUllQVE9dXFxuIE06XFx0VmFkaW0gRmVkb3JlbmtvIFxcdTAwM2N2YWRpbS5mZWRvcmVua29AbGludXguZGV2XFx1MDAzZVxcbiBMOlxcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcXG4gUzpcXHRNYWludGFpbmVkXFxuLUY6XFx0Y3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY1xcbi1GOlxcdGluY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXFxuIEY6XFx0a2VybmVsL2JwZi9jcnlwdG8uY1xcbiBcXG4gQlBGIFtET0NVTUVOVEFUSU9OXSAoUmVsYXRlZCB0byBTdGFuZGFyZGl6YXRpb24pXFxuZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZVxcbmluZGV4IDgzODZkNTVhOTc1NWUuLjMzYmI1YWQ1OTVlOGYgMTAwNjQ0XFxuLS0tIGEvY3J5cHRvL01ha2VmaWxlXFxuKysrIGIvY3J5cHRvL01ha2VmaWxlXFxuQEAgLTIyLDkgKzIyLDYgQEAgY3J5cHRvX3NrY2lwaGVyLXkgKz0gbHNrY2lwaGVyLm9cXG4gY3J5cHRvX3NrY2lwaGVyLXkgKz0gc2tjaXBoZXIub1xcbiBcXG4gb2JqLSQoQ09ORklHX0NSWVBUT19TS0NJUEhFUjIpICs9IGNyeXB0b19za2NpcGhlci5vXFxuLWlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gYnBmX2NyeXB0b19za2NpcGhlci5vXFxuLWVuZGlmXFxuIFxcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vXFxuIG9iai0kKENPTkZJR19DUllQVE9fRUNIQUlOSVYpICs9IGVjaGFpbml2Lm9cXG5kaWZmIC0tZ2l0IGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYyBiL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBhODg3OThkM2U4Yzg3Li4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSw4MyArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2NyeXB0by5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcXHUwMDNlXFxuLVxcbi1zdGF0aWMgdm9pZCAqYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ28pXFxuLXtcXG4tXFx0cmV0dXJuIGNyeXB0b19hbGxvY19sc2tjaXBoZXIoYWxnbywgMCwgMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtKHZvaWQgKnRmbSlcXG4te1xcbi1cXHRjcnlwdG9fZnJlZV9sc2tjaXBoZXIodGZtKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyhjb25zdCBjaGFyICphbGdvKVxcbi17XFxuLVxcdHJldHVybiBjcnlwdG9faGFzX3NrY2lwaGVyKGFsZ28sIENSWVBUT19BTEdfVFlQRV9MU0tDSVBIRVIsIENSWVBUT19BTEdfVFlQRV9NQVNLKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKVxcbi17XFxuLVxcdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3NldGtleSh0Zm0sIGtleSwga2V5bGVuKTtcXG4tfVxcbi1cXG4tc3RhdGljIHUzMiBicGZfY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3Modm9pZCAqdGZtKVxcbi17XFxuLVxcdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh0Zm0pO1xcbi19XFxuLVxcbi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh2b2lkICp0Zm0pXFxuLXtcXG4tXFx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfaXZzaXplKHRmbSk7XFxuLX1cXG4tXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHZvaWQgKnRmbSlcXG4te1xcbi1cXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodGZtKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgdTggKnNpdilcXG4te1xcbi1cXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgdTggKnNpdilcXG4te1xcbi1cXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTtcXG4tfVxcbi1cXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgYnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSA9IHtcXG4tXFx0LmFsbG9jX3RmbVxcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtLFxcbi1cXHQuZnJlZV90Zm1cXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtLFxcbi1cXHQuaGFzX2FsZ29cXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvLFxcbi1cXHQuc2V0a2V5XFx0XFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksXFxuLVxcdC5lbmNyeXB0XFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LFxcbi1cXHQuZGVjcnlwdFxcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCxcXG4tXFx0Lml2c2l6ZVxcdFxcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplLFxcbi1cXHQuc3RhdGVzaXplXFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUsXFxuLVxcdC5nZXRfZmxhZ3NcXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyxcXG4tXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tXFx0Lm5hbWVcXHRcXHQ9IFxcXCJza2NpcGhlclxcXCIsXFxuLX07XFxuLVxcbi1zdGF0aWMgaW50IF9faW5pdCBicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKFxcdTAwMjZicGZfY3J5cHRvX2xza2NpcGhlcl90eXBlKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgX19leGl0IGJwZl9jcnlwdG9fc2tjaXBoZXJfZXhpdCh2b2lkKVxcbi17XFxuLVxcdGludCBlcnIgPSBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShcXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XFxuLVxcdFdBUk5fT05fT05DRShlcnIpO1xcbi19XFxuLVxcbi1tb2R1bGVfaW5pdChicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQpO1xcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xcbi1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLU1PRFVMRV9ERVNDUklQVElPTihcXFwiU3ltbWV0cmljIGtleSBjaXBoZXIgc3VwcG9ydCBmb3IgQlBGXFxcIik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBhNDFlNzFkNGUyZDlmLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMjQgKzAsMCBAQFxcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4tI2lmbmRlZiBfQlBGX0NSWVBUT19IXFxuLSNkZWZpbmUgX0JQRl9DUllQVE9fSFxcbi1cXG4tc3RydWN0IGJwZl9jcnlwdG9fdHlwZSB7XFxuLVxcdHZvaWQgKigqYWxsb2NfdGZtKShjb25zdCBjaGFyICphbGdvKTtcXG4tXFx0dm9pZCAoKmZyZWVfdGZtKSh2b2lkICp0Zm0pO1xcbi1cXHRpbnQgKCpoYXNfYWxnbykoY29uc3QgY2hhciAqYWxnbyk7XFxuLVxcdGludCAoKnNldGtleSkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTtcXG4tXFx0aW50ICgqc2V0YXV0aHNpemUpKHZvaWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKTtcXG4tXFx0aW50ICgqZW5jcnlwdCkodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpO1xcbi1cXHRpbnQgKCpkZWNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XFxuLVxcdHVuc2lnbmVkIGludCAoKml2c2l6ZSkodm9pZCAqdGZtKTtcXG4tXFx0dW5zaWduZWQgaW50ICgqc3RhdGVzaXplKSh2b2lkICp0Zm0pO1xcbi1cXHR1MzIgKCpnZXRfZmxhZ3MpKHZvaWQgKnRmbSk7XFxuLVxcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xcbi1cXHRjaGFyIG5hbWVbMTRdO1xcbi19O1xcbi1cXG4taW50IGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTtcXG4taW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xcbi1cXG4tI2VuZGlmIC8qIF9CUEZfQ1JZUFRPX0ggKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXFxuaW5kZXggZWIzZGUzNTczNGYwOS4uODIyNTk5YjQyYmUyZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL0tjb25maWdcXG4rKysgYi9rZXJuZWwvYnBmL0tjb25maWdcXG5AQCAtODcsNiArODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcXG4gXFxuIFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cXG4gXFxuK2NvbmZpZyBCUEZfQ1JZUFRPXFxuK1xcdGRlZl9ib29sIHlcXG4rXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbitcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDXFxuK1xcdHNlbGVjdCBDUllQVE9fTElCX0FFU19FQ0JcXG4rXFx0aGVscFxcbitcXHQgIFByb3ZpZGUgdGhlIGtmdW5jcyBuZWVkZWQgZm9yIEJQRiBwcm9ncmFtcyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0XFxuK1xcdCAgZGF0YS4gVGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSBBRVMtQ0JDIGFuZCBBRVMtRUNCLlxcbitcXG4gc291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG4gXFxuIGNvbmZpZyBCUEZfTFNNXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvTWFrZWZpbGUgYi9rZXJuZWwvYnBmL01ha2VmaWxlXFxuaW5kZXggOTAyNTVkODBlNWJlNi4uYWIyZTVkMjc4MmU2ZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlXFxuKysrIGIva2VybmVsL2JwZi9NYWtlZmlsZVxcbkBAIC01NSw5ICs1NSw3IEBAIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cXG4gb2JqLSR7Q09ORklHX0JQRl9MU019ICs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cXG4gZW5kaWZcXG4taWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxuLWVuZGlmXFxuK29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSArPSBjcnlwdG8ub1xcbiBvYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxuIFxcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY3J5cHRvLmMgYi9rZXJuZWwvYnBmL2NyeXB0by5jXFxuaW5kZXggNTFmODljZWNlZmI0ZC4uOGNkYzE2ZjliMzc0YSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jXFxuKysrIGIva2VybmVsL2JwZi9jcnlwdG8uY1xcbkBAIC0xLDE5ICsxLDEzIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcXHUwMDNlXFxuLVxcbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3Qge1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLX07XFxuKyNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVzLWNiYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2Flcy1lY2IuaFxcdTAwM2VcXG4gXFxuIC8qIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3QgKi9cXG4gLyoqXFxuQEAgLTM2LDk0ICszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xcbiBcXHR1MzIgYXV0aHNpemU7XFxuIH07XFxuIFxcbi1zdGF0aWMgTElTVF9IRUFEKGJwZl9jcnlwdG9fdHlwZXMpO1xcbi1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuK2VudW0gYnBmX2NyeXB0b19hbGdvX2lkIHtcXG4rXFx0QlBGX0FMR09fQUVTX0NCQyxcXG4rXFx0QlBGX0FMR09fQUVTX0VDQixcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbitcXHRjb25zdCBjaGFyICp0eXBlX25hbWU7XFxuK1xcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcXG4rXFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcXG4rfSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XFxuK1xcdHsgXFxcInNrY2lwaGVyXFxcIiwgXFxcImNiYyhhZXMpXFxcIiwgQlBGX0FMR09fQUVTX0NCQyB9LFxcbitcXHR7IFxcXCJza2NpcGhlclxcXCIsIFxcXCJlY2IoYWVzKVxcXCIsIEJQRl9BTEdPX0FFU19FQ0IgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIGJwZl9jcnlwdG9fZmluZF9hbGdvKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgZW51bSBicGZfY3J5cHRvX2FsZ29faWQgKmlkX3JldClcXG4re1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYnBmX2NyeXB0b19hbGdvcyk7IGkrKykge1xcbitcXHRcXHRpZiAoc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLnR5cGVfbmFtZSwgcGFyYW1zLVxcdTAwM2V0eXBlLFxcbitcXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNldHlwZSkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvX25hbWUsIHBhcmFtcy1cXHUwMDNlYWxnbyxcXG4rXFx0XFx0XFx0ICAgIHNpemVvZihwYXJhbXMtXFx1MDAzZWFsZ28pKSA9PSAwKSB7XFxuK1xcdFxcdFxcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuIFxcbiAvKipcXG4gICogc3RydWN0IGJwZl9jcnlwdG9fY3R4IC0gcmVmY291bnRlZCBCUEYgY3J5cHRvIGNvbnRleHQgc3RydWN0dXJlXFxuLSAqIEB0eXBlOlxcdFRoZSBwb2ludGVyIHRvIGJwZiBjcnlwdG8gdHlwZVxcbi0gKiBAdGZtOlxcdFRoZSBwb2ludGVyIHRvIGluc3RhbmNlIG9mIGNyeXB0byBBUEkgc3RydWN0Llxcbi0gKiBAc2l2X2xlbjogICAgU2l6ZSBvZiBJViBhbmQgc3RhdGUgc3RvcmFnZSBmb3IgY2lwaGVyXFxuKyAqIEBhbGdvOlxcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXFxuKyAqIEBrZXk6XFx0VGhlIGNyeXB0byBrZXlcXG4gICogQHJjdTpcXHRUaGUgUkNVIGhlYWQgdXNlZCB0byBmcmVlIHRoZSBjcnlwdG8gY29udGV4dCB3aXRoIFJDVSBzYWZldHkuXFxuICAqIEB1c2FnZTpcXHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXFxuICAqXFx0XFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXFxuICAqXFx0XFx0UkNVIHNhZmV0eS5cXG4gICovXFxuIHN0cnVjdCBicGZfY3J5cHRvX2N0eCB7XFxuLVxcdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGU7XFxuLVxcdHZvaWQgKnRmbTtcXG4tXFx0dTMyIHNpdl9sZW47XFxuK1xcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IGFlc19rZXkgYWVzO1xcbitcXHR9IGtleTtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gXFx0cmVmY291bnRfdCB1c2FnZTtcXG4gfTtcXG4gXFxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XFxuLVxcdGludCBlcnIgPSAtRUJVU1k7XFxuLVxcbi1cXHRkb3duX3dyaXRlKFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKCFzdHJjbXAobm9kZS1cXHUwMDNldHlwZS1cXHUwMDNlbmFtZSwgdHlwZS1cXHUwMDNlbmFtZSkpXFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHR9XFxuLVxcbi1cXHRub2RlID0ga21hbGxvY19vYmooKm5vZGUpO1xcbi1cXHRlcnIgPSAtRU5PTUVNO1xcbi1cXHRpZiAoIW5vZGUpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXG4tXFx0bm9kZS1cXHUwMDNldHlwZSA9IHR5cGU7XFxuLVxcdGxpc3RfYWRkKFxcdTAwMjZub2RlLVxcdTAwM2VsaXN0LCBcXHUwMDI2YnBmX2NyeXB0b190eXBlcyk7XFxuLVxcdGVyciA9IDA7XFxuLVxcbi11bmxvY2s6XFxuLVxcdHVwX3dyaXRlKFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7XFxuLVxcbi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XFxuLVxcdGludCBlcnIgPSAtRU5PRU5UO1xcbi1cXG4tXFx0ZG93bl93cml0ZShcXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XFxuLVxcdFxcdGlmIChzdHJjbXAobm9kZS1cXHUwMDNldHlwZS1cXHUwMDNlbmFtZSwgdHlwZS1cXHUwMDNlbmFtZSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0bGlzdF9kZWwoXFx1MDAyNm5vZGUtXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRrZnJlZShub2RlKTtcXG4tXFx0XFx0ZXJyID0gMDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0dXBfd3JpdGUoXFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUpO1xcbi1cXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKmJwZl9jcnlwdG9fZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcXG4te1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlID0gRVJSX1BUUigtRU5PRU5UKTtcXG4tXFx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xcbi1cXG4tXFx0ZG93bl9yZWFkKFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKHN0cmNtcChub2RlLVxcdTAwM2V0eXBlLVxcdTAwM2VuYW1lLCBuYW1lKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpZiAodHJ5X21vZHVsZV9nZXQobm9kZS1cXHUwMDNldHlwZS1cXHUwMDNlb3duZXIpKVxcbi1cXHRcXHRcXHR0eXBlID0gbm9kZS1cXHUwMDNldHlwZTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0dXBfcmVhZChcXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xcbi1cXG4tXFx0cmV0dXJuIHR5cGU7XFxuLX1cXG4tXFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gXFxuIC8qKlxcbkBAIC0xNDYsNyArOTksNiBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxcbiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxcbiBcXHRcXHQgICAgICBpbnQgKmVycilcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xcbiBcXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcXG4gXFxuIFxcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVxcdTAwM2VyZXNlcnZlZFsxXSB8fFxcbkBAIC0xNTUsNjkgKzEwNyw0MCBAQCBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0dHlwZSA9IGJwZl9jcnlwdG9fZ2V0X3R5cGUocGFyYW1zLVxcdTAwM2V0eXBlKTtcXG4tXFx0aWYgKElTX0VSUih0eXBlKSkge1xcbi1cXHRcXHQqZXJyID0gUFRSX0VSUih0eXBlKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghdHlwZS1cXHUwMDNlaGFzX2FsZ28ocGFyYW1zLVxcdTAwM2VhbGdvKSkge1xcbi1cXHRcXHQqZXJyID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghIXBhcmFtcy1cXHUwMDNlYXV0aHNpemUgXiAhIXR5cGUtXFx1MDAzZXNldGF1dGhzaXplKSB7XFxuLVxcdFxcdCplcnIgPSAtRU9QTk9UU1VQUDtcXG4tXFx0XFx0Z290byBlcnJfbW9kdWxlX3B1dDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFwYXJhbXMtXFx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVxcdTAwM2VrZXlfbGVuIFxcdTAwM2Ugc2l6ZW9mKHBhcmFtcy1cXHUwMDNla2V5KSkge1xcbi1cXHRcXHQqZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBlcnJfbW9kdWxlX3B1dDtcXG4tXFx0fVxcbi1cXG4gXFx0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdCplcnIgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIGVycl9tb2R1bGVfcHV0O1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4LVxcdTAwM2V0eXBlID0gdHlwZTtcXG4tXFx0Y3R4LVxcdTAwM2V0Zm0gPSB0eXBlLVxcdTAwM2VhbGxvY190Zm0ocGFyYW1zLVxcdTAwM2VhbGdvKTtcXG4tXFx0aWYgKElTX0VSUihjdHgtXFx1MDAzZXRmbSkpIHtcXG4tXFx0XFx0KmVyciA9IFBUUl9FUlIoY3R4LVxcdTAwM2V0Zm0pO1xcbi1cXHRcXHRnb3RvIGVycl9mcmVlX2N0eDtcXG4rXFx0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFxcdTAwMjZjdHgtXFx1MDAzZWFsZ28pKSB7XFxuK1xcdFxcdCplcnIgPSAtRU5PRU5UO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHBhcmFtcy1cXHUwMDNlYXV0aHNpemUpIHtcXG4tXFx0XFx0KmVyciA9IHR5cGUtXFx1MDAzZXNldGF1dGhzaXplKGN0eC1cXHUwMDNldGZtLCBwYXJhbXMtXFx1MDAzZWF1dGhzaXplKTtcXG4tXFx0XFx0aWYgKCplcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdGZtO1xcbitcXHRzd2l0Y2ggKGN0eC1cXHUwMDNlYWxnbykge1xcbitcXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XFxuK1xcdGNhc2UgQlBGX0FMR09fQUVTX0VDQjpcXG4rXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlYXV0aHNpemUpXFxuK1xcdFxcdFxcdCplcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHQqZXJyID0gYWVzX3ByZXBhcmVrZXkoXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcywgcGFyYW1zLVxcdTAwM2VrZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHBhcmFtcy1cXHUwMDNla2V5X2xlbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OKDEpO1xcbitcXHRcXHQqZXJyID0gLUVOT0VOVDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdCplcnIgPSB0eXBlLVxcdTAwM2VzZXRrZXkoY3R4LVxcdTAwM2V0Zm0sIHBhcmFtcy1cXHUwMDNla2V5LCBwYXJhbXMtXFx1MDAzZWtleV9sZW4pO1xcbi1cXHRpZiAoKmVycilcXG4tXFx0XFx0Z290byBlcnJfZnJlZV90Zm07XFxuLVxcbi1cXHRpZiAodHlwZS1cXHUwMDNlZ2V0X2ZsYWdzKGN0eC1cXHUwMDNldGZtKSBcXHUwMDI2IENSWVBUT19URk1fTkVFRF9LRVkpIHtcXG4tXFx0XFx0KmVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfdGZtO1xcbitvdXQ6XFxuK1xcdGlmICgqZXJyKSB7XFxuK1xcdFxcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4LVxcdTAwM2VzaXZfbGVuID0gdHlwZS1cXHUwMDNlaXZzaXplKGN0eC1cXHUwMDNldGZtKSArIHR5cGUtXFx1MDAzZXN0YXRlc2l6ZShjdHgtXFx1MDAzZXRmbSk7XFxuLVxcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN0eC1cXHUwMDNldXNhZ2UsIDEpO1xcbi1cXG4gXFx0cmV0dXJuIGN0eDtcXG4tXFxuLWVycl9mcmVlX3RmbTpcXG4tXFx0dHlwZS1cXHUwMDNlZnJlZV90Zm0oY3R4LVxcdTAwM2V0Zm0pO1xcbi1lcnJfZnJlZV9jdHg6XFxuLVxcdGtmcmVlKGN0eCk7XFxuLWVycl9tb2R1bGVfcHV0Olxcbi1cXHRtb2R1bGVfcHV0KHR5cGUtXFx1MDAzZW93bmVyKTtcXG4tXFxuLVxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuQEAgLTIyNSw5ICsxNDgsNyBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIFxcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xcbiBcXG4gXFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcXG4tXFx0Y3R4LVxcdTAwM2V0eXBlLVxcdTAwM2VmcmVlX3RmbShjdHgtXFx1MDAzZXRmbSk7XFxuLVxcdG1vZHVsZV9wdXQoY3R4LVxcdTAwM2V0eXBlLVxcdTAwM2Vvd25lcik7XFxuLVxcdGtmcmVlKGN0eCk7XFxuK1xcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjY3LDI3ICsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxcbiB9XFxuIENGSV9OT1NFQUwoYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKTtcXG4gXFxuK3N0YXRpYyBpbnQgYnBmX2Flc19jYmNfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxcbitcXHRcXHRcXHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxcbit7XFxuK1xcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gXFx1MDAzYyBzcmNfbGVuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGRlY3J5cHQpXFxuK1xcdFxcdGFlc19jYmNfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfYWVzX2VjYl9jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXFxuK1xcdFxcdFxcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXFxuK3tcXG4rXFx0aWYgKGl2X2xlbiAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFxcdTAwM2Mgc3JjX2xlbilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChkZWNyeXB0KVxcbitcXHRcXHRhZXNfZWNiX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmMsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXYsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdixcXG4gXFx0XFx0XFx0ICAgIGJvb2wgZGVjcnlwdClcXG4ge1xcbi1cXHR1MzIgc3JjX2xlbiwgZHN0X2xlbiwgc2l2X2xlbjtcXG4rXFx0dTMyIHNyY19sZW4sIGRzdF9sZW4sIGl2X2xlbjtcXG4gXFx0Y29uc3QgdTggKnBzcmM7XFxuIFxcdHU4ICpwZHN0LCAqcGl2O1xcbi1cXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKF9fYnBmX2R5bnB0cl9pc19yZG9ubHkoZHN0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRzaXZfbGVuID0gc2l2ID8gX19icGZfZHlucHRyX3NpemUoc2l2KSA6IDA7XFxuK1xcdGl2X2xlbiA9IGl2ID8gX19icGZfZHlucHRyX3NpemUoaXYpIDogMDtcXG4gXFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XFxuIFxcdGRzdF9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShkc3QpO1xcbi1cXHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4gfHwgc3JjX2xlbiBcXHUwMDNlIGRzdF9sZW4pXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHNpdl9sZW4gIT0gY3R4LVxcdTAwM2VzaXZfbGVuKVxcbitcXHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cHNyYyA9IF9fYnBmX2R5bnB0cl9kYXRhKHNyYywgc3JjX2xlbik7XFxuQEAgLTI5NywxNCArMjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcXG4gXFx0aWYgKCFwZHN0KVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHBpdiA9IHNpdl9sZW4gPyBfX2JwZl9keW5wdHJfZGF0YV9ydyhzaXYsIHNpdl9sZW4pIDogTlVMTDtcXG4tXFx0aWYgKHNpdl9sZW4gXFx1MDAyNlxcdTAwMjYgIXBpdilcXG4rXFx0cGl2ID0gaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoaXYsIGl2X2xlbikgOiBOVUxMO1xcbitcXHRpZiAoaXZfbGVuIFxcdTAwMjZcXHUwMDI2ICFwaXYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0ZXJyID0gZGVjcnlwdCA/IGN0eC1cXHUwMDNldHlwZS1cXHUwMDNlZGVjcnlwdChjdHgtXFx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KVxcbi1cXHRcXHQgICAgICA6IGN0eC1cXHUwMDNldHlwZS1cXHUwMDNlZW5jcnlwdChjdHgtXFx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHN3aXRjaCAoY3R4LVxcdTAwM2VhbGdvKSB7XFxuK1xcdGNhc2UgQlBGX0FMR09fQUVTX0NCQzpcXG4rXFx0XFx0cmV0dXJuIGJwZl9hZXNfY2JjX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGl2X2xlbiwgY3R4LCBkZWNyeXB0KTtcXG4rXFx0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxcbitcXHRcXHRyZXR1cm4gYnBmX2Flc19lY2JfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxcbitcXHRcXHRcXHRcXHRcXHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzEyLDIwICsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxcbiAgKiBAY3R4OlxcdFxcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuICAqIEBzcmM6XFx0XFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuICAqIEBkc3Q6XFx0XFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuLSAqIEBzaXZfX251bGxhYmxlOlxcdGJwZl9keW5wdHIgdG8gSVYgZGF0YSBhbmQgc3RhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IGRlY3J5cHRvci4gTWF5IGJlIE5VTEwuXFxuKyAqIEBpdl9fbnVsbGFibGU6XFx0YnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC5cXG4gICpcXG4gICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxcbiAgKi9cXG4gX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYyxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcXG4tXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNpdl9fbnVsbGFibGUpXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjX2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNyYztcXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcXG4tXFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNpdl9fbnVsbGFibGU7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcXG4gXFxuLVxcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBzaXZfa2VybiwgdHJ1ZSk7XFxuK1xcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTMzMywyMCArMjg2LDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuICAqIEBjdHg6XFx0XFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4gICogQHNyYzpcXHRcXHRicGZfZHlucHRyIHRvIHRoZSBwbGFpbiBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAgKiBAZHN0OlxcdFxcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbi0gKiBAc2l2X19udWxsYWJsZTpcXHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxcbisgKiBAaXZfX251bGxhYmxlOlxcdGJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuXFxuICAqXFxuICAqIEVuY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC5cXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkc3QsXFxuLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRzdF9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkc3Q7XFxuLVxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilpdl9fbnVsbGFibGU7XFxuIFxcbi1cXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2Vybiwgc2l2X2tlcm4sIGZhbHNlKTtcXG4rXFx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIGZhbHNlKTtcXG4gfVxcbiBcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6MjcuMTIwOTkzODI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjIxMDk3NzEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0NSWVBUT1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X2FjcXVpcmVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLFxuICAgIFwiYnBmX2NyeXB0b19kZWNyeXB0XCIsXG4gICAgXCJicGZfY3J5cHRvX2VuY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5N2I0MDkyMjNlMjUxZTBhMjBiODg5YWI3YTc2YjU5NzgzMjhmY2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjoyOToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDNhMTlkYTc0ZDAwYzkuLjE2ZjEzMjcwY2UxZjkgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC00OTM2LDggKzQ5MzYsNiBAQCBCUEYgW0NSWVBUT11cbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0YnBmQHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4tRjpcdGNyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbi1GOlx0aW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcbiBGOlx0a2VybmVsL2JwZi9jcnlwdG8uY1xuIFxuIEJQRiBbRE9DVU1FTlRBVElPTl0gKFJlbGF0ZWQgdG8gU3RhbmRhcmRpemF0aW9uKVxuZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZVxuaW5kZXggODM4NmQ1NWE5NzU1ZS4uMzNiYjVhZDU5NWU4ZiAxMDA2NDRcbi0tLSBhL2NyeXB0by9NYWtlZmlsZVxuKysrIGIvY3J5cHRvL01ha2VmaWxlXG5AQCAtMjIsOSArMjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSArPSBsc2tjaXBoZXIub1xuIGNyeXB0b19za2NpcGhlci15ICs9IHNrY2lwaGVyLm9cbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gY3J5cHRvX3NrY2lwaGVyLm9cbi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSlcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gYnBmX2NyeXB0b19za2NpcGhlci5vXG4tZW5kaWZcbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vXG4gb2JqLSQoQ09ORklHX0NSWVBUT19FQ0hBSU5JVikgKz0gZWNoYWluaXYub1xuZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDgzICswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9jcnlwdG8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2NyeXB0by9za2NpcGhlci5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgKmJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdvKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fYWxsb2NfbHNrY2lwaGVyKGFsZ28sIDAsIDApO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSh2b2lkICp0Zm0pXG4te1xuLVx0Y3J5cHRvX2ZyZWVfbHNrY2lwaGVyKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28oY29uc3QgY2hhciAqYWxnbylcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2hhc19za2NpcGhlcihhbGdvLCBDUllQVE9fQUxHX1RZUEVfTFNLQ0lQSEVSLCBDUllQVE9fQUxHX1RZUEVfTUFTSyk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHZvaWQgKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbilcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7XG4tfVxuLVxuLXN0YXRpYyB1MzIgYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHZvaWQgKnRmbSlcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3ModGZtKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodm9pZCAqdGZtKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh2b2lkICp0Zm0pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlIGJwZl9jcnlwdG9fbHNrY2lwaGVyX3R5cGUgPSB7XG4tXHQuYWxsb2NfdGZtXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbSxcbi1cdC5mcmVlX3RmbVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSxcbi1cdC5oYXNfYWxnb1x0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyxcbi1cdC5zZXRrZXlcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksXG4tXHQuZW5jcnlwdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LFxuLVx0LmRlY3J5cHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCxcbi1cdC5pdnNpemVcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUsXG4tXHQuc3RhdGVzaXplXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSxcbi1cdC5nZXRfZmxhZ3NcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzLFxuLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tXHQubmFtZVx0XHQ9IFwic2tjaXBoZXJcIixcbi19O1xuLVxuLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKVxuLXtcbi1cdHJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZClcbi17XG4tXHRpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tXHRXQVJOX09OX09OQ0UoZXJyKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTtcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xuLU1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIlN5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRlwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE0MWU3MWQ0ZTJkOWYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyNCArMCwwIEBAXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbi0jaWZuZGVmIF9CUEZfQ1JZUFRPX0hcbi0jZGVmaW5lIF9CUEZfQ1JZUFRPX0hcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlIHtcbi1cdHZvaWQgKigqYWxsb2NfdGZtKShjb25zdCBjaGFyICphbGdvKTtcbi1cdHZvaWQgKCpmcmVlX3RmbSkodm9pZCAqdGZtKTtcbi1cdGludCAoKmhhc19hbGdvKShjb25zdCBjaGFyICphbGdvKTtcbi1cdGludCAoKnNldGtleSkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTtcbi1cdGludCAoKnNldGF1dGhzaXplKSh2b2lkICp0Zm0sIHVuc2lnbmVkIGludCBhdXRoc2l6ZSk7XG4tXHRpbnQgKCplbmNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHRpbnQgKCpkZWNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHR1bnNpZ25lZCBpbnQgKCppdnNpemUpKHZvaWQgKnRmbSk7XG4tXHR1bnNpZ25lZCBpbnQgKCpzdGF0ZXNpemUpKHZvaWQgKnRmbSk7XG4tXHR1MzIgKCpnZXRfZmxhZ3MpKHZvaWQgKnRmbSk7XG4tXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbi1cdGNoYXIgbmFtZVsxNF07XG4tfTtcbi1cbi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xuLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTtcbi1cbi0jZW5kaWYgLyogX0JQRl9DUllQVE9fSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvS2NvbmZpZyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuaW5kZXggZWIzZGUzNTczNGYwOS4uODIyNTk5YjQyYmUyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xuKysrIGIva2VybmVsL2JwZi9LY29uZmlnXG5AQCAtODcsNiArODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiBcbitjb25maWcgQlBGX0NSWVBUT1xuK1x0ZGVmX2Jvb2wgeVxuK1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ1xuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQlxuK1x0aGVscFxuK1x0ICBQcm92aWRlIHRoZSBrZnVuY3MgbmVlZGVkIGZvciBCUEYgcHJvZ3JhbXMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdFxuK1x0ICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuXG4rXG4gc291cmNlIFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcIlxuIFxuIGNvbmZpZyBCUEZfTFNNXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9NYWtlZmlsZSBiL2tlcm5lbC9icGYvTWFrZWZpbGVcbmluZGV4IDkwMjU1ZDgwZTViZTYuLmFiMmU1ZDI3ODJlNmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlXG4rKysgYi9rZXJuZWwvYnBmL01ha2VmaWxlXG5AQCAtNTUsOSArNTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xuICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cbiBvYmotJHtDT05GSUdfQlBGX0xTTX0gKz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ub1xuIGVuZGlmXG4taWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxuLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cbi1lbmRpZlxuK29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSArPSBjcnlwdG8ub1xuIG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cbiBcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jcnlwdG8uYyBiL2tlcm5lbC9icGYvY3J5cHRvLmNcbmluZGV4IDUxZjg5Y2VjZWZiNGQuLjhjZGMxNmY5YjM3NGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jXG4rKysgYi9rZXJuZWwvYnBmL2NyeXB0by5jXG5AQCAtMSwxOSArMSwxMyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcdTAwM2Vcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3Qge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi19O1xuKyNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtY2JjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVzLWVjYi5oXHUwMDNlXG4gXG4gLyogQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdCAqL1xuIC8qKlxuQEAgLTM2LDk0ICszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xuIFx0dTMyIGF1dGhzaXplO1xuIH07XG4gXG4tc3RhdGljIExJU1RfSEVBRChicGZfY3J5cHRvX3R5cGVzKTtcbi1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4rZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xuK1x0QlBGX0FMR09fQUVTX0NCQyxcbitcdEJQRl9BTEdPX0FFU19FQ0IsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHtcbitcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcbitcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcbitcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG4rfSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XG4rXHR7IFwic2tjaXBoZXJcIiwgXCJjYmMoYWVzKVwiLCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4rXHR7IFwic2tjaXBoZXJcIiwgXCJlY2IoYWVzKVwiLCBCUEZfQUxHT19BRVNfRUNCIH0sXG4rfTtcbitcbitzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxuK3tcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcbitcdFx0aWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy1cdTAwM2V0eXBlLFxuK1x0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZXR5cGUpKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4rXHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNlYWxnbykpID09IDApIHtcbitcdFx0XHQqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIC8qKlxuICAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxuLSAqIEB0eXBlOlx0VGhlIHBvaW50ZXIgdG8gYnBmIGNyeXB0byB0eXBlXG4tICogQHRmbTpcdFRoZSBwb2ludGVyIHRvIGluc3RhbmNlIG9mIGNyeXB0byBBUEkgc3RydWN0LlxuLSAqIEBzaXZfbGVuOiAgICBTaXplIG9mIElWIGFuZCBzdGF0ZSBzdG9yYWdlIGZvciBjaXBoZXJcbisgKiBAYWxnbzpcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXG4rICogQGtleTpcdFRoZSBjcnlwdG8ga2V5XG4gICogQHJjdTpcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cbiAgKiBAdXNhZ2U6XHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXG4gICpcdFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXG4gICpcdFx0UkNVIHNhZmV0eS5cbiAgKi9cbiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHZvaWQgKnRmbTtcbi1cdHUzMiBzaXZfbGVuO1xuK1x0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IGFlc19rZXkgYWVzO1xuK1x0fSBrZXk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0cmVmY291bnRfdCB1c2FnZTtcbiB9O1xuIFxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuLVxuLVx0ZG93bl93cml0ZShcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcbi1cdFx0aWYgKCFzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRub2RlID0ga21hbGxvY19vYmooKm5vZGUpO1xuLVx0ZXJyID0gLUVOT01FTTtcbi1cdGlmICghbm9kZSlcbi1cdFx0Z290byB1bmxvY2s7XG4tXG4tXHRub2RlLVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0bGlzdF9hZGQoXHUwMDI2bm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzKTtcbi1cdGVyciA9IDA7XG4tXG4tdW5sb2NrOlxuLVx0dXBfd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKTtcbi1cbi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVOT0VOVDtcbi1cbi1cdGRvd25fd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XG4tXHRcdGlmIChzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4tXHRcdGtmcmVlKG5vZGUpO1xuLVx0XHRlcnIgPSAwO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cdHVwX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKTtcbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqYnBmX2NyeXB0b19nZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuLXtcbi1cdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUgPSBFUlJfUFRSKC1FTk9FTlQpO1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVxuLVx0ZG93bl9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2YnBmX2NyeXB0b190eXBlcywgbGlzdCkge1xuLVx0XHRpZiAoc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCBuYW1lKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHRyeV9tb2R1bGVfZ2V0KG5vZGUtXHUwMDNldHlwZS1cdTAwM2Vvd25lcikpXG4tXHRcdFx0dHlwZSA9IG5vZGUtXHUwMDNldHlwZTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHR1cF9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiB0eXBlO1xuLX1cbi1cbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG4gLyoqXG5AQCAtMTQ2LDcgKzk5LDYgQEAgX19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcbiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxuIFx0XHQgICAgICBpbnQgKmVycilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRpZiAoIXBhcmFtcyB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVx1MDAzZXJlc2VydmVkWzFdIHx8XG5AQCAtMTU1LDY5ICsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHR0eXBlID0gYnBmX2NyeXB0b19nZXRfdHlwZShwYXJhbXMtXHUwMDNldHlwZSk7XG4tXHRpZiAoSVNfRVJSKHR5cGUpKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKHR5cGUpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGlmICghdHlwZS1cdTAwM2VoYXNfYWxnbyhwYXJhbXMtXHUwMDNlYWxnbykpIHtcbi1cdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLVx0fVxuLVxuLVx0aWYgKCEhcGFyYW1zLVx1MDAzZWF1dGhzaXplIF4gISF0eXBlLVx1MDAzZXNldGF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbi1cdGlmICghcGFyYW1zLVx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihwYXJhbXMtXHUwMDNla2V5KSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbiBcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0KmVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XG4rXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0Y3R4LVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0Y3R4LVx1MDAzZXRmbSA9IHR5cGUtXHUwMDNlYWxsb2NfdGZtKHBhcmFtcy1cdTAwM2VhbGdvKTtcbi1cdGlmIChJU19FUlIoY3R4LVx1MDAzZXRmbSkpIHtcbi1cdFx0KmVyciA9IFBUUl9FUlIoY3R4LVx1MDAzZXRmbSk7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfY3R4O1xuK1x0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xuK1x0XHQqZXJyID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSB0eXBlLVx1MDAzZXNldGF1dGhzaXplKGN0eC1cdTAwM2V0Zm0sIHBhcmFtcy1cdTAwM2VhdXRoc2l6ZSk7XG4tXHRcdGlmICgqZXJyKVxuLVx0XHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK1x0c3dpdGNoIChjdHgtXHUwMDNlYWxnbykge1xuK1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuK1x0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuK1x0XHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKVxuK1x0XHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0ZWxzZVxuK1x0XHRcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZjdHgtXHUwMDNla2V5LmFlcywgcGFyYW1zLVx1MDAzZWtleSxcbitcdFx0XHRcdFx0ICAgICAgcGFyYW1zLVx1MDAzZWtleV9sZW4pO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFdBUk5fT04oMSk7XG4rXHRcdCplcnIgPSAtRU5PRU5UO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbi1cdCplcnIgPSB0eXBlLVx1MDAzZXNldGtleShjdHgtXHUwMDNldGZtLCBwYXJhbXMtXHUwMDNla2V5LCBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4tXHRpZiAoKmVycilcbi1cdFx0Z290byBlcnJfZnJlZV90Zm07XG4tXG4tXHRpZiAodHlwZS1cdTAwM2VnZXRfZmxhZ3MoY3R4LVx1MDAzZXRmbSkgXHUwMDI2IENSWVBUT19URk1fTkVFRF9LRVkpIHtcbi1cdFx0KmVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK291dDpcbitcdGlmICgqZXJyKSB7XG4rXHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VzaXZfbGVuID0gdHlwZS1cdTAwM2VpdnNpemUoY3R4LVx1MDAzZXRmbSkgKyB0eXBlLVx1MDAzZXN0YXRlc2l6ZShjdHgtXHUwMDNldGZtKTtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNldXNhZ2UsIDEpO1xuLVxuIFx0cmV0dXJuIGN0eDtcbi1cbi1lcnJfZnJlZV90Zm06XG4tXHR0eXBlLVx1MDAzZWZyZWVfdGZtKGN0eC1cdTAwM2V0Zm0pO1xuLWVycl9mcmVlX2N0eDpcbi1cdGtmcmVlKGN0eCk7XG4tZXJyX21vZHVsZV9wdXQ6XG4tXHRtb2R1bGVfcHV0KHR5cGUtXHUwMDNlb3duZXIpO1xuLVxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbkBAIC0yMjUsOSArMTQ4LDcgQEAgc3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRjdHggPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9jcnlwdG9fY3R4LCByY3UpO1xuLVx0Y3R4LVx1MDAzZXR5cGUtXHUwMDNlZnJlZV90Zm0oY3R4LVx1MDAzZXRmbSk7XG4tXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2V0eXBlLVx1MDAzZW93bmVyKTtcbi1cdGtmcmVlKGN0eCk7XG4rXHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3LDI3ICsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxuIH1cbiBDRklfTk9TRUFMKGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcik7XG4gXG4rc3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXG4rXHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuK3tcbitcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChkZWNyeXB0KVxuK1x0XHRhZXNfY2JjX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl9hZXNfZWNiX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbitcdFx0XHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXG4re1xuK1x0aWYgKGl2X2xlbiAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcdTAwM2Mgc3JjX2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoZGVjcnlwdClcbitcdFx0YWVzX2VjYl9kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsXG4gXHRcdFx0ICAgIGJvb2wgZGVjcnlwdClcbiB7XG4tXHR1MzIgc3JjX2xlbiwgZHN0X2xlbiwgc2l2X2xlbjtcbitcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gXHRjb25zdCB1OCAqcHNyYztcbiBcdHU4ICpwZHN0LCAqcGl2O1xuLVx0aW50IGVycjtcbiBcbiBcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwO1xuK1x0aXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwO1xuIFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XG4gXHRkc3RfbGVuID0gX19icGZfZHlucHRyX3NpemUoZHN0KTtcbi1cdGlmICghc3JjX2xlbiB8fCAhZHN0X2xlbiB8fCBzcmNfbGVuIFx1MDAzZSBkc3RfbGVuKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChzaXZfbGVuICE9IGN0eC1cdTAwM2VzaXZfbGVuKVxuK1x0aWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pO1xuQEAgLTI5NywxNCArMjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdGlmICghcGRzdClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwaXYgPSBzaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoc2l2LCBzaXZfbGVuKSA6IE5VTEw7XG4tXHRpZiAoc2l2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbitcdHBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDtcbitcdGlmIChpdl9sZW4gXHUwMDI2XHUwMDI2ICFwaXYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0ZXJyID0gZGVjcnlwdCA/IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWRlY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KVxuLVx0XHQgICAgICA6IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWVuY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTtcbi1cbi1cdHJldHVybiBlcnI7XG4rXHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XG4rXHRcdHJldHVybiBicGZfYWVzX2NiY19jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XG4rXHRcdHJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMzEyLDIwICsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxuICAqIEBjdHg6XHRcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQHNyYzpcdFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCB0cnVlKTtcbitcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMzMzLDIwICsyODYsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRW5jcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7XG4rXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpO1xuIH1cbiBcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6MjcuMTIwOTk2NjM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2MjE4Mzg3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQ3J5cHRvIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gb3B0aW1pemluZyB0aGUgQlBGIGNyeXB0byBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgcmVtb3ZpbmcgdGhlIG9sZCBgY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaGAgZmlsZXMg4oCTIHNvIHRoZSBsZWdhY3kgY29kZSBpcyBnb25lLiBJbnN0ZWFkLCB0aGV5J3JlIGludHJvZHVjaW5nIGEgYGNvbmZpZyBCUEZfQ1JZUFRPYCBvcHRpb24gaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHdoaWNoIGlzIHNldCB0byBgeWAgaWYgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCBhbmQgYWxzbyBzZWxlY3RpbmcgYm90aCBgQ1JZUFRPX0xJQl9BRVNfQ0JDYCBhbmQgYENSWVBUT19MSUJfQUVTX0VDQmAuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGVuYWJsZXMgdGhlIHVzZSBvZiBBRVMtQ0JDIGFuZCBBRVMtRUNCIGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBpbiB0aGUgTWFrZWZpbGUgY29uZmlybXMgdGhpcyB3aXRoIGBvYmotJChDT05GSUdfQlBGX0NSWVBUTykgKz0gY3J5cHRvLm9gLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgYXBwZWFycyB0byBiZSBpbiBga2VybmVsL2JwZi9jcnlwdG8uY2AuIFRoZXkncmUgcmVmYWN0b3JpbmcgdGhlIGNyeXB0byBoYW5kbGluZywgbW92aW5nIGF3YXkgZnJvbSB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UuIFRoZSBhaW0gc2VlbXMgdG8gYmUgdG8gc3RyZWFtbGluZSB0aGluZ3MgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgIGltcGxlbWVudGF0aW9ucyB2aWEga2Z1bmNzLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgaW1wbGVtZW50ZWQgbmV3IGtmdW5jczogYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAsIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlYCwgYGJwZl9jcnlwdG9fZGVjcnlwdGAsIGFuZCBgYnBmX2NyeXB0b19lbmNyeXB0YC5cblxuTm93LCBpcyB0aGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmc/IExldCdzIHNlZS4gVGhlIGVudHJ5IHBvaW50cyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXNlIG5ldyBrZnVuY3MsIGFsb25nIHdpdGggb3RoZXJzIHN1Y2ggYXMgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcmAgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoaXMgbWVhbnMgdGhleSBhcmUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGlzIHBhdGNoIHRvdWNoZXMgYSBsb3QuIFRoZXkncmUgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byBkcml2ZXIgYmFja2VuZCB3aXRoIGRpcmVjdCBjYWxscyB0byBgYWVzX2NiY19lbmNyeXB0YCwgYGFlc19jYmNfZGVjcnlwdGAsIGBhZXNfZWNiX2VuY3J5cHRgLCBhbmQgYGFlc19lY2JfZGVjcnlwdGAuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBwYXJhbWV0ZXIgY2hlY2tpbmcsIGJ1ZmZlciB2YWxpZGF0aW9uLCBjb250ZXh0IGxpZmVjeWNsZSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBBbnkgZXJyb3IgaGVyZSBoYXMgbGFyZ2UgcG90ZW50aWFsIGltcGFjdC5cblxuSSBuZWVkIHRvIGluc3BlY3QgYGtlcm5lbC9icGYvY3J5cHRvLmNgIGFuZCBgS2NvbmZpZ2AgZm9yIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSdsbCBzZWFyY2ggZm9yIHRoZSBzeW1ib2xzIGFuZCByZWFkIHRoZSBjb2RlIHRvIGhhdmUgYSBnb29kIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo0MC43NDI4Mzg0MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3MzM3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NyeXB0b19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jcnlwdG8uYy0xMy0vKipcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE0OiAqIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAtIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3R1cmVcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE1LSAqIEB0eXBlOlxcdFRoZSBzdHJpbmcgb2YgY3J5cHRvIG9wZXJhdGlvbiB0eXBlLlxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yMy0gKi9cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI0OnN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0yNS1cXHRjaGFyIHR5cGVbMTRdO1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMi1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMzOmVudW0gYnBmX2NyeXB0b19hbGdvX2lkIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM0LVxcdEJQRl9BTEdPX0FFU19DQkMsXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy00MC1cXHRjb25zdCBjaGFyICphbGdvX25hbWU7XFxua2VybmVsL2JwZi9jcnlwdG8uYzo0MTpcXHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvO1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6NDI6fSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XFxua2VybmVsL2JwZi9jcnlwdG8uYy00My1cXHR7IFxcXCJza2NpcGhlclxcXCIsIFxcXCJjYmMoYWVzKVxcXCIsIEJQRl9BTEdPX0FFU19DQkMgfSxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNDYtXFxua2VybmVsL2JwZi9jcnlwdG8uYzo0NzpzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjQ4OlxcdFxcdFxcdFxcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNDkte1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6NTA6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjUxOlxcdFxcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXFx1MDAzZXR5cGUsXFxua2VybmVsL2JwZi9jcnlwdG8uYy01Mi1cXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNldHlwZSkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjUzOlxcdFxcdCAgICBzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnb19uYW1lLCBwYXJhbXMtXFx1MDAzZWFsZ28sXFxua2VybmVsL2JwZi9jcnlwdG8uYy01NC1cXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNlYWxnbykpID09IDApIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjU1OlxcdFxcdFxcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XFxua2VybmVsL2JwZi9jcnlwdG8uYy01Ni1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNjItLyoqXFxua2VybmVsL2JwZi9jcnlwdG8uYzo2MzogKiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggLSByZWZjb3VudGVkIEJQRiBjcnlwdG8gY29udGV4dCBzdHJ1Y3R1cmVcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTY0LSAqIEBhbGdvOlxcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTcwLSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6NzE6c3RydWN0IGJwZl9jcnlwdG9fY3R4IHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjcyOlxcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XFxua2VybmVsL2JwZi9jcnlwdG8uYy03My1cXHR1bmlvbiB7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTgwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtODItLyoqXFxua2VybmVsL2JwZi9jcnlwdG8uYzo4MzogKiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoKSAtIENyZWF0ZSBhIG11dGFibGUgQlBGIGNyeXB0byBjb250ZXh0Llxcbmtlcm5lbC9icGYvY3J5cHRvLmMtODQtICpcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtODYtICogYSBCUEYgcHJvZ3JhbS4gVGhlIGNyeXB0byBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXJcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjg3OiAqIGJlIGVtYmVkZGVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IgZnJlZWQgd2l0aCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkuXFxua2VybmVsL2JwZi9jcnlwdG8uYy04OC0gKiBBcyBjcnlwdG8gQVBJIGZ1bmN0aW9ucyB1c2UgR0ZQX0tFUk5FTCBhbGxvY2F0aW9ucywgdGhpcyBmdW5jdGlvbiBjYW5cXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtOTAtICpcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjkxOiAqIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSgpIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGNyeXB0byBjb250ZXh0Llxcbmtlcm5lbC9icGYvY3J5cHRvLmMtOTItICogSXQgbWF5IHJldHVybiBOVUxMIGlmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUuXFxua2VybmVsL2JwZi9jcnlwdG8uYzo5MzogKiBAcGFyYW1zOlxcdHBvaW50ZXIgdG8gc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGVcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk0LSAqXFx0XFx0ZGV0YWlscyBuZWVkZWQgdG8gaW5pdGlhbGlzZSBjcnlwdG8gY29udGV4dC5cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk1OiAqIEBwYXJhbXNfX3N6OlxcdHNpemUgb2Ygc3RldWN0IGJwZl9jcnlwdG9fcGFyYW1zIHVzZWYgYnkgYnBmIHByb2dyYW1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk2LSAqIEBlcnI6XFx0aW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk3LSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6OTg6X19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk5OmJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMDAtXFx0XFx0ICAgICAgaW50ICplcnIpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMDEte1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTAyOlxcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTAzLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTA0LVxcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVxcdTAwM2VyZXNlcnZlZFsxXSB8fFxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTA1OlxcdCAgICBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpKSB7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMDYtXFx0XFx0KmVyciA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTExNS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjExNjpcXHRpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgXFx1MDAyNmN0eC1cXHUwMDNlYWxnbykpIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTExNy1cXHRcXHQqZXJyID0gLUVOT0VOVDtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9MTQ2PXN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE0Ny17XFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNDg6XFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNDktXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNTA6XFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE1MS1cXHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTU0LS8qKlxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTU1OiAqIGJwZl9jcnlwdG9fY3R4X2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNTYtICogQGN0eDogVGhlIEJQRiBjcnlwdG8gY29udGV4dCBiZWluZyBhY3F1aXJlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZFxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNjAtICogbXVzdCBlaXRoZXIgYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjE6ICogYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpLlxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTYyLSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTYzOl9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjQ6YnBmX2NyeXB0b19jdHhfYWNxdWlyZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE2NS17XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE3MS0vKipcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE3MjogKiBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkgLSBSZWxlYXNlIGEgcHJldmlvdXNseSBhY3F1aXJlZCBCUEYgY3J5cHRvIGNvbnRleHQuXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNzMtICogQGN0eDogVGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHJlbGVhc2VkLlxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNzgtICovXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNzk6X19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4KVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTgwLXtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTg0LVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTg1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE4Ni17XFxua2VybmVsL2JwZi9jcnlwdG8uYzoxODc6XFx0YnBmX2NyeXB0b19jdHhfcmVsZWFzZShjdHgpO1xcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTg4LX1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE4OTpDRklfTk9TRUFMKGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcik7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0xOTAtXFxua2VybmVsL2JwZi9jcnlwdG8uYz0xOTE9c3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xOTItXFx0XFx0XFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxOTM6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTk0LXtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9MjA2PXN0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjA3LVxcdFxcdFxcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MjA4OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIyMC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjIyMTpzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yMjItXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjYzLS8qKlxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MjY0OiAqIGJwZl9jcnlwdG9fZGVjcnlwdCgpIC0gRGVjcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI2NS0gKiBAY3R4OlxcdFxcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI3MS0gKi9cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI3MjpfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19kZWNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjczLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI4MC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI4MTpcXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0yODItfVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yODQtLyoqXFxua2VybmVsL2JwZi9jcnlwdG8uYzoyODU6ICogYnBmX2NyeXB0b19lbmNyeXB0KCkgLSBFbmNyeXB0IGJ1ZmZlciB1c2luZyBjb25maWd1cmVkIGNvbnRleHQgYW5kIElWIHByb3ZpZGVkLlxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjg2LSAqIEBjdHg6XFx0XFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjkyLSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MjkzOl9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yOTQtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYyxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzAxLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzAyOlxcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCBmYWxzZSk7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMDMtfVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zMDc9QlRGX0tGVU5DU19TVEFSVChjcnlwdF9pbml0X2tmdW5jX2J0Zl9pZHMpXFxua2VybmVsL2JwZi9jcnlwdG8uYzozMDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzA5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzEwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2N0eF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMTEtQlRGX0tGVU5DU19FTkQoY3J5cHRfaW5pdF9rZnVuY19idGZfaWRzKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zMTg9QlRGX0tGVU5DU19TVEFSVChjcnlwdF9rZnVuY19idGZfaWRzKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzE5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2RlY3J5cHQsIEtGX1JDVSlcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMyMDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19lbmNyeXB0LCBLRl9SQ1UpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMjEtQlRGX0tGVU5DU19FTkQoY3J5cHRfa2Z1bmNfYnRmX2lkcylcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9MzIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBjcnlwdF9rZnVuY19zZXQgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMyNy1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMyODpCVEZfSURfTElTVChicGZfY3J5cHRvX2R0b3JfaWRzKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzI5OkJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzMwOkJURl9JRChmdW5jLCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMzEtXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zMzI9c3RhdGljIGludCBfX2luaXQgY3J5cHRvX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzM0LVxcdGludCByZXQ7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozMzU6XFx0Y29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jIGJwZl9jcnlwdG9fZHRvcnNbXSA9IHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMzNi1cXHRcXHR7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozMzc6XFx0XFx0XFx0LmJ0Zl9pZFxcdCAgICAgID0gYnBmX2NyeXB0b19kdG9yX2lkc1swXSxcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMzODpcXHRcXHRcXHQua2Z1bmNfYnRmX2lkID0gYnBmX2NyeXB0b19kdG9yX2lkc1sxXVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzM5LVxcdFxcdH0sXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM0Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNyeXB0X2luaXRfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM0NzpcXHRyZXR1cm4gIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2NyeXB0b19kdG9ycyxcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fZHRvcnMpLFxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzQ5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIFRISVNfTU9EVUxFKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NTcxPUJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NTcyLSNpZmRlZiBDT05GSUdfQ1JZUFRPXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ1NzM6QlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ1NzQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjQwLjgzOTU3NjE2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTIzNjMwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQ3J5cHRvIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9DUllQVE9gLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyB3aGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3Igc2V0IGluIG9yZGVyIGZvciBgQlBGX0NSWVBUT2AgdG8gd29yayBjb3JyZWN0bHkuXG5cblNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgYWNjb21wYW55aW5nIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9DUllQVE9gLiBSZWFkaW5nIHRoYXQgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjQyLjgzMTk0MTgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgc3RpbGwgcmVlbmFibGUgaXQgYnkgc2V0dGluZyBpdCB0byAwIGxhdGVyIG9uLCBvciBwZXJtYW5lbnRseVxcbiAgODE6XFx0XFx0ICBkaXNhYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMSAoZnJvbSB3aGljaCBubyBvdGhlciB0cmFuc2l0aW9uIHRvXFxuICA4MjpcXHRcXHQgIDAgaXMgcG9zc2libGUgYW55bW9yZSkuXFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdCAgVW5wcml2aWxlZ2VkIEJQRiBjb3VsZCBiZSB1c2VkIHRvIGV4cGxvaXQgY2VydGFpbiBwb3RlbnRpYWxcXG4gIDg1OlxcdFxcdCAgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIHNpZGUtY2hhbm5lbCB2dWxuZXJhYmlsaXRpZXMgb24gdW5taXRpZ2F0ZWRcXG4gIDg2OlxcdFxcdCAgYWZmZWN0ZWQgaGFyZHdhcmUuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cXG4gIDg5OlxcdFxcbiAgOTA6XFx0Y29uZmlnIEJQRl9DUllQVE9cXG4gIDkxOlxcdFxcdGRlZl9ib29sIHlcXG4gIDkyOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDkzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNcXG4gIDk0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19FQ0JcXG4gIDk1OlxcdFxcdGhlbHBcXG4gIDk2OlxcdFxcdCAgUHJvdmlkZSB0aGUga2Z1bmNzIG5lZWRlZCBmb3IgQlBGIHByb2dyYW1zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHRcXG4gIDk3OlxcdFxcdCAgZGF0YS4gVGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSBBRVMtQ0JDIGFuZCBBRVMtRUNCLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRzb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbiAxMDA6XFx0XFxuIDEwMTpcXHRjb25maWcgQlBGX0xTTVxcbiAxMDI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbiAxMDM6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxuIDEwNDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDEwNTpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuIDEwNjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gMTA3OlxcdFxcdGhlbHBcXG4gMTA4OlxcdFxcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxcbiAxMDk6XFx0XFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo0Mi44MzIwMTUyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTIwOTAzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgQlBGIHN0dWZmLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGNvcmUuIFRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBmaXJzdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoZSBCUEYgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LlxuXG5UaGVuLCB0byByZWFsbHkgZ3Jhc3AgdGhlIHJ1bnRpbWUgYmVoYXZpb3IgYW5kLCBjcnVjaWFsbHksIHRoZSBzZWN1cml0eSBhc3BlY3RzLCBJICpoYXZlKiB0byBkZWx2ZSBpbnRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgdmVyaWZpZXIgaXMgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgc2VjdXJpdHkgbW9kZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYywgdGhlIGNoZWNrcyBpdCBwZXJmb3JtcywgYW5kIGhvdyBpdCBlbnN1cmVzIHRoYXQgdGhlIEJQRiBwcm9ncmFtcyBsb2FkZWQgaW50byB0aGUga2VybmVsIGFyZSBzYWZlIGFuZCB3b24ndCBjcmFzaCB0aGUgc3lzdGVtIG9yIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBjb250cm9sIGZsb3cgYW5hbHlzaXMsIHJlZ2lzdGVyIHZhbGlkYXRpb24sIGFuZCB0aGUgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGV4cGxvaXRzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAoYW5kIHBvdGVudGlhbCBoZWFkYWNoZXMpIGhhcHBlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjQ1LjU4NDEwODI4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODMwNDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQ1JZUFRPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTg5LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5MDpjb25maWcgQlBGX0NSWVBUT1xcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU3PWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZTo1ODpvYmotJChDT05GSUdfQlBGX0NSWVBUTykgKz0gY3J5cHRvLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTU5LW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6NDUuNjUyNDE5NDMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE5MjEwNjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgQlBGIHZlcmlmaWVyIGNvZGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcyBpdHNlbGYuIE15IGJlc3QgZ3Vlc3MgaXMgdGhhdCB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlIGlzIHJlbGF0ZWQgdG8gc29tZSBlZGdlIGNhc2UgdGhlIHZlcmlmaWVyIGlzbid0IGhhbmRsaW5nIHByb3Blcmx5LCBvciBwZXJoYXBzIGFuIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgdmVyaWZpY2F0aW9uIHJ1bGVzLiBUbyBzdGFydCwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgNDU3Mi4gVGhhdCBsb2NhdGlvbiBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBiYXNlZCBvbiBteSBwcmlvciBhbmFseXNpcyBvZiBzaW1pbGFyIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjUyLjg0NDUyODQ0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1NjU6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBTXFxuNDU2NjpcXHRCVEZfSUQoc3RydWN0LCBjZ3JvdXApXFxuNDU2NzpcXHQjZW5kaWZcXG40NTY4OlxcdCNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbjQ1Njk6XFx0QlRGX0lEKHN0cnVjdCwgYnBmX2NwdW1hc2spXFxuNDU3MDpcXHQjZW5kaWZcXG40NTcxOlxcdEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbjQ1NzI6XFx0I2lmZGVmIENPTkZJR19DUllQVE9cXG40NTczOlxcdEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbjQ1NzQ6XFx0I2VuZGlmXFxuNDU3NTpcXHQjaWZkZWYgQ09ORklHX0lORVRcXG40NTc2OlxcdEJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG40NTc3OlxcdCNlbmRpZlxcbjQ1Nzg6XFx0QlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcXG40NTc5OlxcdFxcbjQ1ODA6XFx0c3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxcbjQ1ODE6XFx0e1xcbjQ1ODI6XFx0XFx0aWYgKCFidGZfaXNfa2VybmVsKGJ0ZikpXFxuNDU4MzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40NTg0OlxcdFxcdHJldHVybiBidGZfaWRfc2V0X2NvbnRhaW5zKFxcdTAwMjZyY3VfcHJvdGVjdGVkX3R5cGVzLCBidGZfaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo1Mi44NDU1MTY0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM0NzE2MjYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBhdXRvbWF0aWNhbGx5IGJyaW5ncyBpbiBgQlBGX0NSWVBUT2AgKHdoaWNoIGRlcGVuZHMgb24gaXQpLiBgQlBGX0NSWVBUT2AgdGhlbiBzZWxlY3RzIGBDUllQVE9fTElCX0FFU19DQkNgIGFuZCBgQ1JZUFRPX0xJQl9BRVNfRUNCYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBCUEZfU1lTQ0FMTGAgaXMgcHJldHR5IHN0YW5kYXJkLCBidXQgYEJQRl9DUllQVE9gIGlzIHRoZSBuZXcgYWRkaXRpb24gaGVyZS5cblxuTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcz8gV2VsbCwgYEJQRl9TWVNDQUxMYCBkZXBlbmRzIG9uIGBCUEZgLCB3aGljaCBpcyBhIGdpdmVuLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEJQRl9DUllQVE9gLCBgQlBGX1NZU0NBTExgLCBvciBgREVCVUdfSU5GT19CVEZgIGFyZSBuZWVkZWQgZm9yIGtmdW5jcy4gQWgsIHllcywgZm9yIHRob3NlIGtmdW5jcyAoYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgKSwgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgdHlwaWNhbGx5IHJlcXVpcmVkLiBHb29kIHRvIGtub3cuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW1wb3J0YW50IHN5bWJvbHMsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG9uZXMgd2UnbGwgcmVhbGx5IGJlIGZvY3VzaW5nIG9uLiBJbiBga2VybmVsL2JwZi9jcnlwdG8uY2AsIHRoZSBrZnVuY3MgYXJlOiBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VgLCBgYnBmX2NyeXB0b19jdHhfYWNxdWlyZWAsIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3JgLCBgYnBmX2NyeXB0b19kZWNyeXB0YCwgYW5kIGBicGZfY3J5cHRvX2VuY3J5cHRgLiBUaGVzZSBhcmUgdGhlIG5vbi1zdGF0aWMga2Z1bmNzIGV4cG9zZWQgdG8gQlRGIC8gQlBGIHZlcmlmaWVyLlxuXG5BbHJpZ2h0LCBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBUaGlzIHBhdGNoIGlzIGEgYmlnIGRlYWwuIEl0J3MgY29tcGxldGVseSByZXdvcmtpbmcgdGhlIEJQRiBjcnlwdG8gYmFja2VuZC4gV2UncmUgbW92aW5nIGZyb20gc2tjaXBoZXIgdGZtcyB0byBkaXJlY3QgYGFlc19jYmNgIC8gYGFlc19lY2JgIGxpYnJhcnkgZnVuY3Rpb25zLiBUaGlzIGltcGFjdHMgdmFsaWRhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgKHNwZWNpZmljYWxseSBga2ZyZWVfc2Vuc2l0aXZlYCksIHRoZSBjb3JlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBleGVjdXRpb24gcGF0aCwgYWxnb3JpdGhtIGxvb2t1cCwgYW5kIHRoZSBrZnVuYyBpbnRlcmZhY2VzIHRoZW1zZWx2ZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19icGZgIHN5c2NhbGwg4oCTIGRlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25maWdzIHRvIGVuYWJsZSBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfQ1JZUFRPYCwgYW5kIGBERUJVR19JTkZPX0JURmAuXG5cblRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAsIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlYCwgYGJwZl9jcnlwdG9fY3R4X2FjcXVpcmVgLCBgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yYCwgYGJwZl9jcnlwdG9fZGVjcnlwdGAsIGFuZCBgYnBmX2NyeXB0b19lbmNyeXB0YC5cblxuRmluYWxseSwgYSBxdWljayBmaW5hbCBjaGVjayBvZiBhbGwgcmVxdWlyZW1lbnRzIGFuZCBmb3JtYXQgb2YgYHNldC1yZXN1bHRzYC5cblxuYFdvcnRoRnV6emluZ2A6IHRydWVcbmBFbmFibGVDb25maWdzYDogW1wiQlBGX1NZU0NBTExcIiwgXCJCUEZfQ1JZUFRPXCIsIFwiREVCVUdfSU5GT19CVEZcIl1cbmBGb2N1c1N5bWJvbHNgOiBbXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIiwgXCJicGZfY3J5cHRvX2N0eF9yZWxlYXNlXCIsIFwiYnBmX2NyeXB0b19jdHhfYWNxdWlyZVwiLCBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLCBcImJwZl9jcnlwdG9fZGVjcnlwdFwiLCBcImJwZl9jcnlwdG9fZW5jcnlwdFwiXVxuYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24uXG5cbk9rYXksIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MDMsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6NTkuMTkyNjgyNzE0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MjgzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0NSWVBUT1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X2FjcXVpcmVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLFxuICAgIFwiYnBmX2NyeXB0b19kZWNyeXB0XCIsXG4gICAgXCJicGZfY3J5cHRvX2VuY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfQ1JZUFRPXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jcnlwdG9fY3R4X2NyZWF0ZVwiLFxuICAgIFwiYnBmX2NyeXB0b19jdHhfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2NyeXB0b19jdHhfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yXCIsXG4gICAgXCJicGZfY3J5cHRvX2RlY3J5cHRcIixcbiAgICBcImJwZl9jcnlwdG9fZW5jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgY3J5cHRvIHN1cHBvcnQgYnkgcmVtb3ZpbmcgdGhlIGR5bmFtaWMgY3J5cHRvIHR5cGUgcmVnaXN0cmF0aW9uIGludGVyZmFjZSBhbmQgaW1wbGVtZW50aW5nIGRpcmVjdCBBRVMtQ0JDIGFuZCBBRVMtRUNCIGxpYnJhcnkgaW50ZWdyYXRpb24uIEl0IGludHJvZHVjZXMgQ09ORklHX0JQRl9DUllQVE8gYW5kIG1vZGlmaWVzIHRoZSBCUEYgY3J5cHRvIGtmdW5jIGhhbmRsZXJzIChjb250ZXh0IGNyZWF0aW9uLCBrZXkgc2V0dXAsIGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCksIG1ha2luZyB0aGVzZSBmdW5jdGlvbnMgaW1wb3J0YW50IHRhcmdldHMgZm9yIEJQRiBwcm9ncmFtIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjU5LjMzMTk3NTYzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwOTk5NzgyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo1OS4zMzI0NTA2NDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA5OTQ5NjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXFxuXFxuTWVtb3J5IHNhZmV0eSBhbmFseXNpczpcXG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgY29udGV4dCBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBhbmQgdGhlIGBhZXNfa2V5YCB1bmlvbikgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEtleSBzZXR1cCBpcyBoYW5kbGVkIGJ5IGBhZXNfcHJlcGFyZWtleSgpYC4gQ2xlYW51cCBpcyBoYW5kbGVkIHZpYSBga2ZyZWVfc2Vuc2l0aXZlKClgLlxcbjIuIEJ1ZmZlcnMgXFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXFx1MDAzZT0gc3JjX2xlbmApLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcvY29udHJvbCBmbG93LlxcbjMuIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgZHlucHRyIGFjY2Vzc2VzLCBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9uIGJ1Z3MsIG9yIGxpZmV0aW1lL3JlZmNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgQlBGIHZlcmlmaWVyL2RlYnVnIGluZnJhc3RydWN0dXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5N2I0MDkyMjNlMjUxZTBhMjBiODg5YWI3YTc2YjU5NzgzMjhmY2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjoyOToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDNhMTlkYTc0ZDAwYzkuLjE2ZjEzMjcwY2UxZjkgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC00OTM2LDggKzQ5MzYsNiBAQCBCUEYgW0NSWVBUT11cbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0YnBmQHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4tRjpcdGNyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbi1GOlx0aW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcbiBGOlx0a2VybmVsL2JwZi9jcnlwdG8uY1xuIFxuIEJQRiBbRE9DVU1FTlRBVElPTl0gKFJlbGF0ZWQgdG8gU3RhbmRhcmRpemF0aW9uKVxuZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZVxuaW5kZXggODM4NmQ1NWE5NzU1ZS4uMzNiYjVhZDU5NWU4ZiAxMDA2NDRcbi0tLSBhL2NyeXB0by9NYWtlZmlsZVxuKysrIGIvY3J5cHRvL01ha2VmaWxlXG5AQCAtMjIsOSArMjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSArPSBsc2tjaXBoZXIub1xuIGNyeXB0b19za2NpcGhlci15ICs9IHNrY2lwaGVyLm9cbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gY3J5cHRvX3NrY2lwaGVyLm9cbi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSlcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gYnBmX2NyeXB0b19za2NpcGhlci5vXG4tZW5kaWZcbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vXG4gb2JqLSQoQ09ORklHX0NSWVBUT19FQ0hBSU5JVikgKz0gZWNoYWluaXYub1xuZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDgzICswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9jcnlwdG8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2NyeXB0by9za2NpcGhlci5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgKmJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdvKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fYWxsb2NfbHNrY2lwaGVyKGFsZ28sIDAsIDApO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSh2b2lkICp0Zm0pXG4te1xuLVx0Y3J5cHRvX2ZyZWVfbHNrY2lwaGVyKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28oY29uc3QgY2hhciAqYWxnbylcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2hhc19za2NpcGhlcihhbGdvLCBDUllQVE9fQUxHX1RZUEVfTFNLQ0lQSEVSLCBDUllQVE9fQUxHX1RZUEVfTUFTSyk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHZvaWQgKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbilcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7XG4tfVxuLVxuLXN0YXRpYyB1MzIgYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHZvaWQgKnRmbSlcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3ModGZtKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodm9pZCAqdGZtKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh2b2lkICp0Zm0pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlIGJwZl9jcnlwdG9fbHNrY2lwaGVyX3R5cGUgPSB7XG4tXHQuYWxsb2NfdGZtXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbSxcbi1cdC5mcmVlX3RmbVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSxcbi1cdC5oYXNfYWxnb1x0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyxcbi1cdC5zZXRrZXlcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksXG4tXHQuZW5jcnlwdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LFxuLVx0LmRlY3J5cHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCxcbi1cdC5pdnNpemVcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUsXG4tXHQuc3RhdGVzaXplXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSxcbi1cdC5nZXRfZmxhZ3NcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzLFxuLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tXHQubmFtZVx0XHQ9IFwic2tjaXBoZXJcIixcbi19O1xuLVxuLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKVxuLXtcbi1cdHJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZClcbi17XG4tXHRpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tXHRXQVJOX09OX09OQ0UoZXJyKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTtcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xuLU1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIlN5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRlwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE0MWU3MWQ0ZTJkOWYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyNCArMCwwIEBAXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbi0jaWZuZGVmIF9CUEZfQ1JZUFRPX0hcbi0jZGVmaW5lIF9CUEZfQ1JZUFRPX0hcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlIHtcbi1cdHZvaWQgKigqYWxsb2NfdGZtKShjb25zdCBjaGFyICphbGdvKTtcbi1cdHZvaWQgKCpmcmVlX3RmbSkodm9pZCAqdGZtKTtcbi1cdGludCAoKmhhc19hbGdvKShjb25zdCBjaGFyICphbGdvKTtcbi1cdGludCAoKnNldGtleSkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTtcbi1cdGludCAoKnNldGF1dGhzaXplKSh2b2lkICp0Zm0sIHVuc2lnbmVkIGludCBhdXRoc2l6ZSk7XG4tXHRpbnQgKCplbmNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHRpbnQgKCpkZWNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHR1bnNpZ25lZCBpbnQgKCppdnNpemUpKHZvaWQgKnRmbSk7XG4tXHR1bnNpZ25lZCBpbnQgKCpzdGF0ZXNpemUpKHZvaWQgKnRmbSk7XG4tXHR1MzIgKCpnZXRfZmxhZ3MpKHZvaWQgKnRmbSk7XG4tXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbi1cdGNoYXIgbmFtZVsxNF07XG4tfTtcbi1cbi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xuLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTtcbi1cbi0jZW5kaWYgLyogX0JQRl9DUllQVE9fSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvS2NvbmZpZyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuaW5kZXggZWIzZGUzNTczNGYwOS4uODIyNTk5YjQyYmUyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xuKysrIGIva2VybmVsL2JwZi9LY29uZmlnXG5AQCAtODcsNiArODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiBcbitjb25maWcgQlBGX0NSWVBUT1xuK1x0ZGVmX2Jvb2wgeVxuK1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ1xuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQlxuK1x0aGVscFxuK1x0ICBQcm92aWRlIHRoZSBrZnVuY3MgbmVlZGVkIGZvciBCUEYgcHJvZ3JhbXMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdFxuK1x0ICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuXG4rXG4gc291cmNlIFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcIlxuIFxuIGNvbmZpZyBCUEZfTFNNXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9NYWtlZmlsZSBiL2tlcm5lbC9icGYvTWFrZWZpbGVcbmluZGV4IDkwMjU1ZDgwZTViZTYuLmFiMmU1ZDI3ODJlNmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlXG4rKysgYi9rZXJuZWwvYnBmL01ha2VmaWxlXG5AQCAtNTUsOSArNTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xuICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cbiBvYmotJHtDT05GSUdfQlBGX0xTTX0gKz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ub1xuIGVuZGlmXG4taWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxuLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cbi1lbmRpZlxuK29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSArPSBjcnlwdG8ub1xuIG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cbiBcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jcnlwdG8uYyBiL2tlcm5lbC9icGYvY3J5cHRvLmNcbmluZGV4IDUxZjg5Y2VjZWZiNGQuLjhjZGMxNmY5YjM3NGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jXG4rKysgYi9rZXJuZWwvYnBmL2NyeXB0by5jXG5AQCAtMSwxOSArMSwxMyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcdTAwM2Vcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3Qge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi19O1xuKyNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtY2JjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVzLWVjYi5oXHUwMDNlXG4gXG4gLyogQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdCAqL1xuIC8qKlxuQEAgLTM2LDk0ICszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xuIFx0dTMyIGF1dGhzaXplO1xuIH07XG4gXG4tc3RhdGljIExJU1RfSEVBRChicGZfY3J5cHRvX3R5cGVzKTtcbi1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4rZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xuK1x0QlBGX0FMR09fQUVTX0NCQyxcbitcdEJQRl9BTEdPX0FFU19FQ0IsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHtcbitcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcbitcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcbitcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG4rfSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XG4rXHR7IFwic2tjaXBoZXJcIiwgXCJjYmMoYWVzKVwiLCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4rXHR7IFwic2tjaXBoZXJcIiwgXCJlY2IoYWVzKVwiLCBCUEZfQUxHT19BRVNfRUNCIH0sXG4rfTtcbitcbitzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxuK3tcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcbitcdFx0aWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy1cdTAwM2V0eXBlLFxuK1x0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZXR5cGUpKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4rXHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNlYWxnbykpID09IDApIHtcbitcdFx0XHQqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIC8qKlxuICAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxuLSAqIEB0eXBlOlx0VGhlIHBvaW50ZXIgdG8gYnBmIGNyeXB0byB0eXBlXG4tICogQHRmbTpcdFRoZSBwb2ludGVyIHRvIGluc3RhbmNlIG9mIGNyeXB0byBBUEkgc3RydWN0LlxuLSAqIEBzaXZfbGVuOiAgICBTaXplIG9mIElWIGFuZCBzdGF0ZSBzdG9yYWdlIGZvciBjaXBoZXJcbisgKiBAYWxnbzpcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXG4rICogQGtleTpcdFRoZSBjcnlwdG8ga2V5XG4gICogQHJjdTpcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cbiAgKiBAdXNhZ2U6XHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXG4gICpcdFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXG4gICpcdFx0UkNVIHNhZmV0eS5cbiAgKi9cbiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHZvaWQgKnRmbTtcbi1cdHUzMiBzaXZfbGVuO1xuK1x0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IGFlc19rZXkgYWVzO1xuK1x0fSBrZXk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0cmVmY291bnRfdCB1c2FnZTtcbiB9O1xuIFxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuLVxuLVx0ZG93bl93cml0ZShcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcbi1cdFx0aWYgKCFzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRub2RlID0ga21hbGxvY19vYmooKm5vZGUpO1xuLVx0ZXJyID0gLUVOT01FTTtcbi1cdGlmICghbm9kZSlcbi1cdFx0Z290byB1bmxvY2s7XG4tXG4tXHRub2RlLVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0bGlzdF9hZGQoXHUwMDI2bm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzKTtcbi1cdGVyciA9IDA7XG4tXG4tdW5sb2NrOlxuLVx0dXBfd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKTtcbi1cbi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVOT0VOVDtcbi1cbi1cdGRvd25fd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XG4tXHRcdGlmIChzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4tXHRcdGtmcmVlKG5vZGUpO1xuLVx0XHRlcnIgPSAwO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cdHVwX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKTtcbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqYnBmX2NyeXB0b19nZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuLXtcbi1cdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUgPSBFUlJfUFRSKC1FTk9FTlQpO1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVxuLVx0ZG93bl9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2YnBmX2NyeXB0b190eXBlcywgbGlzdCkge1xuLVx0XHRpZiAoc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCBuYW1lKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHRyeV9tb2R1bGVfZ2V0KG5vZGUtXHUwMDNldHlwZS1cdTAwM2Vvd25lcikpXG4tXHRcdFx0dHlwZSA9IG5vZGUtXHUwMDNldHlwZTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHR1cF9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiB0eXBlO1xuLX1cbi1cbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG4gLyoqXG5AQCAtMTQ2LDcgKzk5LDYgQEAgX19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcbiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxuIFx0XHQgICAgICBpbnQgKmVycilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRpZiAoIXBhcmFtcyB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVx1MDAzZXJlc2VydmVkWzFdIHx8XG5AQCAtMTU1LDY5ICsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHR0eXBlID0gYnBmX2NyeXB0b19nZXRfdHlwZShwYXJhbXMtXHUwMDNldHlwZSk7XG4tXHRpZiAoSVNfRVJSKHR5cGUpKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKHR5cGUpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGlmICghdHlwZS1cdTAwM2VoYXNfYWxnbyhwYXJhbXMtXHUwMDNlYWxnbykpIHtcbi1cdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLVx0fVxuLVxuLVx0aWYgKCEhcGFyYW1zLVx1MDAzZWF1dGhzaXplIF4gISF0eXBlLVx1MDAzZXNldGF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbi1cdGlmICghcGFyYW1zLVx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihwYXJhbXMtXHUwMDNla2V5KSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbiBcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0KmVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XG4rXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0Y3R4LVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0Y3R4LVx1MDAzZXRmbSA9IHR5cGUtXHUwMDNlYWxsb2NfdGZtKHBhcmFtcy1cdTAwM2VhbGdvKTtcbi1cdGlmIChJU19FUlIoY3R4LVx1MDAzZXRmbSkpIHtcbi1cdFx0KmVyciA9IFBUUl9FUlIoY3R4LVx1MDAzZXRmbSk7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfY3R4O1xuK1x0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xuK1x0XHQqZXJyID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSB0eXBlLVx1MDAzZXNldGF1dGhzaXplKGN0eC1cdTAwM2V0Zm0sIHBhcmFtcy1cdTAwM2VhdXRoc2l6ZSk7XG4tXHRcdGlmICgqZXJyKVxuLVx0XHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK1x0c3dpdGNoIChjdHgtXHUwMDNlYWxnbykge1xuK1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuK1x0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuK1x0XHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKVxuK1x0XHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0ZWxzZVxuK1x0XHRcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZjdHgtXHUwMDNla2V5LmFlcywgcGFyYW1zLVx1MDAzZWtleSxcbitcdFx0XHRcdFx0ICAgICAgcGFyYW1zLVx1MDAzZWtleV9sZW4pO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFdBUk5fT04oMSk7XG4rXHRcdCplcnIgPSAtRU5PRU5UO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbi1cdCplcnIgPSB0eXBlLVx1MDAzZXNldGtleShjdHgtXHUwMDNldGZtLCBwYXJhbXMtXHUwMDNla2V5LCBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4tXHRpZiAoKmVycilcbi1cdFx0Z290byBlcnJfZnJlZV90Zm07XG4tXG4tXHRpZiAodHlwZS1cdTAwM2VnZXRfZmxhZ3MoY3R4LVx1MDAzZXRmbSkgXHUwMDI2IENSWVBUT19URk1fTkVFRF9LRVkpIHtcbi1cdFx0KmVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK291dDpcbitcdGlmICgqZXJyKSB7XG4rXHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VzaXZfbGVuID0gdHlwZS1cdTAwM2VpdnNpemUoY3R4LVx1MDAzZXRmbSkgKyB0eXBlLVx1MDAzZXN0YXRlc2l6ZShjdHgtXHUwMDNldGZtKTtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNldXNhZ2UsIDEpO1xuLVxuIFx0cmV0dXJuIGN0eDtcbi1cbi1lcnJfZnJlZV90Zm06XG4tXHR0eXBlLVx1MDAzZWZyZWVfdGZtKGN0eC1cdTAwM2V0Zm0pO1xuLWVycl9mcmVlX2N0eDpcbi1cdGtmcmVlKGN0eCk7XG4tZXJyX21vZHVsZV9wdXQ6XG4tXHRtb2R1bGVfcHV0KHR5cGUtXHUwMDNlb3duZXIpO1xuLVxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbkBAIC0yMjUsOSArMTQ4LDcgQEAgc3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRjdHggPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9jcnlwdG9fY3R4LCByY3UpO1xuLVx0Y3R4LVx1MDAzZXR5cGUtXHUwMDNlZnJlZV90Zm0oY3R4LVx1MDAzZXRmbSk7XG4tXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2V0eXBlLVx1MDAzZW93bmVyKTtcbi1cdGtmcmVlKGN0eCk7XG4rXHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3LDI3ICsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxuIH1cbiBDRklfTk9TRUFMKGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcik7XG4gXG4rc3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXG4rXHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuK3tcbitcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChkZWNyeXB0KVxuK1x0XHRhZXNfY2JjX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl9hZXNfZWNiX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbitcdFx0XHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXG4re1xuK1x0aWYgKGl2X2xlbiAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcdTAwM2Mgc3JjX2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoZGVjcnlwdClcbitcdFx0YWVzX2VjYl9kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsXG4gXHRcdFx0ICAgIGJvb2wgZGVjcnlwdClcbiB7XG4tXHR1MzIgc3JjX2xlbiwgZHN0X2xlbiwgc2l2X2xlbjtcbitcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gXHRjb25zdCB1OCAqcHNyYztcbiBcdHU4ICpwZHN0LCAqcGl2O1xuLVx0aW50IGVycjtcbiBcbiBcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwO1xuK1x0aXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwO1xuIFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XG4gXHRkc3RfbGVuID0gX19icGZfZHlucHRyX3NpemUoZHN0KTtcbi1cdGlmICghc3JjX2xlbiB8fCAhZHN0X2xlbiB8fCBzcmNfbGVuIFx1MDAzZSBkc3RfbGVuKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChzaXZfbGVuICE9IGN0eC1cdTAwM2VzaXZfbGVuKVxuK1x0aWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pO1xuQEAgLTI5NywxNCArMjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdGlmICghcGRzdClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwaXYgPSBzaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoc2l2LCBzaXZfbGVuKSA6IE5VTEw7XG4tXHRpZiAoc2l2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbitcdHBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDtcbitcdGlmIChpdl9sZW4gXHUwMDI2XHUwMDI2ICFwaXYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0ZXJyID0gZGVjcnlwdCA/IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWRlY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KVxuLVx0XHQgICAgICA6IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWVuY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTtcbi1cbi1cdHJldHVybiBlcnI7XG4rXHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XG4rXHRcdHJldHVybiBicGZfYWVzX2NiY19jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XG4rXHRcdHJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMzEyLDIwICsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxuICAqIEBjdHg6XHRcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQHNyYzpcdFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCB0cnVlKTtcbitcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMzMzLDIwICsyODYsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRW5jcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7XG4rXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpO1xuIH1cbiBcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6NTkuMzMyNDUzMjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5OTYxODA4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQ3J5cHRvIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzIG9yIG1lbW9yeSBsZWFrcy5cblxuRmlyc3QsIEkgbmVlZCB0byBncmFzcCB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSdyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBnZW5lcmljIEJQRiBjcnlwdG8gZHluYW1pYyByZWdpc3RyYXRpb24gZnJhbWV3b3JrICh1c2luZyBgY3J5cHRvIHRmbWAgQVBJIGZvciBgc2tjaXBoZXJgIGFuZCBgbHNrY2lwaGVyYCkgYW5kIG9wdGluZyBmb3IgYSBkaXJlY3QgaW1wbGVtZW50YXRpb24gbGV2ZXJhZ2luZyB0aGUgYGNyeXB0by9hZXMtY2JjLmhgIGFuZCBgY3J5cHRvL2Flcy1lY2IuaGAgaGVscGVycyAoYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgKS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQsIGFuZCBpdCdzIHdoZXJlIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzOlxuXG4qICAgVGhlIHBhdGNoIHJlbW92ZXMgYGNyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNgIGFuZCBgaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhgLCBzdWdnZXN0aW5nIGEgc2ltcGxpZmljYXRpb24gb2YgdGhlIGZyYW1ld29yay5cbiogICBJbiBga2VybmVsL2JwZi9LY29uZmlnYCwgaXQncyBhZGRpbmcgYGNvbmZpZyBCUEZfQ1JZUFRPYCBhbmQgc2VsZWN0aW5nIGBDUllQVE9fTElCX0FFU19DQkNgIGFuZCBgQ1JZUFRPX0xJQl9BRVNfRUNCYCwgd2hpY2ggY29uZmlybXMgdGhlIEFFUy1zcGVjaWZpYyBmb2N1cy5cbiogICBUaGUgY3JpdGljYWwgY2hhbmdlcyBhcmUgd2l0aGluIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gSGVyZSdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyB0aGUgbW9zdDpcbiAgICAqICAgVGhlIGBicGZfY3J5cHRvX3R5cGVzYCByZWdpc3RyeSBhbmQgdGhlIGB0Zm1gLWJhc2VkIGRpc3BhdGNoIGFyZSBnb25lLCByZXBsYWNlZCBieSBhIGhhcmRjb2RlZCBgZW51bSBicGZfY3J5cHRvX2FsZ29faWRgIGZvciBBRVMgQ0JDIGFuZCBFQ0IuIFRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiBidXQgY291bGQgaW50cm9kdWNlIGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuXG4gICAgKiAgIFRoZSBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBoYXMgYmVlbiBtb2RpZmllZC4gSXQgbm93IGNvbnRhaW5zIGFuIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAsIGEgdW5pb24gZm9yIHRoZSBBRVMga2V5IChgc3RydWN0IGFlc19rZXlgKSwgYW4gYHJjdV9oZWFkYCwgYW5kIGEgYHJlZmNvdW50X3RgLiBUaGlzIGxvb2tzIGdlbmVyYWxseSBzb3VuZCwgYW5kIEkgc2VlIGl0J3Mgbm93IHplcm8taW5pdGlhbGl6ZWQgYnkgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuICAgICogICBgYnBmX2NyeXB0b19jdHhfY3JlYXRlKClgIGlzIHdoZXJlIEkgd2FudCB0byBsb29rIGNsb3NlbHkuIEl0J3MgZG9pbmcgc29tZSBwYXJhbWV0ZXIgY2hlY2tpbmcsIGNhbGxpbmcgYGFlc19wcmVwYXJla2V5YCwgYW5kIGhhbmRsaW5nIGVycm9ycyBieSBmcmVlaW5nIHRoZSBjb250ZXh0IHdpdGggYGtmcmVlX3NlbnNpdGl2ZWAuIFRoaXMgc2VlbXMgcmVhc29uYWJsZSwgYnV0IGBhZXNfcHJlcGFyZWtleWAgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuICAgICogICBgY3J5cHRvX2ZyZWVfY2IoKWAgdXNlcyBga2ZyZWVfc2Vuc2l0aXZlYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHNlbnNpdGl2ZSBrZXkgbWF0ZXJpYWwuXG4gICAgKiAgIFRoZSBgYnBmX2Flc19jYmNfY3J5cHRgIGFuZCBgYnBmX2Flc19lY2JfY3J5cHRgIGZ1bmN0aW9ucyBhcmUgcHJlc2VudCB3aXRoIHNhbml0eSBjaGVja3MgKElWIGxlbmd0aCwgc291cmNlL2Rlc3RpbmF0aW9uIGxlbmd0aCBjaGVja3MpLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIEFFUyBvcGVyYXRpb25zIGFyZSBkZWxlZ2F0ZWQgdG8gYGFlc19jYmNfZGVjcnlwdGAvYGFlc19jYmNfZW5jcnlwdGAgYW5kIGBhZXNfZWNiX2RlY3J5cHRgL2BhZXNfZWNiX2VuY3J5cHRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG15IG5leHQgYXJlYSBvZiBmb2N1cy5cbiAgICAqICAgYGJwZl9jcnlwdG9fY3J5cHRgIHNlZW1zIHRvIGJlIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb24gdGhhdCBkb2VzIHNpemUgY2hlY2tpbmcsIGV4dHJhY3RzIHRoZSBwb2ludGVycywgYW5kIGRpc3BhdGNoZXMgdG8gdGhlIEFFUyBDQkMgb3IgRUNCIGZ1bmN0aW9ucy4gSXQgYWxzbyBjYWxscyB0aGUgYF9fYnBmX2R5bnB0cl9pc19yZG9ubHlgIGFuZCBgX19icGZfZHlucHRyX2RhdGFgIGZhbWlseSBvZiBmdW5jdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIHNvdXJjZSwgZGVzdGluYXRpb24sIGFuZCBJViBidWZmZXJzLlxuXG5NeSBtYWluIGNvbmNlcm5zIHJpZ2h0IG5vdyByZXZvbHZlIGFyb3VuZCB0aGVzZSBhc3BlY3RzOlxuXG4xLiAgKipgYWVzX3ByZXBhcmVrZXlgOioqIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgd2hldGhlciBpdCBjb3VsZCBwb3RlbnRpYWxseSBsZWF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGBzdHJ1Y3QgYWVzX2tleWAuXG4yLiAgKipgYWVzX2NiY19lbmNyeXB0L2RlY3J5cHRgIGFuZCBgYWVzX2VjYl9lbmNyeXB0L2RlY3J5cHRgOioqIEkgaGF2ZSB0byBhbmFseXplIHRoZXNlIGltcGxlbWVudGF0aW9ucyBmb3IgYW55IHN1YnRsZSBmbGF3cyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgcGFkZGluZyBpc3N1ZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIGlucHV0IGRhdGEgaXMgaGFuZGxlZCBhbmQgaWYgdGhlcmUncyBhbnkgcmlzayBvZiByZWFkaW5nIGJleW9uZCB0aGUgcHJvdmlkZWQgYnVmZmVycy5cbjMuICAqKkRhdGEgbW92ZW1lbnQ6KiogdGhlIGBfX2JwZl9keW5wdHJfZGF0YWAgY2FsbHMuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgc291cmNlLCBkZXN0aW5hdGlvbiBhbmQgSVYgYnVmZmVycyBhcmUgYWxsIGhhbmRsZWQgc2FmZWx5LlxuNC4gICoqYHN0cnVjdCBhZXNfa2V5YDoqKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGNyaXRpY2FsIGZvciBjaGVja2luZyBwYWRkaW5nIGJ5dGVzLlxuXG5JIHdpbGwgY29uZHVjdCBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIGRlZmluaXRpb25zIG9mIGBzdHJ1Y3QgYWVzX2tleWAsIGBhZXNfcHJlcGFyZWtleWAsIGFuZCB0aGUgQUVTIGVuY3J5cHQvZGVjcnlwdCBmdW5jdGlvbnMsIHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgb2NjdXJyZW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIG9yIGRlZmluaXRpb25zLCBzbyBhcyBub3QgdG8gbWlzcyBhbnkgZGV0YWlsLiBCYXNlZCBvbiBteSBmaW5kaW5ncywgSSdsbCBkZWNpZGUgaWYgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYW4gZXh0cmEgbGF5ZXIgb2Ygc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDowNy4zMjg2MzcxMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzg1ODI5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWVzX3ByZXBhcmVrZXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jPTIzND1zdGF0aWMgaW50IGFlc2JzX3h0c19zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxcbi0tXFxuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jLTI0NC1cXHRrZXlfbGVuIC89IDI7XFxuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jOjI0NTpcXHRlcnIgPSBhZXNfcHJlcGFyZWtleShcXHUwMDI2Y3R4LVxcdTAwM2VmYWxsYmFjaywgaW5fa2V5LCBrZXlfbGVuKTtcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtMjQ2LVxcdGlmIChlcnIpXFxuLS1cXG5jcnlwdG8vYWVzLmM9MjY9c3RhdGljIGludCBjcnlwdG9fYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxcbi0tXFxuY3J5cHRvL2Flcy5jLTMwLVxcbmNyeXB0by9hZXMuYzozMTpcXHRyZXR1cm4gYWVzX3ByZXBhcmVrZXkoa2V5LCBpbl9rZXksIGtleV9sZW4pO1xcbmNyeXB0by9hZXMuYy0zMi19XFxuLS1cXG5jcnlwdG8vYWVzLmM9MjEzPWNyeXB0b19hZXNfc2tjaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmluX2tleSxcXG4tLVxcbmNyeXB0by9hZXMuYy0yMTctXFxuY3J5cHRvL2Flcy5jOjIxODpcXHRyZXR1cm4gYWVzX3ByZXBhcmVrZXkoa2V5LCBpbl9rZXksIGtleV9sZW4pO1xcbmNyeXB0by9hZXMuYy0yMTktfVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYz0xMDI1PXN0YXRpYyBpbnQgY2hjcl91cGRhdGVfdHdlYWsoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgdTggKml2LFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYy0xMDQ2LVxcdFxcdFxcdD09IENIQ1JfS0VZQ1RYX0NJUEhFUl9LRVlfU0laRV8xOTIpXFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYzoxMDQ3OlxcdFxcdHJldCA9IGFlc19wcmVwYXJla2V5KFxcdTAwMjZhZXMsIGtleSwga2V5bGVuIC0gOCk7XFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYy0xMDQ4LVxcdGVsc2VcXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwNDk6XFx0XFx0cmV0ID0gYWVzX3ByZXBhcmVrZXkoXFx1MDAyNmFlcywga2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTA1MC1cXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTE5LSAqXFx0bGFzdCBjaXBoZXJ0ZXh0IGJsb2NrIChvciBsZWZ0IHVuY2hhbmdlZCBpZiBAbGVuID09IDApLlxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDoyMDogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KCkgb3IgYWVzX3ByZXBhcmVlbmNrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC0yMS0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTI3PXZvaWQgYWVzX2NiY19lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtMzctICpcXHRsYXN0IGNpcGhlcnRleHQgYmxvY2sgKG9yIGxlZnQgdW5jaGFuZ2VkIGlmIEBsZW4gPT0gMCkuXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjM4OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC0zOS0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTQ1PXZvaWQgYWVzX2NiY19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNTQtICogQGl2OiBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLCBjbG9iYmVyZWQgYnkgdGhpcyBmdW5jdGlvblxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDo1NTogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KCkgb3IgYWVzX3ByZXBhcmVlbmNrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC01Ni0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTU5PXZvaWQgYWVzX2NiY19jdHNfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTY4LSAqIEBpdjogVGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciwgY2xvYmJlcmVkIGJ5IHRoaXMgZnVuY3Rpb25cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg6Njk6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTcwLSAqXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtMTgtICogQGN0cjogVGhlIGNvdW50ZXIuICBJdCB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IGNlaWwoQGxlbiAvIEFFU19CTE9DS19TSVpFKS5cXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmg6MTk6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtMjAtICpcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jdHIuaD0zND12b2lkIGFlc19jdHIodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jdHIuaC00NS0gKiBAaXY6IFRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3JcXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmg6NDY6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtNDctICpcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaC0xNy0gKiBAbGVuOiBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jcnlwdC4gIE11c3QgYmUgYSBtdWx0aXBsZSBvZiBBRVNfQkxPQ0tfU0laRS5cXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MTg6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMTktICpcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaD0yOD12b2lkIGFlc19lY2JfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLCBhZXNfZW5jcnlwdF9hcmcga2V5KTtcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaC0zNS0gKiBAbGVuOiBOdW1iZXIgb2YgYnl0ZXMgdG8gZGVjcnlwdC4gIE11c3QgYmUgYSBtdWx0aXBsZSBvZiBBRVNfQkxPQ0tfU0laRS5cXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MzY6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWVjYi5oLTM3LSAqXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zMDg9dm9pZCBhZXNfc3BhcmM2NF9jdHJfY3J5cHRfMjU2KGNvbnN0IHU2NCAqa2V5LCBjb25zdCB1NjQgKmlucHV0LCB1NjQgKm91dHB1dCxcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMxMi0vKipcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMTM6ICogYWVzX3ByZXBhcmVrZXkoKSAtIFByZXBhcmUgYW4gQUVTIGtleSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvblxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMxNC0gKiBAa2V5OiAob3V0cHV0KSBUaGUga2V5IHN0cnVjdHVyZSB0byBpbml0aWFsaXplXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzQtICovXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzM1OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbik7XFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzM2LVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg9Mzc3PXZvaWQgYWVzX2VuY3J5cHQoYWVzX2VuY3J5cHRfYXJnIGtleSwgdTggb3V0W2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSxcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4MS0gKiBhZXNfZGVjcnlwdCgpIC0gRGVjcnlwdCBhIHNpbmdsZSBBRVMgYmxvY2tcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozODI6ICogQGtleTogVGhlIEFFUyBrZXksIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYnkgYWVzX3ByZXBhcmVrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4My0gKiBAb3V0OiBCdWZmZXIgdG8gc3RvcmUgdGhlIHBsYWludGV4dCBibG9ja1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz05OT1icGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMjYtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTI3OlxcdFxcdFxcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcXHUwMDI2Y3R4LVxcdTAwM2VrZXkuYWVzLCBwYXJhbXMtXFx1MDAzZWtleSxcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEyOC1cXHRcXHRcXHRcXHRcXHQgICAgICBwYXJhbXMtXFx1MDAzZWtleV9sZW4pO1xcbi0tXFxubGliL2NyeXB0by9hZXMuYz00MTE9c3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgYWVzX2RlY3J5cHRfZ2VuZXJpYyhjb25zdCB1MzIgaW52X3JuZGtleXNbXSxcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtNDUwLSAqXFxubGliL2NyeXB0by9hZXMuYzo0NTE6ICogYWVzX3ByZXBhcmVrZXlfYXJjaCgpIGlzIHBhc3NlZCBhbiBvcHRpb25hbCBwb2ludGVyICdpbnZfaycgd2hpY2ggcG9pbnRzIHRvXFxubGliL2NyeXB0by9hZXMuYy00NTItICogdGhlIGFyZWEgdG8gc3RvcmUgdGhlIHByZXBhcmVkIGRlY3J5cHRpb24ga2V5LiAgSXQgd2lsbCBiZSBOVUxMIGlmIHRoZSB1c2VyXFxubGliL2NyeXB0by9hZXMuYzo0NTM6ICogaXMgcmVxdWVzdGluZyBlbmNyeXB0aW9uLW9ubHkuICBhZXNfcHJlcGFyZWtleV9hcmNoKCkgaXMgYWxzbyBwYXNzZWQgYSB2YWxpZFxcbmxpYi9jcnlwdG8vYWVzLmMtNDU0LSAqICdrZXlfbGVuJyBhbmQgJ25yb3VuZHMnLCBjb3JyZXNwb25kaW5nIHRvIEFFUy0xMjgsIEFFUy0xOTIsIG9yIEFFUy0yNTYuXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTQ2MS1cXG5saWIvY3J5cHRvL2Flcy5jOjQ2MjpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcXG5saWIvY3J5cHRvL2Flcy5jLTQ2My1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9hZXMuYz00Nzc9c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9hZXMuYy00ODQtXFxubGliL2NyeXB0by9hZXMuYzo0ODU6c3RhdGljIGludCBfX2Flc19wcmVwYXJla2V5KHN0cnVjdCBhZXNfZW5ja2V5ICplbmNfa2V5LFxcbmxpYi9jcnlwdG8vYWVzLmMtNDg2LVxcdFxcdFxcdCAgICB1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9hZXMuYy00OTItXFx0ZW5jX2tleS1cXHUwMDNlbnJvdW5kcyA9IDYgKyBrZXlfbGVuIC8gNDtcXG5saWIvY3J5cHRvL2Flcy5jOjQ5MzpcXHRhZXNfcHJlcGFyZWtleV9hcmNoKFxcdTAwMjZlbmNfa2V5LVxcdTAwM2VrLCBpbnZfaywgaW5fa2V5LCBrZXlfbGVuLFxcbmxpYi9jcnlwdG8vYWVzLmMtNDk0LVxcdFxcdFxcdCAgICBlbmNfa2V5LVxcdTAwM2Vucm91bmRzKTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtNDk3LVxcbmxpYi9jcnlwdG8vYWVzLmM6NDk4OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbilcXG5saWIvY3J5cHRvL2Flcy5jLTQ5OS17XFxubGliL2NyeXB0by9hZXMuYzo1MDA6XFx0cmV0dXJuIF9fYWVzX3ByZXBhcmVrZXkoKHN0cnVjdCBhZXNfZW5ja2V5ICopa2V5LCBcXHUwMDI2a2V5LVxcdTAwM2VpbnZfayxcXG5saWIvY3J5cHRvL2Flcy5jLTUwMS1cXHRcXHRcXHRcXHRpbl9rZXksIGtleV9sZW4pO1xcbmxpYi9jcnlwdG8vYWVzLmMtNTAyLX1cXG5saWIvY3J5cHRvL2Flcy5jOjUwMzpFWFBPUlRfU1lNQk9MKGFlc19wcmVwYXJla2V5KTtcXG5saWIvY3J5cHRvL2Flcy5jLTUwNC1cXG5saWIvY3J5cHRvL2Flcy5jPTUwNT1pbnQgYWVzX3ByZXBhcmVlbmNrZXkoc3RydWN0IGFlc19lbmNrZXkgKmtleSwgY29uc3QgdTggKmluX2tleSwgc2l6ZV90IGtleV9sZW4pXFxubGliL2NyeXB0by9hZXMuYy01MDYte1xcbmxpYi9jcnlwdG8vYWVzLmM6NTA3OlxcdHJldHVybiBfX2Flc19wcmVwYXJla2V5KGtleSwgTlVMTCwgaW5fa2V5LCBrZXlfbGVuKTtcXG5saWIvY3J5cHRvL2Flcy5jLTUwOC19XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTUyNj1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2ZpcHNfdGVzdCh2b2lkKVxcbi0tXFxubGliL2NyeXB0by9hZXMuYy01MzAtXFxubGliL2NyeXB0by9hZXMuYzo1MzE6XFx0aWYgKGFlc19wcmVwYXJla2V5KFxcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcXG5saWIvY3J5cHRvL2Flcy5jLTUzMi1cXHRcXHRwYW5pYyhcXFwiYWVzOiBGSVBTIHNlbGYtdGVzdCBmYWlsZWQgKHByZXBhcmVrZXkpXFxcXG5cXFwiKTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9ODE0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZWNiX2ZpcHNfdGVzdCh2b2lkKVxcbi0tXFxubGliL2NyeXB0by9hZXMuYy04MTgtXFxubGliL2NyeXB0by9hZXMuYzo4MTk6XFx0aWYgKGFlc19wcmVwYXJla2V5KFxcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcXG5saWIvY3J5cHRvL2Flcy5jLTgyMC1cXHRcXHRwYW5pYyhcXFwiYWVzOiBFQ0IgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcXFxuXFxcIik7XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTEwMjQ9c3RhdGljIHZvaWQgX19pbml0IGFlc19jYmNfZmlwc190ZXN0KHZvaWQpXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTEwMjktXFxubGliL2NyeXB0by9hZXMuYzoxMDMwOlxcdGlmIChhZXNfcHJlcGFyZWtleShcXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXFxubGliL2NyeXB0by9hZXMuYy0xMDMxLVxcdFxcdHBhbmljKFxcXCJhZXM6IENCQyBGSVBTIHNlbGYtdGVzdCBmYWlsZWQgKHByZXBhcmVrZXkpXFxcXG5cXFwiKTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9MTA0Nz1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19jdHNfZmlwc190ZXN0KHZvaWQpXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTEwNTgtXFxubGliL2NyeXB0by9hZXMuYzoxMDU5OlxcdGlmIChhZXNfcHJlcGFyZWtleShcXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXFxubGliL2NyeXB0by9hZXMuYy0xMDYwLVxcdFxcdHBhbmljKFxcXCJhZXM6IENCQy1DVFMgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcXFxuXFxcIik7XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTEyMDY9aW50IGFlc194dHNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX3h0c19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSxcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtMTIxNC1cXHQvKiBGaXJzdCBoYWxmIG9mIFhUUyBrZXkgaXMgdGhlIG1haW4ga2V5ICovXFxubGliL2NyeXB0by9hZXMuYzoxMjE1OlxcdGVyciA9IGFlc19wcmVwYXJla2V5KFxcdTAwMjZrZXktXFx1MDAzZW1haW5fa2V5LCBpbl9rZXksIGtleV9sZW4gLyAyKTtcXG5saWIvY3J5cHRvL2Flcy5jLTEyMTYtXFx0aWYgKHVubGlrZWx5KGVycikpXFxuLS1cXG5saWIvY3J5cHRvL2FybS9hZXMuaD0xMj1hc21saW5rYWdlIHZvaWQgX19hZXNfYXJtX2RlY3J5cHQoY29uc3QgdTMyIGludl9ya1tdLCBpbnQgcm91bmRzLFxcbi0tXFxubGliL2NyeXB0by9hcm0vYWVzLmgtMTUtXFxubGliL2NyeXB0by9hcm0vYWVzLmg6MTY6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by9hcm0vYWVzLmgtMTctXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG4tLVxcbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg9NDE9c3RhdGljIHZvaWQgYWVzX2V4cGFuZGtleV9hcm02NCh1MzIgcm5ka2V5c1tdLCB1MzIgKmludl9ybmRrZXlzLFxcbi0tXFxubGliL2NyeXB0by9hcm02NC9hZXMuaC0xMDctXFxubGliL2NyeXB0by9hcm02NC9hZXMuaDoxMDg6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by9hcm02NC9hZXMuaC0xMDktXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG4tLVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD0zOD1zdGF0aWMgdm9pZCBzcGVfZW5kKHZvaWQpXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNDQtXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oOjQ1OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC00Ni1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oPTEwOT1zdGF0aWMgdm9pZCBybmRrZXlfZnJvbV92c3godTMyIG91dFs0XSwgY29uc3QgdTMyIGluWzRdLCBib29sIGFwcGx5X2ludl9taXgpXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtMTI4LVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaDoxMjk6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oLTEzMC1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaD0xNT12b2lkIGFlc19kZWNyeXB0X3p2a25lZChjb25zdCB1MzIgcm5ka2V5c1tdLCBpbnQga2V5X2xlbixcXG4tLVxcbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmgtMTctXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaDoxODpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcXG5saWIvY3J5cHRvL3Jpc2N2L2Flcy5oLTE5LVxcdFxcdFxcdFxcdHVuaW9uIGFlc19pbnZrZXlfYXJjaCAqaW52X2ssXFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg9MTI9c3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShoYXZlX2NwYWNmX2FlczI1Nik7XFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtMTktICovXFxubGliL2NyeXB0by9zMzkwL2Flcy5oOjIwOnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxcbmxpYi9jcnlwdG8vczM5MC9hZXMuaC0yMS1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaD00NT12b2lkIGFlc19zcGFyYzY0X2RlY3J5cHRfMjU2KGNvbnN0IHU2NCAqa2V5LCBjb25zdCB1MzIgKmlucHV0LCB1MzIgKm91dHB1dCk7XFxubGliL2NyeXB0by9zcGFyYy9hZXMuaC00Ni1cXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oOjQ3OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtNDgtXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG4tLVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oPTE4PXZvaWQgYWVzX2RlY3J5cHRfYWVzbmkoY29uc3QgdTMyIGludl9ybmRrZXlzW10sIGludCBucm91bmRzLFxcbi0tXFxubGliL2NyeXB0by94ODYvYWVzLmgtMzEtICovXFxubGliL2NyeXB0by94ODYvYWVzLmg6MzI6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by94ODYvYWVzLmgtMzMtXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6MzA6MDkuNjY3MjI2Mjg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjQyNjY3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBCUEYgQ3J5cHRvIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBtYWRlIGluIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjcnlwdG8gQlBGIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXTigJlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgYW55IG1vZGlmaWNhdGlvbnMuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBkaWZmcyBjYXJlZnVsbHkgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGlzc3VlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHNlY3VyaXR5IG9yIHBlcmZvcm1hbmNlLlxuXG5UaGVuLCB0byBnZXQgYSBob2xpc3RpYyBwaWN0dXJlLCBJJ20gZ29pbmcgdG8gcmVhZCB0aGUgZW50aXJlIGBrZXJuZWwvYnBmL2NyeXB0by5jYCBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbS4gSSB3YW50IHRvIHRob3JvdWdobHkgZXhhbWluZSBob3cgZHlucHRycyBhbmQgdGhlIEJQRiBjb250ZXh0IGFyZSBiZWluZyB1dGlsaXplZCBhbmQgYWxsb2NhdGVkIHdpdGhpbiB0aGUgY3J5cHRvIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgY29uc3RydWN0cyB0byBlbnN1cmUgdGhleSBhcmUgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIHdpdGggbm8gbWVtb3J5IGxlYWtzLCBhbmQgdGhhdCB0aGUgY29udGV4dHMgYXJlIGJlaW5nIGhhbmRsZWQgc2FmZWx5LiBUaGlzIHRob3JvdWdoIHJldmlldyBpcyBjcnVjaWFsIGZvciBCUEYgY29kZSwgYXMgZXJyb3JzIGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIHBheSBleHRyYSBhdHRlbnRpb24gdG8gYW55IHBvaW50ZXIgYXJpdGhtZXRpYyBvciBvZmYtYnktb25lIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoxMi4xOTE0OTU2NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY3J5cHRvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9tZW1fYWxsb2MuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2Flcy1jYmMuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVzLWVjYi5oXFx1MDAzZVxcbiAgMTE6XFx0XFxuICAxMjpcXHQvKiBCUEYgY3J5cHRvIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgc3RydWN0ICovXFxuICAxMzpcXHQvKipcXG4gIDE0OlxcdCAqIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAtIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3R1cmVcXG4gIDE1OlxcdCAqIEB0eXBlOlxcdFRoZSBzdHJpbmcgb2YgY3J5cHRvIG9wZXJhdGlvbiB0eXBlLlxcbiAgMTY6XFx0ICogQHJlc2VydmVkOlxcdFJlc2VydmVkIG1lbWJlciwgd2lsbCBiZSByZXVzZWQgZm9yIG1vcmUgb3B0aW9ucyBpbiBmdXR1cmVcXG4gIDE3OlxcdCAqXFx0XFx0VmFsdWVzOlxcbiAgMTg6XFx0ICpcXHRcXHQgIDBcXG4gIDE5OlxcdCAqIEBhbGdvOlxcdFRoZSBzdHJpbmcgb2YgYWxnb3JpdGhtIHRvIGluaXRpYWxpemUuXFxuICAyMDpcXHQgKiBAa2V5OlxcdFRoZSBjaXBoZXIga2V5IHVzZWQgdG8gaW5pdCBjcnlwdG8gYWxnb3JpdGhtLlxcbiAgMjE6XFx0ICogQGtleV9sZW46XFx0VGhlIGxlbmd0aCBvZiBjaXBoZXIga2V5LlxcbiAgMjI6XFx0ICogQGF1dGhzaXplOlxcdFRoZSBsZW5ndGggb2YgYXV0aGVudGljYXRpb24gdGFnIHVzZWQgYnkgYWxnb3JpdGhtLlxcbiAgMjM6XFx0ICovXFxuICAyNDpcXHRzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xcbiAgMjU6XFx0XFx0Y2hhciB0eXBlWzE0XTtcXG4gIDI2OlxcdFxcdHU4IHJlc2VydmVkWzJdO1xcbiAgMjc6XFx0XFx0Y2hhciBhbGdvWzEyOF07XFxuICAyODpcXHRcXHR1OCBrZXlbMjU2XTtcXG4gIDI5OlxcdFxcdHUzMiBrZXlfbGVuO1xcbiAgMzA6XFx0XFx0dTMyIGF1dGhzaXplO1xcbiAgMzE6XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xcbiAgMzQ6XFx0XFx0QlBGX0FMR09fQUVTX0NCQyxcXG4gIDM1OlxcdFxcdEJQRl9BTEdPX0FFU19FQ0IsXFxuICAzNjpcXHR9O1xcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHtcXG4gIDM5OlxcdFxcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcXG4gIDQwOlxcdFxcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcXG4gIDQxOlxcdFxcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XFxuICA0MjpcXHR9IGJwZl9jcnlwdG9fYWxnb3NbXSA9IHtcXG4gIDQzOlxcdFxcdHsgXFxcInNrY2lwaGVyXFxcIiwgXFxcImNiYyhhZXMpXFxcIiwgQlBGX0FMR09fQUVTX0NCQyB9LFxcbiAgNDQ6XFx0XFx0eyBcXFwic2tjaXBoZXJcXFwiLCBcXFwiZWNiKGFlcylcXFwiLCBCUEZfQUxHT19BRVNfRUNCIH0sXFxuICA0NTpcXHR9O1xcbiAgNDY6XFx0XFxuICA0NzpcXHRzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcXG4gIDQ4OlxcdFxcdFxcdFxcdFxcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxcbiAgNDk6XFx0e1xcbiAgNTA6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcXG4gIDUxOlxcdFxcdFxcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXFx1MDAzZXR5cGUsXFxuICA1MjpcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNldHlwZSkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gIDUzOlxcdFxcdFxcdCAgICBzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnb19uYW1lLCBwYXJhbXMtXFx1MDAzZWFsZ28sXFxuICA1NDpcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNlYWxnbykpID09IDApIHtcXG4gIDU1OlxcdFxcdFxcdFxcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XFxuICA1NjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDU3OlxcdFxcdFxcdH1cXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDYwOlxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0LyoqXFxuICA2MzpcXHQgKiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggLSByZWZjb3VudGVkIEJQRiBjcnlwdG8gY29udGV4dCBzdHJ1Y3R1cmVcXG4gIDY0OlxcdCAqIEBhbGdvOlxcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXFxuICA2NTpcXHQgKiBAa2V5OlxcdFRoZSBjcnlwdG8ga2V5XFxuICA2NjpcXHQgKiBAcmN1OlxcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cXG4gIDY3OlxcdCAqIEB1c2FnZTpcXHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXFxuICA2ODpcXHQgKlxcdFxcdG1lbW9yeSBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZSBCUEYgYWxsb2NhdG9yLCB3aGljaCBwcm92aWRlc1xcbiAgNjk6XFx0ICpcXHRcXHRSQ1Ugc2FmZXR5LlxcbiAgNzA6XFx0ICovXFxuICA3MTpcXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xcbiAgNzI6XFx0XFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcXG4gIDczOlxcdFxcdHVuaW9uIHtcXG4gIDc0OlxcdFxcdFxcdHN0cnVjdCBhZXNfa2V5IGFlcztcXG4gIDc1OlxcdFxcdH0ga2V5O1xcbiAgNzY6XFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gIDc3OlxcdFxcdHJlZmNvdW50X3QgdXNhZ2U7XFxuICA3ODpcXHR9O1xcbiAgNzk6XFx0XFxuICA4MDpcXHRfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuICA4MTpcXHRcXG4gIDgyOlxcdC8qKlxcbiAgODM6XFx0ICogYnBmX2NyeXB0b19jdHhfY3JlYXRlKCkgLSBDcmVhdGUgYSBtdXRhYmxlIEJQRiBjcnlwdG8gY29udGV4dC5cXG4gIDg0OlxcdCAqXFxuICA4NTpcXHQgKiBBbGxvY2F0ZXMgYSBjcnlwdG8gY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkLCBhY3F1aXJlZCwgYW5kIHJlbGVhc2VkIGJ5XFxuICA4NjpcXHQgKiBhIEJQRiBwcm9ncmFtLiBUaGUgY3J5cHRvIGNvbnRleHQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGVpdGhlclxcbiAgODc6XFx0ICogYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKS5cXG4gIDg4OlxcdCAqIEFzIGNyeXB0byBBUEkgZnVuY3Rpb25zIHVzZSBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLCB0aGlzIGZ1bmN0aW9uIGNhblxcbiAgODk6XFx0ICogb25seSBiZSB1c2VkIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuICA5MDpcXHQgKlxcbiAgOTE6XFx0ICogYnBmX2NyeXB0b19jdHhfY3JlYXRlKCkgYWxsb2NhdGVzIG1lbW9yeSBmb3IgY3J5cHRvIGNvbnRleHQuXFxuICA5MjpcXHQgKiBJdCBtYXkgcmV0dXJuIE5VTEwgaWYgbm8gbWVtb3J5IGlzIGF2YWlsYWJsZS5cXG4gIDkzOlxcdCAqIEBwYXJhbXM6XFx0cG9pbnRlciB0byBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgd2hpY2ggY29udGFpbnMgYWxsIHRoZVxcbiAgOTQ6XFx0ICpcXHRcXHRkZXRhaWxzIG5lZWRlZCB0byBpbml0aWFsaXNlIGNyeXB0byBjb250ZXh0LlxcbiAgOTU6XFx0ICogQHBhcmFtc19fc3o6XFx0c2l6ZSBvZiBzdGV1Y3QgYnBmX2NyeXB0b19wYXJhbXMgdXNlZiBieSBicGYgcHJvZ3JhbVxcbiAgOTY6XFx0ICogQGVycjpcXHRpbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxcbiAgOTc6XFx0ICovXFxuICA5ODpcXHRfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxcbiAgOTk6XFx0YnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcXG4gMTAwOlxcdFxcdFxcdCAgICAgIGludCAqZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoxMi4xOTE2MzU3OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4OTQ3MzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gSSd2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJ3MgZ29pbmcgdG8gYmUgc29tZSBpbnRlcmVzdGluZyBzdHVmZiBpbiBoZXJlLCBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCBjcnlwdG9ncmFwaHkgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHRoZSBlQlBGIHByb2dyYW1zLCBhbmQgd2hhdCBsZXZlbCBvZiBjb250cm9sIHRoZSBCUEYgY29kZSBoYXMgb3ZlciB0aGVzZSBvcGVyYXRpb25zLiBBcmUgdGhleSBwcm92aWRpbmcgdGhlIGJhcmUgbWV0YWwgaW5zdHJ1Y3Rpb25zLCBvciBtb3JlIGhpZ2gtbGV2ZWwgYWJzdHJhY3Rpb25zP1xuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIFRoaXMgaXMga2VybmVsIHNwYWNlLCBzbyBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGJlIGRldmFzdGF0aW5nLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgdXNpbmcgaGFyZGVuZWQgaW1wbGVtZW50YXRpb25zLCBhbmQgaWYgdGhlcmUncyBhbnkgb2J2aW91cyBhdHRhY2sgc3VyZmFjZSB0aGF0IG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIHF1ZXN0aW9uIG9mIGludGVncmF0aW9uIHdpdGggb3RoZXIga2VybmVsIGNyeXB0b2dyYXBoaWMgbW9kdWxlcy4gQXJlIHRoZXkgbGV2ZXJhZ2luZyBleGlzdGluZyBjcnlwdG8gQVBJIGNhbGxzLCBvciBidWlsZGluZyBzb21ldGhpbmcgZW50aXJlbHkgbmV3IGZvciB0aGUgQlBGIGVudmlyb25tZW50PyBUaGUgZGVzaWduIGNob2ljZXMgaGVyZSB3aWxsIHNwZWFrIHZvbHVtZXMgYWJvdXQgdGhlIGdvYWxzIG9mIHRoZSBkZXZlbG9wZXJzIGFuZCB0aGUgdHJhZGUtb2ZmcyB0aGV5IG1hZGUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBmdW5jdGlvbiBjYWxscywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZmluZCB0aGF0IHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCB0aG9yb3VnaGx5IHJldmlld2VkLiBOb3csIGxldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjMwOjE0LjQ4MTExMTg0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jcnlwdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHtcXG4gMTAyOlxcdFxcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRpZiAoIXBhcmFtcyB8fCBwYXJhbXMtXFx1MDAzZXJlc2VydmVkWzBdIHx8IHBhcmFtcy1cXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcXG4gMTA1OlxcdFxcdCAgICBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpKSB7XFxuIDEwNjpcXHRcXHRcXHQqZXJyID0gLUVJTlZBTDtcXG4gMTA3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcXG4gMTExOlxcdFxcdGlmICghY3R4KSB7XFxuIDExMjpcXHRcXHRcXHQqZXJyID0gLUVOT01FTTtcXG4gMTEzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxMTQ6XFx0XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgXFx1MDAyNmN0eC1cXHUwMDNlYWxnbykpIHtcXG4gMTE3OlxcdFxcdFxcdCplcnIgPSAtRU5PRU5UO1xcbiAxMTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdHN3aXRjaCAoY3R4LVxcdTAwM2VhbGdvKSB7XFxuIDEyMjpcXHRcXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XFxuIDEyMzpcXHRcXHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XFxuIDEyNDpcXHRcXHRcXHRpZiAocGFyYW1zLVxcdTAwM2VhdXRoc2l6ZSlcXG4gMTI1OlxcdFxcdFxcdFxcdCplcnIgPSAtRU9QTk9UU1VQUDtcXG4gMTI2OlxcdFxcdFxcdGVsc2VcXG4gMTI3OlxcdFxcdFxcdFxcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcXHUwMDI2Y3R4LVxcdTAwM2VrZXkuYWVzLCBwYXJhbXMtXFx1MDAzZWtleSxcXG4gMTI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhcmFtcy1cXHUwMDNla2V5X2xlbik7XFxuIDEyOTpcXHRcXHRcXHRicmVhaztcXG4gMTMwOlxcdFxcdGRlZmF1bHQ6XFxuIDEzMTpcXHRcXHRcXHRXQVJOX09OKDEpO1xcbiAxMzI6XFx0XFx0XFx0KmVyciA9IC1FTk9FTlQ7XFxuIDEzMzpcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdH1cXG4gMTM1OlxcdFxcbiAxMzY6XFx0b3V0OlxcbiAxMzc6XFx0XFx0aWYgKCplcnIpIHtcXG4gMTM4OlxcdFxcdFxcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbiAxMzk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE0MDpcXHRcXHR9XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Y3R4LVxcdTAwM2V1c2FnZSwgMSk7XFxuIDE0MzpcXHRcXHRyZXR1cm4gY3R4O1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0XFxuIDE0NjpcXHRzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcXG4gMTUxOlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbiAxNTI6XFx0fVxcbiAxNTM6XFx0XFxuIDE1NDpcXHQvKipcXG4gMTU1OlxcdCAqIGJwZl9jcnlwdG9fY3R4X2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuXFxuIDE1NjpcXHQgKiBAY3R4OiBUaGUgQlBGIGNyeXB0byBjb250ZXh0IGJlaW5nIGFjcXVpcmVkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkXFxuIDE1NzpcXHQgKlxcdCAgICAgcG9pbnRlci5cXG4gMTU4OlxcdCAqXFxuIDE1OTpcXHQgKiBBY3F1aXJlcyBhIHJlZmVyZW5jZSB0byBhIEJQRiBjcnlwdG8gY29udGV4dC4gVGhlIGNvbnRleHQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvblxcbiAxNjA6XFx0ICogbXVzdCBlaXRoZXIgYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoXFxuIDE2MTpcXHQgKiBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkuXFxuIDE2MjpcXHQgKi9cXG4gMTYzOlxcdF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXFxuIDE2NDpcXHRicGZfY3J5cHRvX2N0eF9hY3F1aXJlKHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4KVxcbiAxNjU6XFx0e1xcbiAxNjY6XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmN0eC1cXHUwMDNldXNhZ2UpKVxcbiAxNjc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE2ODpcXHRcXHRyZXR1cm4gY3R4O1xcbiAxNjk6XFx0fVxcbiAxNzA6XFx0XFxuIDE3MTpcXHQvKipcXG4gMTcyOlxcdCAqIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBwcmV2aW91c2x5IGFjcXVpcmVkIEJQRiBjcnlwdG8gY29udGV4dC5cXG4gMTczOlxcdCAqIEBjdHg6IFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyByZWxlYXNlZC5cXG4gMTc0OlxcdCAqXFxuIDE3NTpcXHQgKiBSZWxlYXNlcyBhIHByZXZpb3VzbHkgYWNxdWlyZWQgcmVmZXJlbmNlIHRvIGEgQlBGIGNyeXB0byBjb250ZXh0LiBXaGVuIHRoZSBmaW5hbFxcbiAxNzY6XFx0ICogcmVmZXJlbmNlIG9mIHRoZSBCUEYgY3J5cHRvIGNvbnRleHQgaGFzIGJlZW4gcmVsZWFzZWQsIGl0cyBtZW1vcnlcXG4gMTc3OlxcdCAqIHdpbGwgYmUgcmVsZWFzZWQuXFxuIDE3ODpcXHQgKi9cXG4gMTc5OlxcdF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcXG4gMTgwOlxcdHtcXG4gMTgxOlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNldXNhZ2UpKVxcbiAxODI6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmN0eC1cXHUwMDNlcmN1LCBjcnlwdG9fZnJlZV9jYik7XFxuIDE4MzpcXHR9XFxuIDE4NDpcXHRcXG4gMTg1OlxcdF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcXG4gMTg2OlxcdHtcXG4gMTg3OlxcdFxcdGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoY3R4KTtcXG4gMTg4OlxcdH1cXG4gMTg5OlxcdENGSV9OT1NFQUwoYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXFxuIDE5MjpcXHRcXHRcXHRcXHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcXG4gMTkzOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXFxuIDE5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTk3OlxcdFxcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcXHUwMDNjIHNyY19sZW4pXFxuIDE5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTk5OlxcdFxcdGlmIChkZWNyeXB0KVxcbiAyMDA6XFx0XFx0XFx0YWVzX2NiY19kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjMwOjE0LjQ4MTI5NTE0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTYzNTAzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGNvZGUsIHRoaW5raW5nIG91dCBsb3VkIGFzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgY3J5cHRvLmNgIChMaW5lcyAyMDEtMzEwKSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgbGluZXMgaW4gYGtlcm5lbC9icGYvY3J5cHRvLmNgLiAgTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBtb2R1bGUgYW5kIGVCUEYgaW4gZ2VuZXJhbC4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgdGhlIGNvcmUgY3J5cHRvZ3JhcGh5IHByaW1pdGl2ZXMgZXhwb3NlZCB2aWEgZUJQRiwgbGlrZWx5IGludm9sdmluZyB0aGUgYGJwZl9jcnlwdG9fKmAgaGVscGVyIGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgYmV0IHdlJ3JlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgaGFzaCBjYWxjdWxhdGlvbnMsIGVuY3J5cHRpb24sIHBlcmhhcHMgZXZlbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIGxpa2UgSE1BQy4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgQlBGIFZNLCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBhbmQgb2YgY291cnNlLCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLCBiZWNhdXNlIHRob3NlIGFyZSBvZnRlbiB0cmlja3kgaW4gdGhlIGtlcm5lbCBzcGFjZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkYXRhIGJlaW5nIHBhc3NlZCBpbiBmcm9tIHVzZXItc3BhY2UgdmlhIGVCUEYgcHJvZ3JhbXMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIGFyZ3VtZW50cyBhcmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgKGxpa2UgbGVuZ3RoKS4gSSdsbCBhbHNvIHRyeSB0byBpbmZlciBob3cgdGhlIGNvZGUgaXMgb3B0aW1pemVkLCBhbmQgd2hldGhlciB0aGUgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMgYXJlIGFwcHJvcHJpYXRlIGZvciBhIGtlcm5lbCBzZXR0aW5nLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgdGhhdCBhcmUgYmVpbmcgZmF2b3JlZCBoZXJlLCBvciBpZiB0aGUgY29kZSBpcyBtb3JlIGdlbmVyaWMgaW4gaXRzIGFwcHJvYWNoLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgd291bGQgYmUgb3B0aW1pemVkIGZvciBjb21tb24gdXNhZ2VzLiBJIGFsc28gd29uZGVyIGlmIHRoZXNlIGZ1bmN0aW9ucyBzdXBwb3J0IGRpZmZlcmVudCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZmVhdHVyZXMsIGFuZCBpZiBzbywgaG93IHRoYXTigJlzIGhhbmRsZWQgd2l0aGluIHRoZSBlQlBGIGZyYW1ld29yay4gVGhpcyBsb29rcyBsaWtlIHRoZSBmdW4gcGFydCEgTGV0J3MgZ2V0IHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoxOC4wNDQ4MDA1NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jcnlwdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAxOlxcdFxcdGVsc2VcXG4gMjAyOlxcdFxcdFxcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbiAyMDM6XFx0XFx0cmV0dXJuIDA7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdHN0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxcbiAyMDc6XFx0XFx0XFx0XFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXFxuIDIwODpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXFxuIDIwOTpcXHR7XFxuIDIxMDpcXHRcXHRpZiAoaXZfbGVuICE9IDApXFxuIDIxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjEyOlxcdFxcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcXHUwMDNjIHNyY19sZW4pXFxuIDIxMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjE0OlxcdFxcdGlmIChkZWNyeXB0KVxcbiAyMTU6XFx0XFx0XFx0YWVzX2VjYl9kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBcXHUwMDI2Y3R4LVxcdTAwM2VrZXkuYWVzKTtcXG4gMjE2OlxcdFxcdGVsc2VcXG4gMjE3OlxcdFxcdFxcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcyk7XFxuIDIxODpcXHRcXHRyZXR1cm4gMDtcXG4gMjE5OlxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0c3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxcbiAyMjI6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcXG4gMjIzOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXFxuIDIyNDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsXFxuIDIyNTpcXHRcXHRcXHRcXHQgICAgYm9vbCBkZWNyeXB0KVxcbiAyMjY6XFx0e1xcbiAyMjc6XFx0XFx0dTMyIHNyY19sZW4sIGRzdF9sZW4sIGl2X2xlbjtcXG4gMjI4OlxcdFxcdGNvbnN0IHU4ICpwc3JjO1xcbiAyMjk6XFx0XFx0dTggKnBkc3QsICpwaXY7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXFxuIDIzMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0aXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwO1xcbiAyMzU6XFx0XFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XFxuIDIzNjpcXHRcXHRkc3RfbGVuID0gX19icGZfZHlucHRyX3NpemUoZHN0KTtcXG4gMjM3OlxcdFxcdGlmICghc3JjX2xlbiB8fCAhZHN0X2xlbilcXG4gMjM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMzk6XFx0XFxuIDI0MDpcXHRcXHRwc3JjID0gX19icGZfZHlucHRyX2RhdGEoc3JjLCBzcmNfbGVuKTtcXG4gMjQxOlxcdFxcdGlmICghcHNyYylcXG4gMjQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNDM6XFx0XFx0cGRzdCA9IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGRzdCwgZHN0X2xlbik7XFxuIDI0NDpcXHRcXHRpZiAoIXBkc3QpXFxuIDI0NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0cGl2ID0gaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoaXYsIGl2X2xlbikgOiBOVUxMO1xcbiAyNDg6XFx0XFx0aWYgKGl2X2xlbiBcXHUwMDI2XFx1MDAyNiAhcGl2KVxcbiAyNDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdHN3aXRjaCAoY3R4LVxcdTAwM2VhbGdvKSB7XFxuIDI1MjpcXHRcXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XFxuIDI1MzpcXHRcXHRcXHRyZXR1cm4gYnBmX2Flc19jYmNfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxcbiAyNTQ6XFx0XFx0XFx0XFx0XFx0XFx0IGl2X2xlbiwgY3R4LCBkZWNyeXB0KTtcXG4gMjU1OlxcdFxcdGNhc2UgQlBGX0FMR09fQUVTX0VDQjpcXG4gMjU2OlxcdFxcdFxcdHJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXFxuIDI1NzpcXHRcXHRcXHRcXHRcXHRcXHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xcbiAyNTg6XFx0XFx0ZGVmYXVsdDpcXG4gMjU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNjA6XFx0XFx0fVxcbiAyNjE6XFx0fVxcbiAyNjI6XFx0XFxuIDI2MzpcXHQvKipcXG4gMjY0OlxcdCAqIGJwZl9jcnlwdG9fZGVjcnlwdCgpIC0gRGVjcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cXG4gMjY1OlxcdCAqIEBjdHg6XFx0XFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4gMjY2OlxcdCAqIEBzcmM6XFx0XFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuIDI2NzpcXHQgKiBAZHN0OlxcdFxcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAyNjg6XFx0ICogQGl2X19udWxsYWJsZTpcXHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxcbiAyNjk6XFx0ICpcXG4gMjcwOlxcdCAqIERlY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC5cXG4gMjcxOlxcdCAqL1xcbiAyNzI6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcXG4gMjczOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXFxuIDI3NDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LFxcbiAyNzU6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcXG4gMjc2OlxcdHtcXG4gMjc3OlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7XFxuIDI3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3Rfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZHN0O1xcbiAyNzk6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7XFxuIDI4MjpcXHR9XFxuIDI4MzpcXHRcXG4gMjg0OlxcdC8qKlxcbiAyODU6XFx0ICogYnBmX2NyeXB0b19lbmNyeXB0KCkgLSBFbmNyeXB0IGJ1ZmZlciB1c2luZyBjb25maWd1cmVkIGNvbnRleHQgYW5kIElWIHByb3ZpZGVkLlxcbiAyODY6XFx0ICogQGN0eDpcXHRcXHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAyODc6XFx0ICogQHNyYzpcXHRcXHRicGZfZHlucHRyIHRvIHRoZSBwbGFpbiBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAyODg6XFx0ICogQGRzdDpcXHRcXHRicGZfZHlucHRyIHRvIHRoZSBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdC4gTXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4gMjg5OlxcdCAqIEBpdl9fbnVsbGFibGU6XFx0YnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC5cXG4gMjkwOlxcdCAqXFxuIDI5MTpcXHQgKiBFbmNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuXFxuIDI5MjpcXHQgKi9cXG4gMjkzOlxcdF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxcbiAyOTU6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcXG4gMjk2OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpXFxuIDI5NzpcXHR7XFxuIDI5ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xcbiAyOTk6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcXG4gMzAwOlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6MzA6MTguMDQ0ODk1NDc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzU4NDA2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBDb250ZXh0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJJ20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBoZXJlLlxuXG5GaXJzdCwgSSdtIHN0YXJ0aW5nIHdpdGggYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAuIFRoaXMgbG9va3MgcHJldHR5IHNvbGlkLiBga3phbGxvY19vYmpgIGlzIGEgZ29vZCBjaG9pY2UgZm9yIGluaXRpYWxpemF0aW9uLCBlbnN1cmluZyB0aGUgYGN0eGAgc3RydWN0IGlzIHplcm9lZC4gVGhlIGBicGZfY3J5cHRvX2ZpbmRfYWxnb2AgYW5kIGBhZXNfcHJlcGFyZWtleWAgY2FsbHMgc2VlbSBzdGFuZGFyZCwgaGFuZGxpbmcgYWxnb3JpdGhtIGFuZCBrZXkgc2V0dXAsIGFuZCB0aGUga2V5IGxlbmd0aCBjaGVja3MgaW4gYGFlc19wcmVwYXJla2V5YCAoMTYsIDI0LCBvciAzMiBieXRlcykgYXJlIGltcG9ydGFudC4gVGhlIGBrZnJlZV9zZW5zaXRpdmUoY3R4KWAgb24gZXJyb3IgYW5kIHRoZSByZWZjb3VudCBvZiAxIHNldHVwIGEgc3RyYWlnaHRmb3J3YXJkIGxpZmV0aW1lIG1hbmFnZW1lbnQuXG5cbk5leHQsIEknbSBleGFtaW5pbmcgYGJwZl9hZXNfY2JjX2NyeXB0YC4gVGhlIGxlbmd0aCBjaGVja3MgZm9yIHRoZSBJViAoYGl2X2xlbiA9PSBBRVNfQkxPQ0tfU0laRWApIGFuZCBzb3VyY2UvZGVzdGluYXRpb24gYnVmZmVycyAoYHNyY19sZW5gIG11bHRpcGxlIG9mIGBBRVNfQkxPQ0tfU0laRWAgYW5kIGBkc3RfbGVuIFx1MDAzZT0gc3JjX2xlbmApIGFyZSBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHVuZGVyZmxvd3MuIFRoZSB1c2Ugb2YgZHlucHRyIGhlbHBlcnMgZnVydGhlciBzdHJlbmd0aGVucyB0aGlzLiBTYW1lIGZvciBgYnBmX2Flc19lY2JfY3J5cHRgIHdpdGggdGhlIElWIGNoZWNrIChgaXZfbGVuID09IDBgKSBhbmQgdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBsZW5ndGggY2hlY2tzLlxuXG5UaGVuIEknbSBkaWdnaW5nIGludG8gcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHdheXMgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGNhbiBsZWFrIHRvIHVzZXJzcGFjZS4gQlBGIGR5bnB0cnMgYXJlIHBvaW50aW5nIHRvIGNhbGxlci1wcm92aWRlZCBidWZmZXJzLCB3aGljaCBpcyBnb29kLiBUaGUgYGN0eGAgaXMgemVyb2VkIGJ5IGBremFsbG9jX29iamAuIFRoZSBgYWVzX3ByZXBhcmVrZXlgIGNhbGwgaW5pdGlhbGl6ZXMgdGhlIGtleSBzY2hlZHVsZSwgYGFsZ29gIGlzIGluaXRpYWxpemVkIGJ5IGBicGZfY3J5cHRvX2ZpbmRfYWxnb2AuIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGUgZnJlZWluZyBpcyBoYW5kbGVkIGNvcnJlY3RseSB3aXRoIGBrZnJlZV9zZW5zaXRpdmVgLlxuXG5Ob3csIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBzdWJ0bGUgZWRnZSBjYXNlcz8gSXMgdGhlcmUgYSBjaGFuY2UgYGFlc19wcmVwYXJla2V5YCBjb3VsZCBsZWF2ZSBzb21ldGhpbmcgdW5pbml0aWFsaXplZCBpbiB0aGUgYHN0cnVjdCBhZXNfa2V5YD8gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgYWVzX2tleWAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWVzX3ByZXBhcmVrZXlgIHRvIG1ha2Ugc3VyZS4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMjYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoyMi42MjA3NDEyMjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Nzc1NTQwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGFlc19rZXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jPTUzPXN0cnVjdCBhZXNic194dHNfY3R4IHtcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtNTQtXFx0c3RydWN0IGFlc2JzX2N0eFxcdGtleTtcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmM6NTU6XFx0c3RydWN0IGFlc19rZXlcXHRcXHRmYWxsYmFjaztcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtNTYtXFx0c3RydWN0IGFlc19lbmNrZXlcXHR0d2Vha19rZXk7XFxuLS1cXG5jcnlwdG8vYWVzLmMtMjItXFxuY3J5cHRvL2Flcy5jOjIzOnN0YXRpY19hc3NlcnQoX19hbGlnbm9mX18oc3RydWN0IGFlc19rZXkpIFxcdTAwM2M9IENSWVBUT19NSU5BTElHTik7XFxuY3J5cHRvL2Flcy5jLTI0LXN0YXRpY19hc3NlcnQoX19hbGlnbm9mX18oc3RydWN0IGFlc19lbmNrZXkpIFxcdTAwM2M9IENSWVBUT19NSU5BTElHTik7XFxuLS1cXG5jcnlwdG8vYWVzLmM9MjY9c3RhdGljIGludCBjcnlwdG9fYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxcbi0tXFxuY3J5cHRvL2Flcy5jLTI4LXtcXG5jcnlwdG8vYWVzLmM6Mjk6XFx0c3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2Flcy5jLTMwLVxcbi0tXFxuY3J5cHRvL2Flcy5jPTM0PXN0YXRpYyB2b2lkIGNyeXB0b19hZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXFxuY3J5cHRvL2Flcy5jLTM1LXtcXG5jcnlwdG8vYWVzLmM6MzY6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2Flcy5jLTM3LVxcbi0tXFxuY3J5cHRvL2Flcy5jPTQxPXN0YXRpYyB2b2lkIGNyeXB0b19hZXNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXFxuY3J5cHRvL2Flcy5jLTQyLXtcXG5jcnlwdG8vYWVzLmM6NDM6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2Flcy5jLTQ0LVxcbi0tXFxuY3J5cHRvL2Flcy5jPTEzOT1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0ge1xcbi0tXFxuY3J5cHRvL2Flcy5jLTE0NC1cXHQuY3JhX2Jsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLFxcbmNyeXB0by9hZXMuYzoxNDU6XFx0LmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcXG5jcnlwdG8vYWVzLmMtMTQ2LVxcdC5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsXFxuLS1cXG5jcnlwdG8vYWVzLmM9MjEzPWNyeXB0b19hZXNfc2tjaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmluX2tleSxcXG4tLVxcbmNyeXB0by9hZXMuYy0yMTUte1xcbmNyeXB0by9hZXMuYzoyMTY6XFx0c3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTtcXG5jcnlwdG8vYWVzLmMtMjE3LVxcbi0tXFxuY3J5cHRvL2Flcy5jPTM0OD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfZWNiX2VuY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtMzQ5LXtcXG5jcnlwdG8vYWVzLmM6MzUwOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy0zNTEtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM2MD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfZWNiX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtMzYxLXtcXG5jcnlwdG8vYWVzLmM6MzYyOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy0zNjMtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM3ND1zdGF0aWMgdm9pZCBjcnlwdG9fYWVzX2NiY19lbmNyeXB0X3NnKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsXFxuY3J5cHRvL2Flcy5jLTM3NS1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3J5cHRsZW4sXFxuY3J5cHRvL2Flcy5jOjM3NjpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmNyeXB0by9hZXMuYy0zNzcte1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM4Mj1zdGF0aWMgdm9pZCBjcnlwdG9fYWVzX2NiY19kZWNyeXB0X3NnKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsXFxuY3J5cHRvL2Flcy5jLTM4My1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3J5cHRsZW4sXFxuY3J5cHRvL2Flcy5jOjM4NDpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmNyeXB0by9hZXMuYy0zODUte1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM5MD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfY2JjX2VuY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtMzkxLXtcXG5jcnlwdG8vYWVzLmM6MzkyOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy0zOTMtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTQwMT1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfY2JjX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtNDAyLXtcXG5jcnlwdG8vYWVzLmM6NDAzOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy00MDQtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTQyMD1jcnlwdG9fYWVzX2NiY19jdHNfY3J5cHRfbm9ubGluZWFyKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGJvb2wgZW5jKVxcbmNyeXB0by9hZXMuYy00MjEte1xcbmNyeXB0by9hZXMuYzo0MjI6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XFxuY3J5cHRvL2Flcy5jLTQyMy1cXHRcXHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XFxuLS1cXG5jcnlwdG8vYWVzLmM9NDU0PWNyeXB0b19hZXNfY2JjX2N0c19lbmNyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpXFxuY3J5cHRvL2Flcy5jLTQ1NS17XFxuY3J5cHRvL2Flcy5jOjQ1NjpcXHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID1cXG5jcnlwdG8vYWVzLmMtNDU3LVxcdFxcdGNyeXB0b19za2NpcGhlcl9jdHgoY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpKTtcXG4tLVxcbmNyeXB0by9hZXMuYz00NzE9Y3J5cHRvX2Flc19jYmNfY3RzX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtNDcyLXtcXG5jcnlwdG8vYWVzLmM6NDczOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy00NzQtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTYwOD1zdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBza2NpcGhlcl9hbGdzW10gPSB7XFxuLS1cXG5jcnlwdG8vYWVzLmMtNjE0LVxcdFxcdC5iYXNlLmNyYV9ibG9ja3NpemUgPSBBRVNfQkxPQ0tfU0laRSxcXG5jcnlwdG8vYWVzLmM6NjE1OlxcdFxcdC5iYXNlLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcXG5jcnlwdG8vYWVzLmMtNjE2LVxcdFxcdC5iYXNlLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSxcXG4tLVxcbmNyeXB0by9hZXMuYy02MjktXFx0XFx0LmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLFxcbmNyeXB0by9hZXMuYzo2MzA6XFx0XFx0LmJhc2UuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGFlc19rZXkpLFxcbmNyeXB0by9hZXMuYy02MzEtXFx0XFx0LmJhc2UuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLFxcbi0tXFxuY3J5cHRvL2Flcy5jLTY0NS1cXHRcXHQuYmFzZS5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsXFxuY3J5cHRvL2Flcy5jOjY0NjpcXHRcXHQuYmFzZS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVzX2tleSksXFxuY3J5cHRvL2Flcy5jLTY0Ny1cXHRcXHQuYmFzZS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jPTEwMjU9c3RhdGljIGludCBjaGNyX3VwZGF0ZV90d2VhayhzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLCB1OCAqaXYsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jLTEwMzAtXFx0c3RydWN0IGNoY3Jfc2tjaXBoZXJfcmVxX2N0eCAqcmVxY3R4ID0gc2tjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTtcXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwMzE6XFx0c3RydWN0IGFlc19rZXkgYWVzO1xcbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTAzMi1cXHRpbnQgcmV0LCBpO1xcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTQ1PXZvaWQgYWVzX2NiY19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjQ2OlxcdFxcdCAgICAgdTggaXZbYXRfbGVhc3QgQUVTX0JMT0NLX1NJWkVdLCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KTtcXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNDctXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg9NzM9dm9pZCBhZXNfY2JjX2N0c19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTc0LVxcdFxcdFxcdCB1OCBpdlthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjc1OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KTtcXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNzYtXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg9NDY9dm9pZCBhZXNfZWNiX2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6NDc6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KTtcXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtNDgtXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMteHRzLmg9MTk9c3RydWN0IGFlc194dHNfa2V5IHtcXG5pbmNsdWRlL2NyeXB0by9hZXMteHRzLmgtMjAtXFx0LyogcHJpdmF0ZTogKi9cXG5pbmNsdWRlL2NyeXB0by9hZXMteHRzLmg6MjE6XFx0c3RydWN0IGFlc19rZXkgbWFpbl9rZXk7XFxuaW5jbHVkZS9jcnlwdG8vYWVzLXh0cy5oLTIyLVxcdHN0cnVjdCBhZXNfZW5ja2V5IHR3ZWFrX2tleTtcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTU5PXVuaW9uIGFlc19pbnZrZXlfYXJjaCB7XFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC04Ni0gKlxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjg3OiAqIE5vdGUgdGhhdCB0aGlzIHN0cnVjdCBpcyBhYm91dCBoYWxmIHRoZSBzaXplIG9mIHN0cnVjdCBhZXNfa2V5LiAgVGhpcyBpc1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjg4OiAqIHNlcGFyYXRlIGZyb20gc3RydWN0IGFlc19rZXkgc28gdGhhdCBtb2RlcyB0aGF0IG5lZWQgb25seSBBRVMgZW5jcnlwdGlvblxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTg5LSAqIChlLmcuIEFFUy1HQ00sIEFFUy1DVFIsIEFFUy1DTUFDLCB0d2VhayBrZXkgaW4gQUVTLVhUUykgZG9uJ3QgaW5jdXIgdGhlIHRpbWVcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTk3PXN0cnVjdCBhZXNfZW5ja2V5IHtcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTEwNC0vKipcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDoxMDU6ICogc3RydWN0IGFlc19rZXkgLSBBbiBBRVMga2V5IHByZXBhcmVkIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMTA2LSAqIEBhZXNfZW5ja2V5OiBDb21tb24gZmllbGRzIGFuZCB0aGUga2V5IHByZXBhcmVkIGZvciBlbmNyeXB0aW9uXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMTItICovXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MTEzOnN0cnVjdCBhZXNfa2V5IHtcXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMTQtXFx0c3RydWN0IGFlc19lbmNrZXk7IC8qIEluY2x1ZGUgYWxsIGZpZWxkcyBvZiBhZXNfZW5ja2V5LiAqL1xcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg9MzA4PXZvaWQgYWVzX3NwYXJjNjRfY3RyX2NyeXB0XzI1Nihjb25zdCB1NjQgKmtleSwgY29uc3QgdTY0ICppbnB1dCwgdTY0ICpvdXRwdXQsXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMjMtICpcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMjQ6ICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgemVyb2l6aW5nIGJvdGggdGhlIHN0cnVjdCBhZXNfa2V5IGFuZCB0aGUgcmF3XFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzI1LSAqIGtleSBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzQtICovXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzM1OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbik7XFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzM2LVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzQ1LSAqIGNpcGhlci4gIFR5cGljYWxseSB0aGlzIGludm9sdmVzIGV4cGFuZGluZyB0aGUgcmF3IGtleSBpbnRvIG9ubHkgdGhlIHN0YW5kYXJkXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzQ2OiAqIHJvdW5kIGtleXMsIHJlc3VsdGluZyBpbiBhIHN0cnVjdCBhYm91dCBoYWxmIHRoZSBzaXplIG9mIHN0cnVjdCBhZXNfa2V5LlxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM0Ny0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg9MzYzPXR5cGVkZWYgdW5pb24ge1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM2NC1cXHRjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqZW5jX2tleTtcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozNjU6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmZ1bGxfa2V5O1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM2Ni19IGFlc19lbmNyeXB0X2FyZyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7XFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNzAtICogQGtleTogVGhlIEFFUyBrZXksIGFzIGEgcG9pbnRlciB0byBlaXRoZXIgYW4gZW5jcnlwdGlvbi1vbmx5IGtleVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM3MTogKlxcdCAoc3RydWN0IGFlc19lbmNrZXkpIG9yIGEgZnVsbCwgYmlkaXJlY3Rpb25hbCBrZXkgKHN0cnVjdCBhZXNfa2V5KS5cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNzItICogQG91dDogQnVmZmVyIHRvIHN0b3JlIHRoZSBjaXBoZXJ0ZXh0IGJsb2NrXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zNzc9dm9pZCBhZXNfZW5jcnlwdChhZXNfZW5jcnlwdF9hcmcga2V5LCB1OCBvdXRbYXRfbGVhc3QgQUVTX0JMT0NLX1NJWkVdLFxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzg3LSAqL1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM4ODp2b2lkIGFlc19kZWNyeXB0KGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksIHU4IG91dFthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzg5LVxcdFxcdCBjb25zdCB1OCBpblthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0pO1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz03MT1zdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy03My1cXHR1bmlvbiB7XFxua2VybmVsL2JwZi9jcnlwdG8uYzo3NDpcXHRcXHRzdHJ1Y3QgYWVzX2tleSBhZXM7XFxua2VybmVsL2JwZi9jcnlwdG8uYy03NS1cXHR9IGtleTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9NDcwPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtNDc2LVxcbmxpYi9jcnlwdG8vYWVzLmM6NDc3OnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcXG5saWIvY3J5cHRvL2Flcy5jLTQ3OC1cXHRcXHRcXHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTQ4NT1zdGF0aWMgaW50IF9fYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19lbmNrZXkgKmVuY19rZXksXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTQ5Ny1cXG5saWIvY3J5cHRvL2Flcy5jOjQ5ODppbnQgYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSwgc2l6ZV90IGtleV9sZW4pXFxubGliL2NyeXB0by9hZXMuYy00OTkte1xcbi0tXFxubGliL2NyeXB0by9hZXMuYz01MTY9RVhQT1JUX1NZTUJPTChhZXNfZW5jcnlwdCk7XFxubGliL2NyeXB0by9hZXMuYy01MTctXFxubGliL2NyeXB0by9hZXMuYzo1MTg6dm9pZCBhZXNfZGVjcnlwdChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LCB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbmxpYi9jcnlwdG8vYWVzLmMtNTE5LVxcdFxcdCBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTUyNj1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2ZpcHNfdGVzdCh2b2lkKVxcbmxpYi9jcnlwdG8vYWVzLmMtNTI3LXtcXG5saWIvY3J5cHRvL2Flcy5jOjUyODpcXHRzdHJ1Y3QgYWVzX2tleSBrZXk7XFxubGliL2NyeXB0by9hZXMuYy01MjktXFx0dTggZGF0YVtBRVNfQkxPQ0tfU0laRV07XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTc3Mz1zdGF0aWMgYm9vbCBhZXNfZWNiX2RlY3J5cHRfYXJjaCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxcbmxpYi9jcnlwdG8vYWVzLmM6Nzc0OlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtNzc1LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9Nzk2PXZvaWQgYWVzX2VjYl9kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxubGliL2NyeXB0by9hZXMuYzo3OTc6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtNzk4LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9ODE0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZWNiX2ZpcHNfdGVzdCh2b2lkKVxcbmxpYi9jcnlwdG8vYWVzLmMtODE1LXtcXG5saWIvY3J5cHRvL2Flcy5jOjgxNjpcXHRzdHJ1Y3QgYWVzX2tleSBrZXk7XFxubGliL2NyeXB0by9hZXMuYy04MTctXFx0dTggZGF0YVtzaXplb2YoZmlwc190ZXN0X2RhdGEpXTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9ODUzPXN0YXRpYyBib29sIGFlc19jYmNfZGVjcnlwdF9hcmNoKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxubGliL2NyeXB0by9hZXMuYy04NTQtXFx0XFx0XFx0XFx0IHU4IGl2W0FFU19CTE9DS19TSVpFXSxcXG5saWIvY3J5cHRvL2Flcy5jOjg1NTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcXG5saWIvY3J5cHRvL2Flcy5jLTg1Ni17XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTg4Nz12b2lkIGFlc19jYmNfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLCB1OCBpdltBRVNfQkxPQ0tfU0laRV0sXFxubGliL2NyeXB0by9hZXMuYzo4ODg6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtODg5LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9OTM1PXN0YXRpYyBib29sIGFlc19jYmNfY3RzX2RlY3J5cHRfYXJjaCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxcbmxpYi9jcnlwdG8vYWVzLmMtOTM2LVxcdFxcdFxcdFxcdCAgICAgdTggaXZbQUVTX0JMT0NLX1NJWkVdLFxcbmxpYi9jcnlwdG8vYWVzLmM6OTM3OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcXG5saWIvY3J5cHRvL2Flcy5jLTkzOC17XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTk4Mj12b2lkIGFlc19jYmNfY3RzX2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcXG5saWIvY3J5cHRvL2Flcy5jOjk4MzpcXHRcXHRcXHQgdTggaXZbQUVTX0JMT0NLX1NJWkVdLCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtOTg0LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9MTAyND1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19maXBzX3Rlc3Qodm9pZClcXG5saWIvY3J5cHRvL2Flcy5jLTEwMjUte1xcbmxpYi9jcnlwdG8vYWVzLmM6MTAyNjpcXHRzdHJ1Y3QgYWVzX2tleSBrZXk7XFxubGliL2NyeXB0by9hZXMuYy0xMDI3LVxcdHU4IGl2W0FFU19CTE9DS19TSVpFXTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9MTA0Nz1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19jdHNfZmlwc190ZXN0KHZvaWQpXFxubGliL2NyeXB0by9hZXMuYy0xMDQ4LXtcXG5saWIvY3J5cHRvL2Flcy5jOjEwNDk6XFx0c3RydWN0IGFlc19rZXkga2V5O1xcbmxpYi9jcnlwdG8vYWVzLmMtMTA1MC1cXHR1OCBpdltBRVNfQkxPQ0tfU0laRV07XFxuLS1cXG5saWIvY3J5cHRvL2FybS9hZXMuaD0yND1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXFxuLS1cXG5saWIvY3J5cHRvL2FybS9hZXMuaC00MC1cXG5saWIvY3J5cHRvL2FybS9hZXMuaDo0MTpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXFxubGliL2NyeXB0by9hcm0vYWVzLmgtNDItXFx0XFx0XFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbi0tXFxubGliL2NyeXB0by9hcm02NC9hZXMuaD0xNjE9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9hcm02NC9hZXMuaC0xNzItXFxubGliL2NyeXB0by9hcm02NC9hZXMuaDoxNzM6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmgtMTc0LVxcdFxcdFxcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcXG4tLVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD02MT1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNjktXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oOjcwOnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNzEtXFx0XFx0XFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbi0tXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oPTE2Nj1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtMTk1LVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaDoxOTY6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LCB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xOTctXFx0XFx0XFx0ICAgICBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXFxuLS1cXG5saWIvY3J5cHRvL3Jpc2N2L2Flcy5oPTI2PXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcXG4tLVxcbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmgtMzgtXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaDozOTpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaC00MC1cXHRcXHRcXHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg9NzM9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9zMzkwL2Flcy5oLTgxLVxcbmxpYi9jcnlwdG8vczM5MC9hZXMuaDo4MjpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXFxubGliL2NyeXB0by9zMzkwL2Flcy5oLTgzLVxcdFxcdFxcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcXG4tLVxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg9ODY9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaC0xMDQtXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaDoxMDU6c3RhdGljIHZvaWQgYWVzX3NwYXJjNjRfZGVjcnlwdChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtMTA2LVxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqaW5wdXQsIHUzMiAqb3V0cHV0KVxcbi0tXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaC0xMTUtXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaDoxMTY6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtMTE3LVxcdFxcdFxcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcXG4tLVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oPTUyPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcXG4tLVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oLTY0LVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oOjY1OnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcXG5saWIvY3J5cHRvL3g4Ni9hZXMuaC02Ni1cXHRcXHRcXHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjMwOjI1LjA5ODMwMTMxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzMzNjI2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgS01TQU4gaXMgKnJlYWxseSogbmVlZGVkIGhlcmUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBCUEYgY3J5cHRvIHN1YnN5c3RlbSwgc2hpZnRpbmcgZnJvbSB0aGUgYGNyeXB0b190Zm1gIGR5bmFtaWMgcmVnaXN0cmF0aW9uIGFwcHJvYWNoIHRvIGRpcmVjdCBBRVMgbGlicmFyeSBmdW5jdGlvbiBjYWxscy4gV2UncmUgZ2V0dGluZyByaWQgb2YgYGJwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIHVwZGF0aW5nIHRoZSBgYnBmX2NyeXB0b19jdHhgIHN0cnVjdHVyZS4gVGhhdCdzIHRoZSBjb3JlIGNoYW5nZS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gbWVtb3J5IGNvbnNpZGVyYXRpb25zLCBiZWNhdXNlIHRoYXQncyB3aGF0IEtNU0FOIGlzIGFsbCBhYm91dC4gVGhlIGtleSBwYXJ0IGlzIHRoYXQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggKmd1YXJhbnRlZXMqIHRoYXQgZXZlcnl0aGluZyBpcyB6ZXJvZWQgb3V0IGZyb20gdGhlIGdldC1nby4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZ2luZyBhcm91bmQuIFRoZSBrZXkgc2NoZWR1bGUgd2l0aGluIGBjdHgtXHUwMDNla2V5LmFlc2AgaXMgdGhlbiBwcmVwYXJlZCB3aXRoIGBhZXNfcHJlcGFyZWtleWAuIFRoYXQgc29saWRpZmllcyB0aGUga2V5IG1hdGVyaWFsLlxuXG5Mb29raW5nIGF0IGRhdGEgdHJhbnNmZXJzLCB3ZSd2ZSBnb3QgZHlucHRycyBmb3IgdGhlIGlucHV0L291dHB1dCBidWZmZXJzIGFuZCB0aGUgSVYuIENyaXRpY2FsbHksIHdlIGhhdmUgY2hlY2tzIGluIGBicGZfYWVzX2NiY19jcnlwdGAgYW5kIGBicGZfYWVzX2VjYl9jcnlwdGAgZm9yIGJ1ZmZlciBib3VuZHMgYW5kIGFsaWdubWVudC4gTmFtZWx5LCBgaXZfbGVuICE9IEFFU19CTE9DS19TSVpFYCwgYHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuYC4gQWxzbywgaW4gYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAsIHRoZSBgcGFyYW1zYCBhcmUgdmFsaWRhdGVkIHdpdGggY2hlY2tzIGZvciBgcGFyYW1zX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zKWAgYW5kIGByZXNlcnZlZGAgZmllbGRzLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIHRha2luZyBkYXRhIGRpcmVjdGx5IGZyb20gY2FsbGVyIGR5bnB0cnMgYW5kIHdyaXRpbmcgZW5jcnlwdGVkL2RlY3J5cHRlZCBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXN0aW5hdGlvbiBkeW5wdHJzLiBUaGlzIGlzIGdvb2Q6IG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRXNzZW50aWFsbHksIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgaGVyZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlcnNwYWNlLlxuXG5GaW5hbGx5LCB3aGlsZSB3ZSBjYW4gYWx3YXlzIHJ1biBpbnRvIG1lbW9yeSBpc3N1ZXMgd2l0aCBCUEYgKGUuZy4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgYnVmZmVyIG92ZXJydW5zKSwgYW55IGlzc3VlcyB3aXRoIGR5bnB0cnMsIG1lbW9yeSBib3VuZGFyaWVzIGFuZCBsaWZldGltZXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHRoZSBCUEYgdmVyaWZpZXIgZHlucHRyIGNoZWNrcy4gV2UgKmRvbid0KiByZXF1aXJlIEtNU0FOIGhlcmUuIE15IGNvbmNsdXNpb246IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDg3LCJPdXRwdXRUb2tlbnMiOjI5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDozMS40MzE5MzA1NzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmNzIGltcGxlbWVudGF0aW9uIGJ5IHJlcGxhY2luZyB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBhcmNoaXRlY3R1cmUgd2l0aCBkaXJlY3QgaW52b2NhdGlvbnMgb2YgQUVTIGxpYnJhcnkgZnVuY3Rpb25zIChDUllQVE9fTElCX0FFU19DQkMgYW5kIENSWVBUT19MSUJfQUVTX0VDQikuIFxcblxcbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XFxuMS4gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIGNvbnRleHQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAgYW5kIHRoZSBgYWVzX2tleWAgdW5pb24pIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBLZXkgc2V0dXAgaXMgaGFuZGxlZCBieSBgYWVzX3ByZXBhcmVrZXkoKWAuIENsZWFudXAgaXMgaGFuZGxlZCB2aWEgYGtmcmVlX3NlbnNpdGl2ZSgpYC5cXG4yLiBCdWZmZXJzIFxcdTAwMjYgSW5mbyBMZWFrczogRGF0YSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9wZXJhdGUgZGlyZWN0bHkgb24gZHlucHRyIGJ1ZmZlcnMgc3VwcGxpZWQgYnkgQlBGIHByb2dyYW1zIGFmdGVyIHZlcmlmeWluZyBibG9jayBhbGlnbm1lbnQgYW5kIGJvdW5kcyAoYEFFU19CTE9DS19TSVpFYCBjaGVja3MsIGBkc3RfbGVuIFxcdTAwM2U9IHNyY19sZW5gKS4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nL2NvbnRyb2wgZmxvdy5cXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXFxuXFxuTWVtb3J5IHNhZmV0eSBhbmFseXNpczpcXG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgY29udGV4dCBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBhbmQgdGhlIGBhZXNfa2V5YCB1bmlvbikgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEtleSBzZXR1cCBpcyBoYW5kbGVkIGJ5IGBhZXNfcHJlcGFyZWtleSgpYC4gQ2xlYW51cCBpcyBoYW5kbGVkIHZpYSBga2ZyZWVfc2Vuc2l0aXZlKClgLlxcbjIuIEJ1ZmZlcnMgXFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXFx1MDAzZT0gc3JjX2xlbmApLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcvY29udHJvbCBmbG93LlxcbjMuIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgZHlucHRyIGFjY2Vzc2VzLCBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9uIGJ1Z3MsIG9yIGxpZmV0aW1lL3JlZmNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgQlBGIHZlcmlmaWVyL2RlYnVnIGluZnJhc3RydWN0dXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9qxb9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 02:27:35 +0000 UTC FinishedAt: 2026-09-01 02:30:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_CRYPTO", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_CRYPTO", "DEBUG_INFO_BTF" ], "series_id": "d559e7d9-d78e-4d7f-b037-00d9815ed5a0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_crypto_ctx_create", "bpf_crypto_ctx_release", "bpf_crypto_ctx_acquire", "bpf_crypto_ctx_release_dtor", "bpf_crypto_decrypt", "bpf_crypto_encrypt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9DUllQVE8mIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY3J5cHRvX2N0eF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvciYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2RlY3J5cHQmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19lbmNyeXB0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXG5cbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSBjb250ZXh0IGBzdHJ1Y3QgYnBmX2NyeXB0b19jdHhgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgZW51bSBicGZfY3J5cHRvX2FsZ29faWRgIGFuZCB0aGUgYGFlc19rZXlgIHVuaW9uKSBhcmUgemVyby1pbml0aWFsaXplZC4gS2V5IHNldHVwIGlzIGhhbmRsZWQgYnkgYGFlc19wcmVwYXJla2V5KClgLiBDbGVhbnVwIGlzIGhhbmRsZWQgdmlhIGBrZnJlZV9zZW5zaXRpdmUoKWAuXG4yLiBCdWZmZXJzIFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXHUwMDNlPSBzcmNfbGVuYCkuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZy9jb250cm9sIGZsb3cuXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgY3J5cHRvIHN1cHBvcnQgYnkgcmVtb3ZpbmcgdGhlIGR5bmFtaWMgY3J5cHRvIHR5cGUgcmVnaXN0cmF0aW9uIGludGVyZmFjZSBhbmQgaW1wbGVtZW50aW5nIGRpcmVjdCBBRVMtQ0JDIGFuZCBBRVMtRUNCIGxpYnJhcnkgaW50ZWdyYXRpb24uIEl0IGludHJvZHVjZXMgQ09ORklHX0JQRl9DUllQVE8gYW5kIG1vZGlmaWVzIHRoZSBCUEYgY3J5cHRvIGtmdW5jIGhhbmRsZXJzIChjb250ZXh0IGNyZWF0aW9uLCBrZXkgc2V0dXAsIGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCksIG1ha2luZyB0aGVzZSBmdW5jdGlvbnMgaW1wb3J0YW50IHRhcmdldHMgZm9yIEJQRiBwcm9ncmFtIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5N2I0MDkyMjNlMjUxZTBhMjBiODg5YWI3YTc2YjU5NzgzMjhmY2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjoyOToyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYTE5ZGE3NGQwMGM5Li4xNmYxMzI3MGNlMWY5IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtNDkzNiw4ICYjNDM7NDkzNiw2IEBAIEJQRiBbQ1JZUFRPXVxuIE06XHRWYWRpbSBGZWRvcmVua28gXHUwMDNjdmFkaW0uZmVkb3JlbmtvQGxpbnV4LmRldlx1MDAzZVxuIEw6XHRicGZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbi1GOlx0Y3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY1xuLUY6XHRpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaFxuIEY6XHRrZXJuZWwvYnBmL2NyeXB0by5jXG4gXG4gQlBGIFtET0NVTUVOVEFUSU9OXSAoUmVsYXRlZCB0byBTdGFuZGFyZGl6YXRpb24pXG5kaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlXG5pbmRleCA4Mzg2ZDU1YTk3NTVlLi4zM2JiNWFkNTk1ZThmIDEwMDY0NFxuLS0tIGEvY3J5cHRvL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9jcnlwdG8vTWFrZWZpbGVcbkBAIC0yMiw5ICYjNDM7MjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gbHNrY2lwaGVyLm9cbiBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gc2tjaXBoZXIub1xuIFxuIG9iai0kKENPTkZJR19DUllQVE9fU0tDSVBIRVIyKSAmIzQzOz0gY3J5cHRvX3NrY2lwaGVyLm9cbi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSlcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgJiM0Mzs9IGJwZl9jcnlwdG9fc2tjaXBoZXIub1xuLWVuZGlmXG4gXG4gb2JqLSQoQ09ORklHX0NSWVBUT19TRVFJVikgJiM0Mzs9IHNlcWl2Lm9cbiBvYmotJChDT05GSUdfQ1JZUFRPX0VDSEFJTklWKSAmIzQzOz0gZWNoYWluaXYub1xuZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDgzICYjNDM7MCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhLCBJbmMgKi9cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NjcnlwdG8vc2tjaXBoZXIuaFx1MDAzZVxuLVxuLXN0YXRpYyB2b2lkICpicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnbylcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2FsbG9jX2xza2NpcGhlcihhbGdvLCAwLCAwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0odm9pZCAqdGZtKVxuLXtcbi1cdGNyeXB0b19mcmVlX2xza2NpcGhlcih0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvKGNvbnN0IGNoYXIgKmFsZ28pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19oYXNfc2tjaXBoZXIoYWxnbywgQ1JZUFRPX0FMR19UWVBFX0xTS0NJUEhFUiwgQ1JZUFRPX0FMR19UWVBFX01BU0spO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3NldGtleSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pO1xuLX1cbi1cbi1zdGF0aWMgdTMyIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh2b2lkICp0Zm0pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplKHZvaWQgKnRmbSlcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodGZtKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodm9pZCAqdGZtKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpO1xuLX1cbi1cbi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpO1xuLX1cbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSBicGZfY3J5cHRvX2xza2NpcGhlcl90eXBlID0ge1xuLVx0LmFsbG9jX3RmbVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0sXG4tXHQuZnJlZV90Zm1cdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0sXG4tXHQuaGFzX2FsZ29cdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28sXG4tXHQuc2V0a2V5XHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5LFxuLVx0LmVuY3J5cHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCxcbi1cdC5kZWNyeXB0XHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQsXG4tXHQuaXZzaXplXHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplLFxuLVx0LnN0YXRlc2l6ZVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUsXG4tXHQuZ2V0X2ZsYWdzXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyxcbi1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLVx0Lm5hbWVcdFx0PSBcJiMzNDtza2NpcGhlclwmIzM0Oyxcbi19O1xuLVxuLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKVxuLXtcbi1cdHJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZClcbi17XG4tXHRpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tXHRXQVJOX09OX09OQ0UoZXJyKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTtcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xuLU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1N5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRlwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBhNDFlNzFkNGUyZDlmLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsMjQgJiM0MzswLDAgQEBcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuLSNpZm5kZWYgX0JQRl9DUllQVE9fSFxuLSNkZWZpbmUgX0JQRl9DUllQVE9fSFxuLVxuLXN0cnVjdCBicGZfY3J5cHRvX3R5cGUge1xuLVx0dm9pZCAqKCphbGxvY190Zm0pKGNvbnN0IGNoYXIgKmFsZ28pO1xuLVx0dm9pZCAoKmZyZWVfdGZtKSh2b2lkICp0Zm0pO1xuLVx0aW50ICgqaGFzX2FsZ28pKGNvbnN0IGNoYXIgKmFsZ28pO1xuLVx0aW50ICgqc2V0a2V5KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pO1xuLVx0aW50ICgqc2V0YXV0aHNpemUpKHZvaWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKTtcbi1cdGludCAoKmVuY3J5cHQpKHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTtcbi1cdGludCAoKmRlY3J5cHQpKHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTtcbi1cdHVuc2lnbmVkIGludCAoKml2c2l6ZSkodm9pZCAqdGZtKTtcbi1cdHVuc2lnbmVkIGludCAoKnN0YXRlc2l6ZSkodm9pZCAqdGZtKTtcbi1cdHUzMiAoKmdldF9mbGFncykodm9pZCAqdGZtKTtcbi1cdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuLVx0Y2hhciBuYW1lWzE0XTtcbi19O1xuLVxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSk7XG4taW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xuLVxuLSNlbmRpZiAvKiBfQlBGX0NSWVBUT19IICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXG5pbmRleCBlYjNkZTM1NzM0ZjA5Li44MjI1OTliNDJiZTJlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL0tjb25maWdcbkBAIC04Nyw2ICYjNDM7ODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiBcbiYjNDM7Y29uZmlnIEJQRl9DUllQVE9cbiYjNDM7XHRkZWZfYm9vbCB5XG4mIzQzO1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiM0MztcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNcbiYjNDM7XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfRUNCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgUHJvdmlkZSB0aGUga2Z1bmNzIG5lZWRlZCBmb3IgQlBGIHByb2dyYW1zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHRcbiYjNDM7XHQgIGRhdGEuIFRoZSBzdXBwb3J0ZWQgYWxnb3JpdGhtcyBhcmUgQUVTLUNCQyBhbmQgQUVTLUVDQi5cbiYjNDM7XG4gc291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gXG4gY29uZmlnIEJQRl9MU01cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL01ha2VmaWxlIGIva2VybmVsL2JwZi9NYWtlZmlsZVxuaW5kZXggOTAyNTVkODBlNWJlNi4uYWIyZTVkMjc4MmU2ZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvTWFrZWZpbGVcbkBAIC01NSw5ICYjNDM7NTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAjIHNlbWFudGljcyB3aXRoaW4gcGFob2xlIGFyZSByZXZpc2l0ZWQgYWNjb3JkaW5nbHkuXG4gb2JqLSR7Q09ORklHX0JQRl9MU019ICYjNDM7PSBicGZfbHNtX3Byb3RvLm8gYnBmX2xzbS5vXG4gZW5kaWZcbi1pZm5lcSAoJChDT05GSUdfQ1JZUFRPKSwpXG4tb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm9cbi1lbmRpZlxuJiM0MztvYmotJChDT05GSUdfQlBGX0NSWVBUTykgJiM0Mzs9IGNyeXB0by5vXG4gb2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC9cbiBcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSByZWxvX2NvcmUub1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY3J5cHRvLmMgYi9rZXJuZWwvYnBmL2NyeXB0by5jXG5pbmRleCA1MWY4OWNlY2VmYjRkLi44Y2RjMTZmOWIzNzRhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jcnlwdG8uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jcnlwdG8uY1xuQEAgLTEsMTkgJiM0MzsxLDEzIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhLCBJbmMgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9jcnlwdG8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9tZW1fYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NjcnlwdG8vc2tjaXBoZXIuaFx1MDAzZVxuLVxuLXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCB7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLX07XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtY2JjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2Flcy1lY2IuaFx1MDAzZVxuIFxuIC8qIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3QgKi9cbiAvKipcbkBAIC0zNiw5NCAmIzQzOzMwLDUzIEBAIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7XG4gXHR1MzIgYXV0aHNpemU7XG4gfTtcbiBcbi1zdGF0aWMgTElTVF9IRUFEKGJwZl9jcnlwdG9fdHlwZXMpO1xuLXN0YXRpYyBERUNMQVJFX1JXU0VNKGJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbiYjNDM7ZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xuJiM0MztcdEJQRl9BTEdPX0FFU19DQkMsXG4mIzQzO1x0QlBGX0FMR09fQUVTX0VDQixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuJiM0MztcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcbiYjNDM7XHRjb25zdCBjaGFyICphbGdvX25hbWU7XG4mIzQzO1x0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbiYjNDM7fSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtza2NpcGhlclwmIzM0OywgXCYjMzQ7Y2JjKGFlcylcJiMzNDssIEJQRl9BTEdPX0FFU19DQkMgfSxcbiYjNDM7XHR7IFwmIzM0O3NrY2lwaGVyXCYjMzQ7LCBcJiMzNDtlY2IoYWVzKVwmIzM0OywgQlBGX0FMR09fQUVTX0VDQiB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0IGVudW0gYnBmX2NyeXB0b19hbGdvX2lkICppZF9yZXQpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXHUwMDNldHlwZSxcbiYjNDM7XHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNldHlwZSkpID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4mIzQzO1x0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZWFsZ28pKSA9PSAwKSB7XG4mIzQzO1x0XHRcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiBcbiAvKipcbiAgKiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggLSByZWZjb3VudGVkIEJQRiBjcnlwdG8gY29udGV4dCBzdHJ1Y3R1cmVcbi0gKiBAdHlwZTpcdFRoZSBwb2ludGVyIHRvIGJwZiBjcnlwdG8gdHlwZVxuLSAqIEB0Zm06XHRUaGUgcG9pbnRlciB0byBpbnN0YW5jZSBvZiBjcnlwdG8gQVBJIHN0cnVjdC5cbi0gKiBAc2l2X2xlbjogICAgU2l6ZSBvZiBJViBhbmQgc3RhdGUgc3RvcmFnZSBmb3IgY2lwaGVyXG4mIzQzOyAqIEBhbGdvOlx0VGhlIGNyeXB0byBhbGdvcml0aG0gSURcbiYjNDM7ICogQGtleTpcdFRoZSBjcnlwdG8ga2V5XG4gICogQHJjdTpcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cbiAgKiBAdXNhZ2U6XHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXG4gICpcdFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXG4gICpcdFx0UkNVIHNhZmV0eS5cbiAgKi9cbiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHZvaWQgKnRmbTtcbi1cdHUzMiBzaXZfbGVuO1xuJiM0MztcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IGFlc19rZXkgYWVzO1xuJiM0MztcdH0ga2V5O1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdHJlZmNvdW50X3QgdXNhZ2U7XG4gfTtcbiBcbi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXG4te1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVx0aW50IGVyciA9IC1FQlVTWTtcbi1cbi1cdGRvd25fd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XG4tXHRcdGlmICghc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCB0eXBlLVx1MDAzZW5hbWUpKVxuLVx0XHRcdGdvdG8gdW5sb2NrO1xuLVx0fVxuLVxuLVx0bm9kZSA9IGttYWxsb2Nfb2JqKCpub2RlKTtcbi1cdGVyciA9IC1FTk9NRU07XG4tXHRpZiAoIW5vZGUpXG4tXHRcdGdvdG8gdW5sb2NrO1xuLVxuLVx0bm9kZS1cdTAwM2V0eXBlID0gdHlwZTtcbi1cdGxpc3RfYWRkKFx1MDAyNm5vZGUtXHUwMDNlbGlzdCwgXHUwMDI2YnBmX2NyeXB0b190eXBlcyk7XG4tXHRlcnIgPSAwO1xuLVxuLXVubG9jazpcbi1cdHVwX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7XG4tXG4taW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpXG4te1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVx0aW50IGVyciA9IC1FTk9FTlQ7XG4tXG4tXHRkb3duX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2YnBmX2NyeXB0b190eXBlcywgbGlzdCkge1xuLVx0XHRpZiAoc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCB0eXBlLVx1MDAzZW5hbWUpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRsaXN0X2RlbChcdTAwMjZub2RlLVx1MDAzZWxpc3QpO1xuLVx0XHRrZnJlZShub2RlKTtcbi1cdFx0ZXJyID0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHR1cF93cml0ZShcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZSk7XG4tXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKmJwZl9jcnlwdG9fZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcbi17XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlID0gRVJSX1BUUigtRU5PRU5UKTtcbi1cdHN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTtcbi1cbi1cdGRvd25fcmVhZChcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcbi1cdFx0aWYgKHN0cmNtcChub2RlLVx1MDAzZXR5cGUtXHUwMDNlbmFtZSwgbmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh0cnlfbW9kdWxlX2dldChub2RlLVx1MDAzZXR5cGUtXHUwMDNlb3duZXIpKVxuLVx0XHRcdHR5cGUgPSBub2RlLVx1MDAzZXR5cGU7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVx0dXBfcmVhZChcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXG4tXHRyZXR1cm4gdHlwZTtcbi19XG4tXG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuIFxuIC8qKlxuQEAgLTE0Niw3ICYjNDM7OTksNiBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxuIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXG4gXHRcdCAgICAgIGludCAqZXJyKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGU7XG4gXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcbiBcbiBcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cdTAwM2VyZXNlcnZlZFswXSB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcbkBAIC0xNTUsNjkgJiM0MzsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHR0eXBlID0gYnBmX2NyeXB0b19nZXRfdHlwZShwYXJhbXMtXHUwMDNldHlwZSk7XG4tXHRpZiAoSVNfRVJSKHR5cGUpKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKHR5cGUpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGlmICghdHlwZS1cdTAwM2VoYXNfYWxnbyhwYXJhbXMtXHUwMDNlYWxnbykpIHtcbi1cdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLVx0fVxuLVxuLVx0aWYgKCEhcGFyYW1zLVx1MDAzZWF1dGhzaXplIF4gISF0eXBlLVx1MDAzZXNldGF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbi1cdGlmICghcGFyYW1zLVx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihwYXJhbXMtXHUwMDNla2V5KSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbiBcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0KmVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2V0eXBlID0gdHlwZTtcbi1cdGN0eC1cdTAwM2V0Zm0gPSB0eXBlLVx1MDAzZWFsbG9jX3RmbShwYXJhbXMtXHUwMDNlYWxnbyk7XG4tXHRpZiAoSVNfRVJSKGN0eC1cdTAwM2V0Zm0pKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKGN0eC1cdTAwM2V0Zm0pO1xuLVx0XHRnb3RvIGVycl9mcmVlX2N0eDtcbiYjNDM7XHRpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgXHUwMDI2Y3R4LVx1MDAzZWFsZ28pKSB7XG4mIzQzO1x0XHQqZXJyID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2VhdXRoc2l6ZSkge1xuLVx0XHQqZXJyID0gdHlwZS1cdTAwM2VzZXRhdXRoc2l6ZShjdHgtXHUwMDNldGZtLCBwYXJhbXMtXHUwMDNlYXV0aHNpemUpO1xuLVx0XHRpZiAoKmVycilcbi1cdFx0XHRnb3RvIGVycl9mcmVlX3RmbTtcbiYjNDM7XHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuJiM0MztcdGNhc2UgQlBGX0FMR09fQUVTX0VDQjpcbiYjNDM7XHRcdGlmIChwYXJhbXMtXHUwMDNlYXV0aHNpemUpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0KmVyciA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzLCBwYXJhbXMtXHUwMDNla2V5LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgcGFyYW1zLVx1MDAzZWtleV9sZW4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFdBUk5fT04oMSk7XG4mIzQzO1x0XHQqZXJyID0gLUVOT0VOVDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0KmVyciA9IHR5cGUtXHUwMDNlc2V0a2V5KGN0eC1cdTAwM2V0Zm0sIHBhcmFtcy1cdTAwM2VrZXksIHBhcmFtcy1cdTAwM2VrZXlfbGVuKTtcbi1cdGlmICgqZXJyKVxuLVx0XHRnb3RvIGVycl9mcmVlX3RmbTtcbi1cbi1cdGlmICh0eXBlLVx1MDAzZWdldF9mbGFncyhjdHgtXHUwMDNldGZtKSBcdTAwMjYgQ1JZUFRPX1RGTV9ORUVEX0tFWSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfZnJlZV90Zm07XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoKmVycikge1xuJiM0MztcdFx0a2ZyZWVfc2Vuc2l0aXZlKGN0eCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VzaXZfbGVuID0gdHlwZS1cdTAwM2VpdnNpemUoY3R4LVx1MDAzZXRmbSkgJiM0MzsgdHlwZS1cdTAwM2VzdGF0ZXNpemUoY3R4LVx1MDAzZXRmbSk7XG4tXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2Y3R4LVx1MDAzZXVzYWdlLCAxKTtcbi1cbiBcdHJldHVybiBjdHg7XG4tXG4tZXJyX2ZyZWVfdGZtOlxuLVx0dHlwZS1cdTAwM2VmcmVlX3RmbShjdHgtXHUwMDNldGZtKTtcbi1lcnJfZnJlZV9jdHg6XG4tXHRrZnJlZShjdHgpO1xuLWVycl9tb2R1bGVfcHV0OlxuLVx0bW9kdWxlX3B1dCh0eXBlLVx1MDAzZW93bmVyKTtcbi1cbi1cdHJldHVybiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5AQCAtMjI1LDkgJiM0MzsxNDgsNyBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcbiBcbiBcdGN0eCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgsIHJjdSk7XG4tXHRjdHgtXHUwMDNldHlwZS1cdTAwM2VmcmVlX3RmbShjdHgtXHUwMDNldGZtKTtcbi1cdG1vZHVsZV9wdXQoY3R4LVx1MDAzZXR5cGUtXHUwMDNlb3duZXIpO1xuLVx0a2ZyZWUoY3R4KTtcbiYjNDM7XHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3LDI3ICYjNDM7MTg4LDUzIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcbiB9XG4gQ0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpO1xuIFxuJiM0MztzdGF0aWMgaW50IGJwZl9hZXNfY2JjX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbiYjNDM7XHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcbiYjNDM7e1xuJiM0MztcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gXHUwMDNjIHNyY19sZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoZGVjcnlwdClcbiYjNDM7XHRcdGFlc19jYmNfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRhZXNfY2JjX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxuJiM0MztcdFx0XHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGl2X2xlbiAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKGRlY3J5cHQpXG4mIzQzO1x0XHRhZXNfZWNiX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRhZXNfZWNiX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0LFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXYsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdixcbiBcdFx0XHQgICAgYm9vbCBkZWNyeXB0KVxuIHtcbi1cdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBzaXZfbGVuO1xuJiM0MztcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gXHRjb25zdCB1OCAqcHNyYztcbiBcdHU4ICpwZHN0LCAqcGl2O1xuLVx0aW50IGVycjtcbiBcbiBcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwO1xuJiM0MztcdGl2X2xlbiA9IGl2ID8gX19icGZfZHlucHRyX3NpemUoaXYpIDogMDtcbiBcdHNyY19sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShzcmMpO1xuIFx0ZHN0X2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKGRzdCk7XG4tXHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4gfHwgc3JjX2xlbiBcdTAwM2UgZHN0X2xlbilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoc2l2X2xlbiAhPSBjdHgtXHUwMDNlc2l2X2xlbilcbiYjNDM7XHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cHNyYyA9IF9fYnBmX2R5bnB0cl9kYXRhKHNyYywgc3JjX2xlbik7XG5AQCAtMjk3LDE0ICYjNDM7MjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdGlmICghcGRzdClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwaXYgPSBzaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoc2l2LCBzaXZfbGVuKSA6IE5VTEw7XG4tXHRpZiAoc2l2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbiYjNDM7XHRwaXYgPSBpdl9sZW4gPyBfX2JwZl9keW5wdHJfZGF0YV9ydyhpdiwgaXZfbGVuKSA6IE5VTEw7XG4mIzQzO1x0aWYgKGl2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRlcnIgPSBkZWNyeXB0ID8gY3R4LVx1MDAzZXR5cGUtXHUwMDNlZGVjcnlwdChjdHgtXHUwMDNldGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpXG4tXHRcdCAgICAgIDogY3R4LVx1MDAzZXR5cGUtXHUwMDNlZW5jcnlwdChjdHgtXHUwMDNldGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpO1xuLVxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuJiM0MztcdFx0cmV0dXJuIGJwZl9hZXNfY2JjX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdixcbiYjNDM7XHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4mIzQzO1x0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuJiM0MztcdFx0cmV0dXJuIGJwZl9hZXNfZWNiX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdixcbiYjNDM7XHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMzEyLDIwICYjNDM7MjY1LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGVuY3J5cHRlZCBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBkc3Q6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuLSAqIEBzaXZfX251bGxhYmxlOlx0YnBmX2R5bnB0ciB0byBJViBkYXRhIGFuZCBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgZGVjcnlwdG9yLiBNYXkgYmUgTlVMTC5cbiYjNDM7ICogQGl2X19udWxsYWJsZTpcdGJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuXG4gICpcbiAgKiBEZWNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuXG4gICovXG4gX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNpdl9fbnVsbGFibGUpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcbiBcbi1cdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBzaXZfa2VybiwgdHJ1ZSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIHRydWUpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzMsMjAgJiM0MzsyODYsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuJiM0MzsgKiBAaXZfX251bGxhYmxlOlx0YnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC5cbiAgKlxuICAqIEVuY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC5cbiAgKi9cbiBfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19lbmNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYyxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkc3QsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc2l2X19udWxsYWJsZSlcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3Rfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZHN0O1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNpdl9fbnVsbGFibGU7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7XG4mIzQzO1x0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIGZhbHNlKTtcbiB9XG4gXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfQ1JZUFRPJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19kZWNyeXB0JiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fZW5jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTdiNDA5MjIzZTI1MWUwYTIwYjg4OWFiN2E3NmI1OTc4MzI4ZmNlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6Mjk6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDNhMTlkYTc0ZDAwYzkuLjE2ZjEzMjcwY2UxZjkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC00OTM2LDggJiM0Mzs0OTM2LDYgQEAgQlBGIFtDUllQVE9dCiBNOglWYWRpbSBGZWRvcmVua28gJmx0O3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXYmZ3Q7CiBMOglicGZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GOgljcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jCi1GOglpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaAogRjoJa2VybmVsL2JwZi9jcnlwdG8uYwogCiBCUEYgW0RPQ1VNRU5UQVRJT05dIChSZWxhdGVkIHRvIFN0YW5kYXJkaXphdGlvbikKZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCA4Mzg2ZDU1YTk3NTVlLi4zM2JiNWFkNTk1ZThmIDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvY3J5cHRvL01ha2VmaWxlCkBAIC0yMiw5ICYjNDM7MjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gbHNrY2lwaGVyLm8KIGNyeXB0b19za2NpcGhlci15ICYjNDM7PSBza2NpcGhlci5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fU0tDSVBIRVIyKSAmIzQzOz0gY3J5cHRvX3NrY2lwaGVyLm8KLWlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KQotb2JqLSQoQ09ORklHX0NSWVBUT19TS0NJUEhFUjIpICYjNDM7PSBicGZfY3J5cHRvX3NrY2lwaGVyLm8KLWVuZGlmCiAKIG9iai0kKENPTkZJR19DUllQVE9fU0VRSVYpICYjNDM7PSBzZXFpdi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0VDSEFJTklWKSAmIzQzOz0gZWNoYWluaXYubwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYyBiL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDAKLS0tIGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDgzICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovCi0jaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9icGZfY3J5cHRvLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7Y3J5cHRvL3NrY2lwaGVyLmgmZ3Q7Ci0KLXN0YXRpYyB2b2lkICpicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnbykKLXsKLQlyZXR1cm4gY3J5cHRvX2FsbG9jX2xza2NpcGhlcihhbGdvLCAwLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0odm9pZCAqdGZtKQotewotCWNyeXB0b19mcmVlX2xza2NpcGhlcih0Zm0pOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvKGNvbnN0IGNoYXIgKmFsZ28pCi17Ci0JcmV0dXJuIGNyeXB0b19oYXNfc2tjaXBoZXIoYWxnbywgQ1JZUFRPX0FMR19UWVBFX0xTS0NJUEhFUiwgQ1JZUFRPX0FMR19UWVBFX01BU0spOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3NldGtleSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCi17Ci0JcmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pOwotfQotCi1zdGF0aWMgdTMyIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh2b2lkICp0Zm0pCi17Ci0JcmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHRmbSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplKHZvaWQgKnRmbSkKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodGZtKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodm9pZCAqdGZtKQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh0Zm0pOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LAotCQkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2VuY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpOwotfQotCi1zdGF0aWMgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LAotCQkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1OCAqc2l2KQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQodGZtLCBzcmMsIGRzdCwgbGVuLCBzaXYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSBicGZfY3J5cHRvX2xza2NpcGhlcl90eXBlID0gewotCS5hbGxvY190Zm0JPSBicGZfY3J5cHRvX2xza2NpcGhlcl9hbGxvY190Zm0sCi0JLmZyZWVfdGZtCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZnJlZV90Zm0sCi0JLmhhc19hbGdvCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28sCi0JLnNldGtleQkJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksCi0JLmVuY3J5cHQJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LAotCS5kZWNyeXB0CT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCwKLQkuaXZzaXplCQk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSwKLQkuc3RhdGVzaXplCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplLAotCS5nZXRfZmxhZ3MJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3MsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICYjMzQ7c2tjaXBoZXImIzM0OywKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKQotewotCXJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoJmFtcDticGZfY3J5cHRvX2xza2NpcGhlcl90eXBlKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGJwZl9jcnlwdG9fc2tjaXBoZXJfZXhpdCh2b2lkKQotewotCWludCBlcnIgPSBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZSgmYW1wO2JwZl9jcnlwdG9fbHNrY2lwaGVyX3R5cGUpOwotCVdBUk5fT05fT05DRShlcnIpOwotfQotCi1tb2R1bGVfaW5pdChicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQpOwotbW9kdWxlX2V4aXQoYnBmX2NyeXB0b19za2NpcGhlcl9leGl0KTsKLU1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7U3ltbWV0cmljIGtleSBjaXBoZXIgc3VwcG9ydCBmb3IgQlBGJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQxZTcxZDRlMmQ5Zi4uMDAwMDAwMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDI0ICYjNDM7MCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCi0jaWZuZGVmIF9CUEZfQ1JZUFRPX0gKLSNkZWZpbmUgX0JQRl9DUllQVE9fSAotCi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlIHsKLQl2b2lkICooKmFsbG9jX3RmbSkoY29uc3QgY2hhciAqYWxnbyk7Ci0Jdm9pZCAoKmZyZWVfdGZtKSh2b2lkICp0Zm0pOwotCWludCAoKmhhc19hbGdvKShjb25zdCBjaGFyICphbGdvKTsKLQlpbnQgKCpzZXRrZXkpKHZvaWQgKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbik7Ci0JaW50ICgqc2V0YXV0aHNpemUpKHZvaWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKTsKLQlpbnQgKCplbmNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7Ci0JaW50ICgqZGVjcnlwdCkodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOwotCXVuc2lnbmVkIGludCAoKml2c2l6ZSkodm9pZCAqdGZtKTsKLQl1bnNpZ25lZCBpbnQgKCpzdGF0ZXNpemUpKHZvaWQgKnRmbSk7Ci0JdTMyICgqZ2V0X2ZsYWdzKSh2b2lkICp0Zm0pOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCWNoYXIgbmFtZVsxNF07Ci19OwotCi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpOwotaW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpOwotCi0jZW5kaWYgLyogX0JQRl9DUllQVE9fSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnCmluZGV4IGViM2RlMzU3MzRmMDkuLjgyMjU5OWI0MmJlMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL0tjb25maWcKQEAgLTg3LDYgJiM0Mzs4NywxNSBAQCBjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRgogCiAJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBZLgogCiYjNDM7Y29uZmlnIEJQRl9DUllQVE8KJiM0MzsJZGVmX2Jvb2wgeQomIzQzOwlkZXBlbmRzIG9uIEJQRl9TWVNDQUxMCiYjNDM7CXNlbGVjdCBDUllQVE9fTElCX0FFU19DQkMKJiM0MzsJc2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQgomIzQzOwloZWxwCiYjNDM7CSAgUHJvdmlkZSB0aGUga2Z1bmNzIG5lZWRlZCBmb3IgQlBGIHByb2dyYW1zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHQKJiM0MzsJICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuCiYjNDM7CiBzb3VyY2UgJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZyYjMzQ7CiAKIGNvbmZpZyBCUEZfTFNNCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL01ha2VmaWxlIGIva2VybmVsL2JwZi9NYWtlZmlsZQppbmRleCA5MDI1NWQ4MGU1YmU2Li5hYjJlNWQyNzgyZTZlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvTWFrZWZpbGUKQEAgLTU1LDkgJiM0Mzs1NSw3IEBAIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNwdW1hc2subwogIyBzZW1hbnRpY3Mgd2l0aGluIHBhaG9sZSBhcmUgcmV2aXNpdGVkIGFjY29yZGluZ2x5Lgogb2JqLSR7Q09ORklHX0JQRl9MU019ICYjNDM7PSBicGZfbHNtX3Byb3RvLm8gYnBmX2xzbS5vCiBlbmRpZgotaWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKQotb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3J5cHRvLm8KLWVuZGlmCiYjNDM7b2JqLSQoQ09ORklHX0JQRl9DUllQVE8pICYjNDM7PSBjcnlwdG8ubwogb2JqLSQoQ09ORklHX0JQRl9QUkVMT0FEKSAmIzQzOz0gcHJlbG9hZC8KIAogb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmVsb19jb3JlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY3J5cHRvLmMgYi9rZXJuZWwvYnBmL2NyeXB0by5jCmluZGV4IDUxZjg5Y2VjZWZiNGQuLjhjZGMxNmY5YjM3NGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvY3J5cHRvLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jcnlwdG8uYwpAQCAtMSwxOSAmIzQzOzEsMTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIC8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhLCBJbmMgKi8KICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9icGZfY3J5cHRvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX21lbV9hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zl9pZHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zY2F0dGVybGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwotI2luY2x1ZGUgJmx0O2NyeXB0by9za2NpcGhlci5oJmd0OwotCi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgewotCWNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3J5cHRvL2Flcy1jYmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Y3J5cHRvL2Flcy1lY2IuaCZndDsKIAogLyogQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdCAqLwogLyoqCkBAIC0zNiw5NCAmIzQzOzMwLDUzIEBAIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7CiAJdTMyIGF1dGhzaXplOwogfTsKIAotc3RhdGljIExJU1RfSEVBRChicGZfY3J5cHRvX3R5cGVzKTsKLXN0YXRpYyBERUNMQVJFX1JXU0VNKGJwZl9jcnlwdG9fdHlwZXNfc2VtKTsKJiM0MztlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCB7CiYjNDM7CUJQRl9BTEdPX0FFU19DQkMsCiYjNDM7CUJQRl9BTEdPX0FFU19FQ0IsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHsKJiM0MzsJY29uc3QgY2hhciAqdHlwZV9uYW1lOwomIzQzOwljb25zdCBjaGFyICphbGdvX25hbWU7CiYjNDM7CWVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287CiYjNDM7fSBicGZfY3J5cHRvX2FsZ29zW10gPSB7CiYjNDM7CXsgJiMzNDtza2NpcGhlciYjMzQ7LCAmIzM0O2NiYyhhZXMpJiMzNDssIEJQRl9BTEdPX0FFU19DQkMgfSwKJiM0MzsJeyAmIzM0O3NrY2lwaGVyJiMzNDssICYjMzQ7ZWNiKGFlcykmIzM0OywgQlBGX0FMR09fQUVTX0VDQiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KQomIzQzO3sKJiM0MzsJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy0mZ3Q7dHlwZSwKJiM0MzsJCQkgICAgc2l6ZW9mKHBhcmFtcy0mZ3Q7dHlwZSkpID09IDAgJmFtcDsmYW1wOwomIzQzOwkJICAgIHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvX25hbWUsIHBhcmFtcy0mZ3Q7YWxnbywKJiM0MzsJCQkgICAgc2l6ZW9mKHBhcmFtcy0mZ3Q7YWxnbykpID09IDApIHsKJiM0MzsJCQkqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKIC8qKgogICogc3RydWN0IGJwZl9jcnlwdG9fY3R4IC0gcmVmY291bnRlZCBCUEYgY3J5cHRvIGNvbnRleHQgc3RydWN0dXJlCi0gKiBAdHlwZToJVGhlIHBvaW50ZXIgdG8gYnBmIGNyeXB0byB0eXBlCi0gKiBAdGZtOglUaGUgcG9pbnRlciB0byBpbnN0YW5jZSBvZiBjcnlwdG8gQVBJIHN0cnVjdC4KLSAqIEBzaXZfbGVuOiAgICBTaXplIG9mIElWIGFuZCBzdGF0ZSBzdG9yYWdlIGZvciBjaXBoZXIKJiM0MzsgKiBAYWxnbzoJVGhlIGNyeXB0byBhbGdvcml0aG0gSUQKJiM0MzsgKiBAa2V5OglUaGUgY3J5cHRvIGtleQogICogQHJjdToJVGhlIFJDVSBoZWFkIHVzZWQgdG8gZnJlZSB0aGUgY3J5cHRvIGNvbnRleHQgd2l0aCBSQ1Ugc2FmZXR5LgogICogQHVzYWdlOglPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlCiAgKgkJbWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzCiAgKgkJUkNVIHNhZmV0eS4KICAqLwogc3RydWN0IGJwZl9jcnlwdG9fY3R4IHsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlOwotCXZvaWQgKnRmbTsKLQl1MzIgc2l2X2xlbjsKJiM0MzsJZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbzsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IGFlc19rZXkgYWVzOwomIzQzOwl9IGtleTsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCXJlZmNvdW50X3QgdXNhZ2U7CiB9OwogCi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpCi17Ci0Jc3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlOwotCWludCBlcnIgPSAtRUJVU1k7Ci0KLQlkb3duX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDticGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7Ci0JCWlmICghc3RyY21wKG5vZGUtJmd0O3R5cGUtJmd0O25hbWUsIHR5cGUtJmd0O25hbWUpKQotCQkJZ290byB1bmxvY2s7Ci0JfQotCi0Jbm9kZSA9IGttYWxsb2Nfb2JqKCpub2RlKTsKLQllcnIgPSAtRU5PTUVNOwotCWlmICghbm9kZSkKLQkJZ290byB1bmxvY2s7Ci0KLQlub2RlLSZndDt0eXBlID0gdHlwZTsKLQlsaXN0X2FkZCgmYW1wO25vZGUtJmd0O2xpc3QsICZhbXA7YnBmX2NyeXB0b190eXBlcyk7Ci0JZXJyID0gMDsKLQotdW5sb2NrOgotCXVwX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7Ci0KLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKQotewotCXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTsKLQlpbnQgZXJyID0gLUVOT0VOVDsKLQotCWRvd25fd3JpdGUoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYW1wO2JwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHsKLQkJaWYgKHN0cmNtcChub2RlLSZndDt0eXBlLSZndDtuYW1lLCB0eXBlLSZndDtuYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWxpc3RfZGVsKCZhbXA7bm9kZS0mZ3Q7bGlzdCk7Ci0JCWtmcmVlKG5vZGUpOwotCQllcnIgPSAwOwotCQlicmVhazsKLQl9Ci0JdXBfd3JpdGUoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqYnBmX2NyeXB0b19nZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQotewotCWNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUgPSBFUlJfUFRSKC1FTk9FTlQpOwotCXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTsKLQotCWRvd25fcmVhZCgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7YnBmX2NyeXB0b190eXBlcywgbGlzdCkgewotCQlpZiAoc3RyY21wKG5vZGUtJmd0O3R5cGUtJmd0O25hbWUsIG5hbWUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KG5vZGUtJmd0O3R5cGUtJmd0O293bmVyKSkKLQkJCXR5cGUgPSBub2RlLSZndDt0eXBlOwotCQlicmVhazsKLQl9Ci0JdXBfcmVhZCgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQotCXJldHVybiB0eXBlOwotfQotCiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAKIC8qKgpAQCAtMTQ2LDcgJiM0Mzs5OSw2IEBAIF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqCiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LAogCQkgICAgICBpbnQgKmVycikKIHsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlOwogCXN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4OwogCiAJaWYgKCFwYXJhbXMgfHwgcGFyYW1zLSZndDtyZXNlcnZlZFswXSB8fCBwYXJhbXMtJmd0O3Jlc2VydmVkWzFdIHx8CkBAIC0xNTUsNjkgJiM0MzsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeiwKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JdHlwZSA9IGJwZl9jcnlwdG9fZ2V0X3R5cGUocGFyYW1zLSZndDt0eXBlKTsKLQlpZiAoSVNfRVJSKHR5cGUpKSB7Ci0JCSplcnIgPSBQVFJfRVJSKHR5cGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoIXR5cGUtJmd0O2hhc19hbGdvKHBhcmFtcy0mZ3Q7YWxnbykpIHsKLQkJKmVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIGVycl9tb2R1bGVfcHV0OwotCX0KLQotCWlmICghIXBhcmFtcy0mZ3Q7YXV0aHNpemUgXiAhIXR5cGUtJmd0O3NldGF1dGhzaXplKSB7Ci0JCSplcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKLQl9Ci0KLQlpZiAoIXBhcmFtcy0mZ3Q7a2V5X2xlbiB8fCBwYXJhbXMtJmd0O2tleV9sZW4gJmd0OyBzaXplb2YocGFyYW1zLSZndDtrZXkpKSB7Ci0JCSplcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9tb2R1bGVfcHV0OwotCX0KLQogCWN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpOwogCWlmICghY3R4KSB7CiAJCSplcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9tb2R1bGVfcHV0OwomIzQzOwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JY3R4LSZndDt0eXBlID0gdHlwZTsKLQljdHgtJmd0O3RmbSA9IHR5cGUtJmd0O2FsbG9jX3RmbShwYXJhbXMtJmd0O2FsZ28pOwotCWlmIChJU19FUlIoY3R4LSZndDt0Zm0pKSB7Ci0JCSplcnIgPSBQVFJfRVJSKGN0eC0mZ3Q7dGZtKTsKLQkJZ290byBlcnJfZnJlZV9jdHg7CiYjNDM7CWlmICghYnBmX2NyeXB0b19maW5kX2FsZ28ocGFyYW1zLCAmYW1wO2N0eC0mZ3Q7YWxnbykpIHsKJiM0MzsJCSplcnIgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHBhcmFtcy0mZ3Q7YXV0aHNpemUpIHsKLQkJKmVyciA9IHR5cGUtJmd0O3NldGF1dGhzaXplKGN0eC0mZ3Q7dGZtLCBwYXJhbXMtJmd0O2F1dGhzaXplKTsKLQkJaWYgKCplcnIpCi0JCQlnb3RvIGVycl9mcmVlX3RmbTsKJiM0MzsJc3dpdGNoIChjdHgtJmd0O2FsZ28pIHsKJiM0MzsJY2FzZSBCUEZfQUxHT19BRVNfQ0JDOgomIzQzOwljYXNlIEJQRl9BTEdPX0FFU19FQ0I6CiYjNDM7CQlpZiAocGFyYW1zLSZndDthdXRoc2l6ZSkKJiM0MzsJCQkqZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQllbHNlCiYjNDM7CQkJKmVyciA9IGFlc19wcmVwYXJla2V5KCZhbXA7Y3R4LSZndDtrZXkuYWVzLCBwYXJhbXMtJmd0O2tleSwKJiM0MzsJCQkJCSAgICAgIHBhcmFtcy0mZ3Q7a2V5X2xlbik7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCVdBUk5fT04oMSk7CiYjNDM7CQkqZXJyID0gLUVOT0VOVDsKJiM0MzsJCWJyZWFrOwogCX0KIAotCSplcnIgPSB0eXBlLSZndDtzZXRrZXkoY3R4LSZndDt0Zm0sIHBhcmFtcy0mZ3Q7a2V5LCBwYXJhbXMtJmd0O2tleV9sZW4pOwotCWlmICgqZXJyKQotCQlnb3RvIGVycl9mcmVlX3RmbTsKLQotCWlmICh0eXBlLSZndDtnZXRfZmxhZ3MoY3R4LSZndDt0Zm0pICZhbXA7IENSWVBUT19URk1fTkVFRF9LRVkpIHsKLQkJKmVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX2ZyZWVfdGZtOwomIzQzO291dDoKJiM0MzsJaWYgKCplcnIpIHsKJiM0MzsJCWtmcmVlX3NlbnNpdGl2ZShjdHgpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JY3R4LSZndDtzaXZfbGVuID0gdHlwZS0mZ3Q7aXZzaXplKGN0eC0mZ3Q7dGZtKSAmIzQzOyB0eXBlLSZndDtzdGF0ZXNpemUoY3R4LSZndDt0Zm0pOwotCiAJcmVmY291bnRfc2V0KCZhbXA7Y3R4LSZndDt1c2FnZSwgMSk7Ci0KIAlyZXR1cm4gY3R4OwotCi1lcnJfZnJlZV90Zm06Ci0JdHlwZS0mZ3Q7ZnJlZV90Zm0oY3R4LSZndDt0Zm0pOwotZXJyX2ZyZWVfY3R4OgotCWtmcmVlKGN0eCk7Ci1lcnJfbW9kdWxlX3B1dDoKLQltb2R1bGVfcHV0KHR5cGUtJmd0O293bmVyKTsKLQotCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCkBAIC0yMjUsOSAmIzQzOzE0OCw3IEBAIHN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIAlzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDsKIAogCWN0eCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgsIHJjdSk7Ci0JY3R4LSZndDt0eXBlLSZndDtmcmVlX3RmbShjdHgtJmd0O3RmbSk7Ci0JbW9kdWxlX3B1dChjdHgtJmd0O3R5cGUtJmd0O293bmVyKTsKLQlrZnJlZShjdHgpOwomIzQzOwlrZnJlZV9zZW5zaXRpdmUoY3R4KTsKIH0KIAogLyoqCkBAIC0yNjcsMjcgJiM0MzsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KQogfQogQ0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpOwogCiYjNDM7c3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sCiYjNDM7CQkJICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KQomIzQzO3sKJiM0MzsJaWYgKGl2X2xlbiAhPSBBRVNfQkxPQ0tfU0laRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gJmx0OyBzcmNfbGVuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChkZWNyeXB0KQomIzQzOwkJYWVzX2NiY19kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgJmFtcDtjdHgtJmd0O2tleS5hZXMpOwomIzQzOwllbHNlCiYjNDM7CQlhZXNfY2JjX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCAmYW1wO2N0eC0mZ3Q7a2V5LmFlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9hZXNfZWNiX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbiwKJiM0MzsJCQkgICAgIHU4ICppdiwgdTMyIGl2X2xlbiwKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpCiYjNDM7ewomIzQzOwlpZiAoaXZfbGVuICE9IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuICZsdDsgc3JjX2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoZGVjcnlwdCkKJiM0MzsJCWFlc19lY2JfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgJmFtcDtjdHgtJmd0O2tleS5hZXMpOwomIzQzOwllbHNlCiYjNDM7CQlhZXNfZWNiX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sICZhbXA7Y3R4LSZndDtrZXkuYWVzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogCQkJICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsCi0JCQkgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdiwKIAkJCSAgICBib29sIGRlY3J5cHQpCiB7Ci0JdTMyIHNyY19sZW4sIGRzdF9sZW4sIHNpdl9sZW47CiYjNDM7CXUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47CiAJY29uc3QgdTggKnBzcmM7CiAJdTggKnBkc3QsICpwaXY7Ci0JaW50IGVycjsKIAogCWlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwOwomIzQzOwlpdl9sZW4gPSBpdiA/IF9fYnBmX2R5bnB0cl9zaXplKGl2KSA6IDA7CiAJc3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7CiAJZHN0X2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKGRzdCk7Ci0JaWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuIHx8IHNyY19sZW4gJmd0OyBkc3RfbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzaXZfbGVuICE9IGN0eC0mZ3Q7c2l2X2xlbikKJiM0MzsJaWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pOwpAQCAtMjk3LDE0ICYjNDM7MjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKIAlpZiAoIXBkc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGl2ID0gc2l2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KHNpdiwgc2l2X2xlbikgOiBOVUxMOwotCWlmIChzaXZfbGVuICZhbXA7JmFtcDsgIXBpdikKJiM0MzsJcGl2ID0gaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoaXYsIGl2X2xlbikgOiBOVUxMOwomIzQzOwlpZiAoaXZfbGVuICZhbXA7JmFtcDsgIXBpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBkZWNyeXB0ID8gY3R4LSZndDt0eXBlLSZndDtkZWNyeXB0KGN0eC0mZ3Q7dGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpCi0JCSAgICAgIDogY3R4LSZndDt0eXBlLSZndDtlbmNyeXB0KGN0eC0mZ3Q7dGZtLCBwc3JjLCBwZHN0LCBzcmNfbGVuLCBwaXYpOwotCi0JcmV0dXJuIGVycjsKJiM0MzsJc3dpdGNoIChjdHgtJmd0O2FsZ28pIHsKJiM0MzsJY2FzZSBCUEZfQUxHT19BRVNfQ0JDOgomIzQzOwkJcmV0dXJuIGJwZl9hZXNfY2JjX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdiwKJiM0MzsJCQkJCSBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7CiYjNDM7CWNhc2UgQlBGX0FMR09fQUVTX0VDQjoKJiM0MzsJCXJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsCiYjNDM7CQkJCQkgaXZfbGVuLCBjdHgsIGRlY3J5cHQpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KIH0KIAogLyoqCkBAIC0zMTIsMjAgJiM0MzsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogICogQGN0eDoJCVRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCiAgKiBAc3JjOgkJYnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCiAgKiBAZHN0OgkJYnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCi0gKiBAc2l2X19udWxsYWJsZToJYnBmX2R5bnB0ciB0byBJViBkYXRhIGFuZCBzdGF0ZSBkYXRhIHRvIGJlIHVzZWQgYnkgZGVjcnlwdG9yLiBNYXkgYmUgTlVMTC4KJiM0MzsgKiBAaXZfX251bGxhYmxlOglicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLgogICoKICAqIERlY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC4KICAqLwogX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkc3QsCi0JCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNpdl9fbnVsbGFibGUpCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpCiB7CiAJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjX2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNyYzsKIAljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3Rfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZHN0OwotCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilpdl9fbnVsbGFibGU7CiAKLQlyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2Vybiwgc2l2X2tlcm4sIHRydWUpOwomIzQzOwlyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7CiB9CiAKIC8qKgpAQCAtMzMzLDIwICYjNDM7Mjg2LDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAgKiBAY3R4OgkJVGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci4KICAqIEBzcmM6CQlicGZfZHlucHRyIHRvIHRoZSBwbGFpbiBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgogICogQGRzdDoJCWJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgotICogQHNpdl9fbnVsbGFibGU6CWJwZl9keW5wdHIgdG8gSVYgZGF0YSBhbmQgc3RhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IGRlY3J5cHRvci4gTWF5IGJlIE5VTEwuCiYjNDM7ICogQGl2X19udWxsYWJsZToJYnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC4KICAqCiAgKiBFbmNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LAotCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKQomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKQogewogCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7CiAJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDsKLQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc2l2X19udWxsYWJsZTsKJiM0MzsJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlOwogCi0JcmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7CiYjNDM7CXJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCBmYWxzZSk7CiB9CiAKIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQ3J5cHRvIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gb3B0aW1pemluZyB0aGUgQlBGIGNyeXB0byBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgcmVtb3ZpbmcgdGhlIG9sZCBgY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaGAgZmlsZXMg4oCTIHNvIHRoZSBsZWdhY3kgY29kZSBpcyBnb25lLiBJbnN0ZWFkLCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIGBjb25maWcgQlBGX0NSWVBUT2Agb3B0aW9uIGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCB3aGljaCBpcyBzZXQgdG8gYHlgIGlmIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYW5kIGFsc28gc2VsZWN0aW5nIGJvdGggYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgLiBUaGlzIG1lYW5zIHRoZSBwYXRjaCBlbmFibGVzIHRoZSB1c2Ugb2YgQUVTLUNCQyBhbmQgQUVTLUVDQiBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSBjaGFuZ2UgaW4gdGhlIE1ha2VmaWxlIGNvbmZpcm1zIHRoaXMgd2l0aCBgb2JqLSQoQ09ORklHX0JQRl9DUllQVE8pICYjNDM7PSBjcnlwdG8ub2AuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgYXBwZWFycyB0byBiZSBpbiBga2VybmVsL2JwZi9jcnlwdG8uY2AuIFRoZXkmIzM5O3JlIHJlZmFjdG9yaW5nIHRoZSBjcnlwdG8gaGFuZGxpbmcsIG1vdmluZyBhd2F5IGZyb20gdGhlIGdlbmVyaWMgY3J5cHRvIHRmbSByZWdpc3RyYXRpb24gaW50ZXJmYWNlLiBUaGUgYWltIHNlZW1zIHRvIGJlIHRvIHN0cmVhbWxpbmUgdGhpbmdzIGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIGBDUllQVE9fTElCX0FFU19DQkNgIGFuZCBgQ1JZUFRPX0xJQl9BRVNfRUNCYCBpbXBsZW1lbnRhdGlvbnMgdmlhIGtmdW5jcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBuZXcga2Z1bmNzOiBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VgLCBgYnBmX2NyeXB0b19kZWNyeXB0YCwgYW5kIGBicGZfY3J5cHRvX2VuY3J5cHRgLgoKTm93LCBpcyB0aGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmc/IExldCYjMzk7cyBzZWUuIFRoZSBlbnRyeSBwb2ludHMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGVzZSBuZXcga2Z1bmNzLCBhbG9uZyB3aXRoIG90aGVycyBzdWNoIGFzIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3JgIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gQlBGIHByb2dyYW1zLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGEgbG90LiBUaGV5JiMzOTtyZSByZXBsYWNpbmcgdGhlIGdlbmVyaWMgY3J5cHRvIGRyaXZlciBiYWNrZW5kIHdpdGggZGlyZWN0IGNhbGxzIHRvIGBhZXNfY2JjX2VuY3J5cHRgLCBgYWVzX2NiY19kZWNyeXB0YCwgYGFlc19lY2JfZW5jcnlwdGAsIGFuZCBgYWVzX2VjYl9kZWNyeXB0YC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBwYXJhbWV0ZXIgY2hlY2tpbmcsIGJ1ZmZlciB2YWxpZGF0aW9uLCBjb250ZXh0IGxpZmVjeWNsZSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBBbnkgZXJyb3IgaGVyZSBoYXMgbGFyZ2UgcG90ZW50aWFsIGltcGFjdC4KCkkgbmVlZCB0byBpbnNwZWN0IGBrZXJuZWwvYnBmL2NyeXB0by5jYCBhbmQgYEtjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmdW5jdGlvbnMgaW52b2x2ZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIHN5bWJvbHMgYW5kIHJlYWQgdGhlIGNvZGUgdG8gaGF2ZSBhIGdvb2QgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY3J5cHRvXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY3J5cHRvLmMtMTMtLyoqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE0OiAqIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAtIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3R1cmVcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTUtICogQHR5cGU6XHRUaGUgc3RyaW5nIG9mIGNyeXB0byBvcGVyYXRpb24gdHlwZS5cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIzLSAqL1xua2VybmVsL2JwZi9jcnlwdG8uYzoyNDpzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xua2VybmVsL2JwZi9jcnlwdG8uYy0yNS1cdGNoYXIgdHlwZVsxNF07XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zMi1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MzM6ZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xua2VybmVsL2JwZi9jcnlwdG8uYy0zNC1cdEJQRl9BTEdPX0FFU19DQkMsXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYz0zOD1zdGF0aWMgY29uc3Qgc3RydWN0IHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTQwLVx0Y29uc3QgY2hhciAqYWxnb19uYW1lO1xua2VybmVsL2JwZi9jcnlwdG8uYzo0MTpcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG5rZXJuZWwvYnBmL2NyeXB0by5jOjQyOn0gYnBmX2NyeXB0b19hbGdvc1tdID0ge1xua2VybmVsL2JwZi9jcnlwdG8uYy00My1cdHsgXCYjMzQ7c2tjaXBoZXJcJiMzNDssIFwmIzM0O2NiYyhhZXMpXCYjMzQ7LCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy00Ni1cbmtlcm5lbC9icGYvY3J5cHRvLmM6NDc6c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsXG5rZXJuZWwvYnBmL2NyeXB0by5jOjQ4Olx0XHRcdFx0IGVudW0gYnBmX2NyeXB0b19hbGdvX2lkICppZF9yZXQpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTQ5LXtcbmtlcm5lbC9icGYvY3J5cHRvLmM6NTA6XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvY3J5cHRvLmM6NTE6XHRcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXHUwMDNldHlwZSxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNTItXHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNldHlwZSkpID09IDAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2NyeXB0by5jOjUzOlx0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG5rZXJuZWwvYnBmL2NyeXB0by5jLTU0LVx0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZWFsZ28pKSA9PSAwKSB7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjU1Olx0XHRcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XG5rZXJuZWwvYnBmL2NyeXB0by5jLTU2LVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtNjItLyoqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjYzOiAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxua2VybmVsL2JwZi9jcnlwdG8uYy02NC0gKiBAYWxnbzpcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy03MC0gKi9cbmtlcm5lbC9icGYvY3J5cHRvLmM6NzE6c3RydWN0IGJwZl9jcnlwdG9fY3R4IHtcbmtlcm5lbC9icGYvY3J5cHRvLmM6NzI6XHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvO1xua2VybmVsL2JwZi9jcnlwdG8uYy03My1cdHVuaW9uIHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTgwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTgyLS8qKlxua2VybmVsL2JwZi9jcnlwdG8uYzo4MzogKiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoKSAtIENyZWF0ZSBhIG11dGFibGUgQlBGIGNyeXB0byBjb250ZXh0Llxua2VybmVsL2JwZi9jcnlwdG8uYy04NC0gKlxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtODYtICogYSBCUEYgcHJvZ3JhbS4gVGhlIGNyeXB0byBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXJcbmtlcm5lbC9icGYvY3J5cHRvLmM6ODc6ICogYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKS5cbmtlcm5lbC9icGYvY3J5cHRvLmMtODgtICogQXMgY3J5cHRvIEFQSSBmdW5jdGlvbnMgdXNlIEdGUF9LRVJORUwgYWxsb2NhdGlvbnMsIHRoaXMgZnVuY3Rpb24gY2FuXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy05MC0gKlxua2VybmVsL2JwZi9jcnlwdG8uYzo5MTogKiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoKSBhbGxvY2F0ZXMgbWVtb3J5IGZvciBjcnlwdG8gY29udGV4dC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtOTItICogSXQgbWF5IHJldHVybiBOVUxMIGlmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUuXG5rZXJuZWwvYnBmL2NyeXB0by5jOjkzOiAqIEBwYXJhbXM6XHRwb2ludGVyIHRvIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB3aGljaCBjb250YWlucyBhbGwgdGhlXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk0LSAqXHRcdGRldGFpbHMgbmVlZGVkIHRvIGluaXRpYWxpc2UgY3J5cHRvIGNvbnRleHQuXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk1OiAqIEBwYXJhbXNfX3N6Olx0c2l6ZSBvZiBzdGV1Y3QgYnBmX2NyeXB0b19wYXJhbXMgdXNlZiBieSBicGYgcHJvZ3JhbVxua2VybmVsL2JwZi9jcnlwdG8uYy05Ni0gKiBAZXJyOlx0aW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtOTctICovXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk4Ol9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk5OmJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEwMC1cdFx0ICAgICAgaW50ICplcnIpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEwMS17XG5rZXJuZWwvYnBmL2NyeXB0by5jOjEwMjpcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xua2VybmVsL2JwZi9jcnlwdG8uYy0xMDMtXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEwNC1cdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cdTAwM2VyZXNlcnZlZFswXSB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTA1Olx0ICAgIHBhcmFtc19fc3ogIT0gc2l6ZW9mKHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcykpIHtcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTA2LVx0XHQqZXJyID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTExNS1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTE2Olx0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xua2VybmVsL2JwZi9jcnlwdG8uYy0xMTctXHRcdCplcnIgPSAtRU5PRU5UO1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MTQ2PXN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTQ3LXtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTQ4Olx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG5rZXJuZWwvYnBmL2NyeXB0by5jLTE0OS1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTUwOlx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTUxLVx0a2ZyZWVfc2Vuc2l0aXZlKGN0eCk7XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0xNTQtLyoqXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE1NTogKiBicGZfY3J5cHRvX2N0eF9hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGNyeXB0byBjb250ZXh0Llxua2VybmVsL2JwZi9jcnlwdG8uYy0xNTYtICogQGN0eDogVGhlIEJQRiBjcnlwdG8gY29udGV4dCBiZWluZyBhY3F1aXJlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtMTYwLSAqIG11c3QgZWl0aGVyIGJlIGVtYmVkZGVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IgZnJlZWQgd2l0aFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjE6ICogYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpLlxua2VybmVsL2JwZi9jcnlwdG8uYy0xNjItICovXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE2MzpfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjQ6YnBmX2NyeXB0b19jdHhfYWNxdWlyZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTY1LXtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE3MS0vKipcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTcyOiAqIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBwcmV2aW91c2x5IGFjcXVpcmVkIEJQRiBjcnlwdG8gY29udGV4dC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtMTczLSAqIEBjdHg6IFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyByZWxlYXNlZC5cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE3OC0gKi9cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTc5Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTgwLXtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE4NC1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MTg1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTg2LXtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTg3Olx0YnBmX2NyeXB0b19jdHhfcmVsZWFzZShjdHgpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0xODgtfVxua2VybmVsL2JwZi9jcnlwdG8uYzoxODk6Q0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0xOTAtXG5rZXJuZWwvYnBmL2NyeXB0by5jPTE5MT1zdGF0aWMgaW50IGJwZl9hZXNfY2JjX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTkyLVx0XHRcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxua2VybmVsL2JwZi9jcnlwdG8uYzoxOTM6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxua2VybmVsL2JwZi9jcnlwdG8uYy0xOTQte1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MjA2PXN0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxua2VybmVsL2JwZi9jcnlwdG8uYy0yMDctXHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG5rZXJuZWwvYnBmL2NyeXB0by5jOjIwODpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIwOS17XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0yMjAtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjIyMTpzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIyMi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtMjYzLS8qKlxua2VybmVsL2JwZi9jcnlwdG8uYzoyNjQ6ICogYnBmX2NyeXB0b19kZWNyeXB0KCkgLSBEZWNyeXB0IGJ1ZmZlciB1c2luZyBjb25maWd1cmVkIGNvbnRleHQgYW5kIElWIHByb3ZpZGVkLlxua2VybmVsL2JwZi9jcnlwdG8uYy0yNjUtICogQGN0eDpcdFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI3MS0gKi9cbmtlcm5lbC9icGYvY3J5cHRvLmM6MjcyOl9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI3My1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0yODAtXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI4MTpcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjgyLX1cbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI4NC0vKipcbmtlcm5lbC9icGYvY3J5cHRvLmM6Mjg1OiAqIGJwZl9jcnlwdG9fZW5jcnlwdCgpIC0gRW5jcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cbmtlcm5lbC9icGYvY3J5cHRvLmMtMjg2LSAqIEBjdHg6XHRcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0yOTItICovXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI5MzpfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19lbmNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxua2VybmVsL2JwZi9jcnlwdG8uYy0yOTQtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtMzAxLVxua2VybmVsL2JwZi9jcnlwdG8uYzozMDI6XHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpO1xua2VybmVsL2JwZi9jcnlwdG8uYy0zMDMtfVxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MzA3PUJURl9LRlVOQ1NfU1RBUlQoY3J5cHRfaW5pdF9rZnVuY19idGZfaWRzKVxua2VybmVsL2JwZi9jcnlwdG8uYzozMDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxua2VybmVsL2JwZi9jcnlwdG8uYzozMDk6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMxMDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19jdHhfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxua2VybmVsL2JwZi9jcnlwdG8uYy0zMTEtQlRGX0tGVU5DU19FTkQoY3J5cHRfaW5pdF9rZnVuY19idGZfaWRzKVxuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MzE4PUJURl9LRlVOQ1NfU1RBUlQoY3J5cHRfa2Z1bmNfYnRmX2lkcylcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzE5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2RlY3J5cHQsIEtGX1JDVSlcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzIwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2VuY3J5cHQsIEtGX1JDVSlcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzIxLUJURl9LRlVOQ1NfRU5EKGNyeXB0X2tmdW5jX2J0Zl9pZHMpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYz0zMjM9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGNyeXB0X2tmdW5jX3NldCA9IHtcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMyNy1cbmtlcm5lbC9icGYvY3J5cHRvLmM6MzI4OkJURl9JRF9MSVNUKGJwZl9jcnlwdG9fZHRvcl9pZHMpXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMyOTpCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzMwOkJURl9JRChmdW5jLCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMzMS1cbmtlcm5lbC9icGYvY3J5cHRvLmM9MzMyPXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19rZnVuY19pbml0KHZvaWQpXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0zMzQtXHRpbnQgcmV0O1xua2VybmVsL2JwZi9jcnlwdG8uYzozMzU6XHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2NyeXB0b19kdG9yc1tdID0ge1xua2VybmVsL2JwZi9jcnlwdG8uYy0zMzYtXHRcdHtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzM3Olx0XHRcdC5idGZfaWRcdCAgICAgID0gYnBmX2NyeXB0b19kdG9yX2lkc1swXSxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzM4Olx0XHRcdC5rZnVuY19idGZfaWQgPSBicGZfY3J5cHRvX2R0b3JfaWRzWzFdXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMzOS1cdFx0fSxcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM0Ni1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNyeXB0X2luaXRfa2Z1bmNfc2V0KTtcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzQ3Olx0cmV0dXJuICByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9jcnlwdG9fZHRvcnMsXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM0ODpcdFx0XHRcdFx0XHQgICBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fZHRvcnMpLFxua2VybmVsL2JwZi9jcnlwdG8uYy0zNDktXHRcdFx0XHRcdFx0ICAgVEhJU19NT0RVTEUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NTcxPUJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ1NzItI2lmZGVmIENPTkZJR19DUllQVE9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0NTczOkJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ1NzQtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIENyeXB0byBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgQlBGX0NSWVBUT2AuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyB3aGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3Igc2V0IGluIG9yZGVyIGZvciBgQlBGX0NSWVBUT2AgdG8gd29yayBjb3JyZWN0bHkuCgpTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgYWNjb21wYW55aW5nIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9DUllQVE9gLiBSZWFkaW5nIHRoYXQgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHQgIHN0aWxsIHJlZW5hYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMCBsYXRlciBvbiwgb3IgcGVybWFuZW50bHlcbiAgODE6XHRcdCAgZGlzYWJsZSBpdCBieSBzZXR0aW5nIGl0IHRvIDEgKGZyb20gd2hpY2ggbm8gb3RoZXIgdHJhbnNpdGlvbiB0b1xuICA4MjpcdFx0ICAwIGlzIHBvc3NpYmxlIGFueW1vcmUpLlxuICA4MzpcdFxuICA4NDpcdFx0ICBVbnByaXZpbGVnZWQgQlBGIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBjZXJ0YWluIHBvdGVudGlhbFxuICA4NTpcdFx0ICBzcGVjdWxhdGl2ZSBleGVjdXRpb24gc2lkZS1jaGFubmVsIHZ1bG5lcmFiaWxpdGllcyBvbiB1bm1pdGlnYXRlZFxuICA4NjpcdFx0ICBhZmZlY3RlZCBoYXJkd2FyZS5cbiAgODc6XHRcbiAgODg6XHRcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiAgODk6XHRcbiAgOTA6XHRjb25maWcgQlBGX0NSWVBUT1xuICA5MTpcdFx0ZGVmX2Jvb2wgeVxuICA5MjpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICA5MzpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ1xuICA5NDpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQlxuICA5NTpcdFx0aGVscFxuICA5NjpcdFx0ICBQcm92aWRlIHRoZSBrZnVuY3MgbmVlZGVkIGZvciBCUEYgcHJvZ3JhbXMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdFxuICA5NzpcdFx0ICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuXG4gIDk4Olx0XG4gIDk5Olx0c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG4gMTAwOlx0XG4gMTAxOlx0Y29uZmlnIEJQRl9MU01cbiAxMDI6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4gMTAzOlx0XHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcbiAxMDQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAxMDU6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlcbiAxMDY6XHRcdGRlcGVuZHMgb24gQlBGX0pJVFxuIDEwNzpcdFx0aGVscFxuIDEwODpcdFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXG4gMTA5Olx0XHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgQlBGIHN0dWZmLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgY29yZS4gVG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBmaXJzdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoZSBCUEYgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZGVwZW5kZW5jaWVzIGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KClRoZW4sIHRvIHJlYWxseSBncmFzcCB0aGUgcnVudGltZSBiZWhhdmlvciBhbmQsIGNydWNpYWxseSwgdGhlIHNlY3VyaXR5IGFzcGVjdHMsIEkgKmhhdmUqIHRvIGRlbHZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSB2ZXJpZmllciBpcyB0aGUgaGVhcnQgb2YgdGhlIEJQRiBzZWN1cml0eSBtb2RlbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCB0aGUgY2hlY2tzIGl0IHBlcmZvcm1zLCBhbmQgaG93IGl0IGVuc3VyZXMgdGhhdCB0aGUgQlBGIHByb2dyYW1zIGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgYXJlIHNhZmUgYW5kIHdvbiYjMzk7dCBjcmFzaCB0aGUgc3lzdGVtIG9yIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgY29udHJvbCBmbG93IGFuYWx5c2lzLCByZWdpc3RlciB2YWxpZGF0aW9uLCBhbmQgdGhlIGhhbmRsaW5nIG9mIHBvdGVudGlhbCBleHBsb2l0cywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKGFuZCBwb3RlbnRpYWwgaGVhZGFjaGVzKSBoYXBwZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0NSWVBUTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy04OS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5MDpjb25maWcgQlBGX0NSWVBUT1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVx0ZGVmX2Jvb2wgeVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NTc9ZW5kaWZcbmtlcm5lbC9icGYvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX0JQRl9DUllQVE8pICYjNDM7PSBjcnlwdG8ub1xua2VybmVsL2JwZi9NYWtlZmlsZS01OS1vYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICYjNDM7PSBwcmVsb2FkL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDU1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEJQRiB2ZXJpZmllciBjb2RlLiBHaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgaXRzZWxmLiBNeSBiZXN0IGd1ZXNzIGlzIHRoYXQgdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUgaXMgcmVsYXRlZCB0byBzb21lIGVkZ2UgY2FzZSB0aGUgdmVyaWZpZXIgaXNuJiMzOTt0IGhhbmRsaW5nIHByb3Blcmx5LCBvciBwZXJoYXBzIGFuIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgdmVyaWZpY2F0aW9uIHJ1bGVzLiBUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDQ1NzIuIFRoYXQgbG9jYXRpb24gZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgYmFzZWQgb24gbXkgcHJpb3IgYW5hbHlzaXMgb2Ygc2ltaWxhciBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTY1Olx0I2lmZGVmIENPTkZJR19DR1JPVVBTXG40NTY2Olx0QlRGX0lEKHN0cnVjdCwgY2dyb3VwKVxuNDU2NzpcdCNlbmRpZlxuNDU2ODpcdCNpZmRlZiBDT05GSUdfQlBGX0pJVFxuNDU2OTpcdEJURl9JRChzdHJ1Y3QsIGJwZl9jcHVtYXNrKVxuNDU3MDpcdCNlbmRpZlxuNDU3MTpcdEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxuNDU3MjpcdCNpZmRlZiBDT05GSUdfQ1JZUFRPXG40NTczOlx0QlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG40NTc0Olx0I2VuZGlmXG40NTc1Olx0I2lmZGVmIENPTkZJR19JTkVUXG40NTc2Olx0QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuNDU3NzpcdCNlbmRpZlxuNDU3ODpcdEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG40NTc5Olx0XG40NTgwOlx0c3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxuNDU4MTpcdHtcbjQ1ODI6XHRcdGlmICghYnRmX2lzX2tlcm5lbChidGYpKVxuNDU4MzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQ1ODQ6XHRcdHJldHVybiBidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNnJjdV9wcm90ZWN0ZWRfdHlwZXMsIGJ0Zl9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjAzCgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDY1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUsIGFuZCBlbmFibGluZyBgQlBGX1NZU0NBTExgIGF1dG9tYXRpY2FsbHkgYnJpbmdzIGluIGBCUEZfQ1JZUFRPYCAod2hpY2ggZGVwZW5kcyBvbiBpdCkuIGBCUEZfQ1JZUFRPYCB0aGVuIHNlbGVjdHMgYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgLCB3aGljaCBtYWtlcyBzZW5zZS4gYEJQRl9TWVNDQUxMYCBpcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBgQlBGX0NSWVBUT2AgaXMgdGhlIG5ldyBhZGRpdGlvbiBoZXJlLgoKTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcz8gV2VsbCwgYEJQRl9TWVNDQUxMYCBkZXBlbmRzIG9uIGBCUEZgLCB3aGljaCBpcyBhIGdpdmVuLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEJQRl9DUllQVE9gLCBgQlBGX1NZU0NBTExgLCBvciBgREVCVUdfSU5GT19CVEZgIGFyZSBuZWVkZWQgZm9yIGtmdW5jcy4gQWgsIHllcywgZm9yIHRob3NlIGtmdW5jcyAoYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgKSwgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgdHlwaWNhbGx5IHJlcXVpcmVkLiBHb29kIHRvIGtub3cuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBzeW1ib2xzLCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBvbmVzIHdlJiMzOTtsbCByZWFsbHkgYmUgZm9jdXNpbmcgb24uIEluIGBrZXJuZWwvYnBmL2NyeXB0by5jYCwgdGhlIGtmdW5jcyBhcmU6IGBicGZfY3J5cHRvX2N0eF9jcmVhdGVgLCBgYnBmX2NyeXB0b19jdHhfcmVsZWFzZWAsIGBicGZfY3J5cHRvX2N0eF9hY3F1aXJlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcmAsIGBicGZfY3J5cHRvX2RlY3J5cHRgLCBhbmQgYGJwZl9jcnlwdG9fZW5jcnlwdGAuIFRoZXNlIGFyZSB0aGUgbm9uLXN0YXRpYyBrZnVuY3MgZXhwb3NlZCB0byBCVEYgLyBCUEYgdmVyaWZpZXIuCgpBbHJpZ2h0LCBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBUaGlzIHBhdGNoIGlzIGEgYmlnIGRlYWwuIEl0JiMzOTtzIGNvbXBsZXRlbHkgcmV3b3JraW5nIHRoZSBCUEYgY3J5cHRvIGJhY2tlbmQuIFdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBza2NpcGhlciB0Zm1zIHRvIGRpcmVjdCBgYWVzX2NiY2AgLyBgYWVzX2VjYmAgbGlicmFyeSBmdW5jdGlvbnMuIFRoaXMgaW1wYWN0cyB2YWxpZGF0aW9uLCBtZW1vcnkgbWFuYWdlbWVudCAoc3BlY2lmaWNhbGx5IGBrZnJlZV9zZW5zaXRpdmVgKSwgdGhlIGNvcmUgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGV4ZWN1dGlvbiBwYXRoLCBhbGdvcml0aG0gbG9va3VwLCBhbmQgdGhlIGtmdW5jIGludGVyZmFjZXMgdGhlbXNlbHZlcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LCByZWFjaGFibGUgdmlhIHRoZSBgc3lzX2JwZmAgc3lzY2FsbCDigJMgZGVmaW5pdGVseSB3b3J0aCBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uCgpUaGVyZWZvcmUsIHRoZSBjb25maWdzIHRvIGVuYWJsZSBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfQ1JZUFRPYCwgYW5kIGBERUJVR19JTkZPX0JURmAuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBicGZfY3J5cHRvX2N0eF9jcmVhdGVgLCBgYnBmX2NyeXB0b19jdHhfcmVsZWFzZWAsIGBicGZfY3J5cHRvX2N0eF9hY3F1aXJlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcmAsIGBicGZfY3J5cHRvX2RlY3J5cHRgLCBhbmQgYGJwZl9jcnlwdG9fZW5jcnlwdGAuCgpGaW5hbGx5LCBhIHF1aWNrIGZpbmFsIGNoZWNrIG9mIGFsbCByZXF1aXJlbWVudHMgYW5kIGZvcm1hdCBvZiBgc2V0LXJlc3VsdHNgLgoKYFdvcnRoRnV6emluZ2A6IHRydWUKYEVuYWJsZUNvbmZpZ3NgOiBbJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LCAmIzM0O0JQRl9DUllQVE8mIzM0OywgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7XQpgRm9jdXNTeW1ib2xzYDogWyYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssICYjMzQ7YnBmX2NyeXB0b19jdHhfcmVsZWFzZSYjMzQ7LCAmIzM0O2JwZl9jcnlwdG9fY3R4X2FjcXVpcmUmIzM0OywgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywgJiMzNDticGZfY3J5cHRvX2RlY3J5cHQmIzM0OywgJiMzNDticGZfY3J5cHRvX2VuY3J5cHQmIzM0O10KYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24uCgpPa2F5LCByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfQ1JZUFRPJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19kZWNyeXB0JiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fZW5jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfQ1JZUFRPJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fY3R4X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19jdHhfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3ImIzM0OywKICAgICYjMzQ7YnBmX2NyeXB0b19kZWNyeXB0JiMzNDssCiAgICAmIzM0O2JwZl9jcnlwdG9fZW5jcnlwdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXG5cbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSBjb250ZXh0IGBzdHJ1Y3QgYnBmX2NyeXB0b19jdHhgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgZW51bSBicGZfY3J5cHRvX2FsZ29faWRgIGFuZCB0aGUgYGFlc19rZXlgIHVuaW9uKSBhcmUgemVyby1pbml0aWFsaXplZC4gS2V5IHNldHVwIGlzIGhhbmRsZWQgYnkgYGFlc19wcmVwYXJla2V5KClgLiBDbGVhbnVwIGlzIGhhbmRsZWQgdmlhIGBrZnJlZV9zZW5zaXRpdmUoKWAuXG4yLiBCdWZmZXJzIFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXHUwMDNlPSBzcmNfbGVuYCkuIE5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBzdHJ1Y3QgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZy9jb250cm9sIGZsb3cuXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3YjQwOTIyM2UyNTFlMGEyMGI4ODlhYjdhNzZiNTk3ODMyOGZjZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDAyOjI5OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAzYTE5ZGE3NGQwMGM5Li4xNmYxMzI3MGNlMWY5IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtNDkzNiw4ICYjNDM7NDkzNiw2IEBAIEJQRiBbQ1JZUFRPXQogTToJVmFkaW0gRmVkb3JlbmtvICZsdDt2YWRpbS5mZWRvcmVua29AbGludXguZGV2Jmd0OwogTDoJYnBmQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAotRjoJY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYwotRjoJaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmgKIEY6CWtlcm5lbC9icGYvY3J5cHRvLmMKIAogQlBGIFtET0NVTUVOVEFUSU9OXSAoUmVsYXRlZCB0byBTdGFuZGFyZGl6YXRpb24pCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggODM4NmQ1NWE5NzU1ZS4uMzNiYjVhZDU5NWU4ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2NyeXB0by9NYWtlZmlsZQpAQCAtMjIsOSAmIzQzOzIyLDYgQEAgY3J5cHRvX3NrY2lwaGVyLXkgJiM0Mzs9IGxza2NpcGhlci5vCiBjcnlwdG9fc2tjaXBoZXIteSAmIzQzOz0gc2tjaXBoZXIubwogCiBvYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgJiM0Mzs9IGNyeXB0b19za2NpcGhlci5vCi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSkKLW9iai0kKENPTkZJR19DUllQVE9fU0tDSVBIRVIyKSAmIzQzOz0gYnBmX2NyeXB0b19za2NpcGhlci5vCi1lbmRpZgogCiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSAmIzQzOz0gc2VxaXYubwogb2JqLSQoQ09ORklHX0NSWVBUT19FQ0hBSU5JVikgJiM0Mzs9IGVjaGFpbml2Lm8KZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg3OThkM2U4Yzg3Li4wMDAwMDAwMDAwMDAwCi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSw4MyAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqLwotI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvYnBmX2NyeXB0by5oJmd0OwotI2luY2x1ZGUgJmx0O2NyeXB0by9za2NpcGhlci5oJmd0OwotCi1zdGF0aWMgdm9pZCAqYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ28pCi17Ci0JcmV0dXJuIGNyeXB0b19hbGxvY19sc2tjaXBoZXIoYWxnbywgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtKHZvaWQgKnRmbSkKLXsKLQljcnlwdG9fZnJlZV9sc2tjaXBoZXIodGZtKTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyhjb25zdCBjaGFyICphbGdvKQotewotCXJldHVybiBjcnlwdG9faGFzX3NrY2lwaGVyKGFsZ28sIENSWVBUT19BTEdfVFlQRV9MU0tDSVBIRVIsIENSWVBUT19BTEdfVFlQRV9NQVNLKTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3NldGtleSh0Zm0sIGtleSwga2V5bGVuKTsKLX0KLQotc3RhdGljIHUzMiBicGZfY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3Modm9pZCAqdGZtKQotewotCXJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh0Zm0pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh2b2lkICp0Zm0pCi17Ci0JcmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfaXZzaXplKHRmbSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHZvaWQgKnRmbSkKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodGZtKTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwKLQkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTggKnNpdikKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTsKLX0KLQotc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwKLQkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTggKnNpdikKLXsKLQlyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgYnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSA9IHsKLQkuYWxsb2NfdGZtCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtLAotCS5mcmVlX3RmbQk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtLAotCS5oYXNfYWxnbwk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvLAotCS5zZXRrZXkJCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5LAotCS5lbmNyeXB0CT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCwKLQkuZGVjcnlwdAk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2RlY3J5cHQsCi0JLml2c2l6ZQkJPSBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUsCi0JLnN0YXRlc2l6ZQk9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSwKLQkuZ2V0X2ZsYWdzCT0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAmIzM0O3NrY2lwaGVyJiMzNDssCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKCZhbXA7YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZCkKLXsKLQlpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoJmFtcDticGZfY3J5cHRvX2xza2NpcGhlcl90eXBlKTsKLQlXQVJOX09OX09OQ0UoZXJyKTsKLX0KLQotbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTsKLW1vZHVsZV9leGl0KGJwZl9jcnlwdG9fc2tjaXBoZXJfZXhpdCk7Ci1NT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O1N5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MWU3MWQ0ZTJkOWYuLjAwMDAwMDAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmgKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwyNCAmIzQzOzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwotI2lmbmRlZiBfQlBGX0NSWVBUT19ICi0jZGVmaW5lIF9CUEZfQ1JZUFRPX0gKLQotc3RydWN0IGJwZl9jcnlwdG9fdHlwZSB7Ci0Jdm9pZCAqKCphbGxvY190Zm0pKGNvbnN0IGNoYXIgKmFsZ28pOwotCXZvaWQgKCpmcmVlX3RmbSkodm9pZCAqdGZtKTsKLQlpbnQgKCpoYXNfYWxnbykoY29uc3QgY2hhciAqYWxnbyk7Ci0JaW50ICgqc2V0a2V5KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pOwotCWludCAoKnNldGF1dGhzaXplKSh2b2lkICp0Zm0sIHVuc2lnbmVkIGludCBhdXRoc2l6ZSk7Ci0JaW50ICgqZW5jcnlwdCkodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOwotCWludCAoKmRlY3J5cHQpKHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKLQl1bnNpZ25lZCBpbnQgKCppdnNpemUpKHZvaWQgKnRmbSk7Ci0JdW5zaWduZWQgaW50ICgqc3RhdGVzaXplKSh2b2lkICp0Zm0pOwotCXUzMiAoKmdldF9mbGFncykodm9pZCAqdGZtKTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQljaGFyIG5hbWVbMTRdOwotfTsKLQotaW50IGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTsKLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTsKLQotI2VuZGlmIC8qIF9CUEZfQ1JZUFRPX0ggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvS2NvbmZpZyBiL2tlcm5lbC9icGYvS2NvbmZpZwppbmRleCBlYjNkZTM1NzM0ZjA5Li44MjI1OTliNDJiZTJlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9LY29uZmlnCkBAIC04Nyw2ICYjNDM7ODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkYKIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS4KIAomIzQzO2NvbmZpZyBCUEZfQ1JZUFRPCiYjNDM7CWRlZl9ib29sIHkKJiM0MzsJZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTAomIzQzOwlzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDCiYjNDM7CXNlbGVjdCBDUllQVE9fTElCX0FFU19FQ0IKJiM0MzsJaGVscAomIzQzOwkgIFByb3ZpZGUgdGhlIGtmdW5jcyBuZWVkZWQgZm9yIEJQRiBwcm9ncmFtcyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0CiYjNDM7CSAgZGF0YS4gVGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSBBRVMtQ0JDIGFuZCBBRVMtRUNCLgomIzQzOwogc291cmNlICYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWcmIzM0OwogCiBjb25maWcgQlBGX0xTTQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9NYWtlZmlsZSBiL2tlcm5lbC9icGYvTWFrZWZpbGUKaW5kZXggOTAyNTVkODBlNWJlNi4uYWIyZTVkMjc4MmU2ZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL01ha2VmaWxlCkBAIC01NSw5ICYjNDM7NTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm8KICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS4KIG9iai0ke0NPTkZJR19CUEZfTFNNfSAmIzQzOz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ubwogZW5kaWYKLWlmbmVxICgkKENPTkZJR19DUllQVE8pLCkKLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGNyeXB0by5vCi1lbmRpZgomIzQzO29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSAmIzQzOz0gY3J5cHRvLm8KIG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgJiM0Mzs9IHByZWxvYWQvCiAKIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHJlbG9fY29yZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NyeXB0by5jIGIva2VybmVsL2JwZi9jcnlwdG8uYwppbmRleCA1MWY4OWNlY2VmYjRkLi44Y2RjMTZmOWIzNzRhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY3J5cHRvLmMKQEAgLTEsMTkgJiM0MzsxLDEzIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvYnBmX2NyeXB0by5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl9tZW1fYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZmlsdGVyLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc2NhdHRlcmxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKLSNpbmNsdWRlICZsdDtjcnlwdG8vc2tjaXBoZXIuaCZndDsKLQotc3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0IHsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07CiYjNDM7I2luY2x1ZGUgJmx0O2NyeXB0by9hZXMtY2JjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2NyeXB0by9hZXMtZWNiLmgmZ3Q7CiAKIC8qIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3QgKi8KIC8qKgpAQCAtMzYsOTQgJiM0MzszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgewogCXUzMiBhdXRoc2l6ZTsKIH07CiAKLXN0YXRpYyBMSVNUX0hFQUQoYnBmX2NyeXB0b190eXBlcyk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7CiYjNDM7ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgewomIzQzOwlCUEZfQUxHT19BRVNfQ0JDLAomIzQzOwlCUEZfQUxHT19BRVNfRUNCLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB7CiYjNDM7CWNvbnN0IGNoYXIgKnR5cGVfbmFtZTsKJiM0MzsJY29uc3QgY2hhciAqYWxnb19uYW1lOwomIzQzOwllbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvOwomIzQzO30gYnBmX2NyeXB0b19hbGdvc1tdID0gewomIzQzOwl7ICYjMzQ7c2tjaXBoZXImIzM0OywgJiMzNDtjYmMoYWVzKSYjMzQ7LCBCUEZfQUxHT19BRVNfQ0JDIH0sCiYjNDM7CXsgJiMzNDtza2NpcGhlciYjMzQ7LCAmIzM0O2VjYihhZXMpJiMzNDssIEJQRl9BTEdPX0FFU19FQ0IgfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGJwZl9jcnlwdG9fZmluZF9hbGdvKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkgZW51bSBicGZfY3J5cHRvX2FsZ29faWQgKmlkX3JldCkKJiM0Mzt7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtJmd0O3R5cGUsCiYjNDM7CQkJICAgIHNpemVvZihwYXJhbXMtJmd0O3R5cGUpKSA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCSAgICBzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnb19uYW1lLCBwYXJhbXMtJmd0O2FsZ28sCiYjNDM7CQkJICAgIHNpemVvZihwYXJhbXMtJmd0O2FsZ28pKSA9PSAwKSB7CiYjNDM7CQkJKmlkX3JldCA9IGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnbzsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogCiAvKioKICAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZQotICogQHR5cGU6CVRoZSBwb2ludGVyIHRvIGJwZiBjcnlwdG8gdHlwZQotICogQHRmbToJVGhlIHBvaW50ZXIgdG8gaW5zdGFuY2Ugb2YgY3J5cHRvIEFQSSBzdHJ1Y3QuCi0gKiBAc2l2X2xlbjogICAgU2l6ZSBvZiBJViBhbmQgc3RhdGUgc3RvcmFnZSBmb3IgY2lwaGVyCiYjNDM7ICogQGFsZ286CVRoZSBjcnlwdG8gYWxnb3JpdGhtIElECiYjNDM7ICogQGtleToJVGhlIGNyeXB0byBrZXkKICAqIEByY3U6CVRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS4KICAqIEB1c2FnZToJT2JqZWN0IHJlZmVyZW5jZSBjb3VudGVyLiBXaGVuIHRoZSByZWZjb3VudCBnb2VzIHRvIDAsIHRoZQogICoJCW1lbW9yeSBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZSBCUEYgYWxsb2NhdG9yLCB3aGljaCBwcm92aWRlcwogICoJCVJDVSBzYWZldHkuCiAgKi8KIHN0cnVjdCBicGZfY3J5cHRvX2N0eCB7Ci0JY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTsKLQl2b2lkICp0Zm07Ci0JdTMyIHNpdl9sZW47CiYjNDM7CWVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287CiYjNDM7CXVuaW9uIHsKJiM0MzsJCXN0cnVjdCBhZXNfa2V5IGFlczsKJiM0MzsJfSBrZXk7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAlyZWZjb3VudF90IHVzYWdlOwogfTsKIAotaW50IGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKQotewotCXN0cnVjdCBicGZfY3J5cHRvX3R5cGVfbGlzdCAqbm9kZTsKLQlpbnQgZXJyID0gLUVCVVNZOwotCi0JZG93bl93cml0ZSgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZhbXA7YnBmX2NyeXB0b190eXBlcywgbGlzdCkgewotCQlpZiAoIXN0cmNtcChub2RlLSZndDt0eXBlLSZndDtuYW1lLCB0eXBlLSZndDtuYW1lKSkKLQkJCWdvdG8gdW5sb2NrOwotCX0KLQotCW5vZGUgPSBrbWFsbG9jX29iaigqbm9kZSk7Ci0JZXJyID0gLUVOT01FTTsKLQlpZiAoIW5vZGUpCi0JCWdvdG8gdW5sb2NrOwotCi0Jbm9kZS0mZ3Q7dHlwZSA9IHR5cGU7Ci0JbGlzdF9hZGQoJmFtcDtub2RlLSZndDtsaXN0LCAmYW1wO2JwZl9jcnlwdG9fdHlwZXMpOwotCWVyciA9IDA7Ci0KLXVubG9jazoKLQl1cF93cml0ZSgmYW1wO2JwZl9jcnlwdG9fdHlwZXNfc2VtKTsKLQotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUpOwotCi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSkKLXsKLQlzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7Ci0JaW50IGVyciA9IC1FTk9FTlQ7Ci0KLQlkb3duX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJmFtcDticGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7Ci0JCWlmIChzdHJjbXAobm9kZS0mZ3Q7dHlwZS0mZ3Q7bmFtZSwgdHlwZS0mZ3Q7bmFtZSkpCi0JCQljb250aW51ZTsKLQotCQlsaXN0X2RlbCgmYW1wO25vZGUtJmd0O2xpc3QpOwotCQlrZnJlZShub2RlKTsKLQkJZXJyID0gMDsKLQkJYnJlYWs7Ci0JfQotCXVwX3dyaXRlKCZhbXA7YnBmX2NyeXB0b190eXBlc19zZW0pOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKmJwZl9jcnlwdG9fZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKLXsKLQljb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlID0gRVJSX1BUUigtRU5PRU5UKTsKLQlzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7Ci0KLQlkb3duX3JlYWQoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmYW1wO2JwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHsKLQkJaWYgKHN0cmNtcChub2RlLSZndDt0eXBlLSZndDtuYW1lLCBuYW1lKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh0cnlfbW9kdWxlX2dldChub2RlLSZndDt0eXBlLSZndDtvd25lcikpCi0JCQl0eXBlID0gbm9kZS0mZ3Q7dHlwZTsKLQkJYnJlYWs7Ci0JfQotCXVwX3JlYWQoJmFtcDticGZfY3J5cHRvX3R5cGVzX3NlbSk7Ci0KLQlyZXR1cm4gdHlwZTsKLX0KLQogX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwogCiAvKioKQEAgLTE0Niw3ICYjNDM7OTksNiBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKgogYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeiwKIAkJICAgICAgaW50ICplcnIpCiB7Ci0JY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTsKIAlzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDsKIAogCWlmICghcGFyYW1zIHx8IHBhcmFtcy0mZ3Q7cmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLSZndDtyZXNlcnZlZFsxXSB8fApAQCAtMTU1LDY5ICYjNDM7MTA3LDQwIEBAIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osCiAJCXJldHVybiBOVUxMOwogCX0KIAotCXR5cGUgPSBicGZfY3J5cHRvX2dldF90eXBlKHBhcmFtcy0mZ3Q7dHlwZSk7Ci0JaWYgKElTX0VSUih0eXBlKSkgewotCQkqZXJyID0gUFRSX0VSUih0eXBlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKCF0eXBlLSZndDtoYXNfYWxnbyhwYXJhbXMtJmd0O2FsZ28pKSB7Ci0JCSplcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKLQl9Ci0KLQlpZiAoISFwYXJhbXMtJmd0O2F1dGhzaXplIF4gISF0eXBlLSZndDtzZXRhdXRoc2l6ZSkgewotCQkqZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gZXJyX21vZHVsZV9wdXQ7Ci0JfQotCi0JaWYgKCFwYXJhbXMtJmd0O2tleV9sZW4gfHwgcGFyYW1zLSZndDtrZXlfbGVuICZndDsgc2l6ZW9mKHBhcmFtcy0mZ3Q7a2V5KSkgewotCQkqZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKLQl9Ci0KIAljdHggPSBremFsbG9jX29iaigqY3R4KTsKIAlpZiAoIWN0eCkgewogCQkqZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfbW9kdWxlX3B1dDsKJiM0MzsJCXJldHVybiBOVUxMOwogCX0KIAotCWN0eC0mZ3Q7dHlwZSA9IHR5cGU7Ci0JY3R4LSZndDt0Zm0gPSB0eXBlLSZndDthbGxvY190Zm0ocGFyYW1zLSZndDthbGdvKTsKLQlpZiAoSVNfRVJSKGN0eC0mZ3Q7dGZtKSkgewotCQkqZXJyID0gUFRSX0VSUihjdHgtJmd0O3RmbSk7Ci0JCWdvdG8gZXJyX2ZyZWVfY3R4OwomIzQzOwlpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgJmFtcDtjdHgtJmd0O2FsZ28pKSB7CiYjNDM7CQkqZXJyID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0OwogCX0KIAotCWlmIChwYXJhbXMtJmd0O2F1dGhzaXplKSB7Ci0JCSplcnIgPSB0eXBlLSZndDtzZXRhdXRoc2l6ZShjdHgtJmd0O3RmbSwgcGFyYW1zLSZndDthdXRoc2l6ZSk7Ci0JCWlmICgqZXJyKQotCQkJZ290byBlcnJfZnJlZV90Zm07CiYjNDM7CXN3aXRjaCAoY3R4LSZndDthbGdvKSB7CiYjNDM7CWNhc2UgQlBGX0FMR09fQUVTX0NCQzoKJiM0MzsJY2FzZSBCUEZfQUxHT19BRVNfRUNCOgomIzQzOwkJaWYgKHBhcmFtcy0mZ3Q7YXV0aHNpemUpCiYjNDM7CQkJKmVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZWxzZQomIzQzOwkJCSplcnIgPSBhZXNfcHJlcGFyZWtleSgmYW1wO2N0eC0mZ3Q7a2V5LmFlcywgcGFyYW1zLSZndDtrZXksCiYjNDM7CQkJCQkgICAgICBwYXJhbXMtJmd0O2tleV9sZW4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlXQVJOX09OKDEpOwomIzQzOwkJKmVyciA9IC1FTk9FTlQ7CiYjNDM7CQlicmVhazsKIAl9CiAKLQkqZXJyID0gdHlwZS0mZ3Q7c2V0a2V5KGN0eC0mZ3Q7dGZtLCBwYXJhbXMtJmd0O2tleSwgcGFyYW1zLSZndDtrZXlfbGVuKTsKLQlpZiAoKmVycikKLQkJZ290byBlcnJfZnJlZV90Zm07Ci0KLQlpZiAodHlwZS0mZ3Q7Z2V0X2ZsYWdzKGN0eC0mZ3Q7dGZtKSAmYW1wOyBDUllQVE9fVEZNX05FRURfS0VZKSB7Ci0JCSplcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9mcmVlX3RmbTsKJiM0MztvdXQ6CiYjNDM7CWlmICgqZXJyKSB7CiYjNDM7CQlrZnJlZV9zZW5zaXRpdmUoY3R4KTsKJiM0MzsJCXJldHVybiBOVUxMOwogCX0KIAotCWN0eC0mZ3Q7c2l2X2xlbiA9IHR5cGUtJmd0O2l2c2l6ZShjdHgtJmd0O3RmbSkgJiM0MzsgdHlwZS0mZ3Q7c3RhdGVzaXplKGN0eC0mZ3Q7dGZtKTsKLQogCXJlZmNvdW50X3NldCgmYW1wO2N0eC0mZ3Q7dXNhZ2UsIDEpOwotCiAJcmV0dXJuIGN0eDsKLQotZXJyX2ZyZWVfdGZtOgotCXR5cGUtJmd0O2ZyZWVfdGZtKGN0eC0mZ3Q7dGZtKTsKLWVycl9mcmVlX2N0eDoKLQlrZnJlZShjdHgpOwotZXJyX21vZHVsZV9wdXQ6Ci0JbW9kdWxlX3B1dCh0eXBlLSZndDtvd25lcik7Ci0KLQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQpAQCAtMjI1LDkgJiM0MzsxNDgsNyBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiAJc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7CiAKIAljdHggPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9jcnlwdG9fY3R4LCByY3UpOwotCWN0eC0mZ3Q7dHlwZS0mZ3Q7ZnJlZV90Zm0oY3R4LSZndDt0Zm0pOwotCW1vZHVsZV9wdXQoY3R4LSZndDt0eXBlLSZndDtvd25lcik7Ci0Ja2ZyZWUoY3R4KTsKJiM0MzsJa2ZyZWVfc2Vuc2l0aXZlKGN0eCk7CiB9CiAKIC8qKgpAQCAtMjY3LDI3ICYjNDM7MTg4LDUzIEBAIF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eCkKIH0KIENGSV9OT1NFQUwoYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKTsKIAomIzQzO3N0YXRpYyBpbnQgYnBmX2Flc19jYmNfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLAomIzQzOwkJCSAgICAgdTggKml2LCB1MzIgaXZfbGVuLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdCkKJiM0Mzt7CiYjNDM7CWlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuICZsdDsgc3JjX2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoZGVjcnlwdCkKJiM0MzsJCWFlc19jYmNfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsICZhbXA7Y3R4LSZndDtrZXkuYWVzKTsKJiM0MzsJZWxzZQomIzQzOwkJYWVzX2NiY19lbmNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgJmFtcDtjdHgtJmd0O2tleS5hZXMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBicGZfYWVzX2VjYl9jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sCiYjNDM7CQkJICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KQomIzQzO3sKJiM0MzsJaWYgKGl2X2xlbiAhPSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiAmbHQ7IHNyY19sZW4pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKGRlY3J5cHQpCiYjNDM7CQlhZXNfZWNiX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sICZhbXA7Y3R4LSZndDtrZXkuYWVzKTsKJiM0MzsJZWxzZQomIzQzOwkJYWVzX2VjYl9lbmNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCAmYW1wO2N0eC0mZ3Q7a2V5LmFlcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0LAotCQkJICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdiwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsCiAJCQkgICAgYm9vbCBkZWNyeXB0KQogewotCXUzMiBzcmNfbGVuLCBkc3RfbGVuLCBzaXZfbGVuOwomIzQzOwl1MzIgc3JjX2xlbiwgZHN0X2xlbiwgaXZfbGVuOwogCWNvbnN0IHU4ICpwc3JjOwogCXU4ICpwZHN0LCAqcGl2OwotCWludCBlcnI7CiAKIAlpZiAoX19icGZfZHlucHRyX2lzX3Jkb25seShkc3QpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNpdl9sZW4gPSBzaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShzaXYpIDogMDsKJiM0MzsJaXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwOwogCXNyY19sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShzcmMpOwogCWRzdF9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShkc3QpOwotCWlmICghc3JjX2xlbiB8fCAhZHN0X2xlbiB8fCBzcmNfbGVuICZndDsgZHN0X2xlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc2l2X2xlbiAhPSBjdHgtJmd0O3Npdl9sZW4pCiYjNDM7CWlmICghc3JjX2xlbiB8fCAhZHN0X2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwc3JjID0gX19icGZfZHlucHRyX2RhdGEoc3JjLCBzcmNfbGVuKTsKQEAgLTI5NywxNCAmIzQzOzI0NCwyMCBAQCBzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAJaWYgKCFwZHN0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBpdiA9IHNpdl9sZW4gPyBfX2JwZl9keW5wdHJfZGF0YV9ydyhzaXYsIHNpdl9sZW4pIDogTlVMTDsKLQlpZiAoc2l2X2xlbiAmYW1wOyZhbXA7ICFwaXYpCiYjNDM7CXBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDsKJiM0MzsJaWYgKGl2X2xlbiAmYW1wOyZhbXA7ICFwaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0gZGVjcnlwdCA/IGN0eC0mZ3Q7dHlwZS0mZ3Q7ZGVjcnlwdChjdHgtJmd0O3RmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KQotCQkgICAgICA6IGN0eC0mZ3Q7dHlwZS0mZ3Q7ZW5jcnlwdChjdHgtJmd0O3RmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTsKLQotCXJldHVybiBlcnI7CiYjNDM7CXN3aXRjaCAoY3R4LSZndDthbGdvKSB7CiYjNDM7CWNhc2UgQlBGX0FMR09fQUVTX0NCQzoKJiM0MzsJCXJldHVybiBicGZfYWVzX2NiY19jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsCiYjNDM7CQkJCQkgaXZfbGVuLCBjdHgsIGRlY3J5cHQpOwomIzQzOwljYXNlIEJQRl9BTEdPX0FFU19FQ0I6CiYjNDM7CQlyZXR1cm4gYnBmX2Flc19lY2JfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LAomIzQzOwkJCQkJIGl2X2xlbiwgY3R4LCBkZWNyeXB0KTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiB9CiAKIC8qKgpAQCAtMzEyLDIwICYjNDM7MjY1LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwKICAqIEBjdHg6CQlUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgogICogQHNyYzoJCWJwZl9keW5wdHIgdG8gdGhlIGVuY3J5cHRlZCBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgogICogQGRzdDoJCWJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLgotICogQHNpdl9fbnVsbGFibGU6CWJwZl9keW5wdHIgdG8gSVYgZGF0YSBhbmQgc3RhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IGRlY3J5cHRvci4gTWF5IGJlIE5VTEwuCiYjNDM7ICogQGl2X19udWxsYWJsZToJYnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC4KICAqCiAgKiBEZWNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuCiAgKi8KIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsCiAJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LAotCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKQomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKQogewogCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7CiAJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDsKLQljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc2l2X19udWxsYWJsZTsKJiM0MzsJY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlOwogCi0JcmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCB0cnVlKTsKJiM0MzsJcmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIHRydWUpOwogfQogCiAvKioKQEAgLTMzMywyMCAmIzQzOzI4NiwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19kZWNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogICogQGN0eDoJCVRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuCiAgKiBAc3JjOgkJYnBmX2R5bnB0ciB0byB0aGUgcGxhaW4gZGF0YS4gTXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci4KICAqIEBkc3Q6CQlicGZfZHlucHRyIHRvIHRoZSBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdC4gTXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci4KLSAqIEBzaXZfX251bGxhYmxlOglicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLgomIzQzOyAqIEBpdl9fbnVsbGFibGU6CWJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuCiAgKgogICogRW5jcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLgogICovCiBfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19lbmNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LAogCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsCiAJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc2l2X19udWxsYWJsZSkKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSkKIHsKIAljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjOwogCWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRzdF9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkc3Q7Ci0JY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNpdl9fbnVsbGFibGU7CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTsKIAotCXJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBzaXZfa2VybiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpOwogfQogCiBfX2JwZl9rZnVuY19lbmRfZGVmcygpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBDcnlwdG8gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcyBvciBtZW1vcnkgbGVha3MuCgpGaXJzdCwgSSBuZWVkIHRvIGdyYXNwIHRoZSBvdmVyYWxsIGNvbnRleHQgb2YgdGhlIGNoYW5nZXMuIEl0IHNlZW1zIHdlJiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBnZW5lcmljIEJQRiBjcnlwdG8gZHluYW1pYyByZWdpc3RyYXRpb24gZnJhbWV3b3JrICh1c2luZyBgY3J5cHRvIHRmbWAgQVBJIGZvciBgc2tjaXBoZXJgIGFuZCBgbHNrY2lwaGVyYCkgYW5kIG9wdGluZyBmb3IgYSBkaXJlY3QgaW1wbGVtZW50YXRpb24gbGV2ZXJhZ2luZyB0aGUgYGNyeXB0by9hZXMtY2JjLmhgIGFuZCBgY3J5cHRvL2Flcy1lY2IuaGAgaGVscGVycyAoYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgKS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IHNoaWZ0LCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24uCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlsczoKCiogICBUaGUgcGF0Y2ggcmVtb3ZlcyBgY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaGAsIHN1Z2dlc3RpbmcgYSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgZnJhbWV3b3JrLgoqICAgSW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIGl0JiMzOTtzIGFkZGluZyBgY29uZmlnIEJQRl9DUllQVE9gIGFuZCBzZWxlY3RpbmcgYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgLCB3aGljaCBjb25maXJtcyB0aGUgQUVTLXNwZWNpZmljIGZvY3VzLgoqICAgVGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlIHdpdGhpbiBga2VybmVsL2JwZi9jcnlwdG8uY2AuIEhlcmUmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIHRoZSBtb3N0OgogICAgKiAgIFRoZSBgYnBmX2NyeXB0b190eXBlc2AgcmVnaXN0cnkgYW5kIHRoZSBgdGZtYC1iYXNlZCBkaXNwYXRjaCBhcmUgZ29uZSwgcmVwbGFjZWQgYnkgYSBoYXJkY29kZWQgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBmb3IgQUVTIENCQyBhbmQgRUNCLiBUaGlzIGlzIGEgc2ltcGxpZmljYXRpb24gYnV0IGNvdWxkIGludHJvZHVjZSBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgogICAgKiAgIFRoZSBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBoYXMgYmVlbiBtb2RpZmllZC4gSXQgbm93IGNvbnRhaW5zIGFuIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAsIGEgdW5pb24gZm9yIHRoZSBBRVMga2V5IChgc3RydWN0IGFlc19rZXlgKSwgYW4gYHJjdV9oZWFkYCwgYW5kIGEgYHJlZmNvdW50X3RgLiBUaGlzIGxvb2tzIGdlbmVyYWxseSBzb3VuZCwgYW5kIEkgc2VlIGl0JiMzOTtzIG5vdyB6ZXJvLWluaXRpYWxpemVkIGJ5IGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KICAgICogICBgYnBmX2NyeXB0b19jdHhfY3JlYXRlKClgIGlzIHdoZXJlIEkgd2FudCB0byBsb29rIGNsb3NlbHkuIEl0JiMzOTtzIGRvaW5nIHNvbWUgcGFyYW1ldGVyIGNoZWNraW5nLCBjYWxsaW5nIGBhZXNfcHJlcGFyZWtleWAsIGFuZCBoYW5kbGluZyBlcnJvcnMgYnkgZnJlZWluZyB0aGUgY29udGV4dCB3aXRoIGBrZnJlZV9zZW5zaXRpdmVgLiBUaGlzIHNlZW1zIHJlYXNvbmFibGUsIGJ1dCBgYWVzX3ByZXBhcmVrZXlgIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KICAgICogICBgY3J5cHRvX2ZyZWVfY2IoKWAgdXNlcyBga2ZyZWVfc2Vuc2l0aXZlYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHNlbnNpdGl2ZSBrZXkgbWF0ZXJpYWwuCiAgICAqICAgVGhlIGBicGZfYWVzX2NiY19jcnlwdGAgYW5kIGBicGZfYWVzX2VjYl9jcnlwdGAgZnVuY3Rpb25zIGFyZSBwcmVzZW50IHdpdGggc2FuaXR5IGNoZWNrcyAoSVYgbGVuZ3RoLCBzb3VyY2UvZGVzdGluYXRpb24gbGVuZ3RoIGNoZWNrcykuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgQUVTIG9wZXJhdGlvbnMgYXJlIGRlbGVnYXRlZCB0byBgYWVzX2NiY19kZWNyeXB0YC9gYWVzX2NiY19lbmNyeXB0YCBhbmQgYGFlc19lY2JfZGVjcnlwdGAvYGFlc19lY2JfZW5jcnlwdGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbXkgbmV4dCBhcmVhIG9mIGZvY3VzLgogICAgKiAgIGBicGZfY3J5cHRvX2NyeXB0YCBzZWVtcyB0byBiZSB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIHRoYXQgZG9lcyBzaXplIGNoZWNraW5nLCBleHRyYWN0cyB0aGUgcG9pbnRlcnMsIGFuZCBkaXNwYXRjaGVzIHRvIHRoZSBBRVMgQ0JDIG9yIEVDQiBmdW5jdGlvbnMuIEl0IGFsc28gY2FsbHMgdGhlIGBfX2JwZl9keW5wdHJfaXNfcmRvbmx5YCBhbmQgYF9fYnBmX2R5bnB0cl9kYXRhYCBmYW1pbHkgb2YgZnVuY3Rpb25zLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgc291cmNlLCBkZXN0aW5hdGlvbiwgYW5kIElWIGJ1ZmZlcnMuCgpNeSBtYWluIGNvbmNlcm5zIHJpZ2h0IG5vdyByZXZvbHZlIGFyb3VuZCB0aGVzZSBhc3BlY3RzOgoKMS4gICoqYGFlc19wcmVwYXJla2V5YDoqKiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHdoZXRoZXIgaXQgY291bGQgcG90ZW50aWFsbHkgbGVhdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBgc3RydWN0IGFlc19rZXlgLgoyLiAgKipgYWVzX2NiY19lbmNyeXB0L2RlY3J5cHRgIGFuZCBgYWVzX2VjYl9lbmNyeXB0L2RlY3J5cHRgOioqIEkgaGF2ZSB0byBhbmFseXplIHRoZXNlIGltcGxlbWVudGF0aW9ucyBmb3IgYW55IHN1YnRsZSBmbGF3cyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgcGFkZGluZyBpc3N1ZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBpbnB1dCBkYXRhIGlzIGhhbmRsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHJlYWRpbmcgYmV5b25kIHRoZSBwcm92aWRlZCBidWZmZXJzLgozLiAgKipEYXRhIG1vdmVtZW50OioqIHRoZSBgX19icGZfZHlucHRyX2RhdGFgIGNhbGxzLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIHNvdXJjZSwgZGVzdGluYXRpb24gYW5kIElWIGJ1ZmZlcnMgYXJlIGFsbCBoYW5kbGVkIHNhZmVseS4KNC4gICoqYHN0cnVjdCBhZXNfa2V5YDoqKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGNyaXRpY2FsIGZvciBjaGVja2luZyBwYWRkaW5nIGJ5dGVzLgoKSSB3aWxsIGNvbmR1Y3QgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBkZWZpbml0aW9ucyBvZiBgc3RydWN0IGFlc19rZXlgLCBgYWVzX3ByZXBhcmVrZXlgLCBhbmQgdGhlIEFFUyBlbmNyeXB0L2RlY3J5cHQgZnVuY3Rpb25zLCB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBvY2N1cnJlbmNlcyBvZiB0aGVzZSBmdW5jdGlvbnMgb3IgZGVmaW5pdGlvbnMsIHNvIGFzIG5vdCB0byBtaXNzIGFueSBkZXRhaWwuIEJhc2VkIG9uIG15IGZpbmRpbmdzLCBJJiMzOTtsbCBkZWNpZGUgaWYgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYW4gZXh0cmEgbGF5ZXIgb2Ygc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Flc19wcmVwYXJla2V5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYz0yMzQ9c3RhdGljIGludCBhZXNic194dHNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmluX2tleSxcbi0tXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtMjQ0LVx0a2V5X2xlbiAvPSAyO1xuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jOjI0NTpcdGVyciA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmN0eC1cdTAwM2VmYWxsYmFjaywgaW5fa2V5LCBrZXlfbGVuKTtcbmFyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYy0yNDYtXHRpZiAoZXJyKVxuLS1cbmNyeXB0by9hZXMuYz0yNj1zdGF0aWMgaW50IGNyeXB0b19hZXNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksXG4tLVxuY3J5cHRvL2Flcy5jLTMwLVxuY3J5cHRvL2Flcy5jOjMxOlx0cmV0dXJuIGFlc19wcmVwYXJla2V5KGtleSwgaW5fa2V5LCBrZXlfbGVuKTtcbmNyeXB0by9hZXMuYy0zMi19XG4tLVxuY3J5cHRvL2Flcy5jPTIxMz1jcnlwdG9fYWVzX3NrY2lwaGVyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksXG4tLVxuY3J5cHRvL2Flcy5jLTIxNy1cbmNyeXB0by9hZXMuYzoyMTg6XHRyZXR1cm4gYWVzX3ByZXBhcmVrZXkoa2V5LCBpbl9rZXksIGtleV9sZW4pO1xuY3J5cHRvL2Flcy5jLTIxOS19XG4tLVxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYz0xMDI1PXN0YXRpYyBpbnQgY2hjcl91cGRhdGVfdHdlYWsoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgdTggKml2LFxuLS1cbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTA0Ni1cdFx0XHQ9PSBDSENSX0tFWUNUWF9DSVBIRVJfS0VZX1NJWkVfMTkyKVxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYzoxMDQ3Olx0XHRyZXQgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZhZXMsIGtleSwga2V5bGVuIC0gOCk7XG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jLTEwNDgtXHRlbHNlXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwNDk6XHRcdHJldCA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmFlcywga2V5LCBrZXlsZW4pO1xuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYy0xMDUwLVx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtMTktICpcdGxhc3QgY2lwaGVydGV4dCBibG9jayAob3IgbGVmdCB1bmNoYW5nZWQgaWYgQGxlbiA9PSAwKS5cbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDoyMDogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KCkgb3IgYWVzX3ByZXBhcmVlbmNrZXkoKVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTIxLSAqXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTI3PXZvaWQgYWVzX2NiY19lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTM3LSAqXHRsYXN0IGNpcGhlcnRleHQgYmxvY2sgKG9yIGxlZnQgdW5jaGFuZ2VkIGlmIEBsZW4gPT0gMCkuXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg6Mzg6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtMzktICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg9NDU9dm9pZCBhZXNfY2JjX2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNTQtICogQGl2OiBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLCBjbG9iYmVyZWQgYnkgdGhpcyBmdW5jdGlvblxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjU1OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKSBvciBhZXNfcHJlcGFyZWVuY2tleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNTYtICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg9NTk9dm9pZCBhZXNfY2JjX2N0c19lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTY4LSAqIEBpdjogVGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciwgY2xvYmJlcmVkIGJ5IHRoaXMgZnVuY3Rpb25cbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDo2OTogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KClcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC03MC0gKlxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1jdHIuaC0xOC0gKiBAY3RyOiBUaGUgY291bnRlci4gIEl0IHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgY2VpbChAbGVuIC8gQUVTX0JMT0NLX1NJWkUpLlxuaW5jbHVkZS9jcnlwdG8vYWVzLWN0ci5oOjE5OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKSBvciBhZXNfcHJlcGFyZWVuY2tleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtMjAtICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmg9MzQ9dm9pZCBhZXNfY3RyKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWN0ci5oLTQ1LSAqIEBpdjogVGhlIGluaXRpYWxpemF0aW9uIHZlY3RvclxuaW5jbHVkZS9jcnlwdG8vYWVzLWN0ci5oOjQ2OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKSBvciBhZXNfcHJlcGFyZWVuY2tleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtNDctICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMTctICogQGxlbjogTnVtYmVyIG9mIGJ5dGVzIHRvIGVuY3J5cHQuICBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgQUVTX0JMT0NLX1NJWkUuXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MTg6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaC0xOS0gKlxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaD0yOD12b2lkIGFlc19lY2JfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLCBhZXNfZW5jcnlwdF9hcmcga2V5KTtcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMzUtICogQGxlbjogTnVtYmVyIG9mIGJ5dGVzIHRvIGRlY3J5cHQuICBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgQUVTX0JMT0NLX1NJWkUuXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MzY6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMzctICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zMDg9dm9pZCBhZXNfc3BhcmM2NF9jdHJfY3J5cHRfMjU2KGNvbnN0IHU2NCAqa2V5LCBjb25zdCB1NjQgKmlucHV0LCB1NjQgKm91dHB1dCxcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMTItLyoqXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMTM6ICogYWVzX3ByZXBhcmVrZXkoKSAtIFByZXBhcmUgYW4gQUVTIGtleSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvblxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzE0LSAqIEBrZXk6IChvdXRwdXQpIFRoZSBrZXkgc3RydWN0dXJlIHRvIGluaXRpYWxpemVcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzQtICovXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMzU6aW50IGFlc19wcmVwYXJla2V5KHN0cnVjdCBhZXNfa2V5ICprZXksIGNvbnN0IHU4ICppbl9rZXksIHNpemVfdCBrZXlfbGVuKTtcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMzNi1cbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zNzc9dm9pZCBhZXNfZW5jcnlwdChhZXNfZW5jcnlwdF9hcmcga2V5LCB1OCBvdXRbYXRfbGVhc3QgQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4MS0gKiBhZXNfZGVjcnlwdCgpIC0gRGVjcnlwdCBhIHNpbmdsZSBBRVMgYmxvY2tcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM4MjogKiBAa2V5OiBUaGUgQUVTIGtleSwgcHJldmlvdXNseSBpbml0aWFsaXplZCBieSBhZXNfcHJlcGFyZWtleSgpXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zODMtICogQG91dDogQnVmZmVyIHRvIHN0b3JlIHRoZSBwbGFpbnRleHQgYmxvY2tcbi0tXG5rZXJuZWwvYnBmL2NyeXB0by5jPTk5PWJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYy0xMjYtXHRcdGVsc2Vcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTI3Olx0XHRcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZjdHgtXHUwMDNla2V5LmFlcywgcGFyYW1zLVx1MDAzZWtleSxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTI4LVx0XHRcdFx0XHQgICAgICBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4tLVxubGliL2NyeXB0by9hZXMuYz00MTE9c3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgYWVzX2RlY3J5cHRfZ2VuZXJpYyhjb25zdCB1MzIgaW52X3JuZGtleXNbXSxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTQ1MC0gKlxubGliL2NyeXB0by9hZXMuYzo0NTE6ICogYWVzX3ByZXBhcmVrZXlfYXJjaCgpIGlzIHBhc3NlZCBhbiBvcHRpb25hbCBwb2ludGVyICYjMzk7aW52X2smIzM5OyB3aGljaCBwb2ludHMgdG9cbmxpYi9jcnlwdG8vYWVzLmMtNDUyLSAqIHRoZSBhcmVhIHRvIHN0b3JlIHRoZSBwcmVwYXJlZCBkZWNyeXB0aW9uIGtleS4gIEl0IHdpbGwgYmUgTlVMTCBpZiB0aGUgdXNlclxubGliL2NyeXB0by9hZXMuYzo0NTM6ICogaXMgcmVxdWVzdGluZyBlbmNyeXB0aW9uLW9ubHkuICBhZXNfcHJlcGFyZWtleV9hcmNoKCkgaXMgYWxzbyBwYXNzZWQgYSB2YWxpZFxubGliL2NyeXB0by9hZXMuYy00NTQtICogJiMzOTtrZXlfbGVuJiMzOTsgYW5kICYjMzk7bnJvdW5kcyYjMzk7LCBjb3JyZXNwb25kaW5nIHRvIEFFUy0xMjgsIEFFUy0xOTIsIG9yIEFFUy0yNTYuXG4tLVxubGliL2NyeXB0by9hZXMuYy00NjEtXG5saWIvY3J5cHRvL2Flcy5jOjQ2MjpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcbmxpYi9jcnlwdG8vYWVzLmMtNDYzLVx0XHRcdFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTQ3Nz1zdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXG4tLVxubGliL2NyeXB0by9hZXMuYy00ODQtXG5saWIvY3J5cHRvL2Flcy5jOjQ4NTpzdGF0aWMgaW50IF9fYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19lbmNrZXkgKmVuY19rZXksXG5saWIvY3J5cHRvL2Flcy5jLTQ4Ni1cdFx0XHQgICAgdW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTQ5Mi1cdGVuY19rZXktXHUwMDNlbnJvdW5kcyA9IDYgJiM0Mzsga2V5X2xlbiAvIDQ7XG5saWIvY3J5cHRvL2Flcy5jOjQ5MzpcdGFlc19wcmVwYXJla2V5X2FyY2goXHUwMDI2ZW5jX2tleS1cdTAwM2VrLCBpbnZfaywgaW5fa2V5LCBrZXlfbGVuLFxubGliL2NyeXB0by9hZXMuYy00OTQtXHRcdFx0ICAgIGVuY19rZXktXHUwMDNlbnJvdW5kcyk7XG4tLVxubGliL2NyeXB0by9hZXMuYy00OTctXG5saWIvY3J5cHRvL2Flcy5jOjQ5ODppbnQgYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSwgc2l6ZV90IGtleV9sZW4pXG5saWIvY3J5cHRvL2Flcy5jLTQ5OS17XG5saWIvY3J5cHRvL2Flcy5jOjUwMDpcdHJldHVybiBfX2Flc19wcmVwYXJla2V5KChzdHJ1Y3QgYWVzX2VuY2tleSAqKWtleSwgXHUwMDI2a2V5LVx1MDAzZWludl9rLFxubGliL2NyeXB0by9hZXMuYy01MDEtXHRcdFx0XHRpbl9rZXksIGtleV9sZW4pO1xubGliL2NyeXB0by9hZXMuYy01MDItfVxubGliL2NyeXB0by9hZXMuYzo1MDM6RVhQT1JUX1NZTUJPTChhZXNfcHJlcGFyZWtleSk7XG5saWIvY3J5cHRvL2Flcy5jLTUwNC1cbmxpYi9jcnlwdG8vYWVzLmM9NTA1PWludCBhZXNfcHJlcGFyZWVuY2tleShzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbilcbmxpYi9jcnlwdG8vYWVzLmMtNTA2LXtcbmxpYi9jcnlwdG8vYWVzLmM6NTA3Olx0cmV0dXJuIF9fYWVzX3ByZXBhcmVrZXkoa2V5LCBOVUxMLCBpbl9rZXksIGtleV9sZW4pO1xubGliL2NyeXB0by9hZXMuYy01MDgtfVxuLS1cbmxpYi9jcnlwdG8vYWVzLmM9NTI2PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZmlwc190ZXN0KHZvaWQpXG4tLVxubGliL2NyeXB0by9hZXMuYy01MzAtXG5saWIvY3J5cHRvL2Flcy5jOjUzMTpcdGlmIChhZXNfcHJlcGFyZWtleShcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcbmxpYi9jcnlwdG8vYWVzLmMtNTMyLVx0XHRwYW5pYyhcJiMzNDthZXM6IEZJUFMgc2VsZi10ZXN0IGZhaWxlZCAocHJlcGFyZWtleSlcXG5cJiMzNDspO1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9ODE0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZWNiX2ZpcHNfdGVzdCh2b2lkKVxuLS1cbmxpYi9jcnlwdG8vYWVzLmMtODE4LVxubGliL2NyeXB0by9hZXMuYzo4MTk6XHRpZiAoYWVzX3ByZXBhcmVrZXkoXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXG5saWIvY3J5cHRvL2Flcy5jLTgyMC1cdFx0cGFuaWMoXCYjMzQ7YWVzOiBFQ0IgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcblwmIzM0Oyk7XG4tLVxubGliL2NyeXB0by9hZXMuYz0xMDI0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfY2JjX2ZpcHNfdGVzdCh2b2lkKVxuLS1cbmxpYi9jcnlwdG8vYWVzLmMtMTAyOS1cbmxpYi9jcnlwdG8vYWVzLmM6MTAzMDpcdGlmIChhZXNfcHJlcGFyZWtleShcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcbmxpYi9jcnlwdG8vYWVzLmMtMTAzMS1cdFx0cGFuaWMoXCYjMzQ7YWVzOiBDQkMgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcblwmIzM0Oyk7XG4tLVxubGliL2NyeXB0by9hZXMuYz0xMDQ3PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfY2JjX2N0c19maXBzX3Rlc3Qodm9pZClcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTEwNTgtXG5saWIvY3J5cHRvL2Flcy5jOjEwNTk6XHRpZiAoYWVzX3ByZXBhcmVrZXkoXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXG5saWIvY3J5cHRvL2Flcy5jLTEwNjAtXHRcdHBhbmljKFwmIzM0O2FlczogQ0JDLUNUUyBGSVBTIHNlbGYtdGVzdCBmYWlsZWQgKHByZXBhcmVrZXkpXFxuXCYjMzQ7KTtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTEyMDY9aW50IGFlc194dHNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX3h0c19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTEyMTQtXHQvKiBGaXJzdCBoYWxmIG9mIFhUUyBrZXkgaXMgdGhlIG1haW4ga2V5ICovXG5saWIvY3J5cHRvL2Flcy5jOjEyMTU6XHRlcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZrZXktXHUwMDNlbWFpbl9rZXksIGluX2tleSwga2V5X2xlbiAvIDIpO1xubGliL2NyeXB0by9hZXMuYy0xMjE2LVx0aWYgKHVubGlrZWx5KGVycikpXG4tLVxubGliL2NyeXB0by9hcm0vYWVzLmg9MTI9YXNtbGlua2FnZSB2b2lkIF9fYWVzX2FybV9kZWNyeXB0KGNvbnN0IHUzMiBpbnZfcmtbXSwgaW50IHJvdW5kcyxcbi0tXG5saWIvY3J5cHRvL2FybS9hZXMuaC0xNS1cbmxpYi9jcnlwdG8vYXJtL2Flcy5oOjE2OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxubGliL2NyeXB0by9hcm0vYWVzLmgtMTctXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg9NDE9c3RhdGljIHZvaWQgYWVzX2V4cGFuZGtleV9hcm02NCh1MzIgcm5ka2V5c1tdLCB1MzIgKmludl9ybmRrZXlzLFxuLS1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmgtMTA3LVxubGliL2NyeXB0by9hcm02NC9hZXMuaDoxMDg6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL2FybTY0L2Flcy5oLTEwOS1cdFx0XHRcdHVuaW9uIGFlc19pbnZrZXlfYXJjaCAqaW52X2ssXG4tLVxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oPTM4PXN0YXRpYyB2b2lkIHNwZV9lbmQodm9pZClcbi0tXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNDQtXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg6NDU6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNDYtXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD0xMDk9c3RhdGljIHZvaWQgcm5ka2V5X2Zyb21fdnN4KHUzMiBvdXRbNF0sIGNvbnN0IHUzMiBpbls0XSwgYm9vbCBhcHBseV9pbnZfbWl4KVxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xMjgtXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg6MTI5OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oLTEzMC1cdFx0XHRcdHVuaW9uIGFlc19pbnZrZXlfYXJjaCAqaW52X2ssXG4tLVxubGliL2NyeXB0by9yaXNjdi9hZXMuaD0xNT12b2lkIGFlc19kZWNyeXB0X3p2a25lZChjb25zdCB1MzIgcm5ka2V5c1tdLCBpbnQga2V5X2xlbixcbi0tXG5saWIvY3J5cHRvL3Jpc2N2L2Flcy5oLTE3LVxubGliL2NyeXB0by9yaXNjdi9hZXMuaDoxODpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmgtMTktXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vczM5MC9hZXMuaD0xMj1zdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGhhdmVfY3BhY2ZfYWVzMjU2KTtcbi0tXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtMTktICovXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg6MjA6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtMjEtXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuLS1cbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg9NDU9dm9pZCBhZXNfc3BhcmM2NF9kZWNyeXB0XzI1Nihjb25zdCB1NjQgKmtleSwgY29uc3QgdTMyICppbnB1dCwgdTMyICpvdXRwdXQpO1xubGliL2NyeXB0by9zcGFyYy9hZXMuaC00Ni1cbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg6NDc6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oLTQ4LVx0XHRcdFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcbi0tXG5saWIvY3J5cHRvL3g4Ni9hZXMuaD0xOD12b2lkIGFlc19kZWNyeXB0X2Flc25pKGNvbnN0IHUzMiBpbnZfcm5ka2V5c1tdLCBpbnQgbnJvdW5kcyxcbi0tXG5saWIvY3J5cHRvL3g4Ni9hZXMuaC0zMS0gKi9cbmxpYi9jcnlwdG8veDg2L2Flcy5oOjMyOnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxubGliL2NyeXB0by94ODYvYWVzLmgtMzMtXHRcdFx0XHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgQlBGIENyeXB0byBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBtYWRlIGluIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjcnlwdG8gQlBGIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXTigJlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgYW55IG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgZGlmZnMgY2FyZWZ1bGx5IHRvIHNwb3QgYW55IHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBzZWN1cml0eSBvciBwZXJmb3JtYW5jZS4KClRoZW4sIHRvIGdldCBhIGhvbGlzdGljIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gcmVhZCB0aGUgZW50aXJlIGBrZXJuZWwvYnBmL2NyeXB0by5jYCBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbS4gSSB3YW50IHRvIHRob3JvdWdobHkgZXhhbWluZSBob3cgZHlucHRycyBhbmQgdGhlIEJQRiBjb250ZXh0IGFyZSBiZWluZyB1dGlsaXplZCBhbmQgYWxsb2NhdGVkIHdpdGhpbiB0aGUgY3J5cHRvIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgY29uc3RydWN0cyB0byBlbnN1cmUgdGhleSBhcmUgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIHdpdGggbm8gbWVtb3J5IGxlYWtzLCBhbmQgdGhhdCB0aGUgY29udGV4dHMgYXJlIGJlaW5nIGhhbmRsZWQgc2FmZWx5LiBUaGlzIHRob3JvdWdoIHJldmlldyBpcyBjcnVjaWFsIGZvciBCUEYgY29kZSwgYXMgZXJyb3JzIGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgZXh0cmEgYXR0ZW50aW9uIHRvIGFueSBwb2ludGVyIGFyaXRobWV0aWMgb3Igb2ZmLWJ5LW9uZSBlcnJvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jcnlwdG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX21lbV9hbGxvYy5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9maWx0ZXIuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2Flcy1jYmMuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtZWNiLmhcdTAwM2VcbiAgMTE6XHRcbiAgMTI6XHQvKiBCUEYgY3J5cHRvIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgc3RydWN0ICovXG4gIDEzOlx0LyoqXG4gIDE0Olx0ICogc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zIC0gQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdHVyZVxuICAxNTpcdCAqIEB0eXBlOlx0VGhlIHN0cmluZyBvZiBjcnlwdG8gb3BlcmF0aW9uIHR5cGUuXG4gIDE2Olx0ICogQHJlc2VydmVkOlx0UmVzZXJ2ZWQgbWVtYmVyLCB3aWxsIGJlIHJldXNlZCBmb3IgbW9yZSBvcHRpb25zIGluIGZ1dHVyZVxuICAxNzpcdCAqXHRcdFZhbHVlczpcbiAgMTg6XHQgKlx0XHQgIDBcbiAgMTk6XHQgKiBAYWxnbzpcdFRoZSBzdHJpbmcgb2YgYWxnb3JpdGhtIHRvIGluaXRpYWxpemUuXG4gIDIwOlx0ICogQGtleTpcdFRoZSBjaXBoZXIga2V5IHVzZWQgdG8gaW5pdCBjcnlwdG8gYWxnb3JpdGhtLlxuICAyMTpcdCAqIEBrZXlfbGVuOlx0VGhlIGxlbmd0aCBvZiBjaXBoZXIga2V5LlxuICAyMjpcdCAqIEBhdXRoc2l6ZTpcdFRoZSBsZW5ndGggb2YgYXV0aGVudGljYXRpb24gdGFnIHVzZWQgYnkgYWxnb3JpdGhtLlxuICAyMzpcdCAqL1xuICAyNDpcdHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7XG4gIDI1Olx0XHRjaGFyIHR5cGVbMTRdO1xuICAyNjpcdFx0dTggcmVzZXJ2ZWRbMl07XG4gIDI3Olx0XHRjaGFyIGFsZ29bMTI4XTtcbiAgMjg6XHRcdHU4IGtleVsyNTZdO1xuICAyOTpcdFx0dTMyIGtleV9sZW47XG4gIDMwOlx0XHR1MzIgYXV0aHNpemU7XG4gIDMxOlx0fTtcbiAgMzI6XHRcbiAgMzM6XHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCB7XG4gIDM0Olx0XHRCUEZfQUxHT19BRVNfQ0JDLFxuICAzNTpcdFx0QlBGX0FMR09fQUVTX0VDQixcbiAgMzY6XHR9O1xuICAzNzpcdFxuICAzODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xuICAzOTpcdFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lO1xuICA0MDpcdFx0Y29uc3QgY2hhciAqYWxnb19uYW1lO1xuICA0MTpcdFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbiAgNDI6XHR9IGJwZl9jcnlwdG9fYWxnb3NbXSA9IHtcbiAgNDM6XHRcdHsgXCYjMzQ7c2tjaXBoZXJcJiMzNDssIFwmIzM0O2NiYyhhZXMpXCYjMzQ7LCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4gIDQ0Olx0XHR7IFwmIzM0O3NrY2lwaGVyXCYjMzQ7LCBcJiMzNDtlY2IoYWVzKVwmIzM0OywgQlBGX0FMR09fQUVTX0VDQiB9LFxuICA0NTpcdH07XG4gIDQ2Olx0XG4gIDQ3Olx0c3RhdGljIGJvb2wgYnBmX2NyeXB0b19maW5kX2FsZ28oY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsXG4gIDQ4Olx0XHRcdFx0XHQgZW51bSBicGZfY3J5cHRvX2FsZ29faWQgKmlkX3JldClcbiAgNDk6XHR7XG4gIDUwOlx0XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShicGZfY3J5cHRvX2FsZ29zKTsgaSYjNDM7JiM0MzspIHtcbiAgNTE6XHRcdFx0aWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy1cdTAwM2V0eXBlLFxuICA1MjpcdFx0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZXR5cGUpKSA9PSAwIFx1MDAyNlx1MDAyNlxuICA1MzpcdFx0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4gIDU0Olx0XHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNlYWxnbykpID09IDApIHtcbiAgNTU6XHRcdFx0XHQqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvO1xuICA1NjpcdFx0XHRcdHJldHVybiB0cnVlO1xuICA1NzpcdFx0XHR9XG4gIDU4Olx0XHR9XG4gIDU5Olx0XHRyZXR1cm4gZmFsc2U7XG4gIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdC8qKlxuICA2MzpcdCAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxuICA2NDpcdCAqIEBhbGdvOlx0VGhlIGNyeXB0byBhbGdvcml0aG0gSURcbiAgNjU6XHQgKiBAa2V5Olx0VGhlIGNyeXB0byBrZXlcbiAgNjY6XHQgKiBAcmN1Olx0VGhlIFJDVSBoZWFkIHVzZWQgdG8gZnJlZSB0aGUgY3J5cHRvIGNvbnRleHQgd2l0aCBSQ1Ugc2FmZXR5LlxuICA2NzpcdCAqIEB1c2FnZTpcdE9iamVjdCByZWZlcmVuY2UgY291bnRlci4gV2hlbiB0aGUgcmVmY291bnQgZ29lcyB0byAwLCB0aGVcbiAgNjg6XHQgKlx0XHRtZW1vcnkgaXMgcmVsZWFzZWQgYmFjayB0byB0aGUgQlBGIGFsbG9jYXRvciwgd2hpY2ggcHJvdmlkZXNcbiAgNjk6XHQgKlx0XHRSQ1Ugc2FmZXR5LlxuICA3MDpcdCAqL1xuICA3MTpcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCB7XG4gIDcyOlx0XHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvO1xuICA3MzpcdFx0dW5pb24ge1xuICA3NDpcdFx0XHRzdHJ1Y3QgYWVzX2tleSBhZXM7XG4gIDc1Olx0XHR9IGtleTtcbiAgNzY6XHRcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4gIDc3Olx0XHRyZWZjb3VudF90IHVzYWdlO1xuICA3ODpcdH07XG4gIDc5Olx0XG4gIDgwOlx0X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICA4MTpcdFxuICA4MjpcdC8qKlxuICA4MzpcdCAqIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSgpIC0gQ3JlYXRlIGEgbXV0YWJsZSBCUEYgY3J5cHRvIGNvbnRleHQuXG4gIDg0Olx0ICpcbiAgODU6XHQgKiBBbGxvY2F0ZXMgYSBjcnlwdG8gY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkLCBhY3F1aXJlZCwgYW5kIHJlbGVhc2VkIGJ5XG4gIDg2Olx0ICogYSBCUEYgcHJvZ3JhbS4gVGhlIGNyeXB0byBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXJcbiAgODc6XHQgKiBiZSBlbWJlZGRlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yIGZyZWVkIHdpdGggYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpLlxuICA4ODpcdCAqIEFzIGNyeXB0byBBUEkgZnVuY3Rpb25zIHVzZSBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLCB0aGlzIGZ1bmN0aW9uIGNhblxuICA4OTpcdCAqIG9ubHkgYmUgdXNlZCBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuICA5MDpcdCAqXG4gIDkxOlx0ICogYnBmX2NyeXB0b19jdHhfY3JlYXRlKCkgYWxsb2NhdGVzIG1lbW9yeSBmb3IgY3J5cHRvIGNvbnRleHQuXG4gIDkyOlx0ICogSXQgbWF5IHJldHVybiBOVUxMIGlmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUuXG4gIDkzOlx0ICogQHBhcmFtczpcdHBvaW50ZXIgdG8gc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGVcbiAgOTQ6XHQgKlx0XHRkZXRhaWxzIG5lZWRlZCB0byBpbml0aWFsaXNlIGNyeXB0byBjb250ZXh0LlxuICA5NTpcdCAqIEBwYXJhbXNfX3N6Olx0c2l6ZSBvZiBzdGV1Y3QgYnBmX2NyeXB0b19wYXJhbXMgdXNlZiBieSBicGYgcHJvZ3JhbVxuICA5NjpcdCAqIEBlcnI6XHRpbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxuICA5NzpcdCAqL1xuICA5ODpcdF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXG4gIDk5Olx0YnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiAxMDA6XHRcdFx0ICAgICAgaW50ICplcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTg2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGtlcm5lbC9icGYvY3J5cHRvLmNgLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIGdvaW5nIHRvIGJlIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gaGVyZSwgY29uc2lkZXJpbmcgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGNyeXB0b2dyYXBoeSB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdGhlIGVCUEYgcHJvZ3JhbXMsIGFuZCB3aGF0IGxldmVsIG9mIGNvbnRyb2wgdGhlIEJQRiBjb2RlIGhhcyBvdmVyIHRoZXNlIG9wZXJhdGlvbnMuIEFyZSB0aGV5IHByb3ZpZGluZyB0aGUgYmFyZSBtZXRhbCBpbnN0cnVjdGlvbnMsIG9yIG1vcmUgaGlnaC1sZXZlbCBhYnN0cmFjdGlvbnM/CgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zLiBUaGlzIGlzIGtlcm5lbCBzcGFjZSwgc28gYW55IHZ1bG5lcmFiaWxpdHkgaGVyZSBjb3VsZCBiZSBkZXZhc3RhdGluZy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBoYXJkZW5lZCBpbXBsZW1lbnRhdGlvbnMsIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgb2J2aW91cyBhdHRhY2sgc3VyZmFjZSB0aGF0IG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcXVlc3Rpb24gb2YgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBrZXJuZWwgY3J5cHRvZ3JhcGhpYyBtb2R1bGVzLiBBcmUgdGhleSBsZXZlcmFnaW5nIGV4aXN0aW5nIGNyeXB0byBBUEkgY2FsbHMsIG9yIGJ1aWxkaW5nIHNvbWV0aGluZyBlbnRpcmVseSBuZXcgZm9yIHRoZSBCUEYgZW52aXJvbm1lbnQ/IFRoZSBkZXNpZ24gY2hvaWNlcyBoZXJlIHdpbGwgc3BlYWsgdm9sdW1lcyBhYm91dCB0aGUgZ29hbHMgb2YgdGhlIGRldmVsb3BlcnMgYW5kIHRoZSB0cmFkZS1vZmZzIHRoZXkgbWFkZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBmdW5jdGlvbiBjYWxscywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZmluZCB0aGF0IHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCB0aG9yb3VnaGx5IHJldmlld2VkLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvY3J5cHRvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHR7XG4gMTAyOlx0XHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcbiAxMDM6XHRcbiAxMDQ6XHRcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cdTAwM2VyZXNlcnZlZFswXSB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcbiAxMDU6XHRcdCAgICBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpKSB7XG4gMTA2Olx0XHRcdCplcnIgPSAtRUlOVkFMO1xuIDEwNzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMDg6XHRcdH1cbiAxMDk6XHRcbiAxMTA6XHRcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIDExMTpcdFx0aWYgKCFjdHgpIHtcbiAxMTI6XHRcdFx0KmVyciA9IC1FTk9NRU07XG4gMTEzOlx0XHRcdHJldHVybiBOVUxMO1xuIDExNDpcdFx0fVxuIDExNTpcdFxuIDExNjpcdFx0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xuIDExNzpcdFx0XHQqZXJyID0gLUVOT0VOVDtcbiAxMTg6XHRcdFx0Z290byBvdXQ7XG4gMTE5Olx0XHR9XG4gMTIwOlx0XG4gMTIxOlx0XHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4gMTIyOlx0XHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XG4gMTIzOlx0XHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XG4gMTI0Olx0XHRcdGlmIChwYXJhbXMtXHUwMDNlYXV0aHNpemUpXG4gMTI1Olx0XHRcdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuIDEyNjpcdFx0XHRlbHNlXG4gMTI3Olx0XHRcdFx0KmVyciA9IGFlc19wcmVwYXJla2V5KFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzLCBwYXJhbXMtXHUwMDNla2V5LFxuIDEyODpcdFx0XHRcdFx0XHQgICAgICBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4gMTI5Olx0XHRcdGJyZWFrO1xuIDEzMDpcdFx0ZGVmYXVsdDpcbiAxMzE6XHRcdFx0V0FSTl9PTigxKTtcbiAxMzI6XHRcdFx0KmVyciA9IC1FTk9FTlQ7XG4gMTMzOlx0XHRcdGJyZWFrO1xuIDEzNDpcdFx0fVxuIDEzNTpcdFxuIDEzNjpcdG91dDpcbiAxMzc6XHRcdGlmICgqZXJyKSB7XG4gMTM4Olx0XHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuIDEzOTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNDA6XHRcdH1cbiAxNDE6XHRcbiAxNDI6XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNldXNhZ2UsIDEpO1xuIDE0MzpcdFx0cmV0dXJuIGN0eDtcbiAxNDQ6XHR9XG4gMTQ1Olx0XG4gMTQ2Olx0c3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIDE0NzpcdHtcbiAxNDg6XHRcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xuIDE0OTpcdFxuIDE1MDpcdFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcbiAxNTE6XHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuIDE1MjpcdH1cbiAxNTM6XHRcbiAxNTQ6XHQvKipcbiAxNTU6XHQgKiBicGZfY3J5cHRvX2N0eF9hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGNyeXB0byBjb250ZXh0LlxuIDE1NjpcdCAqIEBjdHg6IFRoZSBCUEYgY3J5cHRvIGNvbnRleHQgYmVpbmcgYWNxdWlyZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWRcbiAxNTc6XHQgKlx0ICAgICBwb2ludGVyLlxuIDE1ODpcdCAqXG4gMTU5Olx0ICogQWNxdWlyZXMgYSByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuIFRoZSBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb25cbiAxNjA6XHQgKiBtdXN0IGVpdGhlciBiZSBlbWJlZGRlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yIGZyZWVkIHdpdGhcbiAxNjE6XHQgKiBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkuXG4gMTYyOlx0ICovXG4gMTYzOlx0X19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcbiAxNjQ6XHRicGZfY3J5cHRvX2N0eF9hY3F1aXJlKHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4KVxuIDE2NTpcdHtcbiAxNjY6XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmN0eC1cdTAwM2V1c2FnZSkpXG4gMTY3Olx0XHRcdHJldHVybiBOVUxMO1xuIDE2ODpcdFx0cmV0dXJuIGN0eDtcbiAxNjk6XHR9XG4gMTcwOlx0XG4gMTcxOlx0LyoqXG4gMTcyOlx0ICogYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIHByZXZpb3VzbHkgYWNxdWlyZWQgQlBGIGNyeXB0byBjb250ZXh0LlxuIDE3MzpcdCAqIEBjdHg6IFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyByZWxlYXNlZC5cbiAxNzQ6XHQgKlxuIDE3NTpcdCAqIFJlbGVhc2VzIGEgcHJldmlvdXNseSBhY3F1aXJlZCByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuIFdoZW4gdGhlIGZpbmFsXG4gMTc2Olx0ICogcmVmZXJlbmNlIG9mIHRoZSBCUEYgY3J5cHRvIGNvbnRleHQgaGFzIGJlZW4gcmVsZWFzZWQsIGl0cyBtZW1vcnlcbiAxNzc6XHQgKiB3aWxsIGJlIHJlbGVhc2VkLlxuIDE3ODpcdCAqL1xuIDE3OTpcdF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcbiAxODA6XHR7XG4gMTgxOlx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2V1c2FnZSkpXG4gMTgyOlx0XHRcdGNhbGxfcmN1KFx1MDAyNmN0eC1cdTAwM2VyY3UsIGNyeXB0b19mcmVlX2NiKTtcbiAxODM6XHR9XG4gMTg0Olx0XG4gMTg1Olx0X19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxuIDE4NjpcdHtcbiAxODc6XHRcdGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoY3R4KTtcbiAxODg6XHR9XG4gMTg5Olx0Q0ZJX05PU0VBTChicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpO1xuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBpbnQgYnBmX2Flc19jYmNfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxuIDE5MjpcdFx0XHRcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxuIDE5MzpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcbiAxOTQ6XHR7XG4gMTk1Olx0XHRpZiAoaXZfbGVuICE9IEFFU19CTE9DS19TSVpFKVxuIDE5NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxOTc6XHRcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcdTAwM2Mgc3JjX2xlbilcbiAxOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTk5Olx0XHRpZiAoZGVjcnlwdClcbiAyMDA6XHRcdFx0YWVzX2NiY19kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGtlcm5lbCBjb2RlLCB0aGlua2luZyBvdXQgbG91ZCBhcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIGBjcnlwdG8uY2AgKExpbmVzIDIwMS0zMTApKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgbGluZXMgaW4gYGtlcm5lbC9icGYvY3J5cHRvLmNgLiAgTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIG1vZHVsZSBhbmQgZUJQRiBpbiBnZW5lcmFsLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgdGhlIGNvcmUgY3J5cHRvZ3JhcGh5IHByaW1pdGl2ZXMgZXhwb3NlZCB2aWEgZUJQRiwgbGlrZWx5IGludm9sdmluZyB0aGUgYGJwZl9jcnlwdG9fKmAgaGVscGVyIGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgYmV0IHdlJiMzOTtyZSBsb29raW5nIGF0IHRoaW5ncyBsaWtlIGhhc2ggY2FsY3VsYXRpb25zLCBlbmNyeXB0aW9uLCBwZXJoYXBzIGV2ZW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBsaWtlIEhNQUMuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBCUEYgVk0sIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLCBiZWNhdXNlIHRob3NlIGFyZSBvZnRlbiB0cmlja3kgaW4gdGhlIGtlcm5lbCBzcGFjZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkYXRhIGJlaW5nIHBhc3NlZCBpbiBmcm9tIHVzZXItc3BhY2UgdmlhIGVCUEYgcHJvZ3JhbXMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIGFyZ3VtZW50cyBhcmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgKGxpa2UgbGVuZ3RoKS4gSSYjMzk7bGwgYWxzbyB0cnkgdG8gaW5mZXIgaG93IHRoZSBjb2RlIGlzIG9wdGltaXplZCwgYW5kIHdoZXRoZXIgdGhlIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzIGFyZSBhcHByb3ByaWF0ZSBmb3IgYSBrZXJuZWwgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcyB0aGF0IGFyZSBiZWluZyBmYXZvcmVkIGhlcmUsIG9yIGlmIHRoZSBjb2RlIGlzIG1vcmUgZ2VuZXJpYyBpbiBpdHMgYXBwcm9hY2guIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyB3b3VsZCBiZSBvcHRpbWl6ZWQgZm9yIGNvbW1vbiB1c2FnZXMuIEkgYWxzbyB3b25kZXIgaWYgdGhlc2UgZnVuY3Rpb25zIHN1cHBvcnQgZGlmZmVyZW50IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmZWF0dXJlcywgYW5kIGlmIHNvLCBob3cgdGhhdOKAmXMgaGFuZGxlZCB3aXRoaW4gdGhlIGVCUEYgZnJhbWV3b3JrLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGZ1biBwYXJ0ISBMZXQmIzM5O3MgZ2V0IHJlYWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jcnlwdG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMTpcdFx0ZWxzZVxuIDIwMjpcdFx0XHRhZXNfY2JjX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4gMjAzOlx0XHRyZXR1cm4gMDtcbiAyMDQ6XHR9XG4gMjA1Olx0XG4gMjA2Olx0c3RhdGljIGludCBicGZfYWVzX2VjYl9jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXG4gMjA3Olx0XHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4gMjA4Olx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuIDIwOTpcdHtcbiAyMTA6XHRcdGlmIChpdl9sZW4gIT0gMClcbiAyMTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjEyOlx0XHRpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gXHUwMDNjIHNyY19sZW4pXG4gMjEzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDIxNDpcdFx0aWYgKGRlY3J5cHQpXG4gMjE1Olx0XHRcdGFlc19lY2JfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuIDIxNjpcdFx0ZWxzZVxuIDIxNzpcdFx0XHRhZXNfZWNiX2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbiAyMTg6XHRcdHJldHVybiAwO1xuIDIxOTpcdH1cbiAyMjA6XHRcbiAyMjE6XHRzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gMjIyOlx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcbiAyMjM6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0LFxuIDIyNDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdixcbiAyMjU6XHRcdFx0XHQgICAgYm9vbCBkZWNyeXB0KVxuIDIyNjpcdHtcbiAyMjc6XHRcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gMjI4Olx0XHRjb25zdCB1OCAqcHNyYztcbiAyMjk6XHRcdHU4ICpwZHN0LCAqcGl2O1xuIDIzMDpcdFxuIDIzMTpcdFx0aWYgKF9fYnBmX2R5bnB0cl9pc19yZG9ubHkoZHN0KSlcbiAyMzI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjMzOlx0XG4gMjM0Olx0XHRpdl9sZW4gPSBpdiA/IF9fYnBmX2R5bnB0cl9zaXplKGl2KSA6IDA7XG4gMjM1Olx0XHRzcmNfbGVuID0gX19icGZfZHlucHRyX3NpemUoc3JjKTtcbiAyMzY6XHRcdGRzdF9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShkc3QpO1xuIDIzNzpcdFx0aWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKVxuIDIzODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMzk6XHRcbiAyNDA6XHRcdHBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pO1xuIDI0MTpcdFx0aWYgKCFwc3JjKVxuIDI0MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDM6XHRcdHBkc3QgPSBfX2JwZl9keW5wdHJfZGF0YV9ydyhkc3QsIGRzdF9sZW4pO1xuIDI0NDpcdFx0aWYgKCFwZHN0KVxuIDI0NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNDY6XHRcbiAyNDc6XHRcdHBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDtcbiAyNDg6XHRcdGlmIChpdl9sZW4gXHUwMDI2XHUwMDI2ICFwaXYpXG4gMjQ5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI1MDpcdFxuIDI1MTpcdFx0c3dpdGNoIChjdHgtXHUwMDNlYWxnbykge1xuIDI1MjpcdFx0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuIDI1MzpcdFx0XHRyZXR1cm4gYnBmX2Flc19jYmNfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxuIDI1NDpcdFx0XHRcdFx0XHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xuIDI1NTpcdFx0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuIDI1NjpcdFx0XHRyZXR1cm4gYnBmX2Flc19lY2JfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxuIDI1NzpcdFx0XHRcdFx0XHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xuIDI1ODpcdFx0ZGVmYXVsdDpcbiAyNTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjYwOlx0XHR9XG4gMjYxOlx0fVxuIDI2MjpcdFxuIDI2MzpcdC8qKlxuIDI2NDpcdCAqIGJwZl9jcnlwdG9fZGVjcnlwdCgpIC0gRGVjcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cbiAyNjU6XHQgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI2NjpcdCAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGVuY3J5cHRlZCBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI2NzpcdCAqIEBkc3Q6XHRcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI2ODpcdCAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuIDI2OTpcdCAqXG4gMjcwOlx0ICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuIDI3MTpcdCAqL1xuIDI3MjpcdF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gMjczOlx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIDI3NDpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbiAyNzU6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpXG4gMjc2Olx0e1xuIDI3NzpcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjX2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNyYztcbiAyNzg6XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRzdF9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkc3Q7XG4gMjc5Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilpdl9fbnVsbGFibGU7XG4gMjgwOlx0XG4gMjgxOlx0XHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7XG4gMjgyOlx0fVxuIDI4MzpcdFxuIDI4NDpcdC8qKlxuIDI4NTpcdCAqIGJwZl9jcnlwdG9fZW5jcnlwdCgpIC0gRW5jcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cbiAyODY6XHQgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuIDI4NzpcdCAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gMjg4Olx0ICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gMjg5Olx0ICogQGl2X19udWxsYWJsZTpcdGJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuXG4gMjkwOlx0ICpcbiAyOTE6XHQgKiBFbmNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuXG4gMjkyOlx0ICovXG4gMjkzOlx0X19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZW5jcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAyOTQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXG4gMjk1Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LFxuIDI5NjpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiAyOTc6XHR7XG4gMjk4Olx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIDI5OTpcdFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbiAzMDA6XHRcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEkmIzM5O20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBoZXJlLgoKRmlyc3QsIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYC4gVGhpcyBsb29rcyBwcmV0dHkgc29saWQuIGBremFsbG9jX29iamAgaXMgYSBnb29kIGNob2ljZSBmb3IgaW5pdGlhbGl6YXRpb24sIGVuc3VyaW5nIHRoZSBgY3R4YCBzdHJ1Y3QgaXMgemVyb2VkLiBUaGUgYGJwZl9jcnlwdG9fZmluZF9hbGdvYCBhbmQgYGFlc19wcmVwYXJla2V5YCBjYWxscyBzZWVtIHN0YW5kYXJkLCBoYW5kbGluZyBhbGdvcml0aG0gYW5kIGtleSBzZXR1cCwgYW5kIHRoZSBrZXkgbGVuZ3RoIGNoZWNrcyBpbiBgYWVzX3ByZXBhcmVrZXlgICgxNiwgMjQsIG9yIDMyIGJ5dGVzKSBhcmUgaW1wb3J0YW50LiBUaGUgYGtmcmVlX3NlbnNpdGl2ZShjdHgpYCBvbiBlcnJvciBhbmQgdGhlIHJlZmNvdW50IG9mIDEgc2V0dXAgYSBzdHJhaWdodGZvcndhcmQgbGlmZXRpbWUgbWFuYWdlbWVudC4KCk5leHQsIEkmIzM5O20gZXhhbWluaW5nIGBicGZfYWVzX2NiY19jcnlwdGAuIFRoZSBsZW5ndGggY2hlY2tzIGZvciB0aGUgSVYgKGBpdl9sZW4gPT0gQUVTX0JMT0NLX1NJWkVgKSBhbmQgc291cmNlL2Rlc3RpbmF0aW9uIGJ1ZmZlcnMgKGBzcmNfbGVuYCBtdWx0aXBsZSBvZiBgQUVTX0JMT0NLX1NJWkVgIGFuZCBgZHN0X2xlbiAmZ3Q7PSBzcmNfbGVuYCkgYXJlIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgYnVmZmVyIG92ZXJmbG93cyBhbmQgdW5kZXJmbG93cy4gVGhlIHVzZSBvZiBkeW5wdHIgaGVscGVycyBmdXJ0aGVyIHN0cmVuZ3RoZW5zIHRoaXMuIFNhbWUgZm9yIGBicGZfYWVzX2VjYl9jcnlwdGAgd2l0aCB0aGUgSVYgY2hlY2sgKGBpdl9sZW4gPT0gMGApIGFuZCB0aGUgc291cmNlL2Rlc3RpbmF0aW9uIGxlbmd0aCBjaGVja3MuCgpUaGVuIEkmIzM5O20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgd2F5cyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgY2FuIGxlYWsgdG8gdXNlcnNwYWNlLiBCUEYgZHlucHRycyBhcmUgcG9pbnRpbmcgdG8gY2FsbGVyLXByb3ZpZGVkIGJ1ZmZlcnMsIHdoaWNoIGlzIGdvb2QuIFRoZSBgY3R4YCBpcyB6ZXJvZWQgYnkgYGt6YWxsb2Nfb2JqYC4gVGhlIGBhZXNfcHJlcGFyZWtleWAgY2FsbCBpbml0aWFsaXplcyB0aGUga2V5IHNjaGVkdWxlLCBgYWxnb2AgaXMgaW5pdGlhbGl6ZWQgYnkgYGJwZl9jcnlwdG9fZmluZF9hbGdvYC4gTm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoZSBmcmVlaW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5IHdpdGggYGtmcmVlX3NlbnNpdGl2ZWAuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgc3VidGxlIGVkZ2UgY2FzZXM/IElzIHRoZXJlIGEgY2hhbmNlIGBhZXNfcHJlcGFyZWtleWAgY291bGQgbGVhdmUgc29tZXRoaW5nIHVuaW5pdGlhbGl6ZWQgaW4gdGhlIGBzdHJ1Y3QgYWVzX2tleWA/IEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBhZXNfa2V5YCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhZXNfcHJlcGFyZWtleWAgdG8gbWFrZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGFlc19rZXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jPTUzPXN0cnVjdCBhZXNic194dHNfY3R4IHtcbmFyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYy01NC1cdHN0cnVjdCBhZXNic19jdHhcdGtleTtcbmFyY2gvYXJtL2NyeXB0by9hZXMtbmVvbmJzLWdsdWUuYzo1NTpcdHN0cnVjdCBhZXNfa2V5XHRcdGZhbGxiYWNrO1xuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jLTU2LVx0c3RydWN0IGFlc19lbmNrZXlcdHR3ZWFrX2tleTtcbi0tXG5jcnlwdG8vYWVzLmMtMjItXG5jcnlwdG8vYWVzLmM6MjM6c3RhdGljX2Fzc2VydChfX2FsaWdub2ZfXyhzdHJ1Y3QgYWVzX2tleSkgXHUwMDNjPSBDUllQVE9fTUlOQUxJR04pO1xuY3J5cHRvL2Flcy5jLTI0LXN0YXRpY19hc3NlcnQoX19hbGlnbm9mX18oc3RydWN0IGFlc19lbmNrZXkpIFx1MDAzYz0gQ1JZUFRPX01JTkFMSUdOKTtcbi0tXG5jcnlwdG8vYWVzLmM9MjY9c3RhdGljIGludCBjcnlwdG9fYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxuLS1cbmNyeXB0by9hZXMuYy0yOC17XG5jcnlwdG8vYWVzLmM6Mjk6XHRzdHJ1Y3QgYWVzX2tleSAqa2V5ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hZXMuYy0zMC1cbi0tXG5jcnlwdG8vYWVzLmM9MzQ9c3RhdGljIHZvaWQgY3J5cHRvX2Flc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcbmNyeXB0by9hZXMuYy0zNS17XG5jcnlwdG8vYWVzLmM6MzY6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hZXMuYy0zNy1cbi0tXG5jcnlwdG8vYWVzLmM9NDE9c3RhdGljIHZvaWQgY3J5cHRvX2Flc19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcbmNyeXB0by9hZXMuYy00Mi17XG5jcnlwdG8vYWVzLmM6NDM6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hZXMuYy00NC1cbi0tXG5jcnlwdG8vYWVzLmM9MTM5PXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7XG4tLVxuY3J5cHRvL2Flcy5jLTE0NC1cdC5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsXG5jcnlwdG8vYWVzLmM6MTQ1Olx0LmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcbmNyeXB0by9hZXMuYy0xNDYtXHQuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLFxuLS1cbmNyeXB0by9hZXMuYz0yMTM9Y3J5cHRvX2Flc19za2NpcGhlcl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxuLS1cbmNyeXB0by9hZXMuYy0yMTUte1xuY3J5cHRvL2Flcy5jOjIxNjpcdHN0cnVjdCBhZXNfa2V5ICprZXkgPSBjcnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7XG5jcnlwdG8vYWVzLmMtMjE3LVxuLS1cbmNyeXB0by9hZXMuYz0zNDg9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBjcnlwdG9fYWVzX2VjYl9lbmNyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpXG5jcnlwdG8vYWVzLmMtMzQ5LXtcbmNyeXB0by9hZXMuYzozNTA6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID1cbmNyeXB0by9hZXMuYy0zNTEtXHRcdGNyeXB0b19za2NpcGhlcl9jdHgoY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpKTtcbi0tXG5jcnlwdG8vYWVzLmM9MzYwPXN0YXRpYyBfX21heWJlX3VudXNlZCBpbnQgY3J5cHRvX2Flc19lY2JfZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTM2MS17XG5jcnlwdG8vYWVzLmM6MzYyOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtMzYzLVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTM3ND1zdGF0aWMgdm9pZCBjcnlwdG9fYWVzX2NiY19lbmNyeXB0X3NnKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsXG5jcnlwdG8vYWVzLmMtMzc1LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNyeXB0bGVuLFxuY3J5cHRvL2Flcy5jOjM3NjpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpXG5jcnlwdG8vYWVzLmMtMzc3LXtcbi0tXG5jcnlwdG8vYWVzLmM9MzgyPXN0YXRpYyB2b2lkIGNyeXB0b19hZXNfY2JjX2RlY3J5cHRfc2coc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSxcbmNyeXB0by9hZXMuYy0zODMtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgY3J5cHRsZW4sXG5jcnlwdG8vYWVzLmM6Mzg0Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcbmNyeXB0by9hZXMuYy0zODUte1xuLS1cbmNyeXB0by9hZXMuYz0zOTA9c3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBjcnlwdG9fYWVzX2NiY19lbmNyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpXG5jcnlwdG8vYWVzLmMtMzkxLXtcbmNyeXB0by9hZXMuYzozOTI6XHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID1cbmNyeXB0by9hZXMuYy0zOTMtXHRcdGNyeXB0b19za2NpcGhlcl9jdHgoY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpKTtcbi0tXG5jcnlwdG8vYWVzLmM9NDAxPXN0YXRpYyBfX21heWJlX3VudXNlZCBpbnQgY3J5cHRvX2Flc19jYmNfZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTQwMi17XG5jcnlwdG8vYWVzLmM6NDAzOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDA0LVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTQyMD1jcnlwdG9fYWVzX2NiY19jdHNfY3J5cHRfbm9ubGluZWFyKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGJvb2wgZW5jKVxuY3J5cHRvL2Flcy5jLTQyMS17XG5jcnlwdG8vYWVzLmM6NDIyOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDIzLVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTQ1ND1jcnlwdG9fYWVzX2NiY19jdHNfZW5jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTQ1NS17XG5jcnlwdG8vYWVzLmM6NDU2Olx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDU3LVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTQ3MT1jcnlwdG9fYWVzX2NiY19jdHNfZGVjcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKVxuY3J5cHRvL2Flcy5jLTQ3Mi17XG5jcnlwdG8vYWVzLmM6NDczOlx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XG5jcnlwdG8vYWVzLmMtNDc0LVx0XHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XG4tLVxuY3J5cHRvL2Flcy5jPTYwOD1zdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBza2NpcGhlcl9hbGdzW10gPSB7XG4tLVxuY3J5cHRvL2Flcy5jLTYxNC1cdFx0LmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLFxuY3J5cHRvL2Flcy5jOjYxNTpcdFx0LmJhc2UuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGFlc19rZXkpLFxuY3J5cHRvL2Flcy5jLTYxNi1cdFx0LmJhc2UuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLFxuLS1cbmNyeXB0by9hZXMuYy02MjktXHRcdC5iYXNlLmNyYV9ibG9ja3NpemUgPSBBRVNfQkxPQ0tfU0laRSxcbmNyeXB0by9hZXMuYzo2MzA6XHRcdC5iYXNlLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcbmNyeXB0by9hZXMuYy02MzEtXHRcdC5iYXNlLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSxcbi0tXG5jcnlwdG8vYWVzLmMtNjQ1LVx0XHQuYmFzZS5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsXG5jcnlwdG8vYWVzLmM6NjQ2Olx0XHQuYmFzZS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVzX2tleSksXG5jcnlwdG8vYWVzLmMtNjQ3LVx0XHQuYmFzZS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYz0xMDI1PXN0YXRpYyBpbnQgY2hjcl91cGRhdGVfdHdlYWsoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgdTggKml2LFxuLS1cbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTAzMC1cdHN0cnVjdCBjaGNyX3NrY2lwaGVyX3JlcV9jdHggKnJlcWN0eCA9IHNrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7XG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwMzE6XHRzdHJ1Y3QgYWVzX2tleSBhZXM7XG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jLTEwMzItXHRpbnQgcmV0LCBpO1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaD00NT12b2lkIGFlc19jYmNfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjQ2Olx0XHQgICAgIHU4IGl2W2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSwgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSk7XG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNDctXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTczPXZvaWQgYWVzX2NiY19jdHNfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTc0LVx0XHRcdCB1OCBpdlthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg6NzU6XHRcdFx0IGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpO1xuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTc2LVxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaD00Nj12b2lkIGFlc19lY2JfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxuaW5jbHVkZS9jcnlwdG8vYWVzLWVjYi5oOjQ3Olx0XHQgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpO1xuaW5jbHVkZS9jcnlwdG8vYWVzLWVjYi5oLTQ4LVxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy14dHMuaD0xOT1zdHJ1Y3QgYWVzX3h0c19rZXkge1xuaW5jbHVkZS9jcnlwdG8vYWVzLXh0cy5oLTIwLVx0LyogcHJpdmF0ZTogKi9cbmluY2x1ZGUvY3J5cHRvL2Flcy14dHMuaDoyMTpcdHN0cnVjdCBhZXNfa2V5IG1haW5fa2V5O1xuaW5jbHVkZS9jcnlwdG8vYWVzLXh0cy5oLTIyLVx0c3RydWN0IGFlc19lbmNrZXkgdHdlYWtfa2V5O1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTU5PXVuaW9uIGFlc19pbnZrZXlfYXJjaCB7XG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtODYtICpcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjg3OiAqIE5vdGUgdGhhdCB0aGlzIHN0cnVjdCBpcyBhYm91dCBoYWxmIHRoZSBzaXplIG9mIHN0cnVjdCBhZXNfa2V5LiAgVGhpcyBpc1xuaW5jbHVkZS9jcnlwdG8vYWVzLmg6ODg6ICogc2VwYXJhdGUgZnJvbSBzdHJ1Y3QgYWVzX2tleSBzbyB0aGF0IG1vZGVzIHRoYXQgbmVlZCBvbmx5IEFFUyBlbmNyeXB0aW9uXG5pbmNsdWRlL2NyeXB0by9hZXMuaC04OS0gKiAoZS5nLiBBRVMtR0NNLCBBRVMtQ1RSLCBBRVMtQ01BQywgdHdlYWsga2V5IGluIEFFUy1YVFMpIGRvbiYjMzk7dCBpbmN1ciB0aGUgdGltZVxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTk3PXN0cnVjdCBhZXNfZW5ja2V5IHtcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMDQtLyoqXG5pbmNsdWRlL2NyeXB0by9hZXMuaDoxMDU6ICogc3RydWN0IGFlc19rZXkgLSBBbiBBRVMga2V5IHByZXBhcmVkIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMDYtICogQGFlc19lbmNrZXk6IENvbW1vbiBmaWVsZHMgYW5kIHRoZSBrZXkgcHJlcGFyZWQgZm9yIGVuY3J5cHRpb25cbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMTItICovXG5pbmNsdWRlL2NyeXB0by9hZXMuaDoxMTM6c3RydWN0IGFlc19rZXkge1xuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMTE0LVx0c3RydWN0IGFlc19lbmNrZXk7IC8qIEluY2x1ZGUgYWxsIGZpZWxkcyBvZiBhZXNfZW5ja2V5LiAqL1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTMwOD12b2lkIGFlc19zcGFyYzY0X2N0cl9jcnlwdF8yNTYoY29uc3QgdTY0ICprZXksIGNvbnN0IHU2NCAqaW5wdXQsIHU2NCAqb3V0cHV0LFxuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMyMy0gKlxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzI0OiAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHplcm9pemluZyBib3RoIHRoZSBzdHJ1Y3QgYWVzX2tleSBhbmQgdGhlIHJhd1xuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzI1LSAqIGtleSBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzM0LSAqL1xuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzM1OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbik7XG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzYtXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzQ1LSAqIGNpcGhlci4gIFR5cGljYWxseSB0aGlzIGludm9sdmVzIGV4cGFuZGluZyB0aGUgcmF3IGtleSBpbnRvIG9ubHkgdGhlIHN0YW5kYXJkXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozNDY6ICogcm91bmQga2V5cywgcmVzdWx0aW5nIGluIGEgc3RydWN0IGFib3V0IGhhbGYgdGhlIHNpemUgb2Ygc3RydWN0IGFlc19rZXkuXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNDctICpcbi0tXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zNjM9dHlwZWRlZiB1bmlvbiB7XG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNjQtXHRjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqZW5jX2tleTtcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM2NTpcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICpmdWxsX2tleTtcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM2Ni19IGFlc19lbmNyeXB0X2FyZyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7XG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzcwLSAqIEBrZXk6IFRoZSBBRVMga2V5LCBhcyBhIHBvaW50ZXIgdG8gZWl0aGVyIGFuIGVuY3J5cHRpb24tb25seSBrZXlcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM3MTogKlx0IChzdHJ1Y3QgYWVzX2VuY2tleSkgb3IgYSBmdWxsLCBiaWRpcmVjdGlvbmFsIGtleSAoc3RydWN0IGFlc19rZXkpLlxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzcyLSAqIEBvdXQ6IEJ1ZmZlciB0byBzdG9yZSB0aGUgY2lwaGVydGV4dCBibG9ja1xuLS1cbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTM3Nz12b2lkIGFlc19lbmNyeXB0KGFlc19lbmNyeXB0X2FyZyBrZXksIHU4IG91dFthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXG4tLVxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzg3LSAqL1xuaW5jbHVkZS9jcnlwdG8vYWVzLmg6Mzg4OnZvaWQgYWVzX2RlY3J5cHQoY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSwgdTggb3V0W2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4OS1cdFx0IGNvbnN0IHU4IGluW2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSk7XG4tLVxua2VybmVsL2JwZi9jcnlwdG8uYz03MT1zdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLS1cbmtlcm5lbC9icGYvY3J5cHRvLmMtNzMtXHR1bmlvbiB7XG5rZXJuZWwvYnBmL2NyeXB0by5jOjc0Olx0XHRzdHJ1Y3QgYWVzX2tleSBhZXM7XG5rZXJuZWwvYnBmL2NyeXB0by5jLTc1LVx0fSBrZXk7XG4tLVxubGliL2NyeXB0by9hZXMuYz00NzA9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vYWVzLmMtNDc2LVxubGliL2NyeXB0by9hZXMuYzo0Nzc6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9hZXMuYy00NzgtXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmxpYi9jcnlwdG8vYWVzLmM9NDg1PXN0YXRpYyBpbnQgX19hZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2VuY2tleSAqZW5jX2tleSxcbi0tXG5saWIvY3J5cHRvL2Flcy5jLTQ5Ny1cbmxpYi9jcnlwdG8vYWVzLmM6NDk4OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbilcbmxpYi9jcnlwdG8vYWVzLmMtNDk5LXtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTUxNj1FWFBPUlRfU1lNQk9MKGFlc19lbmNyeXB0KTtcbmxpYi9jcnlwdG8vYWVzLmMtNTE3LVxubGliL2NyeXB0by9hZXMuYzo1MTg6dm9pZCBhZXNfZGVjcnlwdChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LCB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxubGliL2NyeXB0by9hZXMuYy01MTktXHRcdCBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXG4tLVxubGliL2NyeXB0by9hZXMuYz01MjY9c3RhdGljIHZvaWQgX19pbml0IGFlc19maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtNTI3LXtcbmxpYi9jcnlwdG8vYWVzLmM6NTI4Olx0c3RydWN0IGFlc19rZXkga2V5O1xubGliL2NyeXB0by9hZXMuYy01MjktXHR1OCBkYXRhW0FFU19CTE9DS19TSVpFXTtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTc3Mz1zdGF0aWMgYm9vbCBhZXNfZWNiX2RlY3J5cHRfYXJjaCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxubGliL2NyeXB0by9hZXMuYzo3NzQ6XHRcdFx0XHQgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcbmxpYi9jcnlwdG8vYWVzLmMtNzc1LXtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTc5Nj12b2lkIGFlc19lY2JfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxubGliL2NyeXB0by9hZXMuYzo3OTc6XHRcdCAgICAgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcbmxpYi9jcnlwdG8vYWVzLmMtNzk4LXtcbi0tXG5saWIvY3J5cHRvL2Flcy5jPTgxND1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2VjYl9maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtODE1LXtcbmxpYi9jcnlwdG8vYWVzLmM6ODE2Olx0c3RydWN0IGFlc19rZXkga2V5O1xubGliL2NyeXB0by9hZXMuYy04MTctXHR1OCBkYXRhW3NpemVvZihmaXBzX3Rlc3RfZGF0YSldO1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9ODUzPXN0YXRpYyBib29sIGFlc19jYmNfZGVjcnlwdF9hcmNoKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG5saWIvY3J5cHRvL2Flcy5jLTg1NC1cdFx0XHRcdCB1OCBpdltBRVNfQkxPQ0tfU0laRV0sXG5saWIvY3J5cHRvL2Flcy5jOjg1NTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxubGliL2NyeXB0by9hZXMuYy04NTYte1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9ODg3PXZvaWQgYWVzX2NiY19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sIHU4IGl2W0FFU19CTE9DS19TSVpFXSxcbmxpYi9jcnlwdG8vYWVzLmM6ODg4Olx0XHQgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpXG5saWIvY3J5cHRvL2Flcy5jLTg4OS17XG4tLVxubGliL2NyeXB0by9hZXMuYz05MzU9c3RhdGljIGJvb2wgYWVzX2NiY19jdHNfZGVjcnlwdF9hcmNoKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG5saWIvY3J5cHRvL2Flcy5jLTkzNi1cdFx0XHRcdCAgICAgdTggaXZbQUVTX0JMT0NLX1NJWkVdLFxubGliL2NyeXB0by9hZXMuYzo5Mzc6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkpXG5saWIvY3J5cHRvL2Flcy5jLTkzOC17XG4tLVxubGliL2NyeXB0by9hZXMuYz05ODI9dm9pZCBhZXNfY2JjX2N0c19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXG5saWIvY3J5cHRvL2Flcy5jOjk4MzpcdFx0XHQgdTggaXZbQUVTX0JMT0NLX1NJWkVdLCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxubGliL2NyeXB0by9hZXMuYy05ODQte1xuLS1cbmxpYi9jcnlwdG8vYWVzLmM9MTAyND1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtMTAyNS17XG5saWIvY3J5cHRvL2Flcy5jOjEwMjY6XHRzdHJ1Y3QgYWVzX2tleSBrZXk7XG5saWIvY3J5cHRvL2Flcy5jLTEwMjctXHR1OCBpdltBRVNfQkxPQ0tfU0laRV07XG4tLVxubGliL2NyeXB0by9hZXMuYz0xMDQ3PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfY2JjX2N0c19maXBzX3Rlc3Qodm9pZClcbmxpYi9jcnlwdG8vYWVzLmMtMTA0OC17XG5saWIvY3J5cHRvL2Flcy5jOjEwNDk6XHRzdHJ1Y3QgYWVzX2tleSBrZXk7XG5saWIvY3J5cHRvL2Flcy5jLTEwNTAtXHR1OCBpdltBRVNfQkxPQ0tfU0laRV07XG4tLVxubGliL2NyeXB0by9hcm0vYWVzLmg9MjQ9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vYXJtL2Flcy5oLTQwLVxubGliL2NyeXB0by9hcm0vYWVzLmg6NDE6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9hcm0vYWVzLmgtNDItXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg9MTYxPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcbi0tXG5saWIvY3J5cHRvL2FybTY0L2Flcy5oLTE3Mi1cbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg6MTczOnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmgtMTc0LVx0XHRcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcbi0tXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg9NjE9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC02OS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaDo3MDpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNzEtXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD0xNjY9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xOTUtXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmg6MTk2OnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSwgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xOTctXHRcdFx0ICAgICBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXG4tLVxubGliL2NyeXB0by9yaXNjdi9hZXMuaD0yNj1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXG4tLVxubGliL2NyeXB0by9yaXNjdi9hZXMuaC0zOC1cbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmg6Mzk6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9yaXNjdi9hZXMuaC00MC1cdFx0XHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXG4tLVxubGliL2NyeXB0by9zMzkwL2Flcy5oPTczPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcbi0tXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtODEtXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg6ODI6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by9zMzkwL2Flcy5oLTgzLVx0XHRcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcbi0tXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oPTg2PXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcbi0tXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oLTEwNC1cbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg6MTA1OnN0YXRpYyB2b2lkIGFlc19zcGFyYzY0X2RlY3J5cHQoY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtMTA2LVx0XHRcdFx0Y29uc3QgdTMyICppbnB1dCwgdTMyICpvdXRwdXQpXG4tLVxubGliL2NyeXB0by9zcGFyYy9hZXMuaC0xMTUtXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oOjExNjpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oLTExNy1cdFx0XHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXG4tLVxubGliL2NyeXB0by94ODYvYWVzLmg9NTI9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxuLS1cbmxpYi9jcnlwdG8veDg2L2Flcy5oLTY0LVxubGliL2NyeXB0by94ODYvYWVzLmg6NjU6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxubGliL2NyeXB0by94ODYvYWVzLmgtNjYtXHRcdFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ4NwoJCQkJCQkJb3V0cHV0OiAyOTQKCQkJCQkJCXRob3VnaHRzOiA1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIEtNU0FOIGlzICpyZWFsbHkqIG5lZWRlZCBoZXJlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIEJQRiBjcnlwdG8gc3Vic3lzdGVtLCBzaGlmdGluZyBmcm9tIHRoZSBgY3J5cHRvX3RmbWAgZHluYW1pYyByZWdpc3RyYXRpb24gYXBwcm9hY2ggdG8gZGlyZWN0IEFFUyBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGxzLiBXZSYjMzk7cmUgZ2V0dGluZyByaWQgb2YgYGJwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIHVwZGF0aW5nIHRoZSBgYnBmX2NyeXB0b19jdHhgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gbWVtb3J5IGNvbnNpZGVyYXRpb25zLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCBLTVNBTiBpcyBhbGwgYWJvdXQuIFRoZSBrZXkgcGFydCBpcyB0aGF0IGBzdHJ1Y3QgYnBmX2NyeXB0b19jdHhgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoICpndWFyYW50ZWVzKiB0aGF0IGV2ZXJ5dGhpbmcgaXMgemVyb2VkIG91dCBmcm9tIHRoZSBnZXQtZ28uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmdpbmcgYXJvdW5kLiBUaGUga2V5IHNjaGVkdWxlIHdpdGhpbiBgY3R4LSZndDtrZXkuYWVzYCBpcyB0aGVuIHByZXBhcmVkIHdpdGggYGFlc19wcmVwYXJla2V5YC4gVGhhdCBzb2xpZGlmaWVzIHRoZSBrZXkgbWF0ZXJpYWwuCgpMb29raW5nIGF0IGRhdGEgdHJhbnNmZXJzLCB3ZSYjMzk7dmUgZ290IGR5bnB0cnMgZm9yIHRoZSBpbnB1dC9vdXRwdXQgYnVmZmVycyBhbmQgdGhlIElWLiBDcml0aWNhbGx5LCB3ZSBoYXZlIGNoZWNrcyBpbiBgYnBmX2Flc19jYmNfY3J5cHRgIGFuZCBgYnBmX2Flc19lY2JfY3J5cHRgIGZvciBidWZmZXIgYm91bmRzIGFuZCBhbGlnbm1lbnQuIE5hbWVseSwgYGl2X2xlbiAhPSBBRVNfQkxPQ0tfU0laRWAsIGBzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiAmbHQ7IHNyY19sZW5gLiBBbHNvLCBpbiBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYCwgdGhlIGBwYXJhbXNgIGFyZSB2YWxpZGF0ZWQgd2l0aCBjaGVja3MgZm9yIGBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpYCBhbmQgYHJlc2VydmVkYCBmaWVsZHMuIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgdGFraW5nIGRhdGEgZGlyZWN0bHkgZnJvbSBjYWxsZXIgZHlucHRycyBhbmQgd3JpdGluZyBlbmNyeXB0ZWQvZGVjcnlwdGVkIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRlc3RpbmF0aW9uIGR5bnB0cnMuIFRoaXMgaXMgZ29vZDogbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgYW5kIG5vIGluZm9ybWF0aW9uIGxlYWtzLgoKRXNzZW50aWFsbHksIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgaGVyZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlcnNwYWNlLgoKRmluYWxseSwgd2hpbGUgd2UgY2FuIGFsd2F5cyBydW4gaW50byBtZW1vcnkgaXNzdWVzIHdpdGggQlBGIChlLmcuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGJ1ZmZlciBvdmVycnVucyksIGFueSBpc3N1ZXMgd2l0aCBkeW5wdHJzLCBtZW1vcnkgYm91bmRhcmllcyBhbmQgbGlmZXRpbWVzIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciB0aGUgQlBGIHZlcmlmaWVyIGR5bnB0ciBjaGVja3MuIFdlICpkb24mIzM5O3QqIHJlcXVpcmUgS01TQU4gaGVyZS4gTXkgY29uY2x1c2lvbjogYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBCUEYgY3J5cHRvIGtmdW5jcyBpbXBsZW1lbnRhdGlvbiBieSByZXBsYWNpbmcgdGhlIGdlbmVyaWMgY3J5cHRvIHRmbSByZWdpc3RyYXRpb24gYXJjaGl0ZWN0dXJlIHdpdGggZGlyZWN0IGludm9jYXRpb25zIG9mIEFFUyBsaWJyYXJ5IGZ1bmN0aW9ucyAoQ1JZUFRPX0xJQl9BRVNfQ0JDIGFuZCBDUllQVE9fTElCX0FFU19FQ0IpLiBcblxuTWVtb3J5IHNhZmV0eSBhbmFseXNpczpcbjEuIE1lbW9yeSBBbGxvY2F0aW9uIFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIGNvbnRleHQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAgYW5kIHRoZSBgYWVzX2tleWAgdW5pb24pIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBLZXkgc2V0dXAgaXMgaGFuZGxlZCBieSBgYWVzX3ByZXBhcmVrZXkoKWAuIENsZWFudXAgaXMgaGFuZGxlZCB2aWEgYGtmcmVlX3NlbnNpdGl2ZSgpYC5cbjIuIEJ1ZmZlcnMgXHUwMDI2IEluZm8gTGVha3M6IERhdGEgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvcGVyYXRlIGRpcmVjdGx5IG9uIGR5bnB0ciBidWZmZXJzIHN1cHBsaWVkIGJ5IEJQRiBwcm9ncmFtcyBhZnRlciB2ZXJpZnlpbmcgYmxvY2sgYWxpZ25tZW50IGFuZCBib3VuZHMgKGBBRVNfQkxPQ0tfU0laRWAgY2hlY2tzLCBgZHN0X2xlbiBcdTAwM2U9IHNyY19sZW5gKS4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nL2NvbnRyb2wgZmxvdy5cbjMuIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgZHlucHRyIGFjY2Vzc2VzLCBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9uIGJ1Z3MsIG9yIGxpZmV0aW1lL3JlZmNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgQlBGIHZlcmlmaWVyL2RlYnVnIGluZnJhc3RydWN0dXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmNzIGltcGxlbWVudGF0aW9uIGJ5IHJlcGxhY2luZyB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBhcmNoaXRlY3R1cmUgd2l0aCBkaXJlY3QgaW52b2NhdGlvbnMgb2YgQUVTIGxpYnJhcnkgZnVuY3Rpb25zIChDUllQVE9fTElCX0FFU19DQkMgYW5kIENSWVBUT19MSUJfQUVTX0VDQikuIFxuXG5NZW1vcnkgc2FmZXR5IGFuYWx5c2lzOlxuMS4gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgY29udGV4dCBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBhbmQgdGhlIGBhZXNfa2V5YCB1bmlvbikgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEtleSBzZXR1cCBpcyBoYW5kbGVkIGJ5IGBhZXNfcHJlcGFyZWtleSgpYC4gQ2xlYW51cCBpcyBoYW5kbGVkIHZpYSBga2ZyZWVfc2Vuc2l0aXZlKClgLlxuMi4gQnVmZmVycyBcdTAwMjYgSW5mbyBMZWFrczogRGF0YSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9wZXJhdGUgZGlyZWN0bHkgb24gZHlucHRyIGJ1ZmZlcnMgc3VwcGxpZWQgYnkgQlBGIHByb2dyYW1zIGFmdGVyIHZlcmlmeWluZyBibG9jayBhbGlnbm1lbnQgYW5kIGJvdW5kcyAoYEFFU19CTE9DS19TSVpFYCBjaGVja3MsIGBkc3RfbGVuIFx1MDAzZT0gc3JjX2xlbmApLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcvY29udHJvbCBmbG93LlxuMy4gU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBkeW5wdHIgYWNjZXNzZXMsIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb24gYnVncywgb3IgbGlmZXRpbWUvcmVmY291bnRpbmcgaXNzdWVzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBCUEYgdmVyaWZpZXIvZGVidWcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOToyNS4yMjkzNTY3NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIwMjYwNjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0NSWVBUT1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X2FjcXVpcmVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLFxuICAgIFwiYnBmX2NyeXB0b19kZWNyeXB0XCIsXG4gICAgXCJicGZfY3J5cHRvX2VuY3J5cHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmNzIGltcGxlbWVudGF0aW9uIGJ5IHJlcGxhY2luZyB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBhcmNoaXRlY3R1cmUgd2l0aCBkaXJlY3QgaW52b2NhdGlvbnMgb2YgQUVTIGxpYnJhcnkgZnVuY3Rpb25zIChDUllQVE9fTElCX0FFU19DQkMgYW5kIENSWVBUT19MSUJfQUVTX0VDQikuIFxcblxcbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XFxuMS4gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIGNvbnRleHQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAgYW5kIHRoZSBgYWVzX2tleWAgdW5pb24pIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBLZXkgc2V0dXAgaXMgaGFuZGxlZCBieSBgYWVzX3ByZXBhcmVrZXkoKWAuIENsZWFudXAgaXMgaGFuZGxlZCB2aWEgYGtmcmVlX3NlbnNpdGl2ZSgpYC5cXG4yLiBCdWZmZXJzIFxcdTAwMjYgSW5mbyBMZWFrczogRGF0YSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9wZXJhdGUgZGlyZWN0bHkgb24gZHlucHRyIGJ1ZmZlcnMgc3VwcGxpZWQgYnkgQlBGIHByb2dyYW1zIGFmdGVyIHZlcmlmeWluZyBibG9jayBhbGlnbm1lbnQgYW5kIGJvdW5kcyAoYEFFU19CTE9DS19TSVpFYCBjaGVja3MsIGBkc3RfbGVuIFxcdTAwM2U9IHNyY19sZW5gKS4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nL2NvbnRyb2wgZmxvdy5cXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEJQRiBjcnlwdG8gc3VwcG9ydCBieSByZW1vdmluZyB0aGUgZHluYW1pYyBjcnlwdG8gdHlwZSByZWdpc3RyYXRpb24gaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRpbmcgZGlyZWN0IEFFUy1DQkMgYW5kIEFFUy1FQ0IgbGlicmFyeSBpbnRlZ3JhdGlvbi4gSXQgaW50cm9kdWNlcyBDT05GSUdfQlBGX0NSWVBUTyBhbmQgbW9kaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmMgaGFuZGxlcnMgKGNvbnRleHQgY3JlYXRpb24sIGtleSBzZXR1cCwgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50KSwgbWFraW5nIHRoZXNlIGZ1bmN0aW9ucyBpbXBvcnRhbnQgdGFyZ2V0cyBmb3IgQlBGIHByb2dyYW0gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6MjUuMjI5MzYzNzA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwNjkxMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTdiNDA5MjIzZTI1MWUwYTIwYjg4OWFiN2E3NmI1OTc4MzI4ZmNlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjI5OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAzYTE5ZGE3NGQwMGM5Li4xNmYxMzI3MGNlMWY5IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtNDkzNiw4ICs0OTM2LDYgQEAgQlBGIFtDUllQVE9dXFxuIE06XFx0VmFkaW0gRmVkb3JlbmtvIFxcdTAwM2N2YWRpbS5mZWRvcmVua29AbGludXguZGV2XFx1MDAzZVxcbiBMOlxcdGJwZkB2Z2VyLmtlcm5lbC5vcmdcXG4gUzpcXHRNYWludGFpbmVkXFxuLUY6XFx0Y3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY1xcbi1GOlxcdGluY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXFxuIEY6XFx0a2VybmVsL2JwZi9jcnlwdG8uY1xcbiBcXG4gQlBGIFtET0NVTUVOVEFUSU9OXSAoUmVsYXRlZCB0byBTdGFuZGFyZGl6YXRpb24pXFxuZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZVxcbmluZGV4IDgzODZkNTVhOTc1NWUuLjMzYmI1YWQ1OTVlOGYgMTAwNjQ0XFxuLS0tIGEvY3J5cHRvL01ha2VmaWxlXFxuKysrIGIvY3J5cHRvL01ha2VmaWxlXFxuQEAgLTIyLDkgKzIyLDYgQEAgY3J5cHRvX3NrY2lwaGVyLXkgKz0gbHNrY2lwaGVyLm9cXG4gY3J5cHRvX3NrY2lwaGVyLXkgKz0gc2tjaXBoZXIub1xcbiBcXG4gb2JqLSQoQ09ORklHX0NSWVBUT19TS0NJUEhFUjIpICs9IGNyeXB0b19za2NpcGhlci5vXFxuLWlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gYnBmX2NyeXB0b19za2NpcGhlci5vXFxuLWVuZGlmXFxuIFxcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vXFxuIG9iai0kKENPTkZJR19DUllQVE9fRUNIQUlOSVYpICs9IGVjaGFpbml2Lm9cXG5kaWZmIC0tZ2l0IGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuYyBiL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBhODg3OThkM2U4Yzg3Li4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSw4MyArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2NyeXB0by5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcXHUwMDNlXFxuLVxcbi1zdGF0aWMgdm9pZCAqYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ28pXFxuLXtcXG4tXFx0cmV0dXJuIGNyeXB0b19hbGxvY19sc2tjaXBoZXIoYWxnbywgMCwgMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtKHZvaWQgKnRmbSlcXG4te1xcbi1cXHRjcnlwdG9fZnJlZV9sc2tjaXBoZXIodGZtKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyhjb25zdCBjaGFyICphbGdvKVxcbi17XFxuLVxcdHJldHVybiBjcnlwdG9faGFzX3NrY2lwaGVyKGFsZ28sIENSWVBUT19BTEdfVFlQRV9MU0tDSVBIRVIsIENSWVBUT19BTEdfVFlQRV9NQVNLKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKVxcbi17XFxuLVxcdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX3NldGtleSh0Zm0sIGtleSwga2V5bGVuKTtcXG4tfVxcbi1cXG4tc3RhdGljIHUzMiBicGZfY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3Modm9pZCAqdGZtKVxcbi17XFxuLVxcdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyh0Zm0pO1xcbi19XFxuLVxcbi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh2b2lkICp0Zm0pXFxuLXtcXG4tXFx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfaXZzaXplKHRmbSk7XFxuLX1cXG4tXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHZvaWQgKnRmbSlcXG4te1xcbi1cXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUodGZtKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgdTggKnNpdilcXG4te1xcbi1cXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHZvaWQgKnRmbSwgY29uc3QgdTggKnNyYywgdTggKmRzdCxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgdTggKnNpdilcXG4te1xcbi1cXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9kZWNyeXB0KHRmbSwgc3JjLCBkc3QsIGxlbiwgc2l2KTtcXG4tfVxcbi1cXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgYnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSA9IHtcXG4tXFx0LmFsbG9jX3RmbVxcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfYWxsb2NfdGZtLFxcbi1cXHQuZnJlZV90Zm1cXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2ZyZWVfdGZtLFxcbi1cXHQuaGFzX2FsZ29cXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2hhc19hbGdvLFxcbi1cXHQuc2V0a2V5XFx0XFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksXFxuLVxcdC5lbmNyeXB0XFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LFxcbi1cXHQuZGVjcnlwdFxcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCxcXG4tXFx0Lml2c2l6ZVxcdFxcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfaXZzaXplLFxcbi1cXHQuc3RhdGVzaXplXFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zdGF0ZXNpemUsXFxuLVxcdC5nZXRfZmxhZ3NcXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2dldF9mbGFncyxcXG4tXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tXFx0Lm5hbWVcXHRcXHQ9IFxcXCJza2NpcGhlclxcXCIsXFxuLX07XFxuLVxcbi1zdGF0aWMgaW50IF9faW5pdCBicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQodm9pZClcXG4te1xcbi1cXHRyZXR1cm4gYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKFxcdTAwMjZicGZfY3J5cHRvX2xza2NpcGhlcl90eXBlKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgX19leGl0IGJwZl9jcnlwdG9fc2tjaXBoZXJfZXhpdCh2b2lkKVxcbi17XFxuLVxcdGludCBlcnIgPSBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShcXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XFxuLVxcdFdBUk5fT05fT05DRShlcnIpO1xcbi19XFxuLVxcbi1tb2R1bGVfaW5pdChicGZfY3J5cHRvX3NrY2lwaGVyX2luaXQpO1xcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xcbi1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuLU1PRFVMRV9ERVNDUklQVElPTihcXFwiU3ltbWV0cmljIGtleSBjaXBoZXIgc3VwcG9ydCBmb3IgQlBGXFxcIik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBhNDFlNzFkNGUyZDlmLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMjQgKzAsMCBAQFxcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4tI2lmbmRlZiBfQlBGX0NSWVBUT19IXFxuLSNkZWZpbmUgX0JQRl9DUllQVE9fSFxcbi1cXG4tc3RydWN0IGJwZl9jcnlwdG9fdHlwZSB7XFxuLVxcdHZvaWQgKigqYWxsb2NfdGZtKShjb25zdCBjaGFyICphbGdvKTtcXG4tXFx0dm9pZCAoKmZyZWVfdGZtKSh2b2lkICp0Zm0pO1xcbi1cXHRpbnQgKCpoYXNfYWxnbykoY29uc3QgY2hhciAqYWxnbyk7XFxuLVxcdGludCAoKnNldGtleSkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTtcXG4tXFx0aW50ICgqc2V0YXV0aHNpemUpKHZvaWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKTtcXG4tXFx0aW50ICgqZW5jcnlwdCkodm9pZCAqdGZtLCBjb25zdCB1OCAqc3JjLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpO1xcbi1cXHRpbnQgKCpkZWNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XFxuLVxcdHVuc2lnbmVkIGludCAoKml2c2l6ZSkodm9pZCAqdGZtKTtcXG4tXFx0dW5zaWduZWQgaW50ICgqc3RhdGVzaXplKSh2b2lkICp0Zm0pO1xcbi1cXHR1MzIgKCpnZXRfZmxhZ3MpKHZvaWQgKnRmbSk7XFxuLVxcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xcbi1cXHRjaGFyIG5hbWVbMTRdO1xcbi19O1xcbi1cXG4taW50IGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTtcXG4taW50IGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xcbi1cXG4tI2VuZGlmIC8qIF9CUEZfQ1JZUFRPX0ggKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXFxuaW5kZXggZWIzZGUzNTczNGYwOS4uODIyNTk5YjQyYmUyZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL0tjb25maWdcXG4rKysgYi9rZXJuZWwvYnBmL0tjb25maWdcXG5AQCAtODcsNiArODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcXG4gXFxuIFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cXG4gXFxuK2NvbmZpZyBCUEZfQ1JZUFRPXFxuK1xcdGRlZl9ib29sIHlcXG4rXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbitcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNfQ0JDXFxuK1xcdHNlbGVjdCBDUllQVE9fTElCX0FFU19FQ0JcXG4rXFx0aGVscFxcbitcXHQgIFByb3ZpZGUgdGhlIGtmdW5jcyBuZWVkZWQgZm9yIEJQRiBwcm9ncmFtcyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0XFxuK1xcdCAgZGF0YS4gVGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSBBRVMtQ0JDIGFuZCBBRVMtRUNCLlxcbitcXG4gc291cmNlIFxcXCJrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1xcXCJcXG4gXFxuIGNvbmZpZyBCUEZfTFNNXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvTWFrZWZpbGUgYi9rZXJuZWwvYnBmL01ha2VmaWxlXFxuaW5kZXggOTAyNTVkODBlNWJlNi4uYWIyZTVkMjc4MmU2ZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlXFxuKysrIGIva2VybmVsL2JwZi9NYWtlZmlsZVxcbkBAIC01NSw5ICs1NSw3IEBAIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cXG4gb2JqLSR7Q09ORklHX0JQRl9MU019ICs9IGJwZl9sc21fcHJvdG8ubyBicGZfbHNtLm9cXG4gZW5kaWZcXG4taWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxcbi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNyeXB0by5vXFxuLWVuZGlmXFxuK29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSArPSBjcnlwdG8ub1xcbiBvYmotJChDT05GSUdfQlBGX1BSRUxPQUQpICs9IHByZWxvYWQvXFxuIFxcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY3J5cHRvLmMgYi9rZXJuZWwvYnBmL2NyeXB0by5jXFxuaW5kZXggNTFmODljZWNlZmI0ZC4uOGNkYzE2ZjliMzc0YSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jXFxuKysrIGIva2VybmVsL2JwZi9jcnlwdG8uY1xcbkBAIC0xLDE5ICsxLDEzIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcXHUwMDNlXFxuLVxcbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3Qge1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLX07XFxuKyNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVzLWNiYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2Flcy1lY2IuaFxcdTAwM2VcXG4gXFxuIC8qIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3QgKi9cXG4gLyoqXFxuQEAgLTM2LDk0ICszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xcbiBcXHR1MzIgYXV0aHNpemU7XFxuIH07XFxuIFxcbi1zdGF0aWMgTElTVF9IRUFEKGJwZl9jcnlwdG9fdHlwZXMpO1xcbi1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuK2VudW0gYnBmX2NyeXB0b19hbGdvX2lkIHtcXG4rXFx0QlBGX0FMR09fQUVTX0NCQyxcXG4rXFx0QlBGX0FMR09fQUVTX0VDQixcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbitcXHRjb25zdCBjaGFyICp0eXBlX25hbWU7XFxuK1xcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcXG4rXFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcXG4rfSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XFxuK1xcdHsgXFxcInNrY2lwaGVyXFxcIiwgXFxcImNiYyhhZXMpXFxcIiwgQlBGX0FMR09fQUVTX0NCQyB9LFxcbitcXHR7IFxcXCJza2NpcGhlclxcXCIsIFxcXCJlY2IoYWVzKVxcXCIsIEJQRl9BTEdPX0FFU19FQ0IgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIGJwZl9jcnlwdG9fZmluZF9hbGdvKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgZW51bSBicGZfY3J5cHRvX2FsZ29faWQgKmlkX3JldClcXG4re1xcbitcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYnBmX2NyeXB0b19hbGdvcyk7IGkrKykge1xcbitcXHRcXHRpZiAoc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLnR5cGVfbmFtZSwgcGFyYW1zLVxcdTAwM2V0eXBlLFxcbitcXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNldHlwZSkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvX25hbWUsIHBhcmFtcy1cXHUwMDNlYWxnbyxcXG4rXFx0XFx0XFx0ICAgIHNpemVvZihwYXJhbXMtXFx1MDAzZWFsZ28pKSA9PSAwKSB7XFxuK1xcdFxcdFxcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuIFxcbiAvKipcXG4gICogc3RydWN0IGJwZl9jcnlwdG9fY3R4IC0gcmVmY291bnRlZCBCUEYgY3J5cHRvIGNvbnRleHQgc3RydWN0dXJlXFxuLSAqIEB0eXBlOlxcdFRoZSBwb2ludGVyIHRvIGJwZiBjcnlwdG8gdHlwZVxcbi0gKiBAdGZtOlxcdFRoZSBwb2ludGVyIHRvIGluc3RhbmNlIG9mIGNyeXB0byBBUEkgc3RydWN0Llxcbi0gKiBAc2l2X2xlbjogICAgU2l6ZSBvZiBJViBhbmQgc3RhdGUgc3RvcmFnZSBmb3IgY2lwaGVyXFxuKyAqIEBhbGdvOlxcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXFxuKyAqIEBrZXk6XFx0VGhlIGNyeXB0byBrZXlcXG4gICogQHJjdTpcXHRUaGUgUkNVIGhlYWQgdXNlZCB0byBmcmVlIHRoZSBjcnlwdG8gY29udGV4dCB3aXRoIFJDVSBzYWZldHkuXFxuICAqIEB1c2FnZTpcXHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXFxuICAqXFx0XFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXFxuICAqXFx0XFx0UkNVIHNhZmV0eS5cXG4gICovXFxuIHN0cnVjdCBicGZfY3J5cHRvX2N0eCB7XFxuLVxcdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGU7XFxuLVxcdHZvaWQgKnRmbTtcXG4tXFx0dTMyIHNpdl9sZW47XFxuK1xcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IGFlc19rZXkgYWVzO1xcbitcXHR9IGtleTtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gXFx0cmVmY291bnRfdCB1c2FnZTtcXG4gfTtcXG4gXFxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XFxuLVxcdGludCBlcnIgPSAtRUJVU1k7XFxuLVxcbi1cXHRkb3duX3dyaXRlKFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKCFzdHJjbXAobm9kZS1cXHUwMDNldHlwZS1cXHUwMDNlbmFtZSwgdHlwZS1cXHUwMDNlbmFtZSkpXFxuLVxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXHR9XFxuLVxcbi1cXHRub2RlID0ga21hbGxvY19vYmooKm5vZGUpO1xcbi1cXHRlcnIgPSAtRU5PTUVNO1xcbi1cXHRpZiAoIW5vZGUpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbi1cXG4tXFx0bm9kZS1cXHUwMDNldHlwZSA9IHR5cGU7XFxuLVxcdGxpc3RfYWRkKFxcdTAwMjZub2RlLVxcdTAwM2VsaXN0LCBcXHUwMDI2YnBmX2NyeXB0b190eXBlcyk7XFxuLVxcdGVyciA9IDA7XFxuLVxcbi11bmxvY2s6XFxuLVxcdHVwX3dyaXRlKFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fcmVnaXN0ZXJfdHlwZSk7XFxuLVxcbi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XFxuLVxcdGludCBlcnIgPSAtRU5PRU5UO1xcbi1cXG4tXFx0ZG93bl93cml0ZShcXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XFxuLVxcdFxcdGlmIChzdHJjbXAobm9kZS1cXHUwMDNldHlwZS1cXHUwMDNlbmFtZSwgdHlwZS1cXHUwMDNlbmFtZSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0bGlzdF9kZWwoXFx1MDAyNm5vZGUtXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRrZnJlZShub2RlKTtcXG4tXFx0XFx0ZXJyID0gMDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0dXBfd3JpdGUoXFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUpO1xcbi1cXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKmJwZl9jcnlwdG9fZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcXG4te1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlID0gRVJSX1BUUigtRU5PRU5UKTtcXG4tXFx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xcbi1cXG4tXFx0ZG93bl9yZWFkKFxcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcXG4tXFx0XFx0aWYgKHN0cmNtcChub2RlLVxcdTAwM2V0eXBlLVxcdTAwM2VuYW1lLCBuYW1lKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpZiAodHJ5X21vZHVsZV9nZXQobm9kZS1cXHUwMDNldHlwZS1cXHUwMDNlb3duZXIpKVxcbi1cXHRcXHRcXHR0eXBlID0gbm9kZS1cXHUwMDNldHlwZTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0dXBfcmVhZChcXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xcbi1cXG4tXFx0cmV0dXJuIHR5cGU7XFxuLX1cXG4tXFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gXFxuIC8qKlxcbkBAIC0xNDYsNyArOTksNiBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxcbiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxcbiBcXHRcXHQgICAgICBpbnQgKmVycilcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xcbiBcXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcXG4gXFxuIFxcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVxcdTAwM2VyZXNlcnZlZFsxXSB8fFxcbkBAIC0xNTUsNjkgKzEwNyw0MCBAQCBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0dHlwZSA9IGJwZl9jcnlwdG9fZ2V0X3R5cGUocGFyYW1zLVxcdTAwM2V0eXBlKTtcXG4tXFx0aWYgKElTX0VSUih0eXBlKSkge1xcbi1cXHRcXHQqZXJyID0gUFRSX0VSUih0eXBlKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghdHlwZS1cXHUwMDNlaGFzX2FsZ28ocGFyYW1zLVxcdTAwM2VhbGdvKSkge1xcbi1cXHRcXHQqZXJyID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghIXBhcmFtcy1cXHUwMDNlYXV0aHNpemUgXiAhIXR5cGUtXFx1MDAzZXNldGF1dGhzaXplKSB7XFxuLVxcdFxcdCplcnIgPSAtRU9QTk9UU1VQUDtcXG4tXFx0XFx0Z290byBlcnJfbW9kdWxlX3B1dDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFwYXJhbXMtXFx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVxcdTAwM2VrZXlfbGVuIFxcdTAwM2Ugc2l6ZW9mKHBhcmFtcy1cXHUwMDNla2V5KSkge1xcbi1cXHRcXHQqZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBlcnJfbW9kdWxlX3B1dDtcXG4tXFx0fVxcbi1cXG4gXFx0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XFxuIFxcdGlmICghY3R4KSB7XFxuIFxcdFxcdCplcnIgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIGVycl9tb2R1bGVfcHV0O1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4LVxcdTAwM2V0eXBlID0gdHlwZTtcXG4tXFx0Y3R4LVxcdTAwM2V0Zm0gPSB0eXBlLVxcdTAwM2VhbGxvY190Zm0ocGFyYW1zLVxcdTAwM2VhbGdvKTtcXG4tXFx0aWYgKElTX0VSUihjdHgtXFx1MDAzZXRmbSkpIHtcXG4tXFx0XFx0KmVyciA9IFBUUl9FUlIoY3R4LVxcdTAwM2V0Zm0pO1xcbi1cXHRcXHRnb3RvIGVycl9mcmVlX2N0eDtcXG4rXFx0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFxcdTAwMjZjdHgtXFx1MDAzZWFsZ28pKSB7XFxuK1xcdFxcdCplcnIgPSAtRU5PRU5UO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHBhcmFtcy1cXHUwMDNlYXV0aHNpemUpIHtcXG4tXFx0XFx0KmVyciA9IHR5cGUtXFx1MDAzZXNldGF1dGhzaXplKGN0eC1cXHUwMDNldGZtLCBwYXJhbXMtXFx1MDAzZWF1dGhzaXplKTtcXG4tXFx0XFx0aWYgKCplcnIpXFxuLVxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdGZtO1xcbitcXHRzd2l0Y2ggKGN0eC1cXHUwMDNlYWxnbykge1xcbitcXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XFxuK1xcdGNhc2UgQlBGX0FMR09fQUVTX0VDQjpcXG4rXFx0XFx0aWYgKHBhcmFtcy1cXHUwMDNlYXV0aHNpemUpXFxuK1xcdFxcdFxcdCplcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHQqZXJyID0gYWVzX3ByZXBhcmVrZXkoXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcywgcGFyYW1zLVxcdTAwM2VrZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHBhcmFtcy1cXHUwMDNla2V5X2xlbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRXQVJOX09OKDEpO1xcbitcXHRcXHQqZXJyID0gLUVOT0VOVDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdCplcnIgPSB0eXBlLVxcdTAwM2VzZXRrZXkoY3R4LVxcdTAwM2V0Zm0sIHBhcmFtcy1cXHUwMDNla2V5LCBwYXJhbXMtXFx1MDAzZWtleV9sZW4pO1xcbi1cXHRpZiAoKmVycilcXG4tXFx0XFx0Z290byBlcnJfZnJlZV90Zm07XFxuLVxcbi1cXHRpZiAodHlwZS1cXHUwMDNlZ2V0X2ZsYWdzKGN0eC1cXHUwMDNldGZtKSBcXHUwMDI2IENSWVBUT19URk1fTkVFRF9LRVkpIHtcXG4tXFx0XFx0KmVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWVfdGZtO1xcbitvdXQ6XFxuK1xcdGlmICgqZXJyKSB7XFxuK1xcdFxcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0Y3R4LVxcdTAwM2VzaXZfbGVuID0gdHlwZS1cXHUwMDNlaXZzaXplKGN0eC1cXHUwMDNldGZtKSArIHR5cGUtXFx1MDAzZXN0YXRlc2l6ZShjdHgtXFx1MDAzZXRmbSk7XFxuLVxcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN0eC1cXHUwMDNldXNhZ2UsIDEpO1xcbi1cXG4gXFx0cmV0dXJuIGN0eDtcXG4tXFxuLWVycl9mcmVlX3RmbTpcXG4tXFx0dHlwZS1cXHUwMDNlZnJlZV90Zm0oY3R4LVxcdTAwM2V0Zm0pO1xcbi1lcnJfZnJlZV9jdHg6XFxuLVxcdGtmcmVlKGN0eCk7XFxuLWVycl9tb2R1bGVfcHV0Olxcbi1cXHRtb2R1bGVfcHV0KHR5cGUtXFx1MDAzZW93bmVyKTtcXG4tXFxuLVxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuQEAgLTIyNSw5ICsxNDgsNyBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIFxcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xcbiBcXG4gXFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcXG4tXFx0Y3R4LVxcdTAwM2V0eXBlLVxcdTAwM2VmcmVlX3RmbShjdHgtXFx1MDAzZXRmbSk7XFxuLVxcdG1vZHVsZV9wdXQoY3R4LVxcdTAwM2V0eXBlLVxcdTAwM2Vvd25lcik7XFxuLVxcdGtmcmVlKGN0eCk7XFxuK1xcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjY3LDI3ICsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxcbiB9XFxuIENGSV9OT1NFQUwoYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKTtcXG4gXFxuK3N0YXRpYyBpbnQgYnBmX2Flc19jYmNfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxcbitcXHRcXHRcXHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxcbit7XFxuK1xcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoc3JjX2xlbiAlIEFFU19CTE9DS19TSVpFIHx8IGRzdF9sZW4gXFx1MDAzYyBzcmNfbGVuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGRlY3J5cHQpXFxuK1xcdFxcdGFlc19jYmNfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfYWVzX2VjYl9jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXFxuK1xcdFxcdFxcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXFxuK3tcXG4rXFx0aWYgKGl2X2xlbiAhPSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFxcdTAwM2Mgc3JjX2xlbilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChkZWNyeXB0KVxcbitcXHRcXHRhZXNfZWNiX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmMsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXFxuLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzaXYsXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdixcXG4gXFx0XFx0XFx0ICAgIGJvb2wgZGVjcnlwdClcXG4ge1xcbi1cXHR1MzIgc3JjX2xlbiwgZHN0X2xlbiwgc2l2X2xlbjtcXG4rXFx0dTMyIHNyY19sZW4sIGRzdF9sZW4sIGl2X2xlbjtcXG4gXFx0Y29uc3QgdTggKnBzcmM7XFxuIFxcdHU4ICpwZHN0LCAqcGl2O1xcbi1cXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKF9fYnBmX2R5bnB0cl9pc19yZG9ubHkoZHN0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRzaXZfbGVuID0gc2l2ID8gX19icGZfZHlucHRyX3NpemUoc2l2KSA6IDA7XFxuK1xcdGl2X2xlbiA9IGl2ID8gX19icGZfZHlucHRyX3NpemUoaXYpIDogMDtcXG4gXFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XFxuIFxcdGRzdF9sZW4gPSBfX2JwZl9keW5wdHJfc2l6ZShkc3QpO1xcbi1cXHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4gfHwgc3JjX2xlbiBcXHUwMDNlIGRzdF9sZW4pXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHNpdl9sZW4gIT0gY3R4LVxcdTAwM2VzaXZfbGVuKVxcbitcXHRpZiAoIXNyY19sZW4gfHwgIWRzdF9sZW4pXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0cHNyYyA9IF9fYnBmX2R5bnB0cl9kYXRhKHNyYywgc3JjX2xlbik7XFxuQEAgLTI5NywxNCArMjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcXG4gXFx0aWYgKCFwZHN0KVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHBpdiA9IHNpdl9sZW4gPyBfX2JwZl9keW5wdHJfZGF0YV9ydyhzaXYsIHNpdl9sZW4pIDogTlVMTDtcXG4tXFx0aWYgKHNpdl9sZW4gXFx1MDAyNlxcdTAwMjYgIXBpdilcXG4rXFx0cGl2ID0gaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoaXYsIGl2X2xlbikgOiBOVUxMO1xcbitcXHRpZiAoaXZfbGVuIFxcdTAwMjZcXHUwMDI2ICFwaXYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0ZXJyID0gZGVjcnlwdCA/IGN0eC1cXHUwMDNldHlwZS1cXHUwMDNlZGVjcnlwdChjdHgtXFx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KVxcbi1cXHRcXHQgICAgICA6IGN0eC1cXHUwMDNldHlwZS1cXHUwMDNlZW5jcnlwdChjdHgtXFx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHN3aXRjaCAoY3R4LVxcdTAwM2VhbGdvKSB7XFxuK1xcdGNhc2UgQlBGX0FMR09fQUVTX0NCQzpcXG4rXFx0XFx0cmV0dXJuIGJwZl9hZXNfY2JjX2NyeXB0KHBkc3QsIGRzdF9sZW4sIHBzcmMsIHNyY19sZW4sIHBpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGl2X2xlbiwgY3R4LCBkZWNyeXB0KTtcXG4rXFx0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxcbitcXHRcXHRyZXR1cm4gYnBmX2Flc19lY2JfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxcbitcXHRcXHRcXHRcXHRcXHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzEyLDIwICsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxcbiAgKiBAY3R4OlxcdFxcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuICAqIEBzcmM6XFx0XFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuICAqIEBkc3Q6XFx0XFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuLSAqIEBzaXZfX251bGxhYmxlOlxcdGJwZl9keW5wdHIgdG8gSVYgZGF0YSBhbmQgc3RhdGUgZGF0YSB0byBiZSB1c2VkIGJ5IGRlY3J5cHRvci4gTWF5IGJlIE5VTEwuXFxuKyAqIEBpdl9fbnVsbGFibGU6XFx0YnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC5cXG4gICpcXG4gICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxcbiAgKi9cXG4gX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYyxcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcXG4tXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNpdl9fbnVsbGFibGUpXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjX2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNyYztcXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcXG4tXFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc2l2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKXNpdl9fbnVsbGFibGU7XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcXG4gXFxuLVxcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBzaXZfa2VybiwgdHJ1ZSk7XFxuK1xcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTMzMywyMCArMjg2LDIwIEBAIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuICAqIEBjdHg6XFx0XFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4gICogQHNyYzpcXHRcXHRicGZfZHlucHRyIHRvIHRoZSBwbGFpbiBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAgKiBAZHN0OlxcdFxcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbi0gKiBAc2l2X19udWxsYWJsZTpcXHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxcbisgKiBAaXZfX251bGxhYmxlOlxcdGJwZl9keW5wdHIgdG8gdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvci4gTWF5IGJlIE5VTEwuXFxuICAqXFxuICAqIEVuY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC5cXG4gICovXFxuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkc3QsXFxuLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqaXZfX251bGxhYmxlKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRzdF9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkc3Q7XFxuLVxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICppdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilpdl9fbnVsbGFibGU7XFxuIFxcbi1cXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2Vybiwgc2l2X2tlcm4sIGZhbHNlKTtcXG4rXFx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIGl2X2tlcm4sIGZhbHNlKTtcXG4gfVxcbiBcXG4gX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6MjcuMTIwOTkzODI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjIxMDk3NzEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0NSWVBUT1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X2FjcXVpcmVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLFxuICAgIFwiYnBmX2NyeXB0b19kZWNyeXB0XCIsXG4gICAgXCJicGZfY3J5cHRvX2VuY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5N2I0MDkyMjNlMjUxZTBhMjBiODg5YWI3YTc2YjU5NzgzMjhmY2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjoyOToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDNhMTlkYTc0ZDAwYzkuLjE2ZjEzMjcwY2UxZjkgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC00OTM2LDggKzQ5MzYsNiBAQCBCUEYgW0NSWVBUT11cbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0YnBmQHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4tRjpcdGNyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbi1GOlx0aW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcbiBGOlx0a2VybmVsL2JwZi9jcnlwdG8uY1xuIFxuIEJQRiBbRE9DVU1FTlRBVElPTl0gKFJlbGF0ZWQgdG8gU3RhbmRhcmRpemF0aW9uKVxuZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZVxuaW5kZXggODM4NmQ1NWE5NzU1ZS4uMzNiYjVhZDU5NWU4ZiAxMDA2NDRcbi0tLSBhL2NyeXB0by9NYWtlZmlsZVxuKysrIGIvY3J5cHRvL01ha2VmaWxlXG5AQCAtMjIsOSArMjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSArPSBsc2tjaXBoZXIub1xuIGNyeXB0b19za2NpcGhlci15ICs9IHNrY2lwaGVyLm9cbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gY3J5cHRvX3NrY2lwaGVyLm9cbi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSlcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gYnBmX2NyeXB0b19za2NpcGhlci5vXG4tZW5kaWZcbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vXG4gb2JqLSQoQ09ORklHX0NSWVBUT19FQ0hBSU5JVikgKz0gZWNoYWluaXYub1xuZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDgzICswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9jcnlwdG8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2NyeXB0by9za2NpcGhlci5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgKmJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdvKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fYWxsb2NfbHNrY2lwaGVyKGFsZ28sIDAsIDApO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSh2b2lkICp0Zm0pXG4te1xuLVx0Y3J5cHRvX2ZyZWVfbHNrY2lwaGVyKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28oY29uc3QgY2hhciAqYWxnbylcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2hhc19za2NpcGhlcihhbGdvLCBDUllQVE9fQUxHX1RZUEVfTFNLQ0lQSEVSLCBDUllQVE9fQUxHX1RZUEVfTUFTSyk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHZvaWQgKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbilcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7XG4tfVxuLVxuLXN0YXRpYyB1MzIgYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHZvaWQgKnRmbSlcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3ModGZtKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodm9pZCAqdGZtKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh2b2lkICp0Zm0pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlIGJwZl9jcnlwdG9fbHNrY2lwaGVyX3R5cGUgPSB7XG4tXHQuYWxsb2NfdGZtXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbSxcbi1cdC5mcmVlX3RmbVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSxcbi1cdC5oYXNfYWxnb1x0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyxcbi1cdC5zZXRrZXlcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksXG4tXHQuZW5jcnlwdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LFxuLVx0LmRlY3J5cHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCxcbi1cdC5pdnNpemVcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUsXG4tXHQuc3RhdGVzaXplXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSxcbi1cdC5nZXRfZmxhZ3NcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzLFxuLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tXHQubmFtZVx0XHQ9IFwic2tjaXBoZXJcIixcbi19O1xuLVxuLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKVxuLXtcbi1cdHJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZClcbi17XG4tXHRpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tXHRXQVJOX09OX09OQ0UoZXJyKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTtcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xuLU1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIlN5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRlwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE0MWU3MWQ0ZTJkOWYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyNCArMCwwIEBAXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbi0jaWZuZGVmIF9CUEZfQ1JZUFRPX0hcbi0jZGVmaW5lIF9CUEZfQ1JZUFRPX0hcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlIHtcbi1cdHZvaWQgKigqYWxsb2NfdGZtKShjb25zdCBjaGFyICphbGdvKTtcbi1cdHZvaWQgKCpmcmVlX3RmbSkodm9pZCAqdGZtKTtcbi1cdGludCAoKmhhc19hbGdvKShjb25zdCBjaGFyICphbGdvKTtcbi1cdGludCAoKnNldGtleSkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTtcbi1cdGludCAoKnNldGF1dGhzaXplKSh2b2lkICp0Zm0sIHVuc2lnbmVkIGludCBhdXRoc2l6ZSk7XG4tXHRpbnQgKCplbmNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHRpbnQgKCpkZWNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHR1bnNpZ25lZCBpbnQgKCppdnNpemUpKHZvaWQgKnRmbSk7XG4tXHR1bnNpZ25lZCBpbnQgKCpzdGF0ZXNpemUpKHZvaWQgKnRmbSk7XG4tXHR1MzIgKCpnZXRfZmxhZ3MpKHZvaWQgKnRmbSk7XG4tXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbi1cdGNoYXIgbmFtZVsxNF07XG4tfTtcbi1cbi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xuLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTtcbi1cbi0jZW5kaWYgLyogX0JQRl9DUllQVE9fSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvS2NvbmZpZyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuaW5kZXggZWIzZGUzNTczNGYwOS4uODIyNTk5YjQyYmUyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xuKysrIGIva2VybmVsL2JwZi9LY29uZmlnXG5AQCAtODcsNiArODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiBcbitjb25maWcgQlBGX0NSWVBUT1xuK1x0ZGVmX2Jvb2wgeVxuK1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ1xuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQlxuK1x0aGVscFxuK1x0ICBQcm92aWRlIHRoZSBrZnVuY3MgbmVlZGVkIGZvciBCUEYgcHJvZ3JhbXMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdFxuK1x0ICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuXG4rXG4gc291cmNlIFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcIlxuIFxuIGNvbmZpZyBCUEZfTFNNXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9NYWtlZmlsZSBiL2tlcm5lbC9icGYvTWFrZWZpbGVcbmluZGV4IDkwMjU1ZDgwZTViZTYuLmFiMmU1ZDI3ODJlNmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlXG4rKysgYi9rZXJuZWwvYnBmL01ha2VmaWxlXG5AQCAtNTUsOSArNTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xuICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cbiBvYmotJHtDT05GSUdfQlBGX0xTTX0gKz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ub1xuIGVuZGlmXG4taWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxuLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cbi1lbmRpZlxuK29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSArPSBjcnlwdG8ub1xuIG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cbiBcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jcnlwdG8uYyBiL2tlcm5lbC9icGYvY3J5cHRvLmNcbmluZGV4IDUxZjg5Y2VjZWZiNGQuLjhjZGMxNmY5YjM3NGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jXG4rKysgYi9rZXJuZWwvYnBmL2NyeXB0by5jXG5AQCAtMSwxOSArMSwxMyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcdTAwM2Vcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3Qge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi19O1xuKyNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtY2JjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVzLWVjYi5oXHUwMDNlXG4gXG4gLyogQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdCAqL1xuIC8qKlxuQEAgLTM2LDk0ICszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xuIFx0dTMyIGF1dGhzaXplO1xuIH07XG4gXG4tc3RhdGljIExJU1RfSEVBRChicGZfY3J5cHRvX3R5cGVzKTtcbi1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4rZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xuK1x0QlBGX0FMR09fQUVTX0NCQyxcbitcdEJQRl9BTEdPX0FFU19FQ0IsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHtcbitcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcbitcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcbitcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG4rfSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XG4rXHR7IFwic2tjaXBoZXJcIiwgXCJjYmMoYWVzKVwiLCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4rXHR7IFwic2tjaXBoZXJcIiwgXCJlY2IoYWVzKVwiLCBCUEZfQUxHT19BRVNfRUNCIH0sXG4rfTtcbitcbitzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxuK3tcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcbitcdFx0aWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy1cdTAwM2V0eXBlLFxuK1x0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZXR5cGUpKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4rXHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNlYWxnbykpID09IDApIHtcbitcdFx0XHQqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIC8qKlxuICAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxuLSAqIEB0eXBlOlx0VGhlIHBvaW50ZXIgdG8gYnBmIGNyeXB0byB0eXBlXG4tICogQHRmbTpcdFRoZSBwb2ludGVyIHRvIGluc3RhbmNlIG9mIGNyeXB0byBBUEkgc3RydWN0LlxuLSAqIEBzaXZfbGVuOiAgICBTaXplIG9mIElWIGFuZCBzdGF0ZSBzdG9yYWdlIGZvciBjaXBoZXJcbisgKiBAYWxnbzpcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXG4rICogQGtleTpcdFRoZSBjcnlwdG8ga2V5XG4gICogQHJjdTpcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cbiAgKiBAdXNhZ2U6XHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXG4gICpcdFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXG4gICpcdFx0UkNVIHNhZmV0eS5cbiAgKi9cbiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHZvaWQgKnRmbTtcbi1cdHUzMiBzaXZfbGVuO1xuK1x0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IGFlc19rZXkgYWVzO1xuK1x0fSBrZXk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0cmVmY291bnRfdCB1c2FnZTtcbiB9O1xuIFxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuLVxuLVx0ZG93bl93cml0ZShcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcbi1cdFx0aWYgKCFzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRub2RlID0ga21hbGxvY19vYmooKm5vZGUpO1xuLVx0ZXJyID0gLUVOT01FTTtcbi1cdGlmICghbm9kZSlcbi1cdFx0Z290byB1bmxvY2s7XG4tXG4tXHRub2RlLVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0bGlzdF9hZGQoXHUwMDI2bm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzKTtcbi1cdGVyciA9IDA7XG4tXG4tdW5sb2NrOlxuLVx0dXBfd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKTtcbi1cbi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVOT0VOVDtcbi1cbi1cdGRvd25fd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XG4tXHRcdGlmIChzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4tXHRcdGtmcmVlKG5vZGUpO1xuLVx0XHRlcnIgPSAwO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cdHVwX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKTtcbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqYnBmX2NyeXB0b19nZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuLXtcbi1cdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUgPSBFUlJfUFRSKC1FTk9FTlQpO1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVxuLVx0ZG93bl9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2YnBmX2NyeXB0b190eXBlcywgbGlzdCkge1xuLVx0XHRpZiAoc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCBuYW1lKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHRyeV9tb2R1bGVfZ2V0KG5vZGUtXHUwMDNldHlwZS1cdTAwM2Vvd25lcikpXG4tXHRcdFx0dHlwZSA9IG5vZGUtXHUwMDNldHlwZTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHR1cF9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiB0eXBlO1xuLX1cbi1cbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG4gLyoqXG5AQCAtMTQ2LDcgKzk5LDYgQEAgX19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcbiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxuIFx0XHQgICAgICBpbnQgKmVycilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRpZiAoIXBhcmFtcyB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVx1MDAzZXJlc2VydmVkWzFdIHx8XG5AQCAtMTU1LDY5ICsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHR0eXBlID0gYnBmX2NyeXB0b19nZXRfdHlwZShwYXJhbXMtXHUwMDNldHlwZSk7XG4tXHRpZiAoSVNfRVJSKHR5cGUpKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKHR5cGUpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGlmICghdHlwZS1cdTAwM2VoYXNfYWxnbyhwYXJhbXMtXHUwMDNlYWxnbykpIHtcbi1cdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLVx0fVxuLVxuLVx0aWYgKCEhcGFyYW1zLVx1MDAzZWF1dGhzaXplIF4gISF0eXBlLVx1MDAzZXNldGF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbi1cdGlmICghcGFyYW1zLVx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihwYXJhbXMtXHUwMDNla2V5KSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbiBcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0KmVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XG4rXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0Y3R4LVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0Y3R4LVx1MDAzZXRmbSA9IHR5cGUtXHUwMDNlYWxsb2NfdGZtKHBhcmFtcy1cdTAwM2VhbGdvKTtcbi1cdGlmIChJU19FUlIoY3R4LVx1MDAzZXRmbSkpIHtcbi1cdFx0KmVyciA9IFBUUl9FUlIoY3R4LVx1MDAzZXRmbSk7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfY3R4O1xuK1x0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xuK1x0XHQqZXJyID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSB0eXBlLVx1MDAzZXNldGF1dGhzaXplKGN0eC1cdTAwM2V0Zm0sIHBhcmFtcy1cdTAwM2VhdXRoc2l6ZSk7XG4tXHRcdGlmICgqZXJyKVxuLVx0XHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK1x0c3dpdGNoIChjdHgtXHUwMDNlYWxnbykge1xuK1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuK1x0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuK1x0XHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKVxuK1x0XHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0ZWxzZVxuK1x0XHRcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZjdHgtXHUwMDNla2V5LmFlcywgcGFyYW1zLVx1MDAzZWtleSxcbitcdFx0XHRcdFx0ICAgICAgcGFyYW1zLVx1MDAzZWtleV9sZW4pO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFdBUk5fT04oMSk7XG4rXHRcdCplcnIgPSAtRU5PRU5UO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbi1cdCplcnIgPSB0eXBlLVx1MDAzZXNldGtleShjdHgtXHUwMDNldGZtLCBwYXJhbXMtXHUwMDNla2V5LCBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4tXHRpZiAoKmVycilcbi1cdFx0Z290byBlcnJfZnJlZV90Zm07XG4tXG4tXHRpZiAodHlwZS1cdTAwM2VnZXRfZmxhZ3MoY3R4LVx1MDAzZXRmbSkgXHUwMDI2IENSWVBUT19URk1fTkVFRF9LRVkpIHtcbi1cdFx0KmVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK291dDpcbitcdGlmICgqZXJyKSB7XG4rXHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VzaXZfbGVuID0gdHlwZS1cdTAwM2VpdnNpemUoY3R4LVx1MDAzZXRmbSkgKyB0eXBlLVx1MDAzZXN0YXRlc2l6ZShjdHgtXHUwMDNldGZtKTtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNldXNhZ2UsIDEpO1xuLVxuIFx0cmV0dXJuIGN0eDtcbi1cbi1lcnJfZnJlZV90Zm06XG4tXHR0eXBlLVx1MDAzZWZyZWVfdGZtKGN0eC1cdTAwM2V0Zm0pO1xuLWVycl9mcmVlX2N0eDpcbi1cdGtmcmVlKGN0eCk7XG4tZXJyX21vZHVsZV9wdXQ6XG4tXHRtb2R1bGVfcHV0KHR5cGUtXHUwMDNlb3duZXIpO1xuLVxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbkBAIC0yMjUsOSArMTQ4LDcgQEAgc3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRjdHggPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9jcnlwdG9fY3R4LCByY3UpO1xuLVx0Y3R4LVx1MDAzZXR5cGUtXHUwMDNlZnJlZV90Zm0oY3R4LVx1MDAzZXRmbSk7XG4tXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2V0eXBlLVx1MDAzZW93bmVyKTtcbi1cdGtmcmVlKGN0eCk7XG4rXHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3LDI3ICsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxuIH1cbiBDRklfTk9TRUFMKGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcik7XG4gXG4rc3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXG4rXHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuK3tcbitcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChkZWNyeXB0KVxuK1x0XHRhZXNfY2JjX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl9hZXNfZWNiX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbitcdFx0XHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXG4re1xuK1x0aWYgKGl2X2xlbiAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcdTAwM2Mgc3JjX2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoZGVjcnlwdClcbitcdFx0YWVzX2VjYl9kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsXG4gXHRcdFx0ICAgIGJvb2wgZGVjcnlwdClcbiB7XG4tXHR1MzIgc3JjX2xlbiwgZHN0X2xlbiwgc2l2X2xlbjtcbitcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gXHRjb25zdCB1OCAqcHNyYztcbiBcdHU4ICpwZHN0LCAqcGl2O1xuLVx0aW50IGVycjtcbiBcbiBcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwO1xuK1x0aXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwO1xuIFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XG4gXHRkc3RfbGVuID0gX19icGZfZHlucHRyX3NpemUoZHN0KTtcbi1cdGlmICghc3JjX2xlbiB8fCAhZHN0X2xlbiB8fCBzcmNfbGVuIFx1MDAzZSBkc3RfbGVuKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChzaXZfbGVuICE9IGN0eC1cdTAwM2VzaXZfbGVuKVxuK1x0aWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pO1xuQEAgLTI5NywxNCArMjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdGlmICghcGRzdClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwaXYgPSBzaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoc2l2LCBzaXZfbGVuKSA6IE5VTEw7XG4tXHRpZiAoc2l2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbitcdHBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDtcbitcdGlmIChpdl9sZW4gXHUwMDI2XHUwMDI2ICFwaXYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0ZXJyID0gZGVjcnlwdCA/IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWRlY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KVxuLVx0XHQgICAgICA6IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWVuY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTtcbi1cbi1cdHJldHVybiBlcnI7XG4rXHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XG4rXHRcdHJldHVybiBicGZfYWVzX2NiY19jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XG4rXHRcdHJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMzEyLDIwICsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxuICAqIEBjdHg6XHRcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQHNyYzpcdFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCB0cnVlKTtcbitcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMzMzLDIwICsyODYsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRW5jcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7XG4rXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpO1xuIH1cbiBcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6MjcuMTIwOTk2NjM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2MjE4Mzg3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQ3J5cHRvIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gb3B0aW1pemluZyB0aGUgQlBGIGNyeXB0byBzdWJzeXN0ZW0uIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgcmVtb3ZpbmcgdGhlIG9sZCBgY3J5cHRvL2JwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaGAgZmlsZXMg4oCTIHNvIHRoZSBsZWdhY3kgY29kZSBpcyBnb25lLiBJbnN0ZWFkLCB0aGV5J3JlIGludHJvZHVjaW5nIGEgYGNvbmZpZyBCUEZfQ1JZUFRPYCBvcHRpb24gaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AsIHdoaWNoIGlzIHNldCB0byBgeWAgaWYgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCBhbmQgYWxzbyBzZWxlY3RpbmcgYm90aCBgQ1JZUFRPX0xJQl9BRVNfQ0JDYCBhbmQgYENSWVBUT19MSUJfQUVTX0VDQmAuIFRoaXMgbWVhbnMgdGhlIHBhdGNoIGVuYWJsZXMgdGhlIHVzZSBvZiBBRVMtQ0JDIGFuZCBBRVMtRUNCIGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aGluIEJQRiBwcm9ncmFtcy4gVGhlIGNoYW5nZSBpbiB0aGUgTWFrZWZpbGUgY29uZmlybXMgdGhpcyB3aXRoIGBvYmotJChDT05GSUdfQlBGX0NSWVBUTykgKz0gY3J5cHRvLm9gLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgYXBwZWFycyB0byBiZSBpbiBga2VybmVsL2JwZi9jcnlwdG8uY2AuIFRoZXkncmUgcmVmYWN0b3JpbmcgdGhlIGNyeXB0byBoYW5kbGluZywgbW92aW5nIGF3YXkgZnJvbSB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UuIFRoZSBhaW0gc2VlbXMgdG8gYmUgdG8gc3RyZWFtbGluZSB0aGluZ3MgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgIGltcGxlbWVudGF0aW9ucyB2aWEga2Z1bmNzLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgaW1wbGVtZW50ZWQgbmV3IGtmdW5jczogYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAsIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlYCwgYGJwZl9jcnlwdG9fZGVjcnlwdGAsIGFuZCBgYnBmX2NyeXB0b19lbmNyeXB0YC5cblxuTm93LCBpcyB0aGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmc/IExldCdzIHNlZS4gVGhlIGVudHJ5IHBvaW50cyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXNlIG5ldyBrZnVuY3MsIGFsb25nIHdpdGggb3RoZXJzIHN1Y2ggYXMgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcmAgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoaXMgbWVhbnMgdGhleSBhcmUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGlzIHBhdGNoIHRvdWNoZXMgYSBsb3QuIFRoZXkncmUgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byBkcml2ZXIgYmFja2VuZCB3aXRoIGRpcmVjdCBjYWxscyB0byBgYWVzX2NiY19lbmNyeXB0YCwgYGFlc19jYmNfZGVjcnlwdGAsIGBhZXNfZWNiX2VuY3J5cHRgLCBhbmQgYGFlc19lY2JfZGVjcnlwdGAuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBwYXJhbWV0ZXIgY2hlY2tpbmcsIGJ1ZmZlciB2YWxpZGF0aW9uLCBjb250ZXh0IGxpZmVjeWNsZSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBBbnkgZXJyb3IgaGVyZSBoYXMgbGFyZ2UgcG90ZW50aWFsIGltcGFjdC5cblxuSSBuZWVkIHRvIGluc3BlY3QgYGtlcm5lbC9icGYvY3J5cHRvLmNgIGFuZCBgS2NvbmZpZ2AgZm9yIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSdsbCBzZWFyY2ggZm9yIHRoZSBzeW1ib2xzIGFuZCByZWFkIHRoZSBjb2RlIHRvIGhhdmUgYSBnb29kIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo0MC43NDI4Mzg0MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY3MzM3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NyeXB0b19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jcnlwdG8uYy0xMy0vKipcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE0OiAqIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAtIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3R1cmVcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE1LSAqIEB0eXBlOlxcdFRoZSBzdHJpbmcgb2YgY3J5cHRvIG9wZXJhdGlvbiB0eXBlLlxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yMy0gKi9cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI0OnN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyB7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0yNS1cXHRjaGFyIHR5cGVbMTRdO1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMi1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMzOmVudW0gYnBmX2NyeXB0b19hbGdvX2lkIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM0LVxcdEJQRl9BTEdPX0FFU19DQkMsXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy00MC1cXHRjb25zdCBjaGFyICphbGdvX25hbWU7XFxua2VybmVsL2JwZi9jcnlwdG8uYzo0MTpcXHRlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCBhbGdvO1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6NDI6fSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XFxua2VybmVsL2JwZi9jcnlwdG8uYy00My1cXHR7IFxcXCJza2NpcGhlclxcXCIsIFxcXCJjYmMoYWVzKVxcXCIsIEJQRl9BTEdPX0FFU19DQkMgfSxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNDYtXFxua2VybmVsL2JwZi9jcnlwdG8uYzo0NzpzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjQ4OlxcdFxcdFxcdFxcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNDkte1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6NTA6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjUxOlxcdFxcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXFx1MDAzZXR5cGUsXFxua2VybmVsL2JwZi9jcnlwdG8uYy01Mi1cXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNldHlwZSkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjUzOlxcdFxcdCAgICBzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnb19uYW1lLCBwYXJhbXMtXFx1MDAzZWFsZ28sXFxua2VybmVsL2JwZi9jcnlwdG8uYy01NC1cXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNlYWxnbykpID09IDApIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjU1OlxcdFxcdFxcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XFxua2VybmVsL2JwZi9jcnlwdG8uYy01Ni1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtNjItLyoqXFxua2VybmVsL2JwZi9jcnlwdG8uYzo2MzogKiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggLSByZWZjb3VudGVkIEJQRiBjcnlwdG8gY29udGV4dCBzdHJ1Y3R1cmVcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTY0LSAqIEBhbGdvOlxcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTcwLSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6NzE6c3RydWN0IGJwZl9jcnlwdG9fY3R4IHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjcyOlxcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XFxua2VybmVsL2JwZi9jcnlwdG8uYy03My1cXHR1bmlvbiB7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jPTgwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtODItLyoqXFxua2VybmVsL2JwZi9jcnlwdG8uYzo4MzogKiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoKSAtIENyZWF0ZSBhIG11dGFibGUgQlBGIGNyeXB0byBjb250ZXh0Llxcbmtlcm5lbC9icGYvY3J5cHRvLmMtODQtICpcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtODYtICogYSBCUEYgcHJvZ3JhbS4gVGhlIGNyeXB0byBjb250ZXh0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBlaXRoZXJcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjg3OiAqIGJlIGVtYmVkZGVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3IgZnJlZWQgd2l0aCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkuXFxua2VybmVsL2JwZi9jcnlwdG8uYy04OC0gKiBBcyBjcnlwdG8gQVBJIGZ1bmN0aW9ucyB1c2UgR0ZQX0tFUk5FTCBhbGxvY2F0aW9ucywgdGhpcyBmdW5jdGlvbiBjYW5cXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtOTAtICpcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjkxOiAqIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSgpIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGNyeXB0byBjb250ZXh0Llxcbmtlcm5lbC9icGYvY3J5cHRvLmMtOTItICogSXQgbWF5IHJldHVybiBOVUxMIGlmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUuXFxua2VybmVsL2JwZi9jcnlwdG8uYzo5MzogKiBAcGFyYW1zOlxcdHBvaW50ZXIgdG8gc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGVcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk0LSAqXFx0XFx0ZGV0YWlscyBuZWVkZWQgdG8gaW5pdGlhbGlzZSBjcnlwdG8gY29udGV4dC5cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk1OiAqIEBwYXJhbXNfX3N6OlxcdHNpemUgb2Ygc3RldWN0IGJwZl9jcnlwdG9fcGFyYW1zIHVzZWYgYnkgYnBmIHByb2dyYW1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk2LSAqIEBlcnI6XFx0aW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTk3LSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6OTg6X19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjk5OmJwZl9jcnlwdG9fY3R4X2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcywgdTMyIHBhcmFtc19fc3osXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMDAtXFx0XFx0ICAgICAgaW50ICplcnIpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMDEte1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTAyOlxcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTAzLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTA0LVxcdGlmICghcGFyYW1zIHx8IHBhcmFtcy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVxcdTAwM2VyZXNlcnZlZFsxXSB8fFxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTA1OlxcdCAgICBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpKSB7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMDYtXFx0XFx0KmVyciA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTExNS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjExNjpcXHRpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgXFx1MDAyNmN0eC1cXHUwMDNlYWxnbykpIHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTExNy1cXHRcXHQqZXJyID0gLUVOT0VOVDtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9MTQ2PXN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE0Ny17XFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNDg6XFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNDktXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNTA6XFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE1MS1cXHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTU0LS8qKlxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTU1OiAqIGJwZl9jcnlwdG9fY3R4X2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNTYtICogQGN0eDogVGhlIEJQRiBjcnlwdG8gY29udGV4dCBiZWluZyBhY3F1aXJlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZFxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNjAtICogbXVzdCBlaXRoZXIgYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjE6ICogYnBmX2NyeXB0b19jdHhfcmVsZWFzZSgpLlxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTYyLSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTYzOl9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNjQ6YnBmX2NyeXB0b19jdHhfYWNxdWlyZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE2NS17XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE3MS0vKipcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE3MjogKiBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkgLSBSZWxlYXNlIGEgcHJldmlvdXNseSBhY3F1aXJlZCBCUEYgY3J5cHRvIGNvbnRleHQuXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNzMtICogQGN0eDogVGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHJlbGVhc2VkLlxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xNzgtICovXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxNzk6X19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4KVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTgwLXtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTg0LVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTg1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTE4Ni17XFxua2VybmVsL2JwZi9jcnlwdG8uYzoxODc6XFx0YnBmX2NyeXB0b19jdHhfcmVsZWFzZShjdHgpO1xcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTg4LX1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjE4OTpDRklfTk9TRUFMKGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcik7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0xOTAtXFxua2VybmVsL2JwZi9jcnlwdG8uYz0xOTE9c3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xOTItXFx0XFx0XFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXFxua2VybmVsL2JwZi9jcnlwdG8uYzoxOTM6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMTk0LXtcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9MjA2PXN0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjA3LVxcdFxcdFxcdCAgICAgdTggKml2LCB1MzIgaXZfbGVuLFxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MjA4OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTIyMC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjIyMTpzdGF0aWMgaW50IGJwZl9jcnlwdG9fY3J5cHQoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yMjItXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjYzLS8qKlxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MjY0OiAqIGJwZl9jcnlwdG9fZGVjcnlwdCgpIC0gRGVjcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI2NS0gKiBAY3R4OlxcdFxcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI3MS0gKi9cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI3MjpfX2JwZl9rZnVuYyBpbnQgYnBmX2NyeXB0b19kZWNyeXB0KHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjczLVxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTI4MC1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjI4MTpcXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0yODItfVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yODQtLyoqXFxua2VybmVsL2JwZi9jcnlwdG8uYzoyODU6ICogYnBmX2NyeXB0b19lbmNyeXB0KCkgLSBFbmNyeXB0IGJ1ZmZlciB1c2luZyBjb25maWd1cmVkIGNvbnRleHQgYW5kIElWIHByb3ZpZGVkLlxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjg2LSAqIEBjdHg6XFx0XFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMjkyLSAqL1xcbmtlcm5lbC9icGYvY3J5cHRvLmM6MjkzOl9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxua2VybmVsL2JwZi9jcnlwdG8uYy0yOTQtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKnNyYyxcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzAxLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzAyOlxcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCBmYWxzZSk7XFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMDMtfVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zMDc9QlRGX0tGVU5DU19TVEFSVChjcnlwdF9pbml0X2tmdW5jX2J0Zl9pZHMpXFxua2VybmVsL2JwZi9jcnlwdG8uYzozMDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9jcnlwdG9fY3R4X2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzA5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzEwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2N0eF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMTEtQlRGX0tGVU5DU19FTkQoY3J5cHRfaW5pdF9rZnVuY19idGZfaWRzKVxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zMTg9QlRGX0tGVU5DU19TVEFSVChjcnlwdF9rZnVuY19idGZfaWRzKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzE5OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfY3J5cHRvX2RlY3J5cHQsIEtGX1JDVSlcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMyMDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2NyeXB0b19lbmNyeXB0LCBLRl9SQ1UpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMjEtQlRGX0tGVU5DU19FTkQoY3J5cHRfa2Z1bmNfYnRmX2lkcylcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmM9MzIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBjcnlwdF9rZnVuY19zZXQgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMyNy1cXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMyODpCVEZfSURfTElTVChicGZfY3J5cHRvX2R0b3JfaWRzKVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzI5OkJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MzMwOkJURl9JRChmdW5jLCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3IpXFxua2VybmVsL2JwZi9jcnlwdG8uYy0zMzEtXFxua2VybmVsL2JwZi9jcnlwdG8uYz0zMzI9c3RhdGljIGludCBfX2luaXQgY3J5cHRvX2tmdW5jX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzM0LVxcdGludCByZXQ7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozMzU6XFx0Y29uc3Qgc3RydWN0IGJ0Zl9pZF9kdG9yX2tmdW5jIGJwZl9jcnlwdG9fZHRvcnNbXSA9IHtcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTMzNi1cXHRcXHR7XFxua2VybmVsL2JwZi9jcnlwdG8uYzozMzc6XFx0XFx0XFx0LmJ0Zl9pZFxcdCAgICAgID0gYnBmX2NyeXB0b19kdG9yX2lkc1swXSxcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjMzODpcXHRcXHRcXHQua2Z1bmNfYnRmX2lkID0gYnBmX2NyeXB0b19kdG9yX2lkc1sxXVxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzM5LVxcdFxcdH0sXFxuLS1cXG5rZXJuZWwvYnBmL2NyeXB0by5jLTM0Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNyeXB0X2luaXRfa2Z1bmNfc2V0KTtcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM0NzpcXHRyZXR1cm4gIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2NyeXB0b19kdG9ycyxcXG5rZXJuZWwvYnBmL2NyeXB0by5jOjM0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fZHRvcnMpLFxcbmtlcm5lbC9icGYvY3J5cHRvLmMtMzQ5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIFRISVNfTU9EVUxFKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00NTcxPUJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NTcyLSNpZmRlZiBDT05GSUdfQ1JZUFRPXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ1NzM6QlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ1NzQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjQwLjgzOTU3NjE2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTIzNjMwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQ3J5cHRvIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9DUllQVE9gLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyB3aGF0IG90aGVyIEtjb25maWcgb3B0aW9ucyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3Igc2V0IGluIG9yZGVyIGZvciBgQlBGX0NSWVBUT2AgdG8gd29yayBjb3JyZWN0bHkuXG5cblNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgYWNjb21wYW55aW5nIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9DUllQVE9gLiBSZWFkaW5nIHRoYXQgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjQyLjgzMTk0MTgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgc3RpbGwgcmVlbmFibGUgaXQgYnkgc2V0dGluZyBpdCB0byAwIGxhdGVyIG9uLCBvciBwZXJtYW5lbnRseVxcbiAgODE6XFx0XFx0ICBkaXNhYmxlIGl0IGJ5IHNldHRpbmcgaXQgdG8gMSAoZnJvbSB3aGljaCBubyBvdGhlciB0cmFuc2l0aW9uIHRvXFxuICA4MjpcXHRcXHQgIDAgaXMgcG9zc2libGUgYW55bW9yZSkuXFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdCAgVW5wcml2aWxlZ2VkIEJQRiBjb3VsZCBiZSB1c2VkIHRvIGV4cGxvaXQgY2VydGFpbiBwb3RlbnRpYWxcXG4gIDg1OlxcdFxcdCAgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIHNpZGUtY2hhbm5lbCB2dWxuZXJhYmlsaXRpZXMgb24gdW5taXRpZ2F0ZWRcXG4gIDg2OlxcdFxcdCAgYWZmZWN0ZWQgaGFyZHdhcmUuXFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cXG4gIDg5OlxcdFxcbiAgOTA6XFx0Y29uZmlnIEJQRl9DUllQVE9cXG4gIDkxOlxcdFxcdGRlZl9ib29sIHlcXG4gIDkyOlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDkzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNcXG4gIDk0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19FQ0JcXG4gIDk1OlxcdFxcdGhlbHBcXG4gIDk2OlxcdFxcdCAgUHJvdmlkZSB0aGUga2Z1bmNzIG5lZWRlZCBmb3IgQlBGIHByb2dyYW1zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHRcXG4gIDk3OlxcdFxcdCAgZGF0YS4gVGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZSBBRVMtQ0JDIGFuZCBBRVMtRUNCLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRzb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbiAxMDA6XFx0XFxuIDEwMTpcXHRjb25maWcgQlBGX0xTTVxcbiAxMDI6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbiAxMDM6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfRVZFTlRTXFxuIDEwNDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDEwNTpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXFxuIDEwNjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG4gMTA3OlxcdFxcdGhlbHBcXG4gMTA4OlxcdFxcdCAgRW5hYmxlcyBpbnN0cnVtZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGhvb2tzIHdpdGggQlBGIHByb2dyYW1zIGZvclxcbiAxMDk6XFx0XFx0ICBpbXBsZW1lbnRpbmcgZHluYW1pYyBNQUMgYW5kIEF1ZGl0IFBvbGljaWVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo0Mi44MzIwMTUyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTIwOTAzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgQlBGIHN0dWZmLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGNvcmUuIFRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBmaXJzdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc2Vuc2Ugb2YgaG93IHRoZSBCUEYgY29tcG9uZW50cyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LlxuXG5UaGVuLCB0byByZWFsbHkgZ3Jhc3AgdGhlIHJ1bnRpbWUgYmVoYXZpb3IgYW5kLCBjcnVjaWFsbHksIHRoZSBzZWN1cml0eSBhc3BlY3RzLCBJICpoYXZlKiB0byBkZWx2ZSBpbnRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGUgdmVyaWZpZXIgaXMgdGhlIGhlYXJ0IG9mIHRoZSBCUEYgc2VjdXJpdHkgbW9kZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYywgdGhlIGNoZWNrcyBpdCBwZXJmb3JtcywgYW5kIGhvdyBpdCBlbnN1cmVzIHRoYXQgdGhlIEJQRiBwcm9ncmFtcyBsb2FkZWQgaW50byB0aGUga2VybmVsIGFyZSBzYWZlIGFuZCB3b24ndCBjcmFzaCB0aGUgc3lzdGVtIG9yIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBjb250cm9sIGZsb3cgYW5hbHlzaXMsIHJlZ2lzdGVyIHZhbGlkYXRpb24sIGFuZCB0aGUgaGFuZGxpbmcgb2YgcG90ZW50aWFsIGV4cGxvaXRzLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAoYW5kIHBvdGVudGlhbCBoZWFkYWNoZXMpIGhhcHBlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjQ1LjU4NDEwODI4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODMwNDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQ1JZUFRPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz03Mz1jb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTg5LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5MDpjb25maWcgQlBGX0NSWVBUT1xcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTU3PWVuZGlmXFxua2VybmVsL2JwZi9NYWtlZmlsZTo1ODpvYmotJChDT05GSUdfQlBGX0NSWVBUTykgKz0gY3J5cHRvLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTU5LW9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6NDUuNjUyNDE5NDMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE5MjEwNjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgQlBGIHZlcmlmaWVyIGNvZGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcyBpdHNlbGYuIE15IGJlc3QgZ3Vlc3MgaXMgdGhhdCB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIHNvbHZlIGlzIHJlbGF0ZWQgdG8gc29tZSBlZGdlIGNhc2UgdGhlIHZlcmlmaWVyIGlzbid0IGhhbmRsaW5nIHByb3Blcmx5LCBvciBwZXJoYXBzIGFuIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgdmVyaWZpY2F0aW9uIHJ1bGVzLiBUbyBzdGFydCwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgNDU3Mi4gVGhhdCBsb2NhdGlvbiBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBiYXNlZCBvbiBteSBwcmlvciBhbmFseXNpcyBvZiBzaW1pbGFyIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjUyLjg0NDUyODQ0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1NjU6XFx0I2lmZGVmIENPTkZJR19DR1JPVVBTXFxuNDU2NjpcXHRCVEZfSUQoc3RydWN0LCBjZ3JvdXApXFxuNDU2NzpcXHQjZW5kaWZcXG40NTY4OlxcdCNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbjQ1Njk6XFx0QlRGX0lEKHN0cnVjdCwgYnBmX2NwdW1hc2spXFxuNDU3MDpcXHQjZW5kaWZcXG40NTcxOlxcdEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KVxcbjQ1NzI6XFx0I2lmZGVmIENPTkZJR19DUllQVE9cXG40NTczOlxcdEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbjQ1NzQ6XFx0I2VuZGlmXFxuNDU3NTpcXHQjaWZkZWYgQ09ORklHX0lORVRcXG40NTc2OlxcdEJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG40NTc3OlxcdCNlbmRpZlxcbjQ1Nzg6XFx0QlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcXG40NTc5OlxcdFxcbjQ1ODA6XFx0c3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKVxcbjQ1ODE6XFx0e1xcbjQ1ODI6XFx0XFx0aWYgKCFidGZfaXNfa2VybmVsKGJ0ZikpXFxuNDU4MzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG40NTg0OlxcdFxcdHJldHVybiBidGZfaWRfc2V0X2NvbnRhaW5zKFxcdTAwMjZyY3VfcHJvdGVjdGVkX3R5cGVzLCBidGZfaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo1Mi44NDU1MTY0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM0NzE2MjYzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBhdXRvbWF0aWNhbGx5IGJyaW5ncyBpbiBgQlBGX0NSWVBUT2AgKHdoaWNoIGRlcGVuZHMgb24gaXQpLiBgQlBGX0NSWVBUT2AgdGhlbiBzZWxlY3RzIGBDUllQVE9fTElCX0FFU19DQkNgIGFuZCBgQ1JZUFRPX0xJQl9BRVNfRUNCYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBCUEZfU1lTQ0FMTGAgaXMgcHJldHR5IHN0YW5kYXJkLCBidXQgYEJQRl9DUllQVE9gIGlzIHRoZSBuZXcgYWRkaXRpb24gaGVyZS5cblxuTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcz8gV2VsbCwgYEJQRl9TWVNDQUxMYCBkZXBlbmRzIG9uIGBCUEZgLCB3aGljaCBpcyBhIGdpdmVuLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEJQRl9DUllQVE9gLCBgQlBGX1NZU0NBTExgLCBvciBgREVCVUdfSU5GT19CVEZgIGFyZSBuZWVkZWQgZm9yIGtmdW5jcy4gQWgsIHllcywgZm9yIHRob3NlIGtmdW5jcyAoYHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXRgKSwgYEJQRl9TWVNDQUxMYCBhbmQgYERFQlVHX0lORk9fQlRGYCBhcmUgdHlwaWNhbGx5IHJlcXVpcmVkLiBHb29kIHRvIGtub3cuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgaW1wb3J0YW50IHN5bWJvbHMsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG9uZXMgd2UnbGwgcmVhbGx5IGJlIGZvY3VzaW5nIG9uLiBJbiBga2VybmVsL2JwZi9jcnlwdG8uY2AsIHRoZSBrZnVuY3MgYXJlOiBgYnBmX2NyeXB0b19jdHhfY3JlYXRlYCwgYGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VgLCBgYnBmX2NyeXB0b19jdHhfYWNxdWlyZWAsIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3JgLCBgYnBmX2NyeXB0b19kZWNyeXB0YCwgYW5kIGBicGZfY3J5cHRvX2VuY3J5cHRgLiBUaGVzZSBhcmUgdGhlIG5vbi1zdGF0aWMga2Z1bmNzIGV4cG9zZWQgdG8gQlRGIC8gQlBGIHZlcmlmaWVyLlxuXG5BbHJpZ2h0LCBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBUaGlzIHBhdGNoIGlzIGEgYmlnIGRlYWwuIEl0J3MgY29tcGxldGVseSByZXdvcmtpbmcgdGhlIEJQRiBjcnlwdG8gYmFja2VuZC4gV2UncmUgbW92aW5nIGZyb20gc2tjaXBoZXIgdGZtcyB0byBkaXJlY3QgYGFlc19jYmNgIC8gYGFlc19lY2JgIGxpYnJhcnkgZnVuY3Rpb25zLiBUaGlzIGltcGFjdHMgdmFsaWRhdGlvbiwgbWVtb3J5IG1hbmFnZW1lbnQgKHNwZWNpZmljYWxseSBga2ZyZWVfc2Vuc2l0aXZlYCksIHRoZSBjb3JlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBleGVjdXRpb24gcGF0aCwgYWxnb3JpdGhtIGxvb2t1cCwgYW5kIHRoZSBrZnVuYyBpbnRlcmZhY2VzIHRoZW1zZWx2ZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19icGZgIHN5c2NhbGwg4oCTIGRlZmluaXRlbHkgd29ydGggYSB0aG9yb3VnaCBpbnZlc3RpZ2F0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25maWdzIHRvIGVuYWJsZSBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfQ1JZUFRPYCwgYW5kIGBERUJVR19JTkZPX0JURmAuXG5cblRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAsIGBicGZfY3J5cHRvX2N0eF9yZWxlYXNlYCwgYGJwZl9jcnlwdG9fY3R4X2FjcXVpcmVgLCBgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yYCwgYGJwZl9jcnlwdG9fZGVjcnlwdGAsIGFuZCBgYnBmX2NyeXB0b19lbmNyeXB0YC5cblxuRmluYWxseSwgYSBxdWljayBmaW5hbCBjaGVjayBvZiBhbGwgcmVxdWlyZW1lbnRzIGFuZCBmb3JtYXQgb2YgYHNldC1yZXN1bHRzYC5cblxuYFdvcnRoRnV6emluZ2A6IHRydWVcbmBFbmFibGVDb25maWdzYDogW1wiQlBGX1NZU0NBTExcIiwgXCJCUEZfQ1JZUFRPXCIsIFwiREVCVUdfSU5GT19CVEZcIl1cbmBGb2N1c1N5bWJvbHNgOiBbXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIiwgXCJicGZfY3J5cHRvX2N0eF9yZWxlYXNlXCIsIFwiYnBmX2NyeXB0b19jdHhfYWNxdWlyZVwiLCBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLCBcImJwZl9jcnlwdG9fZGVjcnlwdFwiLCBcImJwZl9jcnlwdG9fZW5jcnlwdFwiXVxuYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24uXG5cbk9rYXksIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MDMsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6NTkuMTkyNjgyNzE0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MjgzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0NSWVBUT1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY3J5cHRvX2N0eF9jcmVhdGVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X2FjcXVpcmVcIixcbiAgICBcImJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvclwiLFxuICAgIFwiYnBmX2NyeXB0b19kZWNyeXB0XCIsXG4gICAgXCJicGZfY3J5cHRvX2VuY3J5cHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQlBGIGNyeXB0byBzdXBwb3J0IGJ5IHJlbW92aW5nIHRoZSBkeW5hbWljIGNyeXB0byB0eXBlIHJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGluZyBkaXJlY3QgQUVTLUNCQyBhbmQgQUVTLUVDQiBsaWJyYXJ5IGludGVncmF0aW9uLiBJdCBpbnRyb2R1Y2VzIENPTkZJR19CUEZfQ1JZUFRPIGFuZCBtb2RpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuYyBoYW5kbGVycyAoY29udGV4dCBjcmVhdGlvbiwga2V5IHNldHVwLCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQpLCBtYWtpbmcgdGhlc2UgZnVuY3Rpb25zIGltcG9ydGFudCB0YXJnZXRzIGZvciBCUEYgcHJvZ3JhbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfQ1JZUFRPXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jcnlwdG9fY3R4X2NyZWF0ZVwiLFxuICAgIFwiYnBmX2NyeXB0b19jdHhfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2NyeXB0b19jdHhfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yXCIsXG4gICAgXCJicGZfY3J5cHRvX2RlY3J5cHRcIixcbiAgICBcImJwZl9jcnlwdG9fZW5jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBCUEYgY3J5cHRvIHN1cHBvcnQgYnkgcmVtb3ZpbmcgdGhlIGR5bmFtaWMgY3J5cHRvIHR5cGUgcmVnaXN0cmF0aW9uIGludGVyZmFjZSBhbmQgaW1wbGVtZW50aW5nIGRpcmVjdCBBRVMtQ0JDIGFuZCBBRVMtRUNCIGxpYnJhcnkgaW50ZWdyYXRpb24uIEl0IGludHJvZHVjZXMgQ09ORklHX0JQRl9DUllQVE8gYW5kIG1vZGlmaWVzIHRoZSBCUEYgY3J5cHRvIGtmdW5jIGhhbmRsZXJzIChjb250ZXh0IGNyZWF0aW9uLCBrZXkgc2V0dXAsIGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCksIG1ha2luZyB0aGVzZSBmdW5jdGlvbnMgaW1wb3J0YW50IHRhcmdldHMgZm9yIEJQRiBwcm9ncmFtIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjI5OjU5LjMzMTk3NTYzMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwOTk5NzgyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjoyOTo1OS4zMzI0NTA2NDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjA5OTQ5NjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXFxuXFxuTWVtb3J5IHNhZmV0eSBhbmFseXNpczpcXG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgY29udGV4dCBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBhbmQgdGhlIGBhZXNfa2V5YCB1bmlvbikgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEtleSBzZXR1cCBpcyBoYW5kbGVkIGJ5IGBhZXNfcHJlcGFyZWtleSgpYC4gQ2xlYW51cCBpcyBoYW5kbGVkIHZpYSBga2ZyZWVfc2Vuc2l0aXZlKClgLlxcbjIuIEJ1ZmZlcnMgXFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXFx1MDAzZT0gc3JjX2xlbmApLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcvY29udHJvbCBmbG93LlxcbjMuIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgZHlucHRyIGFjY2Vzc2VzLCBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9uIGJ1Z3MsIG9yIGxpZmV0aW1lL3JlZmNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgQlBGIHZlcmlmaWVyL2RlYnVnIGluZnJhc3RydWN0dXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5N2I0MDkyMjNlMjUxZTBhMjBiODg5YWI3YTc2YjU5NzgzMjhmY2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjoyOToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDNhMTlkYTc0ZDAwYzkuLjE2ZjEzMjcwY2UxZjkgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC00OTM2LDggKzQ5MzYsNiBAQCBCUEYgW0NSWVBUT11cbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0YnBmQHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4tRjpcdGNyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbi1GOlx0aW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhcbiBGOlx0a2VybmVsL2JwZi9jcnlwdG8uY1xuIFxuIEJQRiBbRE9DVU1FTlRBVElPTl0gKFJlbGF0ZWQgdG8gU3RhbmRhcmRpemF0aW9uKVxuZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZVxuaW5kZXggODM4NmQ1NWE5NzU1ZS4uMzNiYjVhZDU5NWU4ZiAxMDA2NDRcbi0tLSBhL2NyeXB0by9NYWtlZmlsZVxuKysrIGIvY3J5cHRvL01ha2VmaWxlXG5AQCAtMjIsOSArMjIsNiBAQCBjcnlwdG9fc2tjaXBoZXIteSArPSBsc2tjaXBoZXIub1xuIGNyeXB0b19za2NpcGhlci15ICs9IHNrY2lwaGVyLm9cbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gY3J5cHRvX3NrY2lwaGVyLm9cbi1pZmVxICgkKENPTkZJR19CUEZfU1lTQ0FMTCkseSlcbi1vYmotJChDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSMikgKz0gYnBmX2NyeXB0b19za2NpcGhlci5vXG4tZW5kaWZcbiBcbiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vXG4gb2JqLSQoQ09ORklHX0NSWVBUT19FQ0hBSU5JVikgKz0gZWNoYWluaXYub1xuZGlmZiAtLWdpdCBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmMgYi9jcnlwdG8vYnBmX2NyeXB0b19za2NpcGhlci5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE4ODc5OGQzZThjODcuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2NyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDgzICswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4tLyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9jcnlwdG8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2NyeXB0by9za2NpcGhlci5oXHUwMDNlXG4tXG4tc3RhdGljIHZvaWQgKmJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdvKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fYWxsb2NfbHNrY2lwaGVyKGFsZ28sIDAsIDApO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSh2b2lkICp0Zm0pXG4te1xuLVx0Y3J5cHRvX2ZyZWVfbHNrY2lwaGVyKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfaGFzX2FsZ28oY29uc3QgY2hhciAqYWxnbylcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2hhc19za2NpcGhlcihhbGdvLCBDUllQVE9fQUxHX1RZUEVfTFNLQ0lQSEVSLCBDUllQVE9fQUxHX1RZUEVfTUFTSyk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfc2V0a2V5KHZvaWQgKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbilcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7XG4tfVxuLVxuLXN0YXRpYyB1MzIgYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzKHZvaWQgKnRmbSlcbi17XG4tXHRyZXR1cm4gY3J5cHRvX2xza2NpcGhlcl9nZXRfZmxhZ3ModGZtKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGludCBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUodm9pZCAqdGZtKVxuLXtcbi1cdHJldHVybiBjcnlwdG9fbHNrY2lwaGVyX2l2c2l6ZSh0Zm0pO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgaW50IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSh2b2lkICp0Zm0pXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfc3RhdGVzaXplKHRmbSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZW5jcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHU4ICpzaXYpXG4te1xuLVx0cmV0dXJuIGNyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCh0Zm0sIHNyYywgZHN0LCBsZW4sIHNpdik7XG4tfVxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlIGJwZl9jcnlwdG9fbHNrY2lwaGVyX3R5cGUgPSB7XG4tXHQuYWxsb2NfdGZtXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX2FsbG9jX3RmbSxcbi1cdC5mcmVlX3RmbVx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9mcmVlX3RmbSxcbi1cdC5oYXNfYWxnb1x0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9oYXNfYWxnbyxcbi1cdC5zZXRrZXlcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9zZXRrZXksXG4tXHQuZW5jcnlwdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9lbmNyeXB0LFxuLVx0LmRlY3J5cHRcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZGVjcnlwdCxcbi1cdC5pdnNpemVcdFx0PSBicGZfY3J5cHRvX2xza2NpcGhlcl9pdnNpemUsXG4tXHQuc3RhdGVzaXplXHQ9IGJwZl9jcnlwdG9fbHNrY2lwaGVyX3N0YXRlc2l6ZSxcbi1cdC5nZXRfZmxhZ3NcdD0gYnBmX2NyeXB0b19sc2tjaXBoZXJfZ2V0X2ZsYWdzLFxuLVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tXHQubmFtZVx0XHQ9IFwic2tjaXBoZXJcIixcbi19O1xuLVxuLXN0YXRpYyBpbnQgX19pbml0IGJwZl9jcnlwdG9fc2tjaXBoZXJfaW5pdCh2b2lkKVxuLXtcbi1cdHJldHVybiBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIF9fZXhpdCBicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQodm9pZClcbi17XG4tXHRpbnQgZXJyID0gYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoXHUwMDI2YnBmX2NyeXB0b19sc2tjaXBoZXJfdHlwZSk7XG4tXHRXQVJOX09OX09OQ0UoZXJyKTtcbi19XG4tXG4tbW9kdWxlX2luaXQoYnBmX2NyeXB0b19za2NpcGhlcl9pbml0KTtcbi1tb2R1bGVfZXhpdChicGZfY3J5cHRvX3NrY2lwaGVyX2V4aXQpO1xuLU1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIlN5bW1ldHJpYyBrZXkgY2lwaGVyIHN1cHBvcnQgZm9yIEJQRlwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGE0MWU3MWQ0ZTJkOWYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX2NyeXB0by5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSwyNCArMCwwIEBAXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbi0jaWZuZGVmIF9CUEZfQ1JZUFRPX0hcbi0jZGVmaW5lIF9CUEZfQ1JZUFRPX0hcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlIHtcbi1cdHZvaWQgKigqYWxsb2NfdGZtKShjb25zdCBjaGFyICphbGdvKTtcbi1cdHZvaWQgKCpmcmVlX3RmbSkodm9pZCAqdGZtKTtcbi1cdGludCAoKmhhc19hbGdvKShjb25zdCBjaGFyICphbGdvKTtcbi1cdGludCAoKnNldGtleSkodm9pZCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTtcbi1cdGludCAoKnNldGF1dGhzaXplKSh2b2lkICp0Zm0sIHVuc2lnbmVkIGludCBhdXRoc2l6ZSk7XG4tXHRpbnQgKCplbmNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHRpbnQgKCpkZWNyeXB0KSh2b2lkICp0Zm0sIGNvbnN0IHU4ICpzcmMsIHU4ICpkc3QsIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7XG4tXHR1bnNpZ25lZCBpbnQgKCppdnNpemUpKHZvaWQgKnRmbSk7XG4tXHR1bnNpZ25lZCBpbnQgKCpzdGF0ZXNpemUpKHZvaWQgKnRmbSk7XG4tXHR1MzIgKCpnZXRfZmxhZ3MpKHZvaWQgKnRmbSk7XG4tXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbi1cdGNoYXIgbmFtZVsxNF07XG4tfTtcbi1cbi1pbnQgYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUpO1xuLWludCBicGZfY3J5cHRvX3VucmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlKTtcbi1cbi0jZW5kaWYgLyogX0JQRl9DUllQVE9fSCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvS2NvbmZpZyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuaW5kZXggZWIzZGUzNTczNGYwOS4uODIyNTk5YjQyYmUyZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xuKysrIGIva2VybmVsL2JwZi9LY29uZmlnXG5AQCAtODcsNiArODcsMTUgQEAgY29uZmlnIEJQRl9VTlBSSVZfREVGQVVMVF9PRkZcbiBcbiBcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgWS5cbiBcbitjb25maWcgQlBGX0NSWVBUT1xuK1x0ZGVmX2Jvb2wgeVxuK1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ1xuK1x0c2VsZWN0IENSWVBUT19MSUJfQUVTX0VDQlxuK1x0aGVscFxuK1x0ICBQcm92aWRlIHRoZSBrZnVuY3MgbmVlZGVkIGZvciBCUEYgcHJvZ3JhbXMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdFxuK1x0ICBkYXRhLiBUaGUgc3VwcG9ydGVkIGFsZ29yaXRobXMgYXJlIEFFUy1DQkMgYW5kIEFFUy1FQ0IuXG4rXG4gc291cmNlIFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcIlxuIFxuIGNvbmZpZyBCUEZfTFNNXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9NYWtlZmlsZSBiL2tlcm5lbC9icGYvTWFrZWZpbGVcbmluZGV4IDkwMjU1ZDgwZTViZTYuLmFiMmU1ZDI3ODJlNmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL01ha2VmaWxlXG4rKysgYi9rZXJuZWwvYnBmL01ha2VmaWxlXG5AQCAtNTUsOSArNTUsNyBAQCBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hc2sub1xuICMgc2VtYW50aWNzIHdpdGhpbiBwYWhvbGUgYXJlIHJldmlzaXRlZCBhY2NvcmRpbmdseS5cbiBvYmotJHtDT05GSUdfQlBGX0xTTX0gKz0gYnBmX2xzbV9wcm90by5vIGJwZl9sc20ub1xuIGVuZGlmXG4taWZuZXEgKCQoQ09ORklHX0NSWVBUTyksKVxuLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3J5cHRvLm9cbi1lbmRpZlxuK29iai0kKENPTkZJR19CUEZfQ1JZUFRPKSArPSBjcnlwdG8ub1xuIG9iai0kKENPTkZJR19CUEZfUFJFTE9BRCkgKz0gcHJlbG9hZC9cbiBcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHJlbG9fY29yZS5vXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jcnlwdG8uYyBiL2tlcm5lbC9icGYvY3J5cHRvLmNcbmluZGV4IDUxZjg5Y2VjZWZiNGQuLjhjZGMxNmY5YjM3NGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NyeXB0by5jXG4rKysgYi9rZXJuZWwvYnBmL2NyeXB0by5jXG5AQCAtMSwxOSArMSwxMyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSwgSW5jICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfY3J5cHRvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfbWVtX2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjY3J5cHRvL3NrY2lwaGVyLmhcdTAwM2Vcbi1cbi1zdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3Qge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi19O1xuKyNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZXMtY2JjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVzLWVjYi5oXHUwMDNlXG4gXG4gLyogQlBGIGNyeXB0byBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXJzIHN0cnVjdCAqL1xuIC8qKlxuQEAgLTM2LDk0ICszMCw1MyBAQCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xuIFx0dTMyIGF1dGhzaXplO1xuIH07XG4gXG4tc3RhdGljIExJU1RfSEVBRChicGZfY3J5cHRvX3R5cGVzKTtcbi1zdGF0aWMgREVDTEFSRV9SV1NFTShicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4rZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xuK1x0QlBGX0FMR09fQUVTX0NCQyxcbitcdEJQRl9BTEdPX0FFU19FQ0IsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHtcbitcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcbitcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcbitcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XG4rfSBicGZfY3J5cHRvX2FsZ29zW10gPSB7XG4rXHR7IFwic2tjaXBoZXJcIiwgXCJjYmMoYWVzKVwiLCBCUEZfQUxHT19BRVNfQ0JDIH0sXG4rXHR7IFwic2tjaXBoZXJcIiwgXCJlY2IoYWVzKVwiLCBCUEZfQUxHT19BRVNfRUNCIH0sXG4rfTtcbitcbitzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxuK3tcbitcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcbitcdFx0aWYgKHN0cm5jbXAoYnBmX2NyeXB0b19hbGdvc1tpXS50eXBlX25hbWUsIHBhcmFtcy1cdTAwM2V0eXBlLFxuK1x0XHRcdCAgICBzaXplb2YocGFyYW1zLVx1MDAzZXR5cGUpKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgc3RybmNtcChicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ29fbmFtZSwgcGFyYW1zLVx1MDAzZWFsZ28sXG4rXHRcdFx0ICAgIHNpemVvZihwYXJhbXMtXHUwMDNlYWxnbykpID09IDApIHtcbitcdFx0XHQqaWRfcmV0ID0gYnBmX2NyeXB0b19hbGdvc1tpXS5hbGdvO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIC8qKlxuICAqIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAtIHJlZmNvdW50ZWQgQlBGIGNyeXB0byBjb250ZXh0IHN0cnVjdHVyZVxuLSAqIEB0eXBlOlx0VGhlIHBvaW50ZXIgdG8gYnBmIGNyeXB0byB0eXBlXG4tICogQHRmbTpcdFRoZSBwb2ludGVyIHRvIGluc3RhbmNlIG9mIGNyeXB0byBBUEkgc3RydWN0LlxuLSAqIEBzaXZfbGVuOiAgICBTaXplIG9mIElWIGFuZCBzdGF0ZSBzdG9yYWdlIGZvciBjaXBoZXJcbisgKiBAYWxnbzpcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXG4rICogQGtleTpcdFRoZSBjcnlwdG8ga2V5XG4gICogQHJjdTpcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cbiAgKiBAdXNhZ2U6XHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXG4gICpcdFx0bWVtb3J5IGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlIEJQRiBhbGxvY2F0b3IsIHdoaWNoIHByb3ZpZGVzXG4gICpcdFx0UkNVIHNhZmV0eS5cbiAgKi9cbiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xuLVx0Y29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZTtcbi1cdHZvaWQgKnRmbTtcbi1cdHUzMiBzaXZfbGVuO1xuK1x0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IGFlc19rZXkgYWVzO1xuK1x0fSBrZXk7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgcmN1O1xuIFx0cmVmY291bnRfdCB1c2FnZTtcbiB9O1xuIFxuLWludCBicGZfY3J5cHRvX3JlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuLVxuLVx0ZG93bl93cml0ZShcdTAwMjZicGZfY3J5cHRvX3R5cGVzX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIFx1MDAyNmJwZl9jcnlwdG9fdHlwZXMsIGxpc3QpIHtcbi1cdFx0aWYgKCFzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Z290byB1bmxvY2s7XG4tXHR9XG4tXG4tXHRub2RlID0ga21hbGxvY19vYmooKm5vZGUpO1xuLVx0ZXJyID0gLUVOT01FTTtcbi1cdGlmICghbm9kZSlcbi1cdFx0Z290byB1bmxvY2s7XG4tXG4tXHRub2RlLVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0bGlzdF9hZGQoXHUwMDI2bm9kZS1cdTAwM2VsaXN0LCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzKTtcbi1cdGVyciA9IDA7XG4tXG4tdW5sb2NrOlxuLVx0dXBfd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoYnBmX2NyeXB0b19yZWdpc3Rlcl90eXBlKTtcbi1cbi1pbnQgYnBmX2NyeXB0b191bnJlZ2lzdGVyX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqdHlwZSlcbi17XG4tXHRzdHJ1Y3QgYnBmX2NyeXB0b190eXBlX2xpc3QgKm5vZGU7XG4tXHRpbnQgZXJyID0gLUVOT0VOVDtcbi1cbi1cdGRvd25fd3JpdGUoXHUwMDI2YnBmX2NyeXB0b190eXBlc19zZW0pO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBcdTAwMjZicGZfY3J5cHRvX3R5cGVzLCBsaXN0KSB7XG4tXHRcdGlmIChzdHJjbXAobm9kZS1cdTAwM2V0eXBlLVx1MDAzZW5hbWUsIHR5cGUtXHUwMDNlbmFtZSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGxpc3RfZGVsKFx1MDAyNm5vZGUtXHUwMDNlbGlzdCk7XG4tXHRcdGtmcmVlKG5vZGUpO1xuLVx0XHRlcnIgPSAwO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cdHVwX3dyaXRlKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGJwZl9jcnlwdG9fdW5yZWdpc3Rlcl90eXBlKTtcbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fdHlwZSAqYnBmX2NyeXB0b19nZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuLXtcbi1cdGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3R5cGUgKnR5cGUgPSBFUlJfUFRSKC1FTk9FTlQpO1xuLVx0c3RydWN0IGJwZl9jcnlwdG9fdHlwZV9saXN0ICpub2RlO1xuLVxuLVx0ZG93bl9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgXHUwMDI2YnBmX2NyeXB0b190eXBlcywgbGlzdCkge1xuLVx0XHRpZiAoc3RyY21wKG5vZGUtXHUwMDNldHlwZS1cdTAwM2VuYW1lLCBuYW1lKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHRyeV9tb2R1bGVfZ2V0KG5vZGUtXHUwMDNldHlwZS1cdTAwM2Vvd25lcikpXG4tXHRcdFx0dHlwZSA9IG5vZGUtXHUwMDNldHlwZTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXHR1cF9yZWFkKFx1MDAyNmJwZl9jcnlwdG9fdHlwZXNfc2VtKTtcbi1cbi1cdHJldHVybiB0eXBlO1xuLX1cbi1cbiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gXG4gLyoqXG5AQCAtMTQ2LDcgKzk5LDYgQEAgX19icGZfa2Z1bmMgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpcbiBicGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxuIFx0XHQgICAgICBpbnQgKmVycilcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b190eXBlICp0eXBlO1xuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRpZiAoIXBhcmFtcyB8fCBwYXJhbXMtXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgcGFyYW1zLVx1MDAzZXJlc2VydmVkWzFdIHx8XG5AQCAtMTU1LDY5ICsxMDcsNDAgQEAgYnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHR0eXBlID0gYnBmX2NyeXB0b19nZXRfdHlwZShwYXJhbXMtXHUwMDNldHlwZSk7XG4tXHRpZiAoSVNfRVJSKHR5cGUpKSB7XG4tXHRcdCplcnIgPSBQVFJfRVJSKHR5cGUpO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGlmICghdHlwZS1cdTAwM2VoYXNfYWxnbyhwYXJhbXMtXHUwMDNlYWxnbykpIHtcbi1cdFx0KmVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLVx0fVxuLVxuLVx0aWYgKCEhcGFyYW1zLVx1MDAzZWF1dGhzaXplIF4gISF0eXBlLVx1MDAzZXNldGF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbi1cdGlmICghcGFyYW1zLVx1MDAzZWtleV9sZW4gfHwgcGFyYW1zLVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihwYXJhbXMtXHUwMDNla2V5KSkge1xuLVx0XHQqZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBlcnJfbW9kdWxlX3B1dDtcbi1cdH1cbi1cbiBcdGN0eCA9IGt6YWxsb2Nfb2JqKCpjdHgpO1xuIFx0aWYgKCFjdHgpIHtcbiBcdFx0KmVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gZXJyX21vZHVsZV9wdXQ7XG4rXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0Y3R4LVx1MDAzZXR5cGUgPSB0eXBlO1xuLVx0Y3R4LVx1MDAzZXRmbSA9IHR5cGUtXHUwMDNlYWxsb2NfdGZtKHBhcmFtcy1cdTAwM2VhbGdvKTtcbi1cdGlmIChJU19FUlIoY3R4LVx1MDAzZXRmbSkpIHtcbi1cdFx0KmVyciA9IFBUUl9FUlIoY3R4LVx1MDAzZXRmbSk7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfY3R4O1xuK1x0aWYgKCFicGZfY3J5cHRvX2ZpbmRfYWxnbyhwYXJhbXMsIFx1MDAyNmN0eC1cdTAwM2VhbGdvKSkge1xuK1x0XHQqZXJyID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKSB7XG4tXHRcdCplcnIgPSB0eXBlLVx1MDAzZXNldGF1dGhzaXplKGN0eC1cdTAwM2V0Zm0sIHBhcmFtcy1cdTAwM2VhdXRoc2l6ZSk7XG4tXHRcdGlmICgqZXJyKVxuLVx0XHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK1x0c3dpdGNoIChjdHgtXHUwMDNlYWxnbykge1xuK1x0Y2FzZSBCUEZfQUxHT19BRVNfQ0JDOlxuK1x0Y2FzZSBCUEZfQUxHT19BRVNfRUNCOlxuK1x0XHRpZiAocGFyYW1zLVx1MDAzZWF1dGhzaXplKVxuK1x0XHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0ZWxzZVxuK1x0XHRcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcdTAwMjZjdHgtXHUwMDNla2V5LmFlcywgcGFyYW1zLVx1MDAzZWtleSxcbitcdFx0XHRcdFx0ICAgICAgcGFyYW1zLVx1MDAzZWtleV9sZW4pO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdFdBUk5fT04oMSk7XG4rXHRcdCplcnIgPSAtRU5PRU5UO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbi1cdCplcnIgPSB0eXBlLVx1MDAzZXNldGtleShjdHgtXHUwMDNldGZtLCBwYXJhbXMtXHUwMDNla2V5LCBwYXJhbXMtXHUwMDNla2V5X2xlbik7XG4tXHRpZiAoKmVycilcbi1cdFx0Z290byBlcnJfZnJlZV90Zm07XG4tXG4tXHRpZiAodHlwZS1cdTAwM2VnZXRfZmxhZ3MoY3R4LVx1MDAzZXRmbSkgXHUwMDI2IENSWVBUT19URk1fTkVFRF9LRVkpIHtcbi1cdFx0KmVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXJyX2ZyZWVfdGZtO1xuK291dDpcbitcdGlmICgqZXJyKSB7XG4rXHRcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGN0eC1cdTAwM2VzaXZfbGVuID0gdHlwZS1cdTAwM2VpdnNpemUoY3R4LVx1MDAzZXRmbSkgKyB0eXBlLVx1MDAzZXN0YXRlc2l6ZShjdHgtXHUwMDNldGZtKTtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNldXNhZ2UsIDEpO1xuLVxuIFx0cmV0dXJuIGN0eDtcbi1cbi1lcnJfZnJlZV90Zm06XG4tXHR0eXBlLVx1MDAzZWZyZWVfdGZtKGN0eC1cdTAwM2V0Zm0pO1xuLWVycl9mcmVlX2N0eDpcbi1cdGtmcmVlKGN0eCk7XG4tZXJyX21vZHVsZV9wdXQ6XG4tXHRtb2R1bGVfcHV0KHR5cGUtXHUwMDNlb3duZXIpO1xuLVxuLVx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNyeXB0b19mcmVlX2NiKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbkBAIC0yMjUsOSArMTQ4LDcgQEAgc3RhdGljIHZvaWQgY3J5cHRvX2ZyZWVfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0c3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHg7XG4gXG4gXHRjdHggPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJwZl9jcnlwdG9fY3R4LCByY3UpO1xuLVx0Y3R4LVx1MDAzZXR5cGUtXHUwMDNlZnJlZV90Zm0oY3R4LVx1MDAzZXRmbSk7XG4tXHRtb2R1bGVfcHV0KGN0eC1cdTAwM2V0eXBlLVx1MDAzZW93bmVyKTtcbi1cdGtmcmVlKGN0eCk7XG4rXHRrZnJlZV9zZW5zaXRpdmUoY3R4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3LDI3ICsxODgsNTMgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfY3J5cHRvX2N0eF9yZWxlYXNlX2R0b3Iodm9pZCAqY3R4KVxuIH1cbiBDRklfTk9TRUFMKGJwZl9jcnlwdG9fY3R4X3JlbGVhc2VfZHRvcik7XG4gXG4rc3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXG4rXHRcdFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCwgYm9vbCBkZWNyeXB0KVxuK3tcbitcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChkZWNyeXB0KVxuK1x0XHRhZXNfY2JjX2RlY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGl2LCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFx1MDAyNmN0eC1cdTAwM2VrZXkuYWVzKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJwZl9hZXNfZWNiX2NyeXB0KHU4ICpkc3QsIHUzMiBkc3RfbGVuLCBjb25zdCB1OCAqc3JjLCB1MzIgc3JjX2xlbixcbitcdFx0XHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXG4re1xuK1x0aWYgKGl2X2xlbiAhPSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcdTAwM2Mgc3JjX2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoZGVjcnlwdClcbitcdFx0YWVzX2VjYl9kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBcdTAwMjZjdHgtXHUwMDNla2V5LmFlcyk7XG4rXHRlbHNlXG4rXHRcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXHUwMDI2Y3R4LVx1MDAzZWtleS5hZXMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqc3JjLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdixcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsXG4gXHRcdFx0ICAgIGJvb2wgZGVjcnlwdClcbiB7XG4tXHR1MzIgc3JjX2xlbiwgZHN0X2xlbiwgc2l2X2xlbjtcbitcdHUzMiBzcmNfbGVuLCBkc3RfbGVuLCBpdl9sZW47XG4gXHRjb25zdCB1OCAqcHNyYztcbiBcdHU4ICpwZHN0LCAqcGl2O1xuLVx0aW50IGVycjtcbiBcbiBcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2l2X2xlbiA9IHNpdiA/IF9fYnBmX2R5bnB0cl9zaXplKHNpdikgOiAwO1xuK1x0aXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwO1xuIFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XG4gXHRkc3RfbGVuID0gX19icGZfZHlucHRyX3NpemUoZHN0KTtcbi1cdGlmICghc3JjX2xlbiB8fCAhZHN0X2xlbiB8fCBzcmNfbGVuIFx1MDAzZSBkc3RfbGVuKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChzaXZfbGVuICE9IGN0eC1cdTAwM2VzaXZfbGVuKVxuK1x0aWYgKCFzcmNfbGVuIHx8ICFkc3RfbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdHBzcmMgPSBfX2JwZl9keW5wdHJfZGF0YShzcmMsIHNyY19sZW4pO1xuQEAgLTI5NywxNCArMjQ0LDIwIEBAIHN0YXRpYyBpbnQgYnBmX2NyeXB0b19jcnlwdChjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiBcdGlmICghcGRzdClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRwaXYgPSBzaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoc2l2LCBzaXZfbGVuKSA6IE5VTEw7XG4tXHRpZiAoc2l2X2xlbiBcdTAwMjZcdTAwMjYgIXBpdilcbitcdHBpdiA9IGl2X2xlbiA/IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGl2LCBpdl9sZW4pIDogTlVMTDtcbitcdGlmIChpdl9sZW4gXHUwMDI2XHUwMDI2ICFwaXYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0ZXJyID0gZGVjcnlwdCA/IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWRlY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KVxuLVx0XHQgICAgICA6IGN0eC1cdTAwM2V0eXBlLVx1MDAzZWVuY3J5cHQoY3R4LVx1MDAzZXRmbSwgcHNyYywgcGRzdCwgc3JjX2xlbiwgcGl2KTtcbi1cbi1cdHJldHVybiBlcnI7XG4rXHRzd2l0Y2ggKGN0eC1cdTAwM2VhbGdvKSB7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XG4rXHRcdHJldHVybiBicGZfYWVzX2NiY19jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XG4rXHRcdHJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXG4rXHRcdFx0XHRcdCBpdl9sZW4sIGN0eCwgZGVjcnlwdCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMzEyLDIwICsyNjUsMjAgQEAgc3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxuICAqIEBjdHg6XHRcdFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyB1c2VkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQHNyYzpcdFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRGVjcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2RlY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCB0cnVlKTtcbitcdHJldHVybiBicGZfY3J5cHRvX2NyeXB0KGN0eCwgc3JjX2tlcm4sIGRzdF9rZXJuLCBpdl9rZXJuLCB0cnVlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMzMzLDIwICsyODYsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcbiAgKiBAY3R4Olx0XHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxuICAqIEBzcmM6XHRcdGJwZl9keW5wdHIgdG8gdGhlIHBsYWluIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4gICogQGRzdDpcdFx0YnBmX2R5bnB0ciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXG4tICogQHNpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIElWIGRhdGEgYW5kIHN0YXRlIGRhdGEgdG8gYmUgdXNlZCBieSBkZWNyeXB0b3IuIE1heSBiZSBOVUxMLlxuKyAqIEBpdl9fbnVsbGFibGU6XHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxuICAqXG4gICogRW5jcnlwdHMgcHJvdmlkZWQgYnVmZmVyIHVzaW5nIElWIGRhdGEgYW5kIHRoZSBjcnlwdG8gY29udGV4dC4gQ3J5cHRvIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkLlxuICAqL1xuIF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzaXZfX251bGxhYmxlKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcbi1cdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNpdl9rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzaXZfX251bGxhYmxlO1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xuIFxuLVx0cmV0dXJuIGJwZl9jcnlwdG9fY3J5cHQoY3R4LCBzcmNfa2VybiwgZHN0X2tlcm4sIHNpdl9rZXJuLCBmYWxzZSk7XG4rXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgZmFsc2UpO1xuIH1cbiBcbiBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6Mjk6NTkuMzMyNDUzMjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5OTYxODA4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQ3J5cHRvIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGFuYWx5emUgdGhlIGNvZGUgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzIG9yIG1lbW9yeSBsZWFrcy5cblxuRmlyc3QsIEkgbmVlZCB0byBncmFzcCB0aGUgb3ZlcmFsbCBjb250ZXh0IG9mIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB3ZSdyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBnZW5lcmljIEJQRiBjcnlwdG8gZHluYW1pYyByZWdpc3RyYXRpb24gZnJhbWV3b3JrICh1c2luZyBgY3J5cHRvIHRmbWAgQVBJIGZvciBgc2tjaXBoZXJgIGFuZCBgbHNrY2lwaGVyYCkgYW5kIG9wdGluZyBmb3IgYSBkaXJlY3QgaW1wbGVtZW50YXRpb24gbGV2ZXJhZ2luZyB0aGUgYGNyeXB0by9hZXMtY2JjLmhgIGFuZCBgY3J5cHRvL2Flcy1lY2IuaGAgaGVscGVycyAoYENSWVBUT19MSUJfQUVTX0NCQ2AgYW5kIGBDUllQVE9fTElCX0FFU19FQ0JgKS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQsIGFuZCBpdCdzIHdoZXJlIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzOlxuXG4qICAgVGhlIHBhdGNoIHJlbW92ZXMgYGNyeXB0by9icGZfY3J5cHRvX3NrY2lwaGVyLmNgIGFuZCBgaW5jbHVkZS9saW51eC9icGZfY3J5cHRvLmhgLCBzdWdnZXN0aW5nIGEgc2ltcGxpZmljYXRpb24gb2YgdGhlIGZyYW1ld29yay5cbiogICBJbiBga2VybmVsL2JwZi9LY29uZmlnYCwgaXQncyBhZGRpbmcgYGNvbmZpZyBCUEZfQ1JZUFRPYCBhbmQgc2VsZWN0aW5nIGBDUllQVE9fTElCX0FFU19DQkNgIGFuZCBgQ1JZUFRPX0xJQl9BRVNfRUNCYCwgd2hpY2ggY29uZmlybXMgdGhlIEFFUy1zcGVjaWZpYyBmb2N1cy5cbiogICBUaGUgY3JpdGljYWwgY2hhbmdlcyBhcmUgd2l0aGluIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gSGVyZSdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyB0aGUgbW9zdDpcbiAgICAqICAgVGhlIGBicGZfY3J5cHRvX3R5cGVzYCByZWdpc3RyeSBhbmQgdGhlIGB0Zm1gLWJhc2VkIGRpc3BhdGNoIGFyZSBnb25lLCByZXBsYWNlZCBieSBhIGhhcmRjb2RlZCBgZW51bSBicGZfY3J5cHRvX2FsZ29faWRgIGZvciBBRVMgQ0JDIGFuZCBFQ0IuIFRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbiBidXQgY291bGQgaW50cm9kdWNlIGlzc3VlcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuXG4gICAgKiAgIFRoZSBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBoYXMgYmVlbiBtb2RpZmllZC4gSXQgbm93IGNvbnRhaW5zIGFuIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAsIGEgdW5pb24gZm9yIHRoZSBBRVMga2V5IChgc3RydWN0IGFlc19rZXlgKSwgYW4gYHJjdV9oZWFkYCwgYW5kIGEgYHJlZmNvdW50X3RgLiBUaGlzIGxvb2tzIGdlbmVyYWxseSBzb3VuZCwgYW5kIEkgc2VlIGl0J3Mgbm93IHplcm8taW5pdGlhbGl6ZWQgYnkgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuICAgICogICBgYnBmX2NyeXB0b19jdHhfY3JlYXRlKClgIGlzIHdoZXJlIEkgd2FudCB0byBsb29rIGNsb3NlbHkuIEl0J3MgZG9pbmcgc29tZSBwYXJhbWV0ZXIgY2hlY2tpbmcsIGNhbGxpbmcgYGFlc19wcmVwYXJla2V5YCwgYW5kIGhhbmRsaW5nIGVycm9ycyBieSBmcmVlaW5nIHRoZSBjb250ZXh0IHdpdGggYGtmcmVlX3NlbnNpdGl2ZWAuIFRoaXMgc2VlbXMgcmVhc29uYWJsZSwgYnV0IGBhZXNfcHJlcGFyZWtleWAgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuICAgICogICBgY3J5cHRvX2ZyZWVfY2IoKWAgdXNlcyBga2ZyZWVfc2Vuc2l0aXZlYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHNlbnNpdGl2ZSBrZXkgbWF0ZXJpYWwuXG4gICAgKiAgIFRoZSBgYnBmX2Flc19jYmNfY3J5cHRgIGFuZCBgYnBmX2Flc19lY2JfY3J5cHRgIGZ1bmN0aW9ucyBhcmUgcHJlc2VudCB3aXRoIHNhbml0eSBjaGVja3MgKElWIGxlbmd0aCwgc291cmNlL2Rlc3RpbmF0aW9uIGxlbmd0aCBjaGVja3MpLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIEFFUyBvcGVyYXRpb25zIGFyZSBkZWxlZ2F0ZWQgdG8gYGFlc19jYmNfZGVjcnlwdGAvYGFlc19jYmNfZW5jcnlwdGAgYW5kIGBhZXNfZWNiX2RlY3J5cHRgL2BhZXNfZWNiX2VuY3J5cHRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG15IG5leHQgYXJlYSBvZiBmb2N1cy5cbiAgICAqICAgYGJwZl9jcnlwdG9fY3J5cHRgIHNlZW1zIHRvIGJlIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb24gdGhhdCBkb2VzIHNpemUgY2hlY2tpbmcsIGV4dHJhY3RzIHRoZSBwb2ludGVycywgYW5kIGRpc3BhdGNoZXMgdG8gdGhlIEFFUyBDQkMgb3IgRUNCIGZ1bmN0aW9ucy4gSXQgYWxzbyBjYWxscyB0aGUgYF9fYnBmX2R5bnB0cl9pc19yZG9ubHlgIGFuZCBgX19icGZfZHlucHRyX2RhdGFgIGZhbWlseSBvZiBmdW5jdGlvbnMuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIHNvdXJjZSwgZGVzdGluYXRpb24sIGFuZCBJViBidWZmZXJzLlxuXG5NeSBtYWluIGNvbmNlcm5zIHJpZ2h0IG5vdyByZXZvbHZlIGFyb3VuZCB0aGVzZSBhc3BlY3RzOlxuXG4xLiAgKipgYWVzX3ByZXBhcmVrZXlgOioqIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgd2hldGhlciBpdCBjb3VsZCBwb3RlbnRpYWxseSBsZWF2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGBzdHJ1Y3QgYWVzX2tleWAuXG4yLiAgKipgYWVzX2NiY19lbmNyeXB0L2RlY3J5cHRgIGFuZCBgYWVzX2VjYl9lbmNyeXB0L2RlY3J5cHRgOioqIEkgaGF2ZSB0byBhbmFseXplIHRoZXNlIGltcGxlbWVudGF0aW9ucyBmb3IgYW55IHN1YnRsZSBmbGF3cyByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgb3IgcGFkZGluZyBpc3N1ZXMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIGlucHV0IGRhdGEgaXMgaGFuZGxlZCBhbmQgaWYgdGhlcmUncyBhbnkgcmlzayBvZiByZWFkaW5nIGJleW9uZCB0aGUgcHJvdmlkZWQgYnVmZmVycy5cbjMuICAqKkRhdGEgbW92ZW1lbnQ6KiogdGhlIGBfX2JwZl9keW5wdHJfZGF0YWAgY2FsbHMuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgc291cmNlLCBkZXN0aW5hdGlvbiBhbmQgSVYgYnVmZmVycyBhcmUgYWxsIGhhbmRsZWQgc2FmZWx5LlxuNC4gICoqYHN0cnVjdCBhZXNfa2V5YDoqKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGNyaXRpY2FsIGZvciBjaGVja2luZyBwYWRkaW5nIGJ5dGVzLlxuXG5JIHdpbGwgY29uZHVjdCBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIGRlZmluaXRpb25zIG9mIGBzdHJ1Y3QgYWVzX2tleWAsIGBhZXNfcHJlcGFyZWtleWAsIGFuZCB0aGUgQUVTIGVuY3J5cHQvZGVjcnlwdCBmdW5jdGlvbnMsIHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgb2NjdXJyZW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIG9yIGRlZmluaXRpb25zLCBzbyBhcyBub3QgdG8gbWlzcyBhbnkgZGV0YWlsLiBCYXNlZCBvbiBteSBmaW5kaW5ncywgSSdsbCBkZWNpZGUgaWYgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgYW4gZXh0cmEgbGF5ZXIgb2Ygc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDowNy4zMjg2MzcxMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzg1ODI5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWVzX3ByZXBhcmVrZXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jPTIzND1zdGF0aWMgaW50IGFlc2JzX3h0c19zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxcbi0tXFxuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jLTI0NC1cXHRrZXlfbGVuIC89IDI7XFxuYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jOjI0NTpcXHRlcnIgPSBhZXNfcHJlcGFyZWtleShcXHUwMDI2Y3R4LVxcdTAwM2VmYWxsYmFjaywgaW5fa2V5LCBrZXlfbGVuKTtcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtMjQ2LVxcdGlmIChlcnIpXFxuLS1cXG5jcnlwdG8vYWVzLmM9MjY9c3RhdGljIGludCBjcnlwdG9fYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxcbi0tXFxuY3J5cHRvL2Flcy5jLTMwLVxcbmNyeXB0by9hZXMuYzozMTpcXHRyZXR1cm4gYWVzX3ByZXBhcmVrZXkoa2V5LCBpbl9rZXksIGtleV9sZW4pO1xcbmNyeXB0by9hZXMuYy0zMi19XFxuLS1cXG5jcnlwdG8vYWVzLmM9MjEzPWNyeXB0b19hZXNfc2tjaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmluX2tleSxcXG4tLVxcbmNyeXB0by9hZXMuYy0yMTctXFxuY3J5cHRvL2Flcy5jOjIxODpcXHRyZXR1cm4gYWVzX3ByZXBhcmVrZXkoa2V5LCBpbl9rZXksIGtleV9sZW4pO1xcbmNyeXB0by9hZXMuYy0yMTktfVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYz0xMDI1PXN0YXRpYyBpbnQgY2hjcl91cGRhdGVfdHdlYWsoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgdTggKml2LFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYy0xMDQ2LVxcdFxcdFxcdD09IENIQ1JfS0VZQ1RYX0NJUEhFUl9LRVlfU0laRV8xOTIpXFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYzoxMDQ3OlxcdFxcdHJldCA9IGFlc19wcmVwYXJla2V5KFxcdTAwMjZhZXMsIGtleSwga2V5bGVuIC0gOCk7XFxuZHJpdmVycy9jcnlwdG8vY2hlbHNpby9jaGNyX2FsZ28uYy0xMDQ4LVxcdGVsc2VcXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwNDk6XFx0XFx0cmV0ID0gYWVzX3ByZXBhcmVrZXkoXFx1MDAyNmFlcywga2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTA1MC1cXHRpZiAocmV0KVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTE5LSAqXFx0bGFzdCBjaXBoZXJ0ZXh0IGJsb2NrIChvciBsZWZ0IHVuY2hhbmdlZCBpZiBAbGVuID09IDApLlxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDoyMDogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KCkgb3IgYWVzX3ByZXBhcmVlbmNrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC0yMS0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTI3PXZvaWQgYWVzX2NiY19lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtMzctICpcXHRsYXN0IGNpcGhlcnRleHQgYmxvY2sgKG9yIGxlZnQgdW5jaGFuZ2VkIGlmIEBsZW4gPT0gMCkuXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjM4OiAqIEBrZXk6IFRoZSBrZXksIGFscmVhZHkgcHJlcGFyZWQgdXNpbmcgYWVzX3ByZXBhcmVrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC0zOS0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTQ1PXZvaWQgYWVzX2NiY19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNTQtICogQGl2OiBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLCBjbG9iYmVyZWQgYnkgdGhpcyBmdW5jdGlvblxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaDo1NTogKiBAa2V5OiBUaGUga2V5LCBhbHJlYWR5IHByZXBhcmVkIHVzaW5nIGFlc19wcmVwYXJla2V5KCkgb3IgYWVzX3ByZXBhcmVlbmNrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jYmMuaC01Ni0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTU5PXZvaWQgYWVzX2NiY19jdHNfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTY4LSAqIEBpdjogVGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciwgY2xvYmJlcmVkIGJ5IHRoaXMgZnVuY3Rpb25cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg6Njk6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTcwLSAqXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtMTgtICogQGN0cjogVGhlIGNvdW50ZXIuICBJdCB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IGNlaWwoQGxlbiAvIEFFU19CTE9DS19TSVpFKS5cXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmg6MTk6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtMjAtICpcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jdHIuaD0zND12b2lkIGFlc19jdHIodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1jdHIuaC00NS0gKiBAaXY6IFRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3JcXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmg6NDY6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcXG5pbmNsdWRlL2NyeXB0by9hZXMtY3RyLmgtNDctICpcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaC0xNy0gKiBAbGVuOiBOdW1iZXIgb2YgYnl0ZXMgdG8gZW5jcnlwdC4gIE11c3QgYmUgYSBtdWx0aXBsZSBvZiBBRVNfQkxPQ0tfU0laRS5cXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MTg6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpIG9yIGFlc19wcmVwYXJlZW5ja2V5KClcXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtMTktICpcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaD0yOD12b2lkIGFlc19lY2JfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLCBhZXNfZW5jcnlwdF9hcmcga2V5KTtcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy1lY2IuaC0zNS0gKiBAbGVuOiBOdW1iZXIgb2YgYnl0ZXMgdG8gZGVjcnlwdC4gIE11c3QgYmUgYSBtdWx0aXBsZSBvZiBBRVNfQkxPQ0tfU0laRS5cXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6MzY6ICogQGtleTogVGhlIGtleSwgYWxyZWFkeSBwcmVwYXJlZCB1c2luZyBhZXNfcHJlcGFyZWtleSgpXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWVjYi5oLTM3LSAqXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zMDg9dm9pZCBhZXNfc3BhcmM2NF9jdHJfY3J5cHRfMjU2KGNvbnN0IHU2NCAqa2V5LCBjb25zdCB1NjQgKmlucHV0LCB1NjQgKm91dHB1dCxcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMxMi0vKipcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMTM6ICogYWVzX3ByZXBhcmVrZXkoKSAtIFByZXBhcmUgYW4gQUVTIGtleSBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvblxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTMxNC0gKiBAa2V5OiAob3V0cHV0KSBUaGUga2V5IHN0cnVjdHVyZSB0byBpbml0aWFsaXplXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzQtICovXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzM1OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbik7XFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzM2LVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg9Mzc3PXZvaWQgYWVzX2VuY3J5cHQoYWVzX2VuY3J5cHRfYXJnIGtleSwgdTggb3V0W2F0X2xlYXN0IEFFU19CTE9DS19TSVpFXSxcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4MS0gKiBhZXNfZGVjcnlwdCgpIC0gRGVjcnlwdCBhIHNpbmdsZSBBRVMgYmxvY2tcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozODI6ICogQGtleTogVGhlIEFFUyBrZXksIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYnkgYWVzX3ByZXBhcmVrZXkoKVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM4My0gKiBAb3V0OiBCdWZmZXIgdG8gc3RvcmUgdGhlIHBsYWludGV4dCBibG9ja1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz05OT1icGZfY3J5cHRvX2N0eF9jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zICpwYXJhbXMsIHUzMiBwYXJhbXNfX3N6LFxcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy0xMjYtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvY3J5cHRvLmM6MTI3OlxcdFxcdFxcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcXHUwMDI2Y3R4LVxcdTAwM2VrZXkuYWVzLCBwYXJhbXMtXFx1MDAzZWtleSxcXG5rZXJuZWwvYnBmL2NyeXB0by5jLTEyOC1cXHRcXHRcXHRcXHRcXHQgICAgICBwYXJhbXMtXFx1MDAzZWtleV9sZW4pO1xcbi0tXFxubGliL2NyeXB0by9hZXMuYz00MTE9c3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgYWVzX2RlY3J5cHRfZ2VuZXJpYyhjb25zdCB1MzIgaW52X3JuZGtleXNbXSxcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtNDUwLSAqXFxubGliL2NyeXB0by9hZXMuYzo0NTE6ICogYWVzX3ByZXBhcmVrZXlfYXJjaCgpIGlzIHBhc3NlZCBhbiBvcHRpb25hbCBwb2ludGVyICdpbnZfaycgd2hpY2ggcG9pbnRzIHRvXFxubGliL2NyeXB0by9hZXMuYy00NTItICogdGhlIGFyZWEgdG8gc3RvcmUgdGhlIHByZXBhcmVkIGRlY3J5cHRpb24ga2V5LiAgSXQgd2lsbCBiZSBOVUxMIGlmIHRoZSB1c2VyXFxubGliL2NyeXB0by9hZXMuYzo0NTM6ICogaXMgcmVxdWVzdGluZyBlbmNyeXB0aW9uLW9ubHkuICBhZXNfcHJlcGFyZWtleV9hcmNoKCkgaXMgYWxzbyBwYXNzZWQgYSB2YWxpZFxcbmxpYi9jcnlwdG8vYWVzLmMtNDU0LSAqICdrZXlfbGVuJyBhbmQgJ25yb3VuZHMnLCBjb3JyZXNwb25kaW5nIHRvIEFFUy0xMjgsIEFFUy0xOTIsIG9yIEFFUy0yNTYuXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTQ2MS1cXG5saWIvY3J5cHRvL2Flcy5jOjQ2MjpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcXG5saWIvY3J5cHRvL2Flcy5jLTQ2My1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9hZXMuYz00Nzc9c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9hZXMuYy00ODQtXFxubGliL2NyeXB0by9hZXMuYzo0ODU6c3RhdGljIGludCBfX2Flc19wcmVwYXJla2V5KHN0cnVjdCBhZXNfZW5ja2V5ICplbmNfa2V5LFxcbmxpYi9jcnlwdG8vYWVzLmMtNDg2LVxcdFxcdFxcdCAgICB1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9hZXMuYy00OTItXFx0ZW5jX2tleS1cXHUwMDNlbnJvdW5kcyA9IDYgKyBrZXlfbGVuIC8gNDtcXG5saWIvY3J5cHRvL2Flcy5jOjQ5MzpcXHRhZXNfcHJlcGFyZWtleV9hcmNoKFxcdTAwMjZlbmNfa2V5LVxcdTAwM2VrLCBpbnZfaywgaW5fa2V5LCBrZXlfbGVuLFxcbmxpYi9jcnlwdG8vYWVzLmMtNDk0LVxcdFxcdFxcdCAgICBlbmNfa2V5LVxcdTAwM2Vucm91bmRzKTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtNDk3LVxcbmxpYi9jcnlwdG8vYWVzLmM6NDk4OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbilcXG5saWIvY3J5cHRvL2Flcy5jLTQ5OS17XFxubGliL2NyeXB0by9hZXMuYzo1MDA6XFx0cmV0dXJuIF9fYWVzX3ByZXBhcmVrZXkoKHN0cnVjdCBhZXNfZW5ja2V5ICopa2V5LCBcXHUwMDI2a2V5LVxcdTAwM2VpbnZfayxcXG5saWIvY3J5cHRvL2Flcy5jLTUwMS1cXHRcXHRcXHRcXHRpbl9rZXksIGtleV9sZW4pO1xcbmxpYi9jcnlwdG8vYWVzLmMtNTAyLX1cXG5saWIvY3J5cHRvL2Flcy5jOjUwMzpFWFBPUlRfU1lNQk9MKGFlc19wcmVwYXJla2V5KTtcXG5saWIvY3J5cHRvL2Flcy5jLTUwNC1cXG5saWIvY3J5cHRvL2Flcy5jPTUwNT1pbnQgYWVzX3ByZXBhcmVlbmNrZXkoc3RydWN0IGFlc19lbmNrZXkgKmtleSwgY29uc3QgdTggKmluX2tleSwgc2l6ZV90IGtleV9sZW4pXFxubGliL2NyeXB0by9hZXMuYy01MDYte1xcbmxpYi9jcnlwdG8vYWVzLmM6NTA3OlxcdHJldHVybiBfX2Flc19wcmVwYXJla2V5KGtleSwgTlVMTCwgaW5fa2V5LCBrZXlfbGVuKTtcXG5saWIvY3J5cHRvL2Flcy5jLTUwOC19XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTUyNj1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2ZpcHNfdGVzdCh2b2lkKVxcbi0tXFxubGliL2NyeXB0by9hZXMuYy01MzAtXFxubGliL2NyeXB0by9hZXMuYzo1MzE6XFx0aWYgKGFlc19wcmVwYXJla2V5KFxcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcXG5saWIvY3J5cHRvL2Flcy5jLTUzMi1cXHRcXHRwYW5pYyhcXFwiYWVzOiBGSVBTIHNlbGYtdGVzdCBmYWlsZWQgKHByZXBhcmVrZXkpXFxcXG5cXFwiKTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9ODE0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZWNiX2ZpcHNfdGVzdCh2b2lkKVxcbi0tXFxubGliL2NyeXB0by9hZXMuYy04MTgtXFxubGliL2NyeXB0by9hZXMuYzo4MTk6XFx0aWYgKGFlc19wcmVwYXJla2V5KFxcdTAwMjZrZXksIGZpcHNfdGVzdF9rZXksIHNpemVvZihmaXBzX3Rlc3Rfa2V5KSkgIT0gMClcXG5saWIvY3J5cHRvL2Flcy5jLTgyMC1cXHRcXHRwYW5pYyhcXFwiYWVzOiBFQ0IgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcXFxuXFxcIik7XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTEwMjQ9c3RhdGljIHZvaWQgX19pbml0IGFlc19jYmNfZmlwc190ZXN0KHZvaWQpXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTEwMjktXFxubGliL2NyeXB0by9hZXMuYzoxMDMwOlxcdGlmIChhZXNfcHJlcGFyZWtleShcXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXFxubGliL2NyeXB0by9hZXMuYy0xMDMxLVxcdFxcdHBhbmljKFxcXCJhZXM6IENCQyBGSVBTIHNlbGYtdGVzdCBmYWlsZWQgKHByZXBhcmVrZXkpXFxcXG5cXFwiKTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9MTA0Nz1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19jdHNfZmlwc190ZXN0KHZvaWQpXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTEwNTgtXFxubGliL2NyeXB0by9hZXMuYzoxMDU5OlxcdGlmIChhZXNfcHJlcGFyZWtleShcXHUwMDI2a2V5LCBmaXBzX3Rlc3Rfa2V5LCBzaXplb2YoZmlwc190ZXN0X2tleSkpICE9IDApXFxubGliL2NyeXB0by9hZXMuYy0xMDYwLVxcdFxcdHBhbmljKFxcXCJhZXM6IENCQy1DVFMgRklQUyBzZWxmLXRlc3QgZmFpbGVkIChwcmVwYXJla2V5KVxcXFxuXFxcIik7XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTEyMDY9aW50IGFlc194dHNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX3h0c19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSxcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtMTIxNC1cXHQvKiBGaXJzdCBoYWxmIG9mIFhUUyBrZXkgaXMgdGhlIG1haW4ga2V5ICovXFxubGliL2NyeXB0by9hZXMuYzoxMjE1OlxcdGVyciA9IGFlc19wcmVwYXJla2V5KFxcdTAwMjZrZXktXFx1MDAzZW1haW5fa2V5LCBpbl9rZXksIGtleV9sZW4gLyAyKTtcXG5saWIvY3J5cHRvL2Flcy5jLTEyMTYtXFx0aWYgKHVubGlrZWx5KGVycikpXFxuLS1cXG5saWIvY3J5cHRvL2FybS9hZXMuaD0xMj1hc21saW5rYWdlIHZvaWQgX19hZXNfYXJtX2RlY3J5cHQoY29uc3QgdTMyIGludl9ya1tdLCBpbnQgcm91bmRzLFxcbi0tXFxubGliL2NyeXB0by9hcm0vYWVzLmgtMTUtXFxubGliL2NyeXB0by9hcm0vYWVzLmg6MTY6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by9hcm0vYWVzLmgtMTctXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG4tLVxcbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmg9NDE9c3RhdGljIHZvaWQgYWVzX2V4cGFuZGtleV9hcm02NCh1MzIgcm5ka2V5c1tdLCB1MzIgKmludl9ybmRrZXlzLFxcbi0tXFxubGliL2NyeXB0by9hcm02NC9hZXMuaC0xMDctXFxubGliL2NyeXB0by9hcm02NC9hZXMuaDoxMDg6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by9hcm02NC9hZXMuaC0xMDktXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG4tLVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD0zOD1zdGF0aWMgdm9pZCBzcGVfZW5kKHZvaWQpXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNDQtXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oOjQ1OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC00Ni1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oPTEwOT1zdGF0aWMgdm9pZCBybmRrZXlfZnJvbV92c3godTMyIG91dFs0XSwgY29uc3QgdTMyIGluWzRdLCBib29sIGFwcGx5X2ludl9taXgpXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtMTI4LVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaDoxMjk6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oLTEzMC1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaD0xNT12b2lkIGFlc19kZWNyeXB0X3p2a25lZChjb25zdCB1MzIgcm5ka2V5c1tdLCBpbnQga2V5X2xlbixcXG4tLVxcbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmgtMTctXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaDoxODpzdGF0aWMgdm9pZCBhZXNfcHJlcGFyZWtleV9hcmNoKHVuaW9uIGFlc19lbmNrZXlfYXJjaCAqayxcXG5saWIvY3J5cHRvL3Jpc2N2L2Flcy5oLTE5LVxcdFxcdFxcdFxcdHVuaW9uIGFlc19pbnZrZXlfYXJjaCAqaW52X2ssXFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg9MTI9c3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShoYXZlX2NwYWNmX2FlczI1Nik7XFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvYWVzLmgtMTktICovXFxubGliL2NyeXB0by9zMzkwL2Flcy5oOjIwOnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxcbmxpYi9jcnlwdG8vczM5MC9hZXMuaC0yMS1cXHRcXHRcXHRcXHR1bmlvbiBhZXNfaW52a2V5X2FyY2ggKmludl9rLFxcbi0tXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaD00NT12b2lkIGFlc19zcGFyYzY0X2RlY3J5cHRfMjU2KGNvbnN0IHU2NCAqa2V5LCBjb25zdCB1MzIgKmlucHV0LCB1MzIgKm91dHB1dCk7XFxubGliL2NyeXB0by9zcGFyYy9hZXMuaC00Ni1cXG5saWIvY3J5cHRvL3NwYXJjL2Flcy5oOjQ3OnN0YXRpYyB2b2lkIGFlc19wcmVwYXJla2V5X2FyY2godW5pb24gYWVzX2VuY2tleV9hcmNoICprLFxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtNDgtXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG4tLVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oPTE4PXZvaWQgYWVzX2RlY3J5cHRfYWVzbmkoY29uc3QgdTMyIGludl9ybmRrZXlzW10sIGludCBucm91bmRzLFxcbi0tXFxubGliL2NyeXB0by94ODYvYWVzLmgtMzEtICovXFxubGliL2NyeXB0by94ODYvYWVzLmg6MzI6c3RhdGljIHZvaWQgYWVzX3ByZXBhcmVrZXlfYXJjaCh1bmlvbiBhZXNfZW5ja2V5X2FyY2ggKmssXFxubGliL2NyeXB0by94ODYvYWVzLmgtMzMtXFx0XFx0XFx0XFx0dW5pb24gYWVzX2ludmtleV9hcmNoICppbnZfayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6MzA6MDkuNjY3MjI2Mjg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjQyNjY3NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBCUEYgQ3J5cHRvIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjaGFuZ2VzIHNwZWNpZmljYWxseSBtYWRlIGluIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjcnlwdG8gQlBGIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXTigJlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgYW55IG1vZGlmaWNhdGlvbnMuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBkaWZmcyBjYXJlZnVsbHkgdG8gc3BvdCBhbnkgcG90ZW50aWFsIGlzc3VlcywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHNlY3VyaXR5IG9yIHBlcmZvcm1hbmNlLlxuXG5UaGVuLCB0byBnZXQgYSBob2xpc3RpYyBwaWN0dXJlLCBJJ20gZ29pbmcgdG8gcmVhZCB0aGUgZW50aXJlIGBrZXJuZWwvYnBmL2NyeXB0by5jYCBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbS4gSSB3YW50IHRvIHRob3JvdWdobHkgZXhhbWluZSBob3cgZHlucHRycyBhbmQgdGhlIEJQRiBjb250ZXh0IGFyZSBiZWluZyB1dGlsaXplZCBhbmQgYWxsb2NhdGVkIHdpdGhpbiB0aGUgY3J5cHRvIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgY29uc3RydWN0cyB0byBlbnN1cmUgdGhleSBhcmUgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHksIHdpdGggbm8gbWVtb3J5IGxlYWtzLCBhbmQgdGhhdCB0aGUgY29udGV4dHMgYXJlIGJlaW5nIGhhbmRsZWQgc2FmZWx5LiBUaGlzIHRob3JvdWdoIHJldmlldyBpcyBjcnVjaWFsIGZvciBCUEYgY29kZSwgYXMgZXJyb3JzIGhlcmUgY291bGQgbGVhZCB0byBzZXJpb3VzIHZ1bG5lcmFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIHBheSBleHRyYSBhdHRlbnRpb24gdG8gYW55IHBvaW50ZXIgYXJpdGhtZXRpYyBvciBvZmYtYnktb25lIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoxMi4xOTE0OTU2NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvY3J5cHRvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDI0IE1ldGEsIEluYyAqL1xcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl9tZW1fYWxsb2MuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsdGVyLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2Flcy1jYmMuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVzLWVjYi5oXFx1MDAzZVxcbiAgMTE6XFx0XFxuICAxMjpcXHQvKiBCUEYgY3J5cHRvIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgc3RydWN0ICovXFxuICAxMzpcXHQvKipcXG4gIDE0OlxcdCAqIHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAtIEJQRiBjcnlwdG8gaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBzdHJ1Y3R1cmVcXG4gIDE1OlxcdCAqIEB0eXBlOlxcdFRoZSBzdHJpbmcgb2YgY3J5cHRvIG9wZXJhdGlvbiB0eXBlLlxcbiAgMTY6XFx0ICogQHJlc2VydmVkOlxcdFJlc2VydmVkIG1lbWJlciwgd2lsbCBiZSByZXVzZWQgZm9yIG1vcmUgb3B0aW9ucyBpbiBmdXR1cmVcXG4gIDE3OlxcdCAqXFx0XFx0VmFsdWVzOlxcbiAgMTg6XFx0ICpcXHRcXHQgIDBcXG4gIDE5OlxcdCAqIEBhbGdvOlxcdFRoZSBzdHJpbmcgb2YgYWxnb3JpdGhtIHRvIGluaXRpYWxpemUuXFxuICAyMDpcXHQgKiBAa2V5OlxcdFRoZSBjaXBoZXIga2V5IHVzZWQgdG8gaW5pdCBjcnlwdG8gYWxnb3JpdGhtLlxcbiAgMjE6XFx0ICogQGtleV9sZW46XFx0VGhlIGxlbmd0aCBvZiBjaXBoZXIga2V5LlxcbiAgMjI6XFx0ICogQGF1dGhzaXplOlxcdFRoZSBsZW5ndGggb2YgYXV0aGVudGljYXRpb24gdGFnIHVzZWQgYnkgYWxnb3JpdGhtLlxcbiAgMjM6XFx0ICovXFxuICAyNDpcXHRzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMge1xcbiAgMjU6XFx0XFx0Y2hhciB0eXBlWzE0XTtcXG4gIDI2OlxcdFxcdHU4IHJlc2VydmVkWzJdO1xcbiAgMjc6XFx0XFx0Y2hhciBhbGdvWzEyOF07XFxuICAyODpcXHRcXHR1OCBrZXlbMjU2XTtcXG4gIDI5OlxcdFxcdHUzMiBrZXlfbGVuO1xcbiAgMzA6XFx0XFx0dTMyIGF1dGhzaXplO1xcbiAgMzE6XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQge1xcbiAgMzQ6XFx0XFx0QlBGX0FMR09fQUVTX0NCQyxcXG4gIDM1OlxcdFxcdEJQRl9BTEdPX0FFU19FQ0IsXFxuICAzNjpcXHR9O1xcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHtcXG4gIDM5OlxcdFxcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZTtcXG4gIDQwOlxcdFxcdGNvbnN0IGNoYXIgKmFsZ29fbmFtZTtcXG4gIDQxOlxcdFxcdGVudW0gYnBmX2NyeXB0b19hbGdvX2lkIGFsZ287XFxuICA0MjpcXHR9IGJwZl9jcnlwdG9fYWxnb3NbXSA9IHtcXG4gIDQzOlxcdFxcdHsgXFxcInNrY2lwaGVyXFxcIiwgXFxcImNiYyhhZXMpXFxcIiwgQlBGX0FMR09fQUVTX0NCQyB9LFxcbiAgNDQ6XFx0XFx0eyBcXFwic2tjaXBoZXJcXFwiLCBcXFwiZWNiKGFlcylcXFwiLCBCUEZfQUxHT19BRVNfRUNCIH0sXFxuICA0NTpcXHR9O1xcbiAgNDY6XFx0XFxuICA0NzpcXHRzdGF0aWMgYm9vbCBicGZfY3J5cHRvX2ZpbmRfYWxnbyhjb25zdCBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgKnBhcmFtcyxcXG4gIDQ4OlxcdFxcdFxcdFxcdFxcdCBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZCAqaWRfcmV0KVxcbiAgNDk6XFx0e1xcbiAgNTA6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9jcnlwdG9fYWxnb3MpOyBpKyspIHtcXG4gIDUxOlxcdFxcdFxcdGlmIChzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0udHlwZV9uYW1lLCBwYXJhbXMtXFx1MDAzZXR5cGUsXFxuICA1MjpcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNldHlwZSkpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gIDUzOlxcdFxcdFxcdCAgICBzdHJuY21wKGJwZl9jcnlwdG9fYWxnb3NbaV0uYWxnb19uYW1lLCBwYXJhbXMtXFx1MDAzZWFsZ28sXFxuICA1NDpcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKHBhcmFtcy1cXHUwMDNlYWxnbykpID09IDApIHtcXG4gIDU1OlxcdFxcdFxcdFxcdCppZF9yZXQgPSBicGZfY3J5cHRvX2FsZ29zW2ldLmFsZ287XFxuICA1NjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDU3OlxcdFxcdFxcdH1cXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDYwOlxcdH1cXG4gIDYxOlxcdFxcbiAgNjI6XFx0LyoqXFxuICA2MzpcXHQgKiBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggLSByZWZjb3VudGVkIEJQRiBjcnlwdG8gY29udGV4dCBzdHJ1Y3R1cmVcXG4gIDY0OlxcdCAqIEBhbGdvOlxcdFRoZSBjcnlwdG8gYWxnb3JpdGhtIElEXFxuICA2NTpcXHQgKiBAa2V5OlxcdFRoZSBjcnlwdG8ga2V5XFxuICA2NjpcXHQgKiBAcmN1OlxcdFRoZSBSQ1UgaGVhZCB1c2VkIHRvIGZyZWUgdGhlIGNyeXB0byBjb250ZXh0IHdpdGggUkNVIHNhZmV0eS5cXG4gIDY3OlxcdCAqIEB1c2FnZTpcXHRPYmplY3QgcmVmZXJlbmNlIGNvdW50ZXIuIFdoZW4gdGhlIHJlZmNvdW50IGdvZXMgdG8gMCwgdGhlXFxuICA2ODpcXHQgKlxcdFxcdG1lbW9yeSBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZSBCUEYgYWxsb2NhdG9yLCB3aGljaCBwcm92aWRlc1xcbiAgNjk6XFx0ICpcXHRcXHRSQ1Ugc2FmZXR5LlxcbiAgNzA6XFx0ICovXFxuICA3MTpcXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xcbiAgNzI6XFx0XFx0ZW51bSBicGZfY3J5cHRvX2FsZ29faWQgYWxnbztcXG4gIDczOlxcdFxcdHVuaW9uIHtcXG4gIDc0OlxcdFxcdFxcdHN0cnVjdCBhZXNfa2V5IGFlcztcXG4gIDc1OlxcdFxcdH0ga2V5O1xcbiAgNzY6XFx0XFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcXG4gIDc3OlxcdFxcdHJlZmNvdW50X3QgdXNhZ2U7XFxuICA3ODpcXHR9O1xcbiAgNzk6XFx0XFxuICA4MDpcXHRfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuICA4MTpcXHRcXG4gIDgyOlxcdC8qKlxcbiAgODM6XFx0ICogYnBmX2NyeXB0b19jdHhfY3JlYXRlKCkgLSBDcmVhdGUgYSBtdXRhYmxlIEJQRiBjcnlwdG8gY29udGV4dC5cXG4gIDg0OlxcdCAqXFxuICA4NTpcXHQgKiBBbGxvY2F0ZXMgYSBjcnlwdG8gY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkLCBhY3F1aXJlZCwgYW5kIHJlbGVhc2VkIGJ5XFxuICA4NjpcXHQgKiBhIEJQRiBwcm9ncmFtLiBUaGUgY3J5cHRvIGNvbnRleHQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGVpdGhlclxcbiAgODc6XFx0ICogYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKS5cXG4gIDg4OlxcdCAqIEFzIGNyeXB0byBBUEkgZnVuY3Rpb25zIHVzZSBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLCB0aGlzIGZ1bmN0aW9uIGNhblxcbiAgODk6XFx0ICogb25seSBiZSB1c2VkIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuICA5MDpcXHQgKlxcbiAgOTE6XFx0ICogYnBmX2NyeXB0b19jdHhfY3JlYXRlKCkgYWxsb2NhdGVzIG1lbW9yeSBmb3IgY3J5cHRvIGNvbnRleHQuXFxuICA5MjpcXHQgKiBJdCBtYXkgcmV0dXJuIE5VTEwgaWYgbm8gbWVtb3J5IGlzIGF2YWlsYWJsZS5cXG4gIDkzOlxcdCAqIEBwYXJhbXM6XFx0cG9pbnRlciB0byBzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMgd2hpY2ggY29udGFpbnMgYWxsIHRoZVxcbiAgOTQ6XFx0ICpcXHRcXHRkZXRhaWxzIG5lZWRlZCB0byBpbml0aWFsaXNlIGNyeXB0byBjb250ZXh0LlxcbiAgOTU6XFx0ICogQHBhcmFtc19fc3o6XFx0c2l6ZSBvZiBzdGV1Y3QgYnBmX2NyeXB0b19wYXJhbXMgdXNlZiBieSBicGYgcHJvZ3JhbVxcbiAgOTY6XFx0ICogQGVycjpcXHRpbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxcbiAgOTc6XFx0ICovXFxuICA5ODpcXHRfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKlxcbiAgOTk6XFx0YnBmX2NyeXB0b19jdHhfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX3BhcmFtcyAqcGFyYW1zLCB1MzIgcGFyYW1zX19zeixcXG4gMTAwOlxcdFxcdFxcdCAgICAgIGludCAqZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoxMi4xOTE2MzU3OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4OTQ3MzU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL2NyeXB0by5jYC4gSSd2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJ3MgZ29pbmcgdG8gYmUgc29tZSBpbnRlcmVzdGluZyBzdHVmZiBpbiBoZXJlLCBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCBjcnlwdG9ncmFwaHkgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHRoZSBlQlBGIHByb2dyYW1zLCBhbmQgd2hhdCBsZXZlbCBvZiBjb250cm9sIHRoZSBCUEYgY29kZSBoYXMgb3ZlciB0aGVzZSBvcGVyYXRpb25zLiBBcmUgdGhleSBwcm92aWRpbmcgdGhlIGJhcmUgbWV0YWwgaW5zdHJ1Y3Rpb25zLCBvciBtb3JlIGhpZ2gtbGV2ZWwgYWJzdHJhY3Rpb25zP1xuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIFRoaXMgaXMga2VybmVsIHNwYWNlLCBzbyBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGJlIGRldmFzdGF0aW5nLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgdXNpbmcgaGFyZGVuZWQgaW1wbGVtZW50YXRpb25zLCBhbmQgaWYgdGhlcmUncyBhbnkgb2J2aW91cyBhdHRhY2sgc3VyZmFjZSB0aGF0IG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIHF1ZXN0aW9uIG9mIGludGVncmF0aW9uIHdpdGggb3RoZXIga2VybmVsIGNyeXB0b2dyYXBoaWMgbW9kdWxlcy4gQXJlIHRoZXkgbGV2ZXJhZ2luZyBleGlzdGluZyBjcnlwdG8gQVBJIGNhbGxzLCBvciBidWlsZGluZyBzb21ldGhpbmcgZW50aXJlbHkgbmV3IGZvciB0aGUgQlBGIGVudmlyb25tZW50PyBUaGUgZGVzaWduIGNob2ljZXMgaGVyZSB3aWxsIHNwZWFrIHZvbHVtZXMgYWJvdXQgdGhlIGdvYWxzIG9mIHRoZSBkZXZlbG9wZXJzIGFuZCB0aGUgdHJhZGUtb2ZmcyB0aGV5IG1hZGUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBmdW5jdGlvbiBjYWxscywgYW5kIGVycm9yIGhhbmRsaW5nLiBJIGhvcGUgdG8gZmluZCB0aGF0IHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCB0aG9yb3VnaGx5IHJldmlld2VkLiBOb3csIGxldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjMwOjE0LjQ4MTExMTg0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jcnlwdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHtcXG4gMTAyOlxcdFxcdHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4O1xcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHRpZiAoIXBhcmFtcyB8fCBwYXJhbXMtXFx1MDAzZXJlc2VydmVkWzBdIHx8IHBhcmFtcy1cXHUwMDNlcmVzZXJ2ZWRbMV0gfHxcXG4gMTA1OlxcdFxcdCAgICBwYXJhbXNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2NyeXB0b19wYXJhbXMpKSB7XFxuIDEwNjpcXHRcXHRcXHQqZXJyID0gLUVJTlZBTDtcXG4gMTA3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcXG4gMTExOlxcdFxcdGlmICghY3R4KSB7XFxuIDExMjpcXHRcXHRcXHQqZXJyID0gLUVOT01FTTtcXG4gMTEzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxMTQ6XFx0XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRcXHRpZiAoIWJwZl9jcnlwdG9fZmluZF9hbGdvKHBhcmFtcywgXFx1MDAyNmN0eC1cXHUwMDNlYWxnbykpIHtcXG4gMTE3OlxcdFxcdFxcdCplcnIgPSAtRU5PRU5UO1xcbiAxMTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdHN3aXRjaCAoY3R4LVxcdTAwM2VhbGdvKSB7XFxuIDEyMjpcXHRcXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XFxuIDEyMzpcXHRcXHRjYXNlIEJQRl9BTEdPX0FFU19FQ0I6XFxuIDEyNDpcXHRcXHRcXHRpZiAocGFyYW1zLVxcdTAwM2VhdXRoc2l6ZSlcXG4gMTI1OlxcdFxcdFxcdFxcdCplcnIgPSAtRU9QTk9UU1VQUDtcXG4gMTI2OlxcdFxcdFxcdGVsc2VcXG4gMTI3OlxcdFxcdFxcdFxcdCplcnIgPSBhZXNfcHJlcGFyZWtleShcXHUwMDI2Y3R4LVxcdTAwM2VrZXkuYWVzLCBwYXJhbXMtXFx1MDAzZWtleSxcXG4gMTI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBhcmFtcy1cXHUwMDNla2V5X2xlbik7XFxuIDEyOTpcXHRcXHRcXHRicmVhaztcXG4gMTMwOlxcdFxcdGRlZmF1bHQ6XFxuIDEzMTpcXHRcXHRcXHRXQVJOX09OKDEpO1xcbiAxMzI6XFx0XFx0XFx0KmVyciA9IC1FTk9FTlQ7XFxuIDEzMzpcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdH1cXG4gMTM1OlxcdFxcbiAxMzY6XFx0b3V0OlxcbiAxMzc6XFx0XFx0aWYgKCplcnIpIHtcXG4gMTM4OlxcdFxcdFxcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbiAxMzk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE0MDpcXHRcXHR9XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Y3R4LVxcdTAwM2V1c2FnZSwgMSk7XFxuIDE0MzpcXHRcXHRyZXR1cm4gY3R4O1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0XFxuIDE0NjpcXHRzdGF0aWMgdm9pZCBjcnlwdG9fZnJlZV9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eDtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0Y3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBicGZfY3J5cHRvX2N0eCwgcmN1KTtcXG4gMTUxOlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShjdHgpO1xcbiAxNTI6XFx0fVxcbiAxNTM6XFx0XFxuIDE1NDpcXHQvKipcXG4gMTU1OlxcdCAqIGJwZl9jcnlwdG9fY3R4X2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYgY3J5cHRvIGNvbnRleHQuXFxuIDE1NjpcXHQgKiBAY3R4OiBUaGUgQlBGIGNyeXB0byBjb250ZXh0IGJlaW5nIGFjcXVpcmVkLiBUaGUgY3R4IG11c3QgYmUgYSB0cnVzdGVkXFxuIDE1NzpcXHQgKlxcdCAgICAgcG9pbnRlci5cXG4gMTU4OlxcdCAqXFxuIDE1OTpcXHQgKiBBY3F1aXJlcyBhIHJlZmVyZW5jZSB0byBhIEJQRiBjcnlwdG8gY29udGV4dC4gVGhlIGNvbnRleHQgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvblxcbiAxNjA6XFx0ICogbXVzdCBlaXRoZXIgYmUgZW1iZWRkZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvciBmcmVlZCB3aXRoXFxuIDE2MTpcXHQgKiBicGZfY3J5cHRvX2N0eF9yZWxlYXNlKCkuXFxuIDE2MjpcXHQgKi9cXG4gMTYzOlxcdF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqXFxuIDE2NDpcXHRicGZfY3J5cHRvX2N0eF9hY3F1aXJlKHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4KVxcbiAxNjU6XFx0e1xcbiAxNjY6XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmN0eC1cXHUwMDNldXNhZ2UpKVxcbiAxNjc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE2ODpcXHRcXHRyZXR1cm4gY3R4O1xcbiAxNjk6XFx0fVxcbiAxNzA6XFx0XFxuIDE3MTpcXHQvKipcXG4gMTcyOlxcdCAqIGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBwcmV2aW91c2x5IGFjcXVpcmVkIEJQRiBjcnlwdG8gY29udGV4dC5cXG4gMTczOlxcdCAqIEBjdHg6IFRoZSBjcnlwdG8gY29udGV4dCBiZWluZyByZWxlYXNlZC5cXG4gMTc0OlxcdCAqXFxuIDE3NTpcXHQgKiBSZWxlYXNlcyBhIHByZXZpb3VzbHkgYWNxdWlyZWQgcmVmZXJlbmNlIHRvIGEgQlBGIGNyeXB0byBjb250ZXh0LiBXaGVuIHRoZSBmaW5hbFxcbiAxNzY6XFx0ICogcmVmZXJlbmNlIG9mIHRoZSBCUEYgY3J5cHRvIGNvbnRleHQgaGFzIGJlZW4gcmVsZWFzZWQsIGl0cyBtZW1vcnlcXG4gMTc3OlxcdCAqIHdpbGwgYmUgcmVsZWFzZWQuXFxuIDE3ODpcXHQgKi9cXG4gMTc5OlxcdF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZShzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eClcXG4gMTgwOlxcdHtcXG4gMTgxOlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmN0eC1cXHUwMDNldXNhZ2UpKVxcbiAxODI6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNmN0eC1cXHUwMDNlcmN1LCBjcnlwdG9fZnJlZV9jYik7XFxuIDE4MzpcXHR9XFxuIDE4NDpcXHRcXG4gMTg1OlxcdF9fYnBmX2tmdW5jIHZvaWQgYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKHZvaWQgKmN0eClcXG4gMTg2OlxcdHtcXG4gMTg3OlxcdFxcdGJwZl9jcnlwdG9fY3R4X3JlbGVhc2UoY3R4KTtcXG4gMTg4OlxcdH1cXG4gMTg5OlxcdENGSV9OT1NFQUwoYnBmX2NyeXB0b19jdHhfcmVsZWFzZV9kdG9yKTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIGludCBicGZfYWVzX2NiY19jcnlwdCh1OCAqZHN0LCB1MzIgZHN0X2xlbiwgY29uc3QgdTggKnNyYywgdTMyIHNyY19sZW4sXFxuIDE5MjpcXHRcXHRcXHRcXHQgICAgIHU4ICppdiwgdTMyIGl2X2xlbixcXG4gMTkzOlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsIGJvb2wgZGVjcnlwdClcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdGlmIChpdl9sZW4gIT0gQUVTX0JMT0NLX1NJWkUpXFxuIDE5NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTk3OlxcdFxcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcXHUwMDNjIHNyY19sZW4pXFxuIDE5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTk5OlxcdFxcdGlmIChkZWNyeXB0KVxcbiAyMDA6XFx0XFx0XFx0YWVzX2NiY19kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBpdiwgXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjMwOjE0LjQ4MTI5NTE0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTYzNTAzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUga2VybmVsIGNvZGUsIHRoaW5raW5nIG91dCBsb3VkIGFzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgY3J5cHRvLmNgIChMaW5lcyAyMDEtMzEwKSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhvc2UgbGluZXMgaW4gYGtlcm5lbC9icGYvY3J5cHRvLmNgLiAgTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBtb2R1bGUgYW5kIGVCUEYgaW4gZ2VuZXJhbC4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgdGhlIGNvcmUgY3J5cHRvZ3JhcGh5IHByaW1pdGl2ZXMgZXhwb3NlZCB2aWEgZUJQRiwgbGlrZWx5IGludm9sdmluZyB0aGUgYGJwZl9jcnlwdG9fKmAgaGVscGVyIGZ1bmN0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgYmV0IHdlJ3JlIGxvb2tpbmcgYXQgdGhpbmdzIGxpa2UgaGFzaCBjYWxjdWxhdGlvbnMsIGVuY3J5cHRpb24sIHBlcmhhcHMgZXZlbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIGxpa2UgSE1BQy4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgQlBGIFZNLCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLCBhbmQgb2YgY291cnNlLCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzLCBiZWNhdXNlIHRob3NlIGFyZSBvZnRlbiB0cmlja3kgaW4gdGhlIGtlcm5lbCBzcGFjZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkYXRhIGJlaW5nIHBhc3NlZCBpbiBmcm9tIHVzZXItc3BhY2UgdmlhIGVCUEYgcHJvZ3JhbXMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIGFyZ3VtZW50cyBhcmUgY2hlY2tlZCBmb3IgdmFsaWRpdHkgKGxpa2UgbGVuZ3RoKS4gSSdsbCBhbHNvIHRyeSB0byBpbmZlciBob3cgdGhlIGNvZGUgaXMgb3B0aW1pemVkLCBhbmQgd2hldGhlciB0aGUgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMgYXJlIGFwcHJvcHJpYXRlIGZvciBhIGtlcm5lbCBzZXR0aW5nLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgdGhhdCBhcmUgYmVpbmcgZmF2b3JlZCBoZXJlLCBvciBpZiB0aGUgY29kZSBpcyBtb3JlIGdlbmVyaWMgaW4gaXRzIGFwcHJvYWNoLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgd291bGQgYmUgb3B0aW1pemVkIGZvciBjb21tb24gdXNhZ2VzLiBJIGFsc28gd29uZGVyIGlmIHRoZXNlIGZ1bmN0aW9ucyBzdXBwb3J0IGRpZmZlcmVudCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZmVhdHVyZXMsIGFuZCBpZiBzbywgaG93IHRoYXTigJlzIGhhbmRsZWQgd2l0aGluIHRoZSBlQlBGIGZyYW1ld29yay4gVGhpcyBsb29rcyBsaWtlIHRoZSBmdW4gcGFydCEgTGV0J3MgZ2V0IHJlYWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoxOC4wNDQ4MDA1NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jcnlwdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAxOlxcdFxcdGVsc2VcXG4gMjAyOlxcdFxcdFxcdGFlc19jYmNfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgaXYsIFxcdTAwMjZjdHgtXFx1MDAzZWtleS5hZXMpO1xcbiAyMDM6XFx0XFx0cmV0dXJuIDA7XFxuIDIwNDpcXHR9XFxuIDIwNTpcXHRcXG4gMjA2OlxcdHN0YXRpYyBpbnQgYnBmX2Flc19lY2JfY3J5cHQodTggKmRzdCwgdTMyIGRzdF9sZW4sIGNvbnN0IHU4ICpzcmMsIHUzMiBzcmNfbGVuLFxcbiAyMDc6XFx0XFx0XFx0XFx0ICAgICB1OCAqaXYsIHUzMiBpdl9sZW4sXFxuIDIwODpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LCBib29sIGRlY3J5cHQpXFxuIDIwOTpcXHR7XFxuIDIxMDpcXHRcXHRpZiAoaXZfbGVuICE9IDApXFxuIDIxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjEyOlxcdFxcdGlmIChzcmNfbGVuICUgQUVTX0JMT0NLX1NJWkUgfHwgZHN0X2xlbiBcXHUwMDNjIHNyY19sZW4pXFxuIDIxMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjE0OlxcdFxcdGlmIChkZWNyeXB0KVxcbiAyMTU6XFx0XFx0XFx0YWVzX2VjYl9kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBcXHUwMDI2Y3R4LVxcdTAwM2VrZXkuYWVzKTtcXG4gMjE2OlxcdFxcdGVsc2VcXG4gMjE3OlxcdFxcdFxcdGFlc19lY2JfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgXFx1MDAyNmN0eC1cXHUwMDNla2V5LmFlcyk7XFxuIDIxODpcXHRcXHRyZXR1cm4gMDtcXG4gMjE5OlxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0c3RhdGljIGludCBicGZfY3J5cHRvX2NyeXB0KGNvbnN0IHN0cnVjdCBicGZfY3J5cHRvX2N0eCAqY3R4LFxcbiAyMjI6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyYyxcXG4gMjIzOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3QsXFxuIDIyNDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXYsXFxuIDIyNTpcXHRcXHRcXHRcXHQgICAgYm9vbCBkZWNyeXB0KVxcbiAyMjY6XFx0e1xcbiAyMjc6XFx0XFx0dTMyIHNyY19sZW4sIGRzdF9sZW4sIGl2X2xlbjtcXG4gMjI4OlxcdFxcdGNvbnN0IHU4ICpwc3JjO1xcbiAyMjk6XFx0XFx0dTggKnBkc3QsICpwaXY7XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdGlmIChfX2JwZl9keW5wdHJfaXNfcmRvbmx5KGRzdCkpXFxuIDIzMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0aXZfbGVuID0gaXYgPyBfX2JwZl9keW5wdHJfc2l6ZShpdikgOiAwO1xcbiAyMzU6XFx0XFx0c3JjX2xlbiA9IF9fYnBmX2R5bnB0cl9zaXplKHNyYyk7XFxuIDIzNjpcXHRcXHRkc3RfbGVuID0gX19icGZfZHlucHRyX3NpemUoZHN0KTtcXG4gMjM3OlxcdFxcdGlmICghc3JjX2xlbiB8fCAhZHN0X2xlbilcXG4gMjM4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyMzk6XFx0XFxuIDI0MDpcXHRcXHRwc3JjID0gX19icGZfZHlucHRyX2RhdGEoc3JjLCBzcmNfbGVuKTtcXG4gMjQxOlxcdFxcdGlmICghcHNyYylcXG4gMjQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNDM6XFx0XFx0cGRzdCA9IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGRzdCwgZHN0X2xlbik7XFxuIDI0NDpcXHRcXHRpZiAoIXBkc3QpXFxuIDI0NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0cGl2ID0gaXZfbGVuID8gX19icGZfZHlucHRyX2RhdGFfcncoaXYsIGl2X2xlbikgOiBOVUxMO1xcbiAyNDg6XFx0XFx0aWYgKGl2X2xlbiBcXHUwMDI2XFx1MDAyNiAhcGl2KVxcbiAyNDk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdHN3aXRjaCAoY3R4LVxcdTAwM2VhbGdvKSB7XFxuIDI1MjpcXHRcXHRjYXNlIEJQRl9BTEdPX0FFU19DQkM6XFxuIDI1MzpcXHRcXHRcXHRyZXR1cm4gYnBmX2Flc19jYmNfY3J5cHQocGRzdCwgZHN0X2xlbiwgcHNyYywgc3JjX2xlbiwgcGl2LFxcbiAyNTQ6XFx0XFx0XFx0XFx0XFx0XFx0IGl2X2xlbiwgY3R4LCBkZWNyeXB0KTtcXG4gMjU1OlxcdFxcdGNhc2UgQlBGX0FMR09fQUVTX0VDQjpcXG4gMjU2OlxcdFxcdFxcdHJldHVybiBicGZfYWVzX2VjYl9jcnlwdChwZHN0LCBkc3RfbGVuLCBwc3JjLCBzcmNfbGVuLCBwaXYsXFxuIDI1NzpcXHRcXHRcXHRcXHRcXHRcXHQgaXZfbGVuLCBjdHgsIGRlY3J5cHQpO1xcbiAyNTg6XFx0XFx0ZGVmYXVsdDpcXG4gMjU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNjA6XFx0XFx0fVxcbiAyNjE6XFx0fVxcbiAyNjI6XFx0XFxuIDI2MzpcXHQvKipcXG4gMjY0OlxcdCAqIGJwZl9jcnlwdG9fZGVjcnlwdCgpIC0gRGVjcnlwdCBidWZmZXIgdXNpbmcgY29uZmlndXJlZCBjb250ZXh0IGFuZCBJViBwcm92aWRlZC5cXG4gMjY1OlxcdCAqIEBjdHg6XFx0XFx0VGhlIGNyeXB0byBjb250ZXh0IGJlaW5nIHVzZWQuIFRoZSBjdHggbXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4gMjY2OlxcdCAqIEBzcmM6XFx0XFx0YnBmX2R5bnB0ciB0byB0aGUgZW5jcnlwdGVkIGRhdGEuIE11c3QgYmUgYSB0cnVzdGVkIHBvaW50ZXIuXFxuIDI2NzpcXHQgKiBAZHN0OlxcdFxcdGJwZl9keW5wdHIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0LiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAyNjg6XFx0ICogQGl2X19udWxsYWJsZTpcXHRicGZfZHlucHRyIHRvIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuIE1heSBiZSBOVUxMLlxcbiAyNjk6XFx0ICpcXG4gMjcwOlxcdCAqIERlY3J5cHRzIHByb3ZpZGVkIGJ1ZmZlciB1c2luZyBJViBkYXRhIGFuZCB0aGUgY3J5cHRvIGNvbnRleHQuIENyeXB0byBjb250ZXh0IG11c3QgYmUgY29uZmlndXJlZC5cXG4gMjcxOlxcdCAqL1xcbiAyNzI6XFx0X19icGZfa2Z1bmMgaW50IGJwZl9jcnlwdG9fZGVjcnlwdChzdHJ1Y3QgYnBmX2NyeXB0b19jdHggKmN0eCxcXG4gMjczOlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpzcmMsXFxuIDI3NDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZHN0LFxcbiAyNzU6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKml2X19udWxsYWJsZSlcXG4gMjc2OlxcdHtcXG4gMjc3OlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKnNyY19rZXJuID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilzcmM7XFxuIDI3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkc3Rfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZHN0O1xcbiAyNzk6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqaXZfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopaXZfX251bGxhYmxlO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRyZXR1cm4gYnBmX2NyeXB0b19jcnlwdChjdHgsIHNyY19rZXJuLCBkc3Rfa2VybiwgaXZfa2VybiwgdHJ1ZSk7XFxuIDI4MjpcXHR9XFxuIDI4MzpcXHRcXG4gMjg0OlxcdC8qKlxcbiAyODU6XFx0ICogYnBmX2NyeXB0b19lbmNyeXB0KCkgLSBFbmNyeXB0IGJ1ZmZlciB1c2luZyBjb25maWd1cmVkIGNvbnRleHQgYW5kIElWIHByb3ZpZGVkLlxcbiAyODY6XFx0ICogQGN0eDpcXHRcXHRUaGUgY3J5cHRvIGNvbnRleHQgYmVpbmcgdXNlZC4gVGhlIGN0eCBtdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAyODc6XFx0ICogQHNyYzpcXHRcXHRicGZfZHlucHRyIHRvIHRoZSBwbGFpbiBkYXRhLiBNdXN0IGJlIGEgdHJ1c3RlZCBwb2ludGVyLlxcbiAyODg6XFx0ICogQGRzdDpcXHRcXHRicGZfZHlucHRyIHRvIHRoZSBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdC4gTXVzdCBiZSBhIHRydXN0ZWQgcG9pbnRlci5cXG4gMjg5OlxcdCAqIEBpdl9fbnVsbGFibGU6XFx0YnBmX2R5bnB0ciB0byB0aGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiBNYXkgYmUgTlVMTC5cXG4gMjkwOlxcdCAqXFxuIDI5MTpcXHQgKiBFbmNyeXB0cyBwcm92aWRlZCBidWZmZXIgdXNpbmcgSVYgZGF0YSBhbmQgdGhlIGNyeXB0byBjb250ZXh0LiBDcnlwdG8gY29udGV4dCBtdXN0IGJlIGNvbmZpZ3VyZWQuXFxuIDI5MjpcXHQgKi9cXG4gMjkzOlxcdF9fYnBmX2tmdW5jIGludCBicGZfY3J5cHRvX2VuY3J5cHQoc3RydWN0IGJwZl9jcnlwdG9fY3R4ICpjdHgsXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqc3JjLFxcbiAyOTU6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRzdCxcXG4gMjk2OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICppdl9fbnVsbGFibGUpXFxuIDI5NzpcXHR7XFxuIDI5ODpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpzcmNfa2VybiA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopc3JjO1xcbiAyOTk6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZHN0X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRzdDtcXG4gMzAwOlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKml2X2tlcm4gPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWl2X19udWxsYWJsZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6MzA6MTguMDQ0ODk1NDc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzU4NDA2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiB0aGUgQlBGIENyeXB0byBDb250ZXh0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBJJ20gZm9jdXNpbmcgb24gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBoZXJlLlxuXG5GaXJzdCwgSSdtIHN0YXJ0aW5nIHdpdGggYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAuIFRoaXMgbG9va3MgcHJldHR5IHNvbGlkLiBga3phbGxvY19vYmpgIGlzIGEgZ29vZCBjaG9pY2UgZm9yIGluaXRpYWxpemF0aW9uLCBlbnN1cmluZyB0aGUgYGN0eGAgc3RydWN0IGlzIHplcm9lZC4gVGhlIGBicGZfY3J5cHRvX2ZpbmRfYWxnb2AgYW5kIGBhZXNfcHJlcGFyZWtleWAgY2FsbHMgc2VlbSBzdGFuZGFyZCwgaGFuZGxpbmcgYWxnb3JpdGhtIGFuZCBrZXkgc2V0dXAsIGFuZCB0aGUga2V5IGxlbmd0aCBjaGVja3MgaW4gYGFlc19wcmVwYXJla2V5YCAoMTYsIDI0LCBvciAzMiBieXRlcykgYXJlIGltcG9ydGFudC4gVGhlIGBrZnJlZV9zZW5zaXRpdmUoY3R4KWAgb24gZXJyb3IgYW5kIHRoZSByZWZjb3VudCBvZiAxIHNldHVwIGEgc3RyYWlnaHRmb3J3YXJkIGxpZmV0aW1lIG1hbmFnZW1lbnQuXG5cbk5leHQsIEknbSBleGFtaW5pbmcgYGJwZl9hZXNfY2JjX2NyeXB0YC4gVGhlIGxlbmd0aCBjaGVja3MgZm9yIHRoZSBJViAoYGl2X2xlbiA9PSBBRVNfQkxPQ0tfU0laRWApIGFuZCBzb3VyY2UvZGVzdGluYXRpb24gYnVmZmVycyAoYHNyY19sZW5gIG11bHRpcGxlIG9mIGBBRVNfQkxPQ0tfU0laRWAgYW5kIGBkc3RfbGVuIFx1MDAzZT0gc3JjX2xlbmApIGFyZSBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIGJ1ZmZlciBvdmVyZmxvd3MgYW5kIHVuZGVyZmxvd3MuIFRoZSB1c2Ugb2YgZHlucHRyIGhlbHBlcnMgZnVydGhlciBzdHJlbmd0aGVucyB0aGlzLiBTYW1lIGZvciBgYnBmX2Flc19lY2JfY3J5cHRgIHdpdGggdGhlIElWIGNoZWNrIChgaXZfbGVuID09IDBgKSBhbmQgdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBsZW5ndGggY2hlY2tzLlxuXG5UaGVuIEknbSBkaWdnaW5nIGludG8gcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHdheXMgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGNhbiBsZWFrIHRvIHVzZXJzcGFjZS4gQlBGIGR5bnB0cnMgYXJlIHBvaW50aW5nIHRvIGNhbGxlci1wcm92aWRlZCBidWZmZXJzLCB3aGljaCBpcyBnb29kLiBUaGUgYGN0eGAgaXMgemVyb2VkIGJ5IGBremFsbG9jX29iamAuIFRoZSBgYWVzX3ByZXBhcmVrZXlgIGNhbGwgaW5pdGlhbGl6ZXMgdGhlIGtleSBzY2hlZHVsZSwgYGFsZ29gIGlzIGluaXRpYWxpemVkIGJ5IGBicGZfY3J5cHRvX2ZpbmRfYWxnb2AuIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGUgZnJlZWluZyBpcyBoYW5kbGVkIGNvcnJlY3RseSB3aXRoIGBrZnJlZV9zZW5zaXRpdmVgLlxuXG5Ob3csIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBzdWJ0bGUgZWRnZSBjYXNlcz8gSXMgdGhlcmUgYSBjaGFuY2UgYGFlc19wcmVwYXJla2V5YCBjb3VsZCBsZWF2ZSBzb21ldGhpbmcgdW5pbml0aWFsaXplZCBpbiB0aGUgYHN0cnVjdCBhZXNfa2V5YD8gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgYWVzX2tleWAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWVzX3ByZXBhcmVrZXlgIHRvIG1ha2Ugc3VyZS4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMjYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDoyMi42MjA3NDEyMjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Nzc1NTQwMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGFlc19rZXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY3J5cHRvL2Flcy1uZW9uYnMtZ2x1ZS5jPTUzPXN0cnVjdCBhZXNic194dHNfY3R4IHtcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtNTQtXFx0c3RydWN0IGFlc2JzX2N0eFxcdGtleTtcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmM6NTU6XFx0c3RydWN0IGFlc19rZXlcXHRcXHRmYWxsYmFjaztcXG5hcmNoL2FybS9jcnlwdG8vYWVzLW5lb25icy1nbHVlLmMtNTYtXFx0c3RydWN0IGFlc19lbmNrZXlcXHR0d2Vha19rZXk7XFxuLS1cXG5jcnlwdG8vYWVzLmMtMjItXFxuY3J5cHRvL2Flcy5jOjIzOnN0YXRpY19hc3NlcnQoX19hbGlnbm9mX18oc3RydWN0IGFlc19rZXkpIFxcdTAwM2M9IENSWVBUT19NSU5BTElHTik7XFxuY3J5cHRvL2Flcy5jLTI0LXN0YXRpY19hc3NlcnQoX19hbGlnbm9mX18oc3RydWN0IGFlc19lbmNrZXkpIFxcdTAwM2M9IENSWVBUT19NSU5BTElHTik7XFxuLS1cXG5jcnlwdG8vYWVzLmM9MjY9c3RhdGljIGludCBjcnlwdG9fYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LFxcbi0tXFxuY3J5cHRvL2Flcy5jLTI4LXtcXG5jcnlwdG8vYWVzLmM6Mjk6XFx0c3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2Flcy5jLTMwLVxcbi0tXFxuY3J5cHRvL2Flcy5jPTM0PXN0YXRpYyB2b2lkIGNyeXB0b19hZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXFxuY3J5cHRvL2Flcy5jLTM1LXtcXG5jcnlwdG8vYWVzLmM6MzY6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2Flcy5jLTM3LVxcbi0tXFxuY3J5cHRvL2Flcy5jPTQxPXN0YXRpYyB2b2lkIGNyeXB0b19hZXNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXFxuY3J5cHRvL2Flcy5jLTQyLXtcXG5jcnlwdG8vYWVzLmM6NDM6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2Flcy5jLTQ0LVxcbi0tXFxuY3J5cHRvL2Flcy5jPTEzOT1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0ge1xcbi0tXFxuY3J5cHRvL2Flcy5jLTE0NC1cXHQuY3JhX2Jsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLFxcbmNyeXB0by9hZXMuYzoxNDU6XFx0LmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcXG5jcnlwdG8vYWVzLmMtMTQ2LVxcdC5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsXFxuLS1cXG5jcnlwdG8vYWVzLmM9MjEzPWNyeXB0b19hZXNfc2tjaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmluX2tleSxcXG4tLVxcbmNyeXB0by9hZXMuYy0yMTUte1xcbmNyeXB0by9hZXMuYzoyMTY6XFx0c3RydWN0IGFlc19rZXkgKmtleSA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTtcXG5jcnlwdG8vYWVzLmMtMjE3LVxcbi0tXFxuY3J5cHRvL2Flcy5jPTM0OD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfZWNiX2VuY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtMzQ5LXtcXG5jcnlwdG8vYWVzLmM6MzUwOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy0zNTEtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM2MD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfZWNiX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtMzYxLXtcXG5jcnlwdG8vYWVzLmM6MzYyOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy0zNjMtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM3ND1zdGF0aWMgdm9pZCBjcnlwdG9fYWVzX2NiY19lbmNyeXB0X3NnKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsXFxuY3J5cHRvL2Flcy5jLTM3NS1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3J5cHRsZW4sXFxuY3J5cHRvL2Flcy5jOjM3NjpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmNyeXB0by9hZXMuYy0zNzcte1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM4Mj1zdGF0aWMgdm9pZCBjcnlwdG9fYWVzX2NiY19kZWNyeXB0X3NnKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsXFxuY3J5cHRvL2Flcy5jLTM4My1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgY3J5cHRsZW4sXFxuY3J5cHRvL2Flcy5jOjM4NDpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmNyeXB0by9hZXMuYy0zODUte1xcbi0tXFxuY3J5cHRvL2Flcy5jPTM5MD1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfY2JjX2VuY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtMzkxLXtcXG5jcnlwdG8vYWVzLmM6MzkyOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy0zOTMtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTQwMT1zdGF0aWMgX19tYXliZV91bnVzZWQgaW50IGNyeXB0b19hZXNfY2JjX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtNDAyLXtcXG5jcnlwdG8vYWVzLmM6NDAzOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy00MDQtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTQyMD1jcnlwdG9fYWVzX2NiY19jdHNfY3J5cHRfbm9ubGluZWFyKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGJvb2wgZW5jKVxcbmNyeXB0by9hZXMuYy00MjEte1xcbmNyeXB0by9hZXMuYzo0MjI6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSA9XFxuY3J5cHRvL2Flcy5jLTQyMy1cXHRcXHRjcnlwdG9fc2tjaXBoZXJfY3R4KGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKSk7XFxuLS1cXG5jcnlwdG8vYWVzLmM9NDU0PWNyeXB0b19hZXNfY2JjX2N0c19lbmNyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpXFxuY3J5cHRvL2Flcy5jLTQ1NS17XFxuY3J5cHRvL2Flcy5jOjQ1NjpcXHRjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5ID1cXG5jcnlwdG8vYWVzLmMtNDU3LVxcdFxcdGNyeXB0b19za2NpcGhlcl9jdHgoY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpKTtcXG4tLVxcbmNyeXB0by9hZXMuYz00NzE9Y3J5cHRvX2Flc19jYmNfY3RzX2RlY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSlcXG5jcnlwdG8vYWVzLmMtNDcyLXtcXG5jcnlwdG8vYWVzLmM6NDczOlxcdGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXkgPVxcbmNyeXB0by9hZXMuYy00NzQtXFx0XFx0Y3J5cHRvX3NrY2lwaGVyX2N0eChjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSkpO1xcbi0tXFxuY3J5cHRvL2Flcy5jPTYwOD1zdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBza2NpcGhlcl9hbGdzW10gPSB7XFxuLS1cXG5jcnlwdG8vYWVzLmMtNjE0LVxcdFxcdC5iYXNlLmNyYV9ibG9ja3NpemUgPSBBRVNfQkxPQ0tfU0laRSxcXG5jcnlwdG8vYWVzLmM6NjE1OlxcdFxcdC5iYXNlLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBhZXNfa2V5KSxcXG5jcnlwdG8vYWVzLmMtNjE2LVxcdFxcdC5iYXNlLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSxcXG4tLVxcbmNyeXB0by9hZXMuYy02MjktXFx0XFx0LmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IEFFU19CTE9DS19TSVpFLFxcbmNyeXB0by9hZXMuYzo2MzA6XFx0XFx0LmJhc2UuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGFlc19rZXkpLFxcbmNyeXB0by9hZXMuYy02MzEtXFx0XFx0LmJhc2UuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLFxcbi0tXFxuY3J5cHRvL2Flcy5jLTY0NS1cXHRcXHQuYmFzZS5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsXFxuY3J5cHRvL2Flcy5jOjY0NjpcXHRcXHQuYmFzZS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVzX2tleSksXFxuY3J5cHRvL2Flcy5jLTY0Ny1cXHRcXHQuYmFzZS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jPTEwMjU9c3RhdGljIGludCBjaGNyX3VwZGF0ZV90d2VhayhzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLCB1OCAqaXYsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jLTEwMzAtXFx0c3RydWN0IGNoY3Jfc2tjaXBoZXJfcmVxX2N0eCAqcmVxY3R4ID0gc2tjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTtcXG5kcml2ZXJzL2NyeXB0by9jaGVsc2lvL2NoY3JfYWxnby5jOjEwMzE6XFx0c3RydWN0IGFlc19rZXkgYWVzO1xcbmRyaXZlcnMvY3J5cHRvL2NoZWxzaW8vY2hjcl9hbGdvLmMtMTAzMi1cXHRpbnQgcmV0LCBpO1xcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oPTQ1PXZvaWQgYWVzX2NiY19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjQ2OlxcdFxcdCAgICAgdTggaXZbYXRfbGVhc3QgQUVTX0JMT0NLX1NJWkVdLCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KTtcXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNDctXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmg9NzM9dm9pZCBhZXNfY2JjX2N0c19kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oLTc0LVxcdFxcdFxcdCB1OCBpdlthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLWNiYy5oOjc1OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KTtcXG5pbmNsdWRlL2NyeXB0by9hZXMtY2JjLmgtNzYtXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg9NDY9dm9pZCBhZXNfZWNiX2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmg6NDc6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KTtcXG5pbmNsdWRlL2NyeXB0by9hZXMtZWNiLmgtNDgtXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMteHRzLmg9MTk9c3RydWN0IGFlc194dHNfa2V5IHtcXG5pbmNsdWRlL2NyeXB0by9hZXMteHRzLmgtMjAtXFx0LyogcHJpdmF0ZTogKi9cXG5pbmNsdWRlL2NyeXB0by9hZXMteHRzLmg6MjE6XFx0c3RydWN0IGFlc19rZXkgbWFpbl9rZXk7XFxuaW5jbHVkZS9jcnlwdG8vYWVzLXh0cy5oLTIyLVxcdHN0cnVjdCBhZXNfZW5ja2V5IHR3ZWFrX2tleTtcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTU5PXVuaW9uIGFlc19pbnZrZXlfYXJjaCB7XFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC04Ni0gKlxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjg3OiAqIE5vdGUgdGhhdCB0aGlzIHN0cnVjdCBpcyBhYm91dCBoYWxmIHRoZSBzaXplIG9mIHN0cnVjdCBhZXNfa2V5LiAgVGhpcyBpc1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjg4OiAqIHNlcGFyYXRlIGZyb20gc3RydWN0IGFlc19rZXkgc28gdGhhdCBtb2RlcyB0aGF0IG5lZWQgb25seSBBRVMgZW5jcnlwdGlvblxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTg5LSAqIChlLmcuIEFFUy1HQ00sIEFFUy1DVFIsIEFFUy1DTUFDLCB0d2VhayBrZXkgaW4gQUVTLVhUUykgZG9uJ3QgaW5jdXIgdGhlIHRpbWVcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oPTk3PXN0cnVjdCBhZXNfZW5ja2V5IHtcXG4tLVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTEwNC0vKipcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDoxMDU6ICogc3RydWN0IGFlc19rZXkgLSBBbiBBRVMga2V5IHByZXBhcmVkIGZvciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMTA2LSAqIEBhZXNfZW5ja2V5OiBDb21tb24gZmllbGRzIGFuZCB0aGUga2V5IHByZXBhcmVkIGZvciBlbmNyeXB0aW9uXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMTItICovXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MTEzOnN0cnVjdCBhZXNfa2V5IHtcXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0xMTQtXFx0c3RydWN0IGFlc19lbmNrZXk7IC8qIEluY2x1ZGUgYWxsIGZpZWxkcyBvZiBhZXNfZW5ja2V5LiAqL1xcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg9MzA4PXZvaWQgYWVzX3NwYXJjNjRfY3RyX2NyeXB0XzI1Nihjb25zdCB1NjQgKmtleSwgY29uc3QgdTY0ICppbnB1dCwgdTY0ICpvdXRwdXQsXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMjMtICpcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozMjQ6ICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgemVyb2l6aW5nIGJvdGggdGhlIHN0cnVjdCBhZXNfa2V5IGFuZCB0aGUgcmF3XFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzI1LSAqIGtleSBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zMzQtICovXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzM1OmludCBhZXNfcHJlcGFyZWtleShzdHJ1Y3QgYWVzX2tleSAqa2V5LCBjb25zdCB1OCAqaW5fa2V5LCBzaXplX3Qga2V5X2xlbik7XFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzM2LVxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzQ1LSAqIGNpcGhlci4gIFR5cGljYWxseSB0aGlzIGludm9sdmVzIGV4cGFuZGluZyB0aGUgcmF3IGtleSBpbnRvIG9ubHkgdGhlIHN0YW5kYXJkXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg6MzQ2OiAqIHJvdW5kIGtleXMsIHJlc3VsdGluZyBpbiBhIHN0cnVjdCBhYm91dCBoYWxmIHRoZSBzaXplIG9mIHN0cnVjdCBhZXNfa2V5LlxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM0Ny0gKlxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmg9MzYzPXR5cGVkZWYgdW5pb24ge1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM2NC1cXHRjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqZW5jX2tleTtcXG5pbmNsdWRlL2NyeXB0by9hZXMuaDozNjU6XFx0Y29uc3Qgc3RydWN0IGFlc19rZXkgKmZ1bGxfa2V5O1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oLTM2Ni19IGFlc19lbmNyeXB0X2FyZyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7XFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNzAtICogQGtleTogVGhlIEFFUyBrZXksIGFzIGEgcG9pbnRlciB0byBlaXRoZXIgYW4gZW5jcnlwdGlvbi1vbmx5IGtleVxcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM3MTogKlxcdCAoc3RydWN0IGFlc19lbmNrZXkpIG9yIGEgZnVsbCwgYmlkaXJlY3Rpb25hbCBrZXkgKHN0cnVjdCBhZXNfa2V5KS5cXG5pbmNsdWRlL2NyeXB0by9hZXMuaC0zNzItICogQG91dDogQnVmZmVyIHRvIHN0b3JlIHRoZSBjaXBoZXJ0ZXh0IGJsb2NrXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9hZXMuaD0zNzc9dm9pZCBhZXNfZW5jcnlwdChhZXNfZW5jcnlwdF9hcmcga2V5LCB1OCBvdXRbYXRfbGVhc3QgQUVTX0JMT0NLX1NJWkVdLFxcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzg3LSAqL1xcbmluY2x1ZGUvY3J5cHRvL2Flcy5oOjM4ODp2b2lkIGFlc19kZWNyeXB0KGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksIHU4IG91dFthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0sXFxuaW5jbHVkZS9jcnlwdG8vYWVzLmgtMzg5LVxcdFxcdCBjb25zdCB1OCBpblthdF9sZWFzdCBBRVNfQkxPQ0tfU0laRV0pO1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYz03MT1zdHJ1Y3QgYnBmX2NyeXB0b19jdHgge1xcbi0tXFxua2VybmVsL2JwZi9jcnlwdG8uYy03My1cXHR1bmlvbiB7XFxua2VybmVsL2JwZi9jcnlwdG8uYzo3NDpcXHRcXHRzdHJ1Y3QgYWVzX2tleSBhZXM7XFxua2VybmVsL2JwZi9jcnlwdG8uYy03NS1cXHR9IGtleTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9NDcwPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmMtNDc2LVxcbmxpYi9jcnlwdG8vYWVzLmM6NDc3OnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcXG5saWIvY3J5cHRvL2Flcy5jLTQ3OC1cXHRcXHRcXHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTQ4NT1zdGF0aWMgaW50IF9fYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19lbmNrZXkgKmVuY19rZXksXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jLTQ5Ny1cXG5saWIvY3J5cHRvL2Flcy5jOjQ5ODppbnQgYWVzX3ByZXBhcmVrZXkoc3RydWN0IGFlc19rZXkgKmtleSwgY29uc3QgdTggKmluX2tleSwgc2l6ZV90IGtleV9sZW4pXFxubGliL2NyeXB0by9hZXMuYy00OTkte1xcbi0tXFxubGliL2NyeXB0by9hZXMuYz01MTY9RVhQT1JUX1NZTUJPTChhZXNfZW5jcnlwdCk7XFxubGliL2NyeXB0by9hZXMuYy01MTctXFxubGliL2NyeXB0by9hZXMuYzo1MTg6dm9pZCBhZXNfZGVjcnlwdChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LCB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbmxpYi9jcnlwdG8vYWVzLmMtNTE5LVxcdFxcdCBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTUyNj1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2ZpcHNfdGVzdCh2b2lkKVxcbmxpYi9jcnlwdG8vYWVzLmMtNTI3LXtcXG5saWIvY3J5cHRvL2Flcy5jOjUyODpcXHRzdHJ1Y3QgYWVzX2tleSBrZXk7XFxubGliL2NyeXB0by9hZXMuYy01MjktXFx0dTggZGF0YVtBRVNfQkxPQ0tfU0laRV07XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTc3Mz1zdGF0aWMgYm9vbCBhZXNfZWNiX2RlY3J5cHRfYXJjaCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxcbmxpYi9jcnlwdG8vYWVzLmM6Nzc0OlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtNzc1LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9Nzk2PXZvaWQgYWVzX2VjYl9kZWNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxubGliL2NyeXB0by9hZXMuYzo3OTc6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtNzk4LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9ODE0PXN0YXRpYyB2b2lkIF9faW5pdCBhZXNfZWNiX2ZpcHNfdGVzdCh2b2lkKVxcbmxpYi9jcnlwdG8vYWVzLmMtODE1LXtcXG5saWIvY3J5cHRvL2Flcy5jOjgxNjpcXHRzdHJ1Y3QgYWVzX2tleSBrZXk7XFxubGliL2NyeXB0by9hZXMuYy04MTctXFx0dTggZGF0YVtzaXplb2YoZmlwc190ZXN0X2RhdGEpXTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9ODUzPXN0YXRpYyBib29sIGFlc19jYmNfZGVjcnlwdF9hcmNoKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBsZW4sXFxubGliL2NyeXB0by9hZXMuYy04NTQtXFx0XFx0XFx0XFx0IHU4IGl2W0FFU19CTE9DS19TSVpFXSxcXG5saWIvY3J5cHRvL2Flcy5jOjg1NTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcXG5saWIvY3J5cHRvL2Flcy5jLTg1Ni17XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTg4Nz12b2lkIGFlc19jYmNfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLCB1OCBpdltBRVNfQkxPQ0tfU0laRV0sXFxubGliL2NyeXB0by9hZXMuYzo4ODg6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtODg5LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9OTM1PXN0YXRpYyBib29sIGFlc19jYmNfY3RzX2RlY3J5cHRfYXJjaCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuLFxcbmxpYi9jcnlwdG8vYWVzLmMtOTM2LVxcdFxcdFxcdFxcdCAgICAgdTggaXZbQUVTX0JMT0NLX1NJWkVdLFxcbmxpYi9jcnlwdG8vYWVzLmM6OTM3OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSlcXG5saWIvY3J5cHRvL2Flcy5jLTkzOC17XFxuLS1cXG5saWIvY3J5cHRvL2Flcy5jPTk4Mj12b2lkIGFlc19jYmNfY3RzX2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IGxlbixcXG5saWIvY3J5cHRvL2Flcy5jOjk4MzpcXHRcXHRcXHQgdTggaXZbQUVTX0JMT0NLX1NJWkVdLCBjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5KVxcbmxpYi9jcnlwdG8vYWVzLmMtOTg0LXtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9MTAyND1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19maXBzX3Rlc3Qodm9pZClcXG5saWIvY3J5cHRvL2Flcy5jLTEwMjUte1xcbmxpYi9jcnlwdG8vYWVzLmM6MTAyNjpcXHRzdHJ1Y3QgYWVzX2tleSBrZXk7XFxubGliL2NyeXB0by9hZXMuYy0xMDI3LVxcdHU4IGl2W0FFU19CTE9DS19TSVpFXTtcXG4tLVxcbmxpYi9jcnlwdG8vYWVzLmM9MTA0Nz1zdGF0aWMgdm9pZCBfX2luaXQgYWVzX2NiY19jdHNfZmlwc190ZXN0KHZvaWQpXFxubGliL2NyeXB0by9hZXMuYy0xMDQ4LXtcXG5saWIvY3J5cHRvL2Flcy5jOjEwNDk6XFx0c3RydWN0IGFlc19rZXkga2V5O1xcbmxpYi9jcnlwdG8vYWVzLmMtMTA1MC1cXHR1OCBpdltBRVNfQkxPQ0tfU0laRV07XFxuLS1cXG5saWIvY3J5cHRvL2FybS9hZXMuaD0yND1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXFxuLS1cXG5saWIvY3J5cHRvL2FybS9hZXMuaC00MC1cXG5saWIvY3J5cHRvL2FybS9hZXMuaDo0MTpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXFxubGliL2NyeXB0by9hcm0vYWVzLmgtNDItXFx0XFx0XFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbi0tXFxubGliL2NyeXB0by9hcm02NC9hZXMuaD0xNjE9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9hcm02NC9hZXMuaC0xNzItXFxubGliL2NyeXB0by9hcm02NC9hZXMuaDoxNzM6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbmxpYi9jcnlwdG8vYXJtNjQvYWVzLmgtMTc0LVxcdFxcdFxcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcXG4tLVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaD02MT1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNjktXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oOjcwOnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtNzEtXFx0XFx0XFx0ICAgICB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbi0tXFxubGliL2NyeXB0by9wb3dlcnBjL2Flcy5oPTE2Nj1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfZW5ja2V5ICprZXksXFxuLS1cXG5saWIvY3J5cHRvL3Bvd2VycGMvYWVzLmgtMTk1LVxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaDoxOTY6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LCB1OCBvdXRbQUVTX0JMT0NLX1NJWkVdLFxcbmxpYi9jcnlwdG8vcG93ZXJwYy9hZXMuaC0xOTctXFx0XFx0XFx0ICAgICBjb25zdCB1OCBpbltBRVNfQkxPQ0tfU0laRV0pXFxuLS1cXG5saWIvY3J5cHRvL3Jpc2N2L2Flcy5oPTI2PXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcXG4tLVxcbmxpYi9jcnlwdG8vcmlzY3YvYWVzLmgtMzgtXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaDozOTpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXFxubGliL2NyeXB0by9yaXNjdi9hZXMuaC00MC1cXHRcXHRcXHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXFxuLS1cXG5saWIvY3J5cHRvL3MzOTAvYWVzLmg9NzM9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9zMzkwL2Flcy5oLTgxLVxcbmxpYi9jcnlwdG8vczM5MC9hZXMuaDo4MjpzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9hcmNoKGNvbnN0IHN0cnVjdCBhZXNfa2V5ICprZXksXFxubGliL2NyeXB0by9zMzkwL2Flcy5oLTgzLVxcdFxcdFxcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcXG4tLVxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmg9ODY9c3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2VuY2tleSAqa2V5LFxcbi0tXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaC0xMDQtXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaDoxMDU6c3RhdGljIHZvaWQgYWVzX3NwYXJjNjRfZGVjcnlwdChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtMTA2LVxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqaW5wdXQsIHUzMiAqb3V0cHV0KVxcbi0tXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaC0xMTUtXFxubGliL2NyeXB0by9zcGFyYy9hZXMuaDoxMTY6c3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfYXJjaChjb25zdCBzdHJ1Y3QgYWVzX2tleSAqa2V5LFxcbmxpYi9jcnlwdG8vc3BhcmMvYWVzLmgtMTE3LVxcdFxcdFxcdCAgICAgdTggb3V0W0FFU19CTE9DS19TSVpFXSxcXG4tLVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oPTUyPXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19lbmNrZXkgKmtleSxcXG4tLVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oLTY0LVxcbmxpYi9jcnlwdG8veDg2L2Flcy5oOjY1OnN0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2FyY2goY29uc3Qgc3RydWN0IGFlc19rZXkgKmtleSxcXG5saWIvY3J5cHRvL3g4Ni9hZXMuaC02Ni1cXHRcXHRcXHQgICAgIHU4IG91dFtBRVNfQkxPQ0tfU0laRV0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjMwOjI1LjA5ODMwMTMxNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzMzNjI2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgS01TQU4gaXMgKnJlYWxseSogbmVlZGVkIGhlcmUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlZmFjdG9yaW5nIG9mIHRoZSBCUEYgY3J5cHRvIHN1YnN5c3RlbSwgc2hpZnRpbmcgZnJvbSB0aGUgYGNyeXB0b190Zm1gIGR5bmFtaWMgcmVnaXN0cmF0aW9uIGFwcHJvYWNoIHRvIGRpcmVjdCBBRVMgbGlicmFyeSBmdW5jdGlvbiBjYWxscy4gV2UncmUgZ2V0dGluZyByaWQgb2YgYGJwZl9jcnlwdG9fc2tjaXBoZXIuY2AgYW5kIHVwZGF0aW5nIHRoZSBgYnBmX2NyeXB0b19jdHhgIHN0cnVjdHVyZS4gVGhhdCdzIHRoZSBjb3JlIGNoYW5nZS5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gbWVtb3J5IGNvbnNpZGVyYXRpb25zLCBiZWNhdXNlIHRoYXQncyB3aGF0IEtNU0FOIGlzIGFsbCBhYm91dC4gVGhlIGtleSBwYXJ0IGlzIHRoYXQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggKmd1YXJhbnRlZXMqIHRoYXQgZXZlcnl0aGluZyBpcyB6ZXJvZWQgb3V0IGZyb20gdGhlIGdldC1nby4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZ2luZyBhcm91bmQuIFRoZSBrZXkgc2NoZWR1bGUgd2l0aGluIGBjdHgtXHUwMDNla2V5LmFlc2AgaXMgdGhlbiBwcmVwYXJlZCB3aXRoIGBhZXNfcHJlcGFyZWtleWAuIFRoYXQgc29saWRpZmllcyB0aGUga2V5IG1hdGVyaWFsLlxuXG5Mb29raW5nIGF0IGRhdGEgdHJhbnNmZXJzLCB3ZSd2ZSBnb3QgZHlucHRycyBmb3IgdGhlIGlucHV0L291dHB1dCBidWZmZXJzIGFuZCB0aGUgSVYuIENyaXRpY2FsbHksIHdlIGhhdmUgY2hlY2tzIGluIGBicGZfYWVzX2NiY19jcnlwdGAgYW5kIGBicGZfYWVzX2VjYl9jcnlwdGAgZm9yIGJ1ZmZlciBib3VuZHMgYW5kIGFsaWdubWVudC4gTmFtZWx5LCBgaXZfbGVuICE9IEFFU19CTE9DS19TSVpFYCwgYHNyY19sZW4gJSBBRVNfQkxPQ0tfU0laRSB8fCBkc3RfbGVuIFx1MDAzYyBzcmNfbGVuYC4gQWxzbywgaW4gYGJwZl9jcnlwdG9fY3R4X2NyZWF0ZWAsIHRoZSBgcGFyYW1zYCBhcmUgdmFsaWRhdGVkIHdpdGggY2hlY2tzIGZvciBgcGFyYW1zX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9jcnlwdG9fcGFyYW1zKWAgYW5kIGByZXNlcnZlZGAgZmllbGRzLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIHRha2luZyBkYXRhIGRpcmVjdGx5IGZyb20gY2FsbGVyIGR5bnB0cnMgYW5kIHdyaXRpbmcgZW5jcnlwdGVkL2RlY3J5cHRlZCBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXN0aW5hdGlvbiBkeW5wdHJzLiBUaGlzIGlzIGdvb2Q6IG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRXNzZW50aWFsbHksIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgaGVyZSBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlcnNwYWNlLlxuXG5GaW5hbGx5LCB3aGlsZSB3ZSBjYW4gYWx3YXlzIHJ1biBpbnRvIG1lbW9yeSBpc3N1ZXMgd2l0aCBCUEYgKGUuZy4gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgYnVmZmVyIG92ZXJydW5zKSwgYW55IGlzc3VlcyB3aXRoIGR5bnB0cnMsIG1lbW9yeSBib3VuZGFyaWVzIGFuZCBsaWZldGltZXMgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHRoZSBCUEYgdmVyaWZpZXIgZHlucHRyIGNoZWNrcy4gV2UgKmRvbid0KiByZXF1aXJlIEtNU0FOIGhlcmUuIE15IGNvbmNsdXNpb246IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDg3LCJPdXRwdXRUb2tlbnMiOjI5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjozMDozMS40MzE5MzA1NzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIEJQRiBjcnlwdG8ga2Z1bmNzIGltcGxlbWVudGF0aW9uIGJ5IHJlcGxhY2luZyB0aGUgZ2VuZXJpYyBjcnlwdG8gdGZtIHJlZ2lzdHJhdGlvbiBhcmNoaXRlY3R1cmUgd2l0aCBkaXJlY3QgaW52b2NhdGlvbnMgb2YgQUVTIGxpYnJhcnkgZnVuY3Rpb25zIChDUllQVE9fTElCX0FFU19DQkMgYW5kIENSWVBUT19MSUJfQUVTX0VDQikuIFxcblxcbk1lbW9yeSBzYWZldHkgYW5hbHlzaXM6XFxuMS4gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIGNvbnRleHQgYHN0cnVjdCBicGZfY3J5cHRvX2N0eGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBlbnVtIGJwZl9jcnlwdG9fYWxnb19pZGAgYW5kIHRoZSBgYWVzX2tleWAgdW5pb24pIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBLZXkgc2V0dXAgaXMgaGFuZGxlZCBieSBgYWVzX3ByZXBhcmVrZXkoKWAuIENsZWFudXAgaXMgaGFuZGxlZCB2aWEgYGtmcmVlX3NlbnNpdGl2ZSgpYC5cXG4yLiBCdWZmZXJzIFxcdTAwMjYgSW5mbyBMZWFrczogRGF0YSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9wZXJhdGUgZGlyZWN0bHkgb24gZHlucHRyIGJ1ZmZlcnMgc3VwcGxpZWQgYnkgQlBGIHByb2dyYW1zIGFmdGVyIHZlcmlmeWluZyBibG9jayBhbGlnbm1lbnQgYW5kIGJvdW5kcyAoYEFFU19CTE9DS19TSVpFYCBjaGVja3MsIGBkc3RfbGVuIFxcdTAwM2U9IHNyY19sZW5gKS4gTm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHN0cnVjdCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nL2NvbnRyb2wgZmxvdy5cXG4zLiBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGR5bnB0ciBhY2Nlc3NlcywgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbiBidWdzLCBvciBsaWZldGltZS9yZWZjb3VudGluZyBpc3N1ZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIEJQRiB2ZXJpZmllci9kZWJ1ZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcmlza3Mgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgQlBGIGNyeXB0byBrZnVuY3MgaW1wbGVtZW50YXRpb24gYnkgcmVwbGFjaW5nIHRoZSBnZW5lcmljIGNyeXB0byB0Zm0gcmVnaXN0cmF0aW9uIGFyY2hpdGVjdHVyZSB3aXRoIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiBBRVMgbGlicmFyeSBmdW5jdGlvbnMgKENSWVBUT19MSUJfQUVTX0NCQyBhbmQgQ1JZUFRPX0xJQl9BRVNfRUNCKS4gXFxuXFxuTWVtb3J5IHNhZmV0eSBhbmFseXNpczpcXG4xLiBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgY29udGV4dCBgc3RydWN0IGJwZl9jcnlwdG9fY3R4YCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGVudW0gYnBmX2NyeXB0b19hbGdvX2lkYCBhbmQgdGhlIGBhZXNfa2V5YCB1bmlvbikgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEtleSBzZXR1cCBpcyBoYW5kbGVkIGJ5IGBhZXNfcHJlcGFyZWtleSgpYC4gQ2xlYW51cCBpcyBoYW5kbGVkIHZpYSBga2ZyZWVfc2Vuc2l0aXZlKClgLlxcbjIuIEJ1ZmZlcnMgXFx1MDAyNiBJbmZvIExlYWtzOiBEYXRhIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gb3BlcmF0ZSBkaXJlY3RseSBvbiBkeW5wdHIgYnVmZmVycyBzdXBwbGllZCBieSBCUEYgcHJvZ3JhbXMgYWZ0ZXIgdmVyaWZ5aW5nIGJsb2NrIGFsaWdubWVudCBhbmQgYm91bmRzIChgQUVTX0JMT0NLX1NJWkVgIGNoZWNrcywgYGRzdF9sZW4gXFx1MDAzZT0gc3JjX2xlbmApLiBObyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3Igc3RydWN0IHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcvY29udHJvbCBmbG93LlxcbjMuIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgZHlucHRyIGFjY2Vzc2VzLCBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9uIGJ1Z3MsIG9yIGxpZmV0aW1lL3JlZmNvdW50aW5nIGlzc3VlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgQlBGIHZlcmlmaWVyL2RlYnVnIGluZnJhc3RydWN0dXJlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCByaXNrcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9qxb9[1] Phase: Succeeded StartedAt: 2026-09-01 02:30:43 +0000 UTC FinishedAt: 2026-09-01 02:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 02:30:43 +0000 UTC FinishedAt: 2026-09-01 02:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2] Phase: Succeeded StartedAt: 2026-09-01 02:30:43 +0000 UTC FinishedAt: 2026-09-01 04:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 02:30:43 +0000 UTC FinishedAt: 2026-09-01 04:11:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 02:30:43 +0000 UTC FinishedAt: 2026-09-01 02:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 02:30:43 +0000 UTC FinishedAt: 2026-09-01 02:30:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow9qxb9/series-workflow9qxb9-convert-artifact-1463989451/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 02:30:53 +0000 UTC FinishedAt: 2026-09-01 02:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 02:30:53 +0000 UTC FinishedAt: 2026-09-01 02:48:36 +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:*26ff3d0e-8731-4f4e-9520-8f6a026e4c05,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-workflow9qxb9/series-workflow9qxb9-convert-artifact-1463989451/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": "441d6759-a41f-4a7d-9f1d-9fb0d4b0a31e", "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-workflow9qxb9/series-workflow9qxb9-build-action-939928521/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 02:30:53 +0000 UTC FinishedAt: 2026-09-01 02:48:26 +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:*26ff3d0e-8731-4f4e-9520-8f6a026e4c05,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-workflow9qxb9/series-workflow9qxb9-convert-artifact-1463989451/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": "441d6759-a41f-4a7d-9f1d-9fb0d4b0a31e", "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-workflow9qxb9/series-workflow9qxb9-build-action-939928521/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-01 02:48:36 +0000 UTC FinishedAt: 2026-09-01 02:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-01 02:48:36 +0000 UTC FinishedAt: 2026-09-01 02:48:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-01 02:48:36 +0000 UTC FinishedAt: 2026-09-01 02:48:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-01 02:48:36 +0000 UTC FinishedAt: 2026-09-01 02:48:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow9qxb9/series-workflow9qxb9-convert-artifact-1494822690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-01 02:48:46 +0000 UTC FinishedAt: 2026-09-01 02:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-01 02:48:46 +0000 UTC FinishedAt: 2026-09-01 02:50:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*441d6759-a41f-4a7d-9f1d-9fb0d4b0a31e,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-workflow9qxb9/series-workflow9qxb9-build-action-939928521/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-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-01 02:50:37 +0000 UTC FinishedAt: 2026-09-01 02:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-01 02:50:37 +0000 UTC FinishedAt: 2026-09-01 02:50:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-01 02:50:37 +0000 UTC FinishedAt: 2026-09-01 03:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-01 02:50:37 +0000 UTC FinishedAt: 2026-09-01 03:08:30 +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:*26ff3d0e-8731-4f4e-9520-8f6a026e4c05,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-workflow9qxb9/series-workflow9qxb9-convert-artifact-1494822690/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": "1ea5f4ee-4002-4578-bb75-61955fd63533", "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-workflow9qxb9/series-workflow9qxb9-build-action-3874647926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-01 02:50:37 +0000 UTC FinishedAt: 2026-09-01 03:08:20 +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:*26ff3d0e-8731-4f4e-9520-8f6a026e4c05,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-workflow9qxb9/series-workflow9qxb9-convert-artifact-1494822690/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": "1ea5f4ee-4002-4578-bb75-61955fd63533", "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-workflow9qxb9/series-workflow9qxb9-build-action-3874647926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-01 03:08:30 +0000 UTC FinishedAt: 2026-09-01 03:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-01 03:08:30 +0000 UTC FinishedAt: 2026-09-01 03:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-01 03:08:30 +0000 UTC FinishedAt: 2026-09-01 03:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-01 03:08:30 +0000 UTC FinishedAt: 2026-09-01 03:10:30 +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:*1ea5f4ee-4002-4578-bb75-61955fd63533,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-workflow9qxb9/series-workflow9qxb9-build-action-3874647926/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-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-01 03:10:40 +0000 UTC FinishedAt: 2026-09-01 04:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-01 03:10:40 +0000 UTC FinishedAt: 2026-09-01 04:11:20 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*441d6759-a41f-4a7d-9f1d-9fb0d4b0a31e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1ea5f4ee-4002-4578-bb75-61955fd63533,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-workflow9qxb9/series-workflow9qxb9-build-action-939928521/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-workflow9qxb9/series-workflow9qxb9-build-action-3874647926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-01 03:10:40 +0000 UTC FinishedAt: 2026-09-01 03:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-01 03:10:40 +0000 UTC FinishedAt: 2026-09-01 03:10:47 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9qxb9/series-workflow9qxb9-convert-artifact-436758871/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-01 03:10:40 +0000 UTC FinishedAt: 2026-09-01 03:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-01 03:10:40 +0000 UTC FinishedAt: 2026-09-01 03:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-01 03:10:40 +0000 UTC FinishedAt: 2026-09-01 03:10:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-01 03:10:50 +0000 UTC FinishedAt: 2026-09-01 04:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qxb9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_crypto_ctx_create","bpf_crypto_ctx_release","bpf_crypto_ctx_acquire","bpf_crypto_ctx_release_dtor","bpf_crypto_decrypt","bpf_crypto_encrypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_CRYPTO","DEBUG_INFO_BTF"],"series_id":"d559e7d9-d78e-4d7f-b037-00d9815ed5a0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-01 03:10:50 +0000 UTC FinishedAt: 2026-09-01 04:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*441d6759-a41f-4a7d-9f1d-9fb0d4b0a31e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1ea5f4ee-4002-4578-bb75-61955fd63533,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-workflow9qxb9/series-workflow9qxb9-build-action-939928521/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-workflow9qxb9/series-workflow9qxb9-build-action-3874647926/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-workflow9qxb9/series-workflow9qxb9-convert-artifact-436758871/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,}