Name: series-workflowjcf2f Phase: Succeeded StartedAt: 2026-08-14 12:48:13 +0000 UTC FinishedAt: 2026-08-14 13:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[0] Phase: Succeeded StartedAt: 2026-08-14 12:48:13 +0000 UTC FinishedAt: 2026-08-14 13:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 12:48:13 +0000 UTC FinishedAt: 2026-08-14 13:13:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b5060a4aa33d7d78a8c1837ab08ef0c81ea96650", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b5060a4aa33d7d78a8c1837ab08ef0c81ea96650", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "6553562a-bd67-401b-829a-8a52c87155a3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_pre_fault_memory", "kvm_riscv_gstage_map_page", "kvm_riscv_mmu_map" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgb24gUklTQy1WLiBJdCBhZGRzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdoaWNoIHVzZXMgYSBsb2NhbCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwYCBpbml0aWFsaXplZCB0byBgeyAwIH1gLiBUaGUgYG91dF9tYXBgIGlzIGZ1cnRoZXIgemVyb2VkIG91dCB2aWEgYG1lbXNldGAgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGUgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAgcGFzc2VkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYGNvcHlfZnJvbV91c2VyYCAoaW5jbHVkaW5nIHBhZGRpbmcpIGJlZm9yZSBiZWluZyBtb2RpZmllZCBhbmQgY29waWVkIGJhY2ssIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdmYjhjZjJjNWQ4YzA4NGNhY2FkMTkzM2RjMjlhMDZlZjkxZTVlM2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzowODoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICYjNDM7MjgsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4mIzQzO1x0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiBcdHNlbGVjdCBLVk1fTU1JT1xuIFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGU1MDAyY2I5Y2JlZjEuLjZiZDhiOGZkNmNlYjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0yODAsNiAmIzQzOzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbiYjNDM7XHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRcdG91dF9tYXAtXHUwMDNlbGV2ZWwgPSBwdGVwX2xldmVsO1xuJiM0MztcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uMzNkNGJhNDA2YjBkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICYjNDM7NzQ4LDQ4IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHZhO1xuJiM0MztcdGdwYV90IGVuZDtcbiYjNDM7XHRnZm5fdCBnZm47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z2ZuID0gZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpO1xuJiM0MztcdG1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuJiM0MztcdGlmICghbWVtc2xvdClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuJiM0MztcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXHUwMDI2b3V0X21hcCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChwdGVfdmFsKG91dF9tYXAucHRlKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xuJiM0MztcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgJiM0MzsgbWFwX3NpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGdkX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5AQCAtMTg3LDYgJiM0MzsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBzdGVhbF90aW1lXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTEyLDYgJiM0MzsxMiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28vcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4gXG4mIzQzOyNkZWZpbmUgUEFHRV9TSElGVFx0XHQxMlxuJiM0MzsjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4mIzQzO1xuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1x0MHgwMDdjXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFx0MlxuICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNXHQyOFxuQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGxcbiBcbiB2b2lkIHZtX2luc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGhhbmRsZXIpO1xuIFxuJiM0MzsvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4mIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1x0XHRcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUXHRcdFx0NDhcbiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9NQVNLXHRcdFx0MHgwMDAwRkY4MDAwMDAwMDAwVUxMXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVFx0XHRcdDM5XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmI0ZDQxYTQwNzU1MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuJiM0MztcdFBHVEJMX0w0X0lOREVYX01BU0ssXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuQEAgLTUwLDYgJiM0Mzs1MSw3IEBAIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG4gXHRQR1RCTF9MMV9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wyX0lOREVYX1NISUZULFxuIFx0UEdUQkxfTDNfSU5ERVhfU0hJRlQsXG4mIzQzO1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGZvciBSSVNDLVYgYnkgYWRkaW5nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSBhbmQgbW9kaWZ5aW5nIHRoZSBwYWdlIG1hcHBpbmcgbG9naWMgaW4ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBhbmQga3ZtX3Jpc2N2X21tdV9tYXAuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGlvY3RsIGNvZGUgcGF0aHMgYW5kIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBNTVUgbG9naWMgb24gUklTQy1WLCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZmI4Y2YyYzVkOGMwODRjYWNhZDE5MzNkYzI5YTA2ZWY5MWU1ZTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI4LDYgJiM0MzsyOCw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKJiM0MzsJc2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKIAlzZWxlY3QgS1ZNX01NSU8KIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgU0NIRURfSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwppbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwpAQCAtMjgwLDYgJiM0MzsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAogCQkJCQkJICAgIG91dF9tYXAtJmd0O2xldmVsLCB0cnVlKTsKIAkJfSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHsKIAkJCWt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTsKJiM0MzsJCQlvdXRfbWFwLSZndDthZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7bGV2ZWwgPSBwdGVwX2xldmVsOwomIzQzOwkJCW91dF9tYXAtJmd0O3B0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDYwMzViNWVjOTUwMzkuLjMzZDRiYTQwNmIwZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCkBAIC03NDgsNiAmIzQzOzc0OCw0OCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCXJldHVybiByZXQ7CiB9CiAKJiM0Mztsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHZhOwomIzQzOwlncGFfdCBlbmQ7CiYjNDM7CWdmbl90IGdmbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2ZuID0gZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKTsKJiM0MzsJbWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7CiYjNDM7CWlmICghbWVtc2xvdCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpOwomIzQzOwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCXJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLSZndDtncGEsIGh2YSwgZmFsc2UsICZhbXA7b3V0X21hcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFwX3NpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpOwomIzQzOwllbmQgPSBBTElHTl9ET1dOKHJhbmdlLSZndDtncGEsIG1hcF9zaXplKSAmIzQzOyBtYXBfc2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtJmd0O3NpemUsIGVuZCAtIHJhbmdlLSZndDtncGEpOwomIzQzO30KJiM0MzsKIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IHBhZ2UgKnBnZF9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKaW5kZXggYTlmMDgzZmVlYjc2Ny4uNTg1MDBhMTliMzNiZCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCkBAIC0xODcsNiAmIzQzOzE4Nyw3IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDoKIAljYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHOgomIzQzOwljYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWToKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtMjI1LDYgJiM0MzsyMjUsNyBAQCBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHN0ZWFsX3RpbWUKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAppbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaApAQCAtMTIsNiAmIzQzOzEyLDkgQEAKICNpbmNsdWRlICZsdDthc20vdmRzby9wcm9jZXNzb3IuaCZndDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiAKJiM0MzsjZGVmaW5lIFBBR0VfU0hJRlQJCTEyCiYjNDM7I2RlZmluZSBQQUdFX1NJWkUJCUJJVF9VTEwoUEFHRV9TSElGVCkKJiM0MzsKICNkZWZpbmUgSU5TTl9PUENPREVfTUFTSwkweDAwN2MKICNkZWZpbmUgSU5TTl9PUENPREVfU0hJRlQJMgogI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU0JMjgKQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGwKIAogdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTsKIAomIzQzOy8qIEw0IGluZGV4IEJpdFs1Njo0OF0gKi8KJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX01BU0sJCQkweDAxRkYwMDAwMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUCQkJNDgKIC8qIEwzIGluZGV4IEJpdFs0NzozOV0gKi8KICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTSwkJCTB4MDAwMEZGODAwMDAwMDAwMFVMTAogI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVAkJCTM5CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwppbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHsKIAlQR1RCTF9MMV9JTkRFWF9NQVNLLAogCVBHVEJMX0wyX0lOREVYX01BU0ssCiAJUEdUQkxfTDNfSU5ERVhfTUFTSywKJiM0MzsJUEdUQkxfTDRfSU5ERVhfTUFTSywKIH07CiAKIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7CkBAIC01MCw2ICYjNDM7NTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0gewogCVBHVEJMX0wxX0lOREVYX1NISUZULAogCVBHVEJMX0wyX0lOREVYX1NISUZULAogCVBHVEJMX0wzX0lOREVYX1NISUZULAomIzQzOwlQR1RCTF9MNF9JTkRFWF9TSElGVCwKIH07CiAKIHN0YXRpYyB1NjQgcHRlX2luZGV4KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCBndmEsIGludCBsZXZlbCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgc3VwcG9ydCBmb3IgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgb24gUklTQy1WLiBJdCBsb29rcyBsaWtlIGl0IHRvdWNoZXMgdGhlIHVzdWFsIHN1c3BlY3RzOiBgS2NvbmZpZ2AsIGBnc3RhZ2UuY2AsIGBtbXUuY2AsIGFuZCBgdm0uY2Agd2l0aGluIHRoZSBgYXJjaC9yaXNjdi9rdm0vYCBkaXJlY3RvcnkuIFBsdXMgc29tZSBzZWxmdGVzdHMsIG5hdHVyYWxseS4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciAtIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgcHJvdmlkaW5nIHRoZSBSSVNDLVYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIHByZS1mYXVsdGluZyBtZW1vcnkgaW4gS1ZNLiBJdCBhbHNvIHNldHMgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgIGluIGBLY29uZmlnYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB0aGUgb3ZlcmFsbCBLVk0gaW50ZWdyYXRpb24uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgaG93IGRvZXMgdXNlcnNwYWNlIGFjY2VzcyB0aGlzPyBBaCwgcmlnaHQsIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoYXQgaW9jdGwgYmVjb21lcyBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBhZGRzIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIHRvIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBpbiBgYXJjaC9yaXNjdi9rdm0vdm0uY2AsIGNvbmZpcm1pbmcgdGhhdC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LCBhbmQgdGhpcyBpcyBSSVNDLVYsIHNvIHRoYXQgcGFydCBpcyBjbGVhci4KCkkmIzM5O20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25zIG5vdzogYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgKHRoZSBuZXcgb25lKSBhbmQgdGhlIG1vZGlmaWVkIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXNuJiMzOTt0IGRlY2xhcmVkIHN0YXRpYyBhbmQgaXMgcHJvcGVybHkgZXhwb3NlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgZ2VuZXJpYyBLVk0gY29kZSB3aGVuIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBzZWxlY3RlZC4gVGhhdCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgZG8gYSBxdWljayBzZWFyY2ggb2YgdGhlIGVudGlyZSB0cmVlIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc1MC1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0MC0vKipcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQyLSAqIEB2Y3B1OiB0aGUgdmNwdSB0aGF0IHNoYWxsIGFwcGVhciB0byBoYXZlIGdlbmVyYXRlZCB0aGUgZmF1bHQtaW4uXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg2MDpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2MS17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTczPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTAxNzpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTgtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE3MDE9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMy1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzE1LVx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTUtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MzM0PXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxudmlydC9rdm0va3ZtX21haW4uYzo0MzU5Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM2MC1cdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTczCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBLVk0gTWVtb3J5IEZhdWx0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMgYmVmb3JlIHRoZXkgYWN0dWFsbHkgaGFwcGVuIOKAkyB0aGF0IHByZS1mYXVsdCBzdGFnZS4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGluIHRoZSBjb2RlLCBhbmQgSSBrbm93IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJdCYjMzk7cyBhIHN0YW5kYXJkIHBhdHRlcm4sIHJpZ2h0PyBMb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN0dWZmIGJlaW5nIGhhbmRsZWQgZG93bnN0cmVhbSBmcm9tIHRoZSBtb3JlIGdlbmVyYWwgS1ZNIGNvcmUgZnVuY3Rpb24uCgpMZXQmIzM5O3MgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCYjMzk7cyBhY3R1YWxseSBkb2luZyBhbmQgd2hlcmUgZXhhY3RseSBpdCBmaXRzIGluIHRoZSBmYXVsdCBoYW5kbGluZyBwaXBlbGluZS4gV2hhdCBhcmUgdGhlIGtleSB0aGluZ3MgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yPyBHb3R0YSB0cmFjZSB0aGF0IGNvZGUgcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIHByZS1mYXVsdCByb3V0aW5lIGlzIGludm9rZWQuIElzIGl0IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZ3Vlc3QgbWVtb3J5IHR5cGVzLCBvciBwYWdlIHRhYmxlIG9wZXJhdGlvbnM/IEdvdHRhIHpvb20gaW4gYW5kIGdldCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NDMwOD1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzMzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxudmlydC9rdm0va3ZtX21haW4uYzo0MzM0OnN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzUtXHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzOC1cdFx0XHRicmVhaztcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYzOTpcdFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXHUwMDI2cmFuZ2UpO1xudmlydC9rdm0va3ZtX21haW4uYy00NjQwLVx0XHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYCBzcGVjaWZpY2FsbHkgZm9yIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAuIEludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdpdGhpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3MgYXJlIGhhbmRsZWQuIEFuZCB0aGVuLCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaW4gYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGluIFJJU0MtViBLVk0uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZ3Vlc3QgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGdpdmVuICYjMzQ7Z3N0YWdlJiMzNDsgYW5kIHRoZSBjb250ZXh0IG9mIHByZS1mYXVsdGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBub3c7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lY2hhbmljcyBvZiB0aGlzIHByZS1mYXVsdGluZyBsaWtlbHkgY29tZSB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTU3PWJvb2wga3ZtX3Jpc2N2X2dzdGFnZV90cnlfdXBkYXRlX3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjAtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaDo2MTppbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjItXHRcdFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM9MTg2PXN0YXRpYyB2b2lkIGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsIHUzMiBsZXZlbCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDYtXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzoyMDc6aW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIwOC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzQtXHRcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjczNTpcdFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzYtXHRcdFx0XHRcdFx0dm1hX3BhZ2VzaXplLCBmYWxzZSwgdHJ1ZSwgb3V0X21hcCk7XG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzctXHR9IGVsc2Uge1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzM4Olx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczOS1cdFx0XHRcdFx0XHR2bWFfcGFnZXNpemUsIHRydWUsIHRydWUsIG91dF9tYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgS1ZNL1JJU0MtViBQYWdlIE1hcHBpbmcgRmxvdyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhZ2UgbWFwcGluZyBwcm9jZXNzIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBlbnZpcm9ubWVudC4gRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgdGhlIGZpcnN0IHBsYWNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGlzIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoYXQgc2VlbXMgbG9naWNhbCwgYXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHByb2JhYmx5IGhhbmRsZXMgdGhlIGFjdHVhbCBHdWVzdCBTdGFnZSBtYXBwaW5nLiBOb3csIHdoZXJlIGlzICpga3ZtX3Jpc2N2X21tdV9tYXBgKiBiZWluZyBjYWxsZWQgZnJvbT8gQWgsIGxvb2tzIGxpa2UgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBhbHNvIGxpa2VseSBga3ZtX3Jpc2N2X3ZjcHVfZmF1bHRgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSYjMzk7ZCBuZWVkIHRvIG1hcCBwYWdlcyB3aGVuIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGFjY2VzcyBmYXVsdCBvciBkdXJpbmcgcHJlLWZhdWx0aW5nIHRvIGFudGljaXBhdGUgZnV0dXJlIGFjY2Vzcy4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHRoZSBjb21wbGV0ZSBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSBkZWx2ZSBpbnRvIHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGZ1bmN0aW9uIGl0c2VsZi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0xMz12b2lkIGt2bV9yaXNjdl9tbXVfaW91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX21tdS5oOjE0OmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0xNS1cdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01NTI9c3RhdGljIGJvb2wga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjIyLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjIzOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MjQtXHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NzUxPWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NzgtXHRcdGNvbmRfcmVzY2hlZCgpO1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6Nzc5Olx0XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzgwLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE2PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTY2LVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM6Njc6XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCBmYXVsdF9hZGRyLCBodmEsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy02OC1cdFx0XHRcdCh0cmFwLVx1MDAzZXNjYXVzZSA9PSBFWENfU1RPUkVfR1VFU1RfUEFHRV9GQVVMVCkgPyB0cnVlIDogZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzQKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFJJU0MtViBQYWdlIEZhdWx0IEhhbmRsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIEtWTSBSSVNDLVYsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgaXQmIzM5O3MgY2VudGVyZWQgYXJvdW5kIGEgbmV3IGZlYXR1cmUsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhhdCBpdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGVyLCBga3ZtX3Jpc2N2X21tdV9tYXBgLCBzcGVjaWZpY2FsbHkgYnkgYWx0ZXJpbmcgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHBvcHVsYXRlIGBvdXRfbWFwYC4gVGhpcyBkZWZpbml0ZWx5IGhhcyBmdXp6aW5nIHBvdGVudGlhbCB3cml0dGVuIGFsbCBvdmVyIGl0LiBBbnkgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFwcGluZyBsb2dpYywgZXNwZWNpYWxseSB3aXRoaW4gYSBjcml0aWNhbCBwYXRoIGxpa2UgYSBwYWdlIGZhdWx0IGhhbmRsZXIsIHdhcnJhbnRzIGltbWVkaWF0ZSBhbmQgdGhvcm91Z2ggdGVzdGluZy4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiBoZXJlIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG1haW4gaGFuZGxlciBga3ZtX3Jpc2N2X21tdV9tYXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIG5ldyBwcmUtZmF1bHQgbWVjaGFuaXNtIGludGVncmF0ZXMgaW50byB0aGUgZXhpc3RpbmcgcGFnZSBmYXVsdCBwcm9jZXNzLgoKSSBuZWVkIHRvIHF1aWNrbHkgZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExvb2tzIGxpa2UgYEtWTWAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkLiBBIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIHBhdGNoIGNvbmZpcm1lZCB0aGF0IGBzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgaXMgYWRkZWQgdG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRob3NlIGNydWNpYWwgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaGlkZGVuIGJ5IGJlaW5nIGRlY2xhcmVkIGFzIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoZW0gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuIEdvb2QsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGluZGVlZCBhIHB1YmxpYyBmdW5jdGlvbiB3aXRoIGEgYGxvbmdgIHJldHVybiB0eXBlLiBBbmQgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGlzIGFuIGBpbnRgIGFuZCBub3Qgc3RhdGljLiBBbmQsIGZpbmFsbHksIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYW4gYGludGAgYXMgd2VsbCwgc28gbm8gaXNzdWVzIHRoZXJlLgoKQWxyaWdodCwgSSYjMzk7bGwgcmVjb3JkIHRoZXNlIGZpbmRpbmdzLiBUaGlzIHBhdGNoIGRlbWFuZHMgc29tZSBzZXJpb3VzIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBvbiBSSVNDLVYuIEl0IGFkZHMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2hpY2ggdXNlcyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXBgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAuIFRoZSBgb3V0X21hcGAgaXMgZnVydGhlciB6ZXJvZWQgb3V0IHZpYSBgbWVtc2V0YCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQuIFRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBwYXNzZWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgIChpbmNsdWRpbmcgcGFkZGluZykgYmVmb3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBjb3BpZWQgYmFjaywgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZmI4Y2YyYzVkOGMwODRjYWNhZDE5MzNkYzI5YTA2ZWY5MWU1ZTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI4LDYgJiM0MzsyOCw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKJiM0MzsJc2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKIAlzZWxlY3QgS1ZNX01NSU8KIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgU0NIRURfSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwppbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwpAQCAtMjgwLDYgJiM0MzsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAogCQkJCQkJICAgIG91dF9tYXAtJmd0O2xldmVsLCB0cnVlKTsKIAkJfSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHsKIAkJCWt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTsKJiM0MzsJCQlvdXRfbWFwLSZndDthZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7bGV2ZWwgPSBwdGVwX2xldmVsOwomIzQzOwkJCW91dF9tYXAtJmd0O3B0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDYwMzViNWVjOTUwMzkuLjMzZDRiYTQwNmIwZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCkBAIC03NDgsNiAmIzQzOzc0OCw0OCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCXJldHVybiByZXQ7CiB9CiAKJiM0Mztsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHZhOwomIzQzOwlncGFfdCBlbmQ7CiYjNDM7CWdmbl90IGdmbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2ZuID0gZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKTsKJiM0MzsJbWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7CiYjNDM7CWlmICghbWVtc2xvdCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpOwomIzQzOwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCXJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLSZndDtncGEsIGh2YSwgZmFsc2UsICZhbXA7b3V0X21hcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFwX3NpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpOwomIzQzOwllbmQgPSBBTElHTl9ET1dOKHJhbmdlLSZndDtncGEsIG1hcF9zaXplKSAmIzQzOyBtYXBfc2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtJmd0O3NpemUsIGVuZCAtIHJhbmdlLSZndDtncGEpOwomIzQzO30KJiM0MzsKIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IHBhZ2UgKnBnZF9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKaW5kZXggYTlmMDgzZmVlYjc2Ny4uNTg1MDBhMTliMzNiZCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCkBAIC0xODcsNiAmIzQzOzE4Nyw3IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDoKIAljYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHOgomIzQzOwljYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWToKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtMjI1LDYgJiM0MzsyMjUsNyBAQCBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHN0ZWFsX3RpbWUKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAppbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaApAQCAtMTIsNiAmIzQzOzEyLDkgQEAKICNpbmNsdWRlICZsdDthc20vdmRzby9wcm9jZXNzb3IuaCZndDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiAKJiM0MzsjZGVmaW5lIFBBR0VfU0hJRlQJCTEyCiYjNDM7I2RlZmluZSBQQUdFX1NJWkUJCUJJVF9VTEwoUEFHRV9TSElGVCkKJiM0MzsKICNkZWZpbmUgSU5TTl9PUENPREVfTUFTSwkweDAwN2MKICNkZWZpbmUgSU5TTl9PUENPREVfU0hJRlQJMgogI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU0JMjgKQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGwKIAogdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTsKIAomIzQzOy8qIEw0IGluZGV4IEJpdFs1Njo0OF0gKi8KJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX01BU0sJCQkweDAxRkYwMDAwMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUCQkJNDgKIC8qIEwzIGluZGV4IEJpdFs0NzozOV0gKi8KICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTSwkJCTB4MDAwMEZGODAwMDAwMDAwMFVMTAogI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVAkJCTM5CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwppbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHsKIAlQR1RCTF9MMV9JTkRFWF9NQVNLLAogCVBHVEJMX0wyX0lOREVYX01BU0ssCiAJUEdUQkxfTDNfSU5ERVhfTUFTSywKJiM0MzsJUEdUQkxfTDRfSU5ERVhfTUFTSywKIH07CiAKIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7CkBAIC01MCw2ICYjNDM7NTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0gewogCVBHVEJMX0wxX0lOREVYX1NISUZULAogCVBHVEJMX0wyX0lOREVYX1NISUZULAogCVBHVEJMX0wzX0lOREVYX1NISUZULAomIzQzOwlQR1RCTF9MNF9JTkRFWF9TSElGVCwKIH07CiAKIHN0YXRpYyB1NjQgcHRlX2luZGV4KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCBndmEsIGludCBsZXZlbCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIG9uIFJJU0MtVi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIEl0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBLY29uZmlnYCwgYGdzdGFnZS5jYCwgYG1tdS5jYCwgYHZtLmNgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBmZWF0dXJlIOKAkyBhbmQgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNjb3BlLCBub3RoaW5nIG9idmlvdXNseSBodWdlIHRoYXQganVtcHMgb3V0LgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYywgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFRoZSBuZXcgZnVuY3Rpb24gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTG9va3MgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcHJlLWZhdWx0aW5nIG9mIG1lbW9yeSBmb3IgYSB2aXJ0dWFsIENQVS4gVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgY2FsbGVkIGFuZCBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrLgoKSW5zaWRlIHRoZSBuZXcgZnVuY3Rpb24sIGBvdXRfbWFwYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgcGFzc2VkIGFzIGEgcG9pbnRlciB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNvcnJlY3QuIElmIHRoZSBpbml0aWFsaXphdGlvbiBpcyBpbmNvcnJlY3QsIHRoZW4gZnV6emluZyBiZWNvbWVzIG11Y2ggbW9yZSBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIG5ldyBmdW5jdGlvbiBpcyBhIG5ldyBjb2RlIHBhdGguIFRoaXMgY291bGQgYmUgZXhwbG9pdGFibGUsIGlmIHRoZSBuZXcgdmFyaWFibGUgYG91dF9tYXBgIGlzbiYjMzk7dCBpbml0aWFsaXplZCwgaWYgaXQgaXMgbm90IGhhbmRsZWQgYnkgdGhlIGBrdm1fcmlzY3ZfbW11X21hcGAgZnVuY3Rpb24sIHRoaXMgY291bGQgYmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHRoYXQgd291bGQgYmUgZGlzY292ZXJlZCB3aXRoIGEgZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgZG9lcyB3aXRoIHRoYXQgemVyb2VkIGBvdXRfbWFwYCBzdHJ1Y3QuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGt2bV9yaXNjdl9tbXVfbWFwYCBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgb3BlcmF0aW9uLCBLTVNBTiB3b3VsZCBsaWtlbHkgcGljayB1cCBhbnkgdXNlLWJlZm9yZS1pbml0aWFsaXphdGlvbiBpc3N1ZXMgaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgY2hlY2sgdGhhdCBmdW5jdGlvbiBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9NTUyPXN0YXRpYyBib29sIGt2bV9yaXNjdl9tbXVfZGlydHlfbG9nX3dyaXRlX2ZhdWx0X2Zhc3Qoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyMi1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjYyMzppbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI0LVx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTc1MT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzc4LVx0XHRjb25kX3Jlc2NoZWQoKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc3OTpcdFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcdTAwMjZvdXRfbWFwKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc4MC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU5MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlIGBrdm1fcmlzY3ZfbW11X21hcGAgaW1wbGVtZW50YXRpb246CgoqKkRpdmluZyBpbnRvIGt2bV9yaXNjdl9tbXVfbWFwKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYGt2bV9yaXNjdl9tbXVfbWFwYCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpbnRlcmFjdHMgd2l0aCB0aGUgUklTQy1WIE1NVSBmb3IgbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGNvcmUgb2YgdHJhbnNsYXRpbmcgZ3Vlc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMsIGhhbmRsaW5nIHBhZ2UgdGFibGUgd2Fsa3MsIGFuZCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgbWFwcGluZ3Mgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBSSVNDLVYgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMgYW5kIGhvdyBpdCBtaWdodCBoYW5kbGUgZGlmZmVyZW50IG1lbW9yeSBhY2Nlc3MgdHlwZXMgYW5kIHByb3RlY3Rpb24gbGV2ZWxzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBUTEIgaW52YWxpZGF0aW9ucyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb2hlcmVudC4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMzpcdGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gNjI0Olx0XHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG4gNjI1Olx0XHRcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXG4gNjI2Olx0e1xuIDYyNzpcdFx0aW50IHJldDtcbiA2Mjg6XHRcdGt2bV9wZm5fdCBoZm47XG4gNjI5Olx0XHRib29sIGlzX2h1Z2V0bGI7XG4gNjMwOlx0XHRib29sIHdyaXRhYmxlO1xuIDYzMTpcdFx0dW5zaWduZWQgaW50IHZtYV9wYWdlc2hpZnQ7XG4gNjMyOlx0XHRnZm5fdCBnZm4gPSBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNjMzOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiA2MzQ6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIDYzNTpcdFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X3BhZ2VfY2FjaGU7XG4gNjM2Olx0XHRib29sIGxvZ2dpbmcgPSBrdm1fc2xvdF9kaXJ0eV90cmFja19lbmFibGVkKG1lbXNsb3QpIFx1MDAyNlx1MDAyNlxuIDYzNzpcdFx0XHQgICAgICAgIShtZW1zbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKTtcbiA2Mzg6XHRcdHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzaXplLCBtbXVfc2VxO1xuIDYzOTpcdFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuIDY0MDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gNjQxOlx0XG4gNjQyOlx0XHRrdm1fcmlzY3ZfZ3N0YWdlX2luaXQoXHUwMDI2Z3N0YWdlLCBrdm0pO1xuIDY0MzpcdFxuIDY0NDpcdFx0LyogU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiBvdXRwdXQgbWFwcGluZyAqL1xuIDY0NTpcdFx0bWVtc2V0KG91dF9tYXAsIDAsIHNpemVvZigqb3V0X21hcCkpO1xuIDY0NjpcdFxuIDY0NzpcdFx0aWYgKGlzX3dyaXRlIFx1MDAyNlx1MDAyNiBsb2dnaW5nIFx1MDAyNlx1MDAyNlxuIDY0ODpcdFx0ICAgIGt2bV9yaXNjdl9tbXVfZGlydHlfbG9nX3dyaXRlX2ZhdWx0X2Zhc3Qoa3ZtLCBtZW1zbG90LCBncGEsIG91dF9tYXApKVxuIDY0OTpcdFx0XHRyZXR1cm4gMDtcbiA2NTA6XHRcbiA2NTE6XHRcdC8qIFdlIG5lZWQgbWluaW11bSBzZWNvbmQmIzQzO3RoaXJkIGxldmVsIHBhZ2VzICovXG4gNjUyOlx0XHRyZXQgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShwY2FjaGUsIGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpO1xuIDY1MzpcdFx0aWYgKHJldCkge1xuIDY1NDpcdFx0XHRrdm1fZXJyKFwmIzM0O0ZhaWxlZCB0byB0b3B1cCBHLXN0YWdlIGNhY2hlXFxuXCYjMzQ7KTtcbiA2NTU6XHRcdFx0cmV0dXJuIHJldDtcbiA2NTY6XHRcdH1cbiA2NTc6XHRcbiA2NTg6XHRcdG1tYXBfcmVhZF9sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIDY1OTpcdFxuIDY2MDpcdFx0dm1hID0gdm1hX2xvb2t1cChjdXJyZW50LVx1MDAzZW1tLCBodmEpO1xuIDY2MTpcdFx0aWYgKHVubGlrZWx5KCF2bWEpKSB7XG4gNjYyOlx0XHRcdGt2bV9lcnIoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgVk1BIGZvciBodmEgMHglbHhcXG5cJiMzNDssIGh2YSk7XG4gNjYzOlx0XHRcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4gNjY0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDY2NTpcdFx0fVxuIDY2NjpcdFxuIDY2NzpcdFx0aXNfaHVnZXRsYiA9IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpO1xuIDY2ODpcdFx0aWYgKGlzX2h1Z2V0bGIpXG4gNjY5Olx0XHRcdHZtYV9wYWdlc2hpZnQgPSBodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlX3ZtYSh2bWEpKTtcbiA2NzA6XHRcdGVsc2VcbiA2NzE6XHRcdFx0dm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7XG4gNjcyOlx0XHR2bWFfcGFnZXNpemUgPSAxVUxMIFx1MDAzY1x1MDAzYyB2bWFfcGFnZXNoaWZ0O1xuIDY3MzpcdFx0aWYgKGxvZ2dpbmcgfHwgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKSlcbiA2NzQ6XHRcdFx0dm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFO1xuIDY3NTpcdFx0ZWxzZSBpZiAoaXNfaHVnZXRsYilcbiA2NzY6XHRcdFx0dm1hX3BhZ2VzaXplID0gaHVnZXRsYl9tYXBwaW5nX3NpemUobWVtc2xvdCwgaHZhLCB2bWFfcGFnZXNpemUpO1xuIDY3NzpcdFxuIDY3ODpcdFx0LypcbiA2Nzk6XHRcdCAqIEZvciBodWdldGxiIG1hcHBpbmdzLCB2bWFfcGFnZXNpemUgbWlnaHQgaGF2ZSBiZWVuIHJlZHVjZWQgZnJvbSB0aGVcbiA2ODA6XHRcdCAqIFZNQSBzaXplIHRvIGEgc21hbGxlciBzYWZlIG1hcHBpbmcgc2l6ZS5cbiA2ODE6XHRcdCAqL1xuIDY4MjpcdFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXG4gNjgzOlx0XHRcdGdmbiA9IEFMSUdOX0RPV04oZ3BhLCB2bWFfcGFnZXNpemUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDY4NDpcdFxuIDY4NTpcdFx0LypcbiA2ODY6XHRcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcbiA2ODc6XHRcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcbiA2ODg6XHRcdCAqIGt2bS1cdTAwM2VtbXVfbG9jay5cbiA2ODk6XHRcdCAqXG4gNjkwOlx0XHQgKiBSZWx5IG9uIG1tYXBfcmVhZF91bmxvY2soKSBmb3IgYW4gaW1wbGljaXQgc21wX3JtYigpLCB3aGljaCBwYWlyc1xuIDY5MTpcdFx0ICogd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS5cbiA2OTI6XHRcdCAqL1xuIDY5MzpcdFx0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4gNjk0Olx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIDY5NTpcdFxuIDY5NjpcdFx0aWYgKHZtYV9wYWdlc2l6ZSAhPSBQVURfU0laRSBcdTAwMjZcdTAwMjZcbiA2OTc6XHRcdCAgICB2bWFfcGFnZXNpemUgIT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4gNjk4Olx0XHQgICAgdm1hX3BhZ2VzaXplICE9IFBBR0VfU0laRSkge1xuIDY5OTpcdFx0XHRrdm1fZXJyKFwmIzM0O0ludmFsaWQgVk1BIHBhZ2Ugc2l6ZSAweCVseFxcblwmIzM0Oywgdm1hX3BhZ2VzaXplKTtcbiA3MDA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzAxOlx0XHR9XG4gNzAyOlx0XG4gNzAzOlx0XHRoZm4gPSBfX2t2bV9mYXVsdGluX3BmbihtZW1zbG90LCBnZm4sIGlzX3dyaXRlID8gRk9MTF9XUklURSA6IDAsXG4gNzA0Olx0XHRcdFx0XHRcdTAwMjZ3cml0YWJsZSwgXHUwMDI2cGFnZSk7XG4gNzA1Olx0XHRpZiAoaGZuID09IEtWTV9QRk5fRVJSX0hXUE9JU09OKSB7XG4gNzA2Olx0XHRcdHNlbmRfc2lnX21jZWVycihCVVNfTUNFRVJSX0FSLCAodm9pZCBfX3VzZXIgKilodmEsXG4gNzA3Olx0XHRcdFx0XHR2bWFfcGFnZXNoaWZ0LCBjdXJyZW50KTtcbiA3MDg6XHRcdFx0cmV0dXJuIDA7XG4gNzA5Olx0XHR9XG4gNzEwOlx0XHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihoZm4pKVxuIDcxMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA3MTI6XHRcbiA3MTM6XHRcdC8qXG4gNzE0Olx0XHQgKiBJZiBsb2dnaW5nIGlzIGFjdGl2ZSB0aGVuIHdlIGFsbG93IHdyaXRhYmxlIHBhZ2VzIG9ubHlcbiA3MTU6XHRcdCAqIGZvciB3cml0ZSBmYXVsdHMuXG4gNzE2Olx0XHQgKi9cbiA3MTc6XHRcdGlmIChsb2dnaW5nIFx1MDAyNlx1MDAyNiAhaXNfd3JpdGUpXG4gNzE4Olx0XHRcdHdyaXRhYmxlID0gZmFsc2U7XG4gNzE5Olx0XG4gNzIwOlx0XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gNzIxOlx0XG4gNzIyOlx0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnkoa3ZtLCBtbXVfc2VxKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBrdm1fcmlzY3ZfbW11X21hcGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGt2bV9yaXNjdl9tbXVfbWFwYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyBhIGBtZW1zZXQob3V0X21hcCwgMCwgc2l6ZW9mKCpvdXRfbWFwKSk7YC4gIEFscmlnaHQsIHNvIHRoZSBvdXRwdXQgbWFwLCBgb3V0X21hcGAsIGlzIGdldHRpbmcgemVyb2VkIG91dCByaWdodCBhdCB0aGUgc3RhcnQuICBUaGF0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIGluaXRpYWxpemF0aW9uLCBidXQgaXQgbWFrZXMgbWUgdGhpbmsuLi4gaWYgYG91dF9tYXBgIGlzIGJlaW5nICpwYXNzZWQqIGludG8gdGhlIGZ1bmN0aW9uLCBpdCYjMzk7cyBiZWluZyBvdmVyd3JpdHRlbi4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNhY2hpbmcgYW5kIHNoYXJpbmcgZXhpc3RpbmcgTU1VIHN0YXRlLgoKTm93LCBJIHNlZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgYmVpbmcgY2FsbGVkIHNvbWV3aGVyZSBpbnNpZGUgYGt2bV9yaXNjdl9tbXVfbWFwYC4gIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgTU1VIHRyYW5zbGF0aW9uIHdvcmsgaXMgcHJvYmFibHkgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHplcm9lZC1vdXQgYG91dF9tYXBgIGludGVyYWN0cyB3aXRoIHRoZXNlIHBhZ2UgbWFwcGluZ3MuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGF0IGBvdXRfbWFwYCB2YXJpYWJsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gNzI0Olx0XG4gNzI1Olx0XHQvKlxuIDcyNjpcdFx0ICogQ2hlY2sgaWYgd2UgYXJlIGJhY2tlZCBieSBhIFRIUCBhbmQgdGh1cyB1c2UgYmxvY2sgbWFwcGluZyBpZlxuIDcyNzpcdFx0ICogcG9zc2libGUuIEh1Z2V0bGIgbWFwcGluZ3MgYWxyZWFkeSBzZWxlY3RlZCB0aGVpciB0YXJnZXQgc2l6ZSBhYm92ZSxcbiA3Mjg6XHRcdCAqIHNvIGRvIG5vdCBwcm9tb3RlIHRoZW0gdGhyb3VnaCB0aGUgVEhQIGhlbHBlci5cbiA3Mjk6XHRcdCAqL1xuIDczMDpcdFx0aWYgKCFsb2dnaW5nIFx1MDAyNlx1MDAyNiAhaXNfaHVnZXRsYiBcdTAwMjZcdTAwMjYgdm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSlcbiA3MzE6XHRcdFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcdTAwMjZoZm4sIFx1MDAyNmdwYSk7XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAod3JpdGFibGUpIHtcbiA3MzQ6XHRcdFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xuIDczNTpcdFx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiA3MzY6XHRcdFx0XHRcdFx0XHR2bWFfcGFnZXNpemUsIGZhbHNlLCB0cnVlLCBvdXRfbWFwKTtcbiA3Mzc6XHRcdH0gZWxzZSB7XG4gNzM4Olx0XHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIDczOTpcdFx0XHRcdFx0XHRcdHZtYV9wYWdlc2l6ZSwgdHJ1ZSwgdHJ1ZSwgb3V0X21hcCk7XG4gNzQwOlx0XHR9XG4gNzQxOlx0XG4gNzQyOlx0XHRpZiAocmV0KVxuIDc0MzpcdFx0XHRrdm1fZXJyKFwmIzM0O0ZhaWxlZCB0byBtYXAgaW4gRy1zdGFnZVxcblwmIzM0Oyk7XG4gNzQ0Olx0XG4gNzQ1Olx0b3V0X3VubG9jazpcbiA3NDY6XHRcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsIHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FRVhJU1QsIHdyaXRhYmxlKTtcbiA3NDc6XHRcdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIDc0ODpcdFx0cmV0dXJuIHJldDtcbiA3NDk6XHR9XG4gNzUwOlx0XG4gNzUxOlx0bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDc1MjpcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4gNzUzOlx0e1xuIDc1NDpcdFx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG4gNzU1Olx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuIDc1NjpcdFx0dW5zaWduZWQgbG9uZyBtYXBfc2l6ZTtcbiA3NTc6XHRcdHVuc2lnbmVkIGxvbmcgaHZhO1xuIDc1ODpcdFx0Z3BhX3QgZW5kO1xuIDc1OTpcdFx0Z2ZuX3QgZ2ZuO1xuIDc2MDpcdFx0aW50IHJldDtcbiA3NjE6XHRcbiA3NjI6XHRcdGdmbiA9IGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKTtcbiA3NjM6XHRcdG1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuIDc2NDpcdFx0aWYgKCFtZW1zbG90KVxuIDc2NTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3NjY6XHRcbiA3Njc6XHRcdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdF9wcm90KG1lbXNsb3QsIGdmbiwgTlVMTCk7XG4gNzY4Olx0XHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxuIDc2OTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3NzA6XHRcbiA3NzE6XHRcdGZvciAoOzspIHtcbiA3NzI6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIDc3MzpcdFx0XHRcdHJldHVybiAtRUlOVFI7XG4gNzc0Olx0XG4gNzc1Olx0XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIDc3NjpcdFx0XHRcdHJldHVybiAtRUlPO1xuIDc3NzpcdFxuIDc3ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA3Nzk6XHRcdFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcdTAwMjZvdXRfbWFwKTtcbiA3ODA6XHRcdFx0aWYgKHJldClcbiA3ODE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDc4MjpcdFxuIDc4MzpcdFx0XHRpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpXG4gNzg0Olx0XHRcdFx0YnJlYWs7XG4gNzg1Olx0XHR9XG4gNzg2Olx0XG4gNzg3Olx0XHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xuIDc4ODpcdFx0ZW5kID0gQUxJR05fRE9XTihyYW5nZS1cdTAwM2VncGEsIG1hcF9zaXplKSAmIzQzOyBtYXBfc2l6ZTtcbiA3ODk6XHRcbiA3OTA6XHRcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4gNzkxOlx0fVxuIDc5MjpcdFxuIDc5MzpcdGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4gNzk0Olx0e1xuIDc5NTpcdFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuIDc5NjpcdFxuIDc5NzpcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLnBnZCAhPSBOVUxMKSB7XG4gNzk4Olx0XHRcdGt2bV9lcnIoXCYjMzQ7a3ZtX2FyY2ggYWxyZWFkeSBpbml0aWFsaXplZD9cXG5cJiMzNDspO1xuIDc5OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MDA6XHRcdH1cbiA4MDE6XHRcbiA4MDI6XHRcdHBnZF9wYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyxcbiA4MDM6XHRcdFx0XHQgICAgICAgZ2V0X29yZGVyKGt2bV9yaXNjdl9nc3RhZ2VfcGdkX3NpemUpKTtcbiA4MDQ6XHRcdGlmICghcGdkX3BhZ2UpXG4gODA1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgwNjpcdFx0a3ZtLVx1MDAzZWFyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTtcbiA4MDc6XHRcdGt2bS1cdTAwM2VhcmNoLnBnZF9waHlzID0gcGFnZV90b19waHlzKHBnZF9wYWdlKTtcbiA4MDg6XHRcdGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMgPSBrdm1fcmlzY3ZfZ3N0YWdlX21heF9wZ2RfbGV2ZWxzO1xuIDgwOTpcdFx0a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xuIDgxMDpcdFxuIDgxMTpcdFx0cmV0dXJuIDA7XG4gODEyOlx0fVxuIDgxMzpcdFxuIDgxNDpcdHZvaWQga3ZtX3Jpc2N2X21tdV9mcmVlX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4gODE1Olx0e1xuIDgxNjpcdFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuIDgxNzpcdFx0dm9pZCAqcGdkID0gTlVMTDtcbiA4MTg6XHRcdGJvb2wgZmx1c2ggPSBmYWxzZTtcbiA4MTk6XHRcbiA4MjA6XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiA4MjE6XHRcdGlmIChrdm0tXHUwMDNlYXJjaC5wZ2QpIHtcbiA4MjI6XHRcdFx0a3ZtX3Jpc2N2X2dzdGFnZV9pbml0KFx1MDAyNmdzdGFnZSwga3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAsIGFuZCBpdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgY2FzZSB3aGVyZSB0aGUgcGFnZSBpcyAqYWxyZWFkeSogbWFwcGVkLiBUaGUgb3JpZ2luYWwgY29kZSBkaWRuJiMzOTt0IGhhbmRsZSB0aGlzIHNjZW5hcmlvLCBidXQgdGhlIGFkZGVkIGxpbmVzIGluZGljYXRlIHRoYXQgaWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgKGhwYSkgb2YgdGhlIHBhZ2UgYWxpZ25lZCBkb3duIHRvIHRoZSBwYWdlIHNpemUgbWF0Y2hlcyB0aGUgYWxpZ25lZC1kb3duIHBoeXNpY2FsIGFkZHJlc3MgZGVyaXZlZCBmcm9tIHRoZSBwYWdlIHRhYmxlIGVudHJ5LCB3ZSBub3cgcG9wdWxhdGUgYG91dF9tYXBgLiBTcGVjaWZpY2FsbHksIGl0IHNldHMgYG91dF9tYXAtJmd0O2FkZHJgLCBgb3V0X21hcC0mZ3Q7bGV2ZWxgLCBhbmQgYG91dF9tYXAtJmd0O3B0ZWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgYXZvaWRzIHVubmVjZXNzYXJ5IHJlLW1hcHBpbmdzIG9yLCBwb3NzaWJseSwgaW5jb3JyZWN0IG1hcHBpbmdzLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgKmRvZXMqIGBvdXRfbWFwYCBnZXQgc2VudCB0byB1c2Vyc3BhY2U/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZmlndXJlIG91dC4KCk15IGludHVpdGlvbiBzYXlzIHRoYXQgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHByZS1mYXVsdCBzaXR1YXRpb24sIHRoZW4gYG91dF9tYXBgIHByb2JhYmx5IGlzIG5vdCBzZW50IGRpcmVjdGx5IHRvIHVzZXJzcGFjZTsgaG93ZXZlciwgdGhlIGluZm9ybWF0aW9uIGluIGBvdXRfbWFwYCBtYXkgYmUgdXNlZCB0byByZXNwb25kIHRvIGEgdXNlcnNwYWNlIHJlcXVlc3QsIG1heWJlIGluIGEgbWFubmVyIHRoYXQmIzM5O3MgdHJhbnNwYXJlbnQgdG8gdGhlIHVzZXJzcGFjZSBjYWxsZXIuIEkga25vdyB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGludm9sdmVkIGluIGEgcHJlLWZhdWx0LCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIGBrdm1fdmNwdV9pb2N0bF9wcmVfZmF1bHRfbWVtb3J5YCwgb3Igc29tZXRoaW5nIGxpa2UgaXQuIEkgc2hvdWxkIHZlcmlmeSB0aGUgY2FsbCBjaGFpbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgaW4gYG91dF9tYXBgIGlzIHVzZWQgZG93bnN0cmVhbS4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIHNlZSBob3cgdGhpcyBkYXRhIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3NTE6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUyLVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3OTc9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NDAtLyoqXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg0MTogKiBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKSAtLSBwcmUtZmF1bHQgYW5kIGxpbmsgZ21hcCBkYXQgdGFibGVzXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODU5LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NjEte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDE4LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNzAxPXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzE0Olx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxNS1cdCAqIGJlZm9yZSBrdm1fdGR4LVx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTA9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjE0Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1OC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXHRcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDMyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBrdm1fbWFpbi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDMzNC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3J1Y2lhbCBwYXJ0cyBvZiB0aGUgS1ZNIGFyY2hpdGVjdHVyZSwgaXQgY291bGQgYmUgdGhlIHBsYWNlIHRvIGZpbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBJJiMzOTttIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBwcm9ibGVtIGJ5IGRpZ2dpbmcgaW50byB0aGF0IHNlY3Rpb24gZGlyZWN0bHkuIEl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGlzc3VlIGlzIHByb2JhYmx5IGxvY2F0ZWQgaW4gYSByZWdpb24gb2YgY29kZSBuZWFyIGxpbmUgNDMzNC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzM0Olx0c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjQzMzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbjQzMzY6XHR7XG40MzM3Olx0XHRpbnQgaWR4O1xuNDMzODpcdFx0bG9uZyByO1xuNDMzOTpcdFx0dTY0IGZ1bGxfc2l6ZTtcbjQzNDA6XHRcbjQzNDE6XHRcdGlmIChyYW5nZS1cdTAwM2VmbGFncylcbjQzNDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzQzOlx0XG40MzQ0Olx0XHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VncGEpIHx8XG40MzQ1Olx0XHQgICAgIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VzaXplKSB8fFxuNDM0NjpcdFx0ICAgIHJhbmdlLVx1MDAzZWdwYSAmIzQzOyByYW5nZS1cdTAwM2VzaXplIFx1MDAzYz0gcmFuZ2UtXHUwMDNlZ3BhKVxuNDM0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzNDg6XHRcbjQzNDk6XHRcdHZjcHVfbG9hZCh2Y3B1KTtcbjQzNTA6XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuNDM1MTpcdFxuNDM1MjpcdFx0ZnVsbF9zaXplID0gcmFuZ2UtXHUwMDNlc2l6ZTtcbjQzNTM6XHRcdGRvIHtcbjQzNTQ6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG40MzU1Olx0XHRcdFx0ciA9IC1FSU5UUjtcbjQzNTY6XHRcdFx0XHRicmVhaztcbjQzNTc6XHRcdFx0fVxuNDM1ODpcdFxuNDM1OTpcdFx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbjQzNjA6XHRcdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbjQzNjE6XHRcdFx0XHRicmVhaztcbjQzNjI6XHRcbjQzNjM6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG40MzY0Olx0XHRcdFx0YnJlYWs7XG40MzY1Olx0XG40MzY2Olx0XHRcdHJhbmdlLVx1MDAzZXNpemUgLT0gcjtcbjQzNjc6XHRcdFx0cmFuZ2UtXHUwMDNlZ3BhICYjNDM7PSByO1xuNDM2ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjQzNjk6XHRcdH0gd2hpbGUgKHJhbmdlLVx1MDAzZXNpemUpO1xuNDM3MDpcdFxuNDM3MTpcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuNDM3MjpcdFx0dmNwdV9wdXQodmNwdSk7XG40MzczOlx0XG40Mzc0Olx0XHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgcGFnZSB3YXMgbWFwcGVkIHN1Y2Nlc3NmdWxseS4gICovXG40Mzc1Olx0XHRyZXR1cm4gZnVsbF9zaXplID09IHJhbmdlLVx1MDAzZXNpemUgPyByIDogMDtcbjQzNzY6XHR9XG40Mzc3Olx0I2VuZGlmXG40Mzc4Olx0XG40Mzc5Olx0c3RhdGljIGludCBrdm1fd2FpdF9mb3JfdmNwdV9vbmxpbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNDM4MDpcdHtcbjQzODE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuNDM4MjpcdFxuNDM4MzpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgKioKCkFscmlnaHQsIHNvIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4uLiB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IG1lbnRhbCBhbGFybSBiZWxscy4gSSBrbm93IHdoZXJlIHRoYXQgZnVuY3Rpb24gc2l0cyBpbiB0aGUgS1ZNIGNvZGViYXNlOyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaW9jdGxgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgY29ubmVjdGluZyB0aGUgZG90cy4gYGt2bV92Y3B1X2lvY3RsYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGEgd2hvbGUgcmFmdCBvZiBoeXBlcnZpc29yIHJlcXVlc3RzLCBlc3NlbnRpYWxseSB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGd1ZXN0IE9TJiMzOTtzIHVzZXJzcGFjZSBhbmQgdGhlIEtWTSBjb3JlJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlLgoKU28sIHRoaXMgbWVhbnMgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGJlaW5nIGludm9rZWQgKmR1cmluZyogYW4gSU9DVEwgY2FsbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgZmFpcmx5IGNsZWFyLiBJdCYjMzk7cyBsaWtlbHkgaGFuZGxpbmcgbWVtb3J5IGZhdWx0cyAqYmVmb3JlKiB0aGV5IGFyZSB0cnVseSByYWlzZWQgYnkgdGhlIGhhcmR3YXJlIE1NVS4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBwYXJ0IG9mIGEgcHJlLWVtcHRpdmUgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtLCBwb3RlbnRpYWxseSBhaW1pbmcgYXQgb3B0aW1pemluZyBwYWdlIGZhdWx0cywgZGVhbGluZyB3aXRoIG1lbW9yeSBiYWxsb29uaW5nIG9wZXJhdGlvbnMsIG9yIGltcGxlbWVudGluZyBzb21lIGZvcm0gb2YgbWVtb3J5IHByb3RlY3Rpb24vdmlydHVhbGl6YXRpb24uIEnigJlkIGd1ZXNzIGl0IGlzIHdvcmtpbmcgd2l0aCBzb21lIGZvcm0gb2YgcHJlLWVtcHRpdmUgbWVtb3J5IGZhdWx0LCBsaWtlbHkgdG8gaW1wcm92ZSB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiB0aGUgZ3Vlc3QgaW4gc29tZSB3YXkuCgpJJiMzOTtkIHdhbnQgdG8gcXVpY2tseSBjaGVjayB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLCB0byBrbm93IHdoYXQgc3BlY2lmaWNhbGx5IGlzIHRoZSB0eXBlIG9mIGZhdWx0IGl0JiMzOTtzIGFudGljaXBhdGluZy4gQWxzbywgaXTigJlkIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgKndoeSogdGhlIGZhdWx0IGlzIGJlaW5nIHByZS1lbXB0ZWQgYW5kIGhvdyBLVk0gaXMgaGFuZGxpbmcgdGhpcyBwb3RlbnRpYWwgZ3Vlc3QtbGV2ZWwgZmF1bHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGFuZCBkZXRlcm1pbmUgYW55IGFzc29jaWF0ZWQgb3B0aW1pemF0aW9ucy4gSSYjMzk7ZCBkZWZpbml0ZWx5IHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udHJvbCBmbG93IHRvIHNlZSB3aGVuIGl0JiMzOTtzIGNhbGxlZCBhbmQgdGhlIHR5cGljYWwgd29ya2xvYWQuIEEgcXVpY2sgZ3JlcCBvZiB0aGUgY29kZSBiYXNlIHdpbGwgY2VydGFpbmx5IGlsbHVtaW5hdGUgdGhpbmdzIG1vcmUgcXVpY2tseS4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzNS1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MDY9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVx0XHRcdGJyZWFrO1xudmlydC9rdm0va3ZtX21haW4uYzo0NjM5Olx0XHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcdTAwMjZyYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NDAtXHRcdC8qIFBhc3MgYmFjayBsZWZ0b3ZlciByYW5nZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBrdm1fdmNwdV9pb2N0bGAgKGNpcmNhIGxpbmUgNDYzOCkqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBrdm1fdmNwdV9pb2N0bGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0NjM4IGluIHRoZSBzb3VyY2UuIEdpdmVuIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG90ZW50aWFsIGlzc3VlLCBJIHN1c3BlY3QgdGhhdCB0aGUgY3JpdGljYWwgZGF0YSBpcyBwcm9jZXNzZWQgaW4gb3IgYXJvdW5kIHRoYXQgbGluZS4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIHByZXZpb3VzIGNvbnRleHQsIHRoYXQgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgYSBjZXJ0YWluIGluc3RydWN0aW9uIG9yIHNlcmllcyBvZiBpbnN0cnVjdGlvbnMgcmVsYXRlZCB0byB0aGUgdmlydHVhbCBDUFUgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGhhbmRsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgZnVuY3Rpb24gdG8gY29uZmlybSB0aGF0IG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGVycm9yIGNvZGVzIGFuZCB0aGUgZGF0YSBiZWluZyBwYXNzZWQgaW4gdGhlIGlvY3RsIGNvbW1hbmRzLiBMZXQgbWUgZG91YmxlIGNoZWNrIGlmIEkmIzM5O20gdGhpbmtpbmcgb2YgdGhlIHJpZ2h0IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzMDpcdFx0XHRicmVhaztcbjQ2MzE6XHRcdH1cbjQ2MzI6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbjQ2MzM6XHRcdGNhc2UgS1ZNX1BSRV9GQVVMVF9NRU1PUlk6IHtcbjQ2MzQ6XHRcdFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlO1xuNDYzNTpcdFxuNDYzNjpcdFx0XHRyID0gLUVGQVVMVDtcbjQ2Mzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnJhbmdlLCBhcmdwLCBzaXplb2YocmFuZ2UpKSlcbjQ2Mzg6XHRcdFx0XHRicmVhaztcbjQ2Mzk6XHRcdFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXHUwMDI2cmFuZ2UpO1xuNDY0MDpcdFx0XHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXG40NjQxOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2cmFuZ2UsIHNpemVvZihyYW5nZSkpKVxuNDY0MjpcdFx0XHRcdHIgPSAtRUZBVUxUO1xuNDY0MzpcdFx0XHRicmVhaztcbjQ2NDQ6XHRcdH1cbjQ2NDU6XHQjZW5kaWZcbjQ2NDY6XHRcdGRlZmF1bHQ6XG40NjQ3Olx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuNDY0ODpcdFx0fVxuNDY0OTpcdG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrcyBpbiBLVk0gUHJlLUZhdWx0IE1lbW9yeSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGNhc2UgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoZSBpbml0aWFsIGNvbmNlcm4gd2FzIHRoYXQgdGhlIGByYW5nZWAgc3RydWN0LCBhZnRlciBiZWluZyBwcm9jZXNzZWQgYnkgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdoZW4gY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gSG93ZXZlciwgb24gY2xvc2VyIGluc3BlY3Rpb24sIGl0JiMzOTtzIGNsZWFyIHRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2Ugd2l0aCBgY29weV9mcm9tX3VzZXIoJmFtcDtyYW5nZSwgYXJncCwgc2l6ZW9mKHJhbmdlKSlgICpiZWZvcmUqIGl0JiMzOTtzIGV2ZW4gcGFzc2VkIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbi4gU28sIHRoZSBvbmx5IGRhdGEgcmV0dXJuZWQgdG8gdXNlciBzcGFjZSBpbiBgcmFuZ2VgIGlzIHRoZSB1cGRhdGVkICYjMzk7bGVmdG92ZXImIzM5OyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBkYXRhLiBUaGF0JiMzOTtzIGdvb2Q7IHRoZSBpbml0aWFsIHdvcnJ5IGlzIGFkZHJlc3NlZC4KCk15IG5leHQgbGluZSBvZiBpbnZlc3RpZ2F0aW9uIGNlbnRlcmVkIG9uIGBvdXRfbWFwYCB3aXRoaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFRoaXMgc3RydWN0IGlzIHBhc3NlZCBhcm91bmQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZXR1cm5lZC4gVGhlIGNvZGUgc2hvd3MgdGhhdCBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyAoYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2ApLiBUaGVuIGl0IGlzIGFnYWluIHplcm9lZCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIHdpdGggYG1lbXNldChvdXRfbWFwLCAwLCBzaXplb2YoKm91dF9tYXApKWAsICpiZWZvcmUqIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBwb3B1bGF0ZXMgc29tZSBvZiBpdHMgbWVtYmVycy4KClRoZSBsb2dpYyB3aXRoaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBlaXRoZXIgc2V0cyBgb3V0X21hcC5wdGVgLCBhbG9uZyB3aXRoIG90aGVyIG1lbWJlcnMsIG9yIHJldHVybnMgd2l0aG91dCBzZXR0aW5nIGFueSBvZiB0aG9zZSB2YWx1ZXMuIFRoZSBsb29wIGluIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGNvbnRpbnVlcyBpZiBgb3V0X21hcC5wdGVgIGlzIG5vdCBzZXQ7IG90aGVyd2lzZSwgaXQgYnJlYWtzLiBJbXBvcnRhbnRseSwgYG91dF9tYXAubGV2ZWxgIGlzIHVzZWQgKmFmdGVyKiB0aGlzLiBTaW5jZSBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMgaW4gYG91dF9tYXBgIHdpbGwgcmVhZCB6ZXJvLiBObyBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLgoKVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoZSBgb3V0X21hcGAgaXMgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIGFueSBmaWVsZHMgYXJlIGNvbmRpdGlvbmFsbHkgc2V0IGJhc2VkIG9uIHRoZSBtYXBwaW5nIHByb2Nlc3MuIFRoaXMgY2xlYXIgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgaXMga2V5LiBJJiMzOTttIG5vdyBjb25maWRlbnQgdGhhdCB0aGVyZSYjMzk7cyBubyBwYXRoIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGBvdXRfbWFwYCB0byBsZWFrIGJhY2sgdG8gdXNlciBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBrdm1fZ3N0YWdlX21hcHBpbmdgKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ2AgYWN0dWFsbHkgKmlzKi4gVGhpcyBzb3VuZHMgbGlrZSBhIGtleSBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBsYXllciwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZ3Vlc3Qgc3RhZ2UgdGFibGUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byBwaW5wb2ludCBpdHMgZXhhY3QgbG9jYXRpb24gaW4gdGhlIEtWTSBzb3VyY2UgY29kZS4gS25vd2luZyBpdHMgc3RydWN0dXJlIHdpbGwgaW5mb3JtIGhvdyB0aGUgdmlydHVhbGl6YXRpb24gc3lzdGVtIGhhbmRsZXMgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIGlmIGl04oCZcyBpbiBhIGhlYWRlciBmaWxlLCBhbmQgSSBleHBlY3QgaXQgaXMsIHByb2JhYmx5IG5lc3RlZCB3aXRoaW4gYSBjb3JlIEtWTSBpbmNsdWRlIGRpcmVjdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggdG8gbG9jYXRlIHRoZSBkZWNsYXJhdGlvbiBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTEyPXN0cnVjdCBrdm1fZ3N0YWdlIHtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC0yMC1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjIxOnN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtMjItXHRncGFfdCBhZGRyO1xuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTUzPWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NldF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTU0LVx0XHRcdCAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaDo1NTpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm1hcCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC01Ni1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaD02MT1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTY0LVx0XHRcdCAgICAgIGJvb2wgcGFnZV9yZG9ubHksIGJvb2wgcGFnZV9leGVjLFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6NjU6XHRcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Ni1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0xND1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fbW11LmgtMTUtXHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDoxNjpcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0xNy1pbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0xNDI9aW50IGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMTQzLVx0XHRcdCAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzoxNDQ6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICptYXApXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0xNDUte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTIwNz1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIxMC1cdFx0XHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjIxMTpcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjEyLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz00MD1pbnQga3ZtX3Jpc2N2X21tdV9pb3JlbWFwKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBwaHlzX2FkZHJfdCBocGEsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTEtXHR9O1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NTI6XHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG1hcDtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTUzLVx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTU1Mj1zdGF0aWMgYm9vbCBrdm1fcmlzY3ZfbW11X2RpcnR5X2xvZ193cml0ZV9mYXVsdF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01NTQtXHRcdFx0XHRcdFx0ICAgICBncGFfdCBncGEsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo1NTU6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTU2LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyNC1cdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjYyNTpcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyNi17XG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NzUxPWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTMte1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzU0Olx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTUtXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE2PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTE4LXtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjE5Olx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBob3N0X21hcDtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTIwLVx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBHLVN0YWdlIG9uIFJJU0MtVioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgS1ZNIGd1ZXN0IHN0YWdlIG9uIFJJU0MtVi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oYCBoZWFkZXIuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGludGVyZXN0aW5nIGFyb3VuZCBsaW5lIDIxLCBsaWtlbHkgc29tZSBjcnVjaWFsIHN0cnVjdHVyZSBkZWZpbml0aW9uIG9yIG1hY3JvIHRoYXQgSSB3YW50IHRvIHJldmlldyBpbiBkZXRhaWwuIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIG9yIGhhbmRsZWQgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiB0aGF0IEkgd2FudCB0byBhbmFseXplLiBJJiMzOTttIGdvaW5nIGluIHdpdGggYSB0YXJnZXRlZCBhcHByb2FjaCB0byBxdWlja2x5IHBhcnNlIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0I2RlZmluZSBLVk1fR1NUQUdFX0ZMQUdTX0xPQ0FMXHRcdEJJVCgwKVxuICAxNjpcdFx0dW5zaWduZWQgbG9uZyB2bWlkO1xuICAxNzpcdFx0cGdkX3QgKnBnZDtcbiAgMTg6XHRcdHVuc2lnbmVkIGxvbmcgcGdkX2xldmVscztcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xuICAyMjpcdFx0Z3BhX3QgYWRkcjtcbiAgMjM6XHRcdHB0ZV90IHB0ZTtcbiAgMjQ6XHRcdHUzMiBsZXZlbDtcbiAgMjU6XHR9O1xuICAyNjpcdFxuICAyNzpcdCNpZmRlZiBDT05GSUdfNjRCSVRcbiAgMjg6XHQjZGVmaW5lIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0c1x0OVxuICAyOTpcdCNlbHNlXG4gIDMwOlx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcdDEwXG4gIDMxOlx0I2VuZGlmXG4gIDMyOlx0XG4gIDMzOlx0ZXh0ZXJuIHVuc2lnbmVkIGxvbmcga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVscztcbiAgMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBLVk0gUklTQy1WIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEtWTSBSSVNDLVYgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYC4gSSBzZWUgaXQgaGFzIHRoZSBzdGFuZGFyZCBgYWRkcmAsIGBwdGVgLCBhbmQgYGxldmVsYCBmaWVsZHMuIEdvb2QuIEkgbm90ZSB0aGF0IGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAgaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBhbHNvIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gaXQgb3V0LiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IGdhcmJhZ2UgbGVmdCBiZWhpbmQgdGhlcmUuIEdvb2QsIHdlJiMzOTtyZSBjb3ZlcmluZyBvdXIgYmFzZXMuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgdG8gYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAuIFRoaXMgb25lJiMzOTtzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBiZWluZyBjb3BpZWQgZnJvbSBhbmQgdG8gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGFsd2F5cyBhIHBvdGVudGlhbCBob3RzcG90IGZvciB2dWxuZXJhYmlsaXRpZXMuIEkgc2VlIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbjogYGdwYWAsIGBzaXplYCwgYGZsYWdzYCwgYW5kIHNvbWUgcGFkZGluZy4gSG1tLCB0aGUgcGFkZGluZy4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgY291bGQgZ2V0IHRyaWNreS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LCBvdGhlcndpc2Ugd2UgbWlnaHQgaGF2ZSBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvci4gVGltZSB0byBjaGVjayB0aGUga2VybmVsIGhlYWRlcnMgZm9yIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBMZXQmIzM5O3MgZ2V0IHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvbiB0aGF0IGRlZmluaXRpb24gZnJvbSBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gSSYjMzk7bGwgY29uZmlybSBob3cgdGhhdCBzdHJ1Y3QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCwgZXNwZWNpYWxseSB0aGF0IHBhZGRpbmcgZmllbGQsIGJlZm9yZSBwcm9jZWVkaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2My1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY0OiNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcdF9JT1dSKEtWTUlPLCAweGQ1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2NS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY2OnN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2Ny1cdF9fdTY0IGdwYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIEtWTSBIZWFkZXIgRGVmaW5pdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgS1ZNIGludGVyZmFjZSBkZXRhaWxzLCBzcGVjaWZpY2FsbHkgc29tZSBvZiB0aGUgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGh5cGVydmlzb3IuIEkgcmVtZW1iZXIgYSBzcGVjaWZpYyBhcmVhIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gZGVidWdnaW5nLCBzbyBsZXQmIzM5O3MganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYGluY2x1ZGUvdWFwaS9saW51eC9rdm0uaGAgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSAxNjY2IHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEkmIzM5O20gYmV0dGluZyB0aGF0IGFyZWEgcHJvYmFibHkgZGVmaW5lcyBzb21ldGhpbmcgY3J1Y2lhbCB0byB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLiBJIHdpbGwgc2VlIGlmIHRoYXQgaXMgdGhlIGNvcnJlY3QgZW50cnlwb2ludCBhbmQgd29yayBteSB3YXkgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgva3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NjY6XHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xuMTY2NzpcdFx0X191NjQgZ3BhO1xuMTY2ODpcdFx0X191NjQgc2l6ZTtcbjE2Njk6XHRcdF9fdTY0IGZsYWdzO1xuMTY3MDpcdFx0X191NjQgcGFkZGluZ1s1XTtcbjE2NzE6XHR9O1xuMTY3MjpcdFxuMTY3MzpcdCNlbmRpZiAvKiBfX0xJTlVYX0tWTV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTIwCgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDE0MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogS1ZNIFByZS1GYXVsdCBNZW1vcnkgZm9yIFJJU0MtVioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIG5ldyBLVk0gZmVhdHVyZSBmb3IgUklTQy1WOiBwcmUtZmF1bHRpbmcgbWVtb3J5LiBUaGUgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIHRoZSBga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHN0cnVjdCBpdHNlbGYgaXMgY29waWVkIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAuIENydWNpYWxseSwgdGhpcyBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nLiBTbywgYWxsIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBwYWRkaW5nLCBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB1c2VyLXByb3ZpZGVkIGRhdGEuIFRoZSBrZXJuZWwgdGhlbiB1cGRhdGVzIGBzaXplYCBhbmQgYGdwYWAuIFRoZSBlbnRpcmUgc3RydWN0LCBpbmNsdWRpbmcgdGhlIHBvdGVudGlhbGx5IHVwZGF0ZWQgZmllbGRzLCBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3RvX3VzZXJgLiBObyBrZXJuZWwgZGF0YSBpcyBsZWFrZWQsIHRoZSBwYWRkaW5nIHNpbXBseSByZXRhaW5zIGl0cyBvcmlnaW5hbCB2YWx1ZS4KCk5leHQsIHdlIGRpdmUgaW50byBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gIEkgc2VlIGEgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2AgaGVyZS4gIFRoYXQmIzM5O3MgZ29vZCwgYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uICBUaGUgY29kZSB0aGVuIGNhbGxzIGBrdm1fcmlzY3ZfbW11X21hcGAuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGxlYXZlIGBvdXRfbWFwYCBpbiBhIHBhcnRpYWwgaW5pdGlhbGl6ZWQgc3RhdGUuICBXZSBjYW4gc2VlIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCBleHBsaWNpdGx5IGBtZW1zZXRgcyBgb3V0X21hcGAgdG8gemVybyBhbmQgdGhlbiBjYWxscyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAsIHdoaWNoIHNldHMgYG91dF9tYXAubGV2ZWxgIGFuZCBgb3V0X21hcC5wdGVgIHRvZ2V0aGVyLgoKTGV0JiMzOTtzIGNoZWNrIGBrdm1fcmlzY3ZfbW11X21hcGAgaXRzZWxmLCBqdXN0IHRvIGJlIHN1cmUuICBZZXMsIGl0IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgc3RydWN0LCBzbyB0aGF0IGlzIHNhZmUuCgpUaGVuLCBhcmUgdGhlcmUgb3RoZXIgcGxhY2VzIHRoZSBzdHJ1Y3QgaXMgdXNlZD8gTGV0JiMzOTtzIHRyYWNlIGl0IGFuZCBkb3VibGUtY2hlY2suIE9rYXksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMgYGdmbmAsIGBtZW1zbG90YCwgYGh2YWAsIGByZXRgLCBgbWFwX3NpemVgLCBhbmQgYGVuZGAsIGFuZCB1c2VkIHZhcmlhYmxlcyBhcmUgYWxsIGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2l0aGluIHRoZSBmdW5jdGlvbi4gYG91dF9tYXBgIGlzIGluaXRpYWxpemVkLCB0aGUgb3RoZXJzIGFyZSBhc3NpZ25lZC4KClNlbGZ0ZXN0cyBhcmVuJiMzOTt0IGEgY29uY2VybiBmb3Iga2VybmVsIG1lbW9yeSBzYWZldHkgaW4gdGhlbXNlbHZlczsgdGhleSYjMzk7cmUgdXNlci1zcGFjZS4KClNvLCBpdCBzZWVtcyB0aGF0IHRoZXJlJiMzOTtzIG5vIHBhdGggdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLiAgVGhlIGNvZGUgY29uc2lzdGVudGx5IGluaXRpYWxpemVzIG9yIGFzc2lnbnMgYWxsIHZhcmlhYmxlcyBiZWZvcmUgdXNlLCBhbmQgYW55IHVzZXItcHJvdmlkZWQgcGFkZGluZyBpcyBleHBsaWNpdGx5IGNvcGllZC4gIFRoZSBwYXRjaCBqdXN0IGFkZHMgYSBuZXcgY2FwYWJpbGl0eSwgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAsIHdoaWNoIG1hcHMgbWVtb3J5IHBhZ2VzIGFoZWFkIG9mIHRpbWUuIEkgd291bGQgZXhwZWN0IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIGJ1ZyBkZXRlY3RvcnMgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd3JvbmcgcGFnZSBzaXplcywgb3IgbG9ja2luZyBwcm9ibGVtcy4gR2l2ZW4gdGhpcyBhbmFseXNpcywgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4uIFdlJiMzOTtyZSBnb29kIHdpdGggS0FTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIG9uIFJJU0MtVi4gSXQgYWRkcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB3aGljaCB1c2VzIGEgbG9jYWwgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcGAgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YC4gVGhlIGBvdXRfbWFwYCBpcyBmdXJ0aGVyIHplcm9lZCBvdXQgdmlhIGBtZW1zZXRgIGluIGBrdm1fcmlzY3ZfbW11X21hcGAgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZC4gVGhlIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHBhc3NlZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBjb3B5X2Zyb21fdXNlcmAgKGluY2x1ZGluZyBwYWRkaW5nKSBiZWZvcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGNvcGllZCBiYWNrLCBzbyB0aGVyZSBpcyBubyBrZXJuZWwgaW5mby1sZWFrLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBvbiBSSVNDLVYuIEl0IGFkZHMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2hpY2ggdXNlcyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXBgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAuIFRoZSBgb3V0X21hcGAgaXMgZnVydGhlciB6ZXJvZWQgb3V0IHZpYSBgbWVtc2V0YCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQuIFRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBwYXNzZWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgIChpbmNsdWRpbmcgcGFkZGluZykgYmVmb3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBjb3BpZWQgYmFjaywgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODoxNS4xMzY2MzI0MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQ1NDEwOTM3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgb24gUklTQy1WLiBJdCBhZGRzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdoaWNoIHVzZXMgYSBsb2NhbCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwYCBpbml0aWFsaXplZCB0byBgeyAwIH1gLiBUaGUgYG91dF9tYXBgIGlzIGZ1cnRoZXIgemVyb2VkIG91dCB2aWEgYG1lbXNldGAgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGUgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAgcGFzc2VkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYGNvcHlfZnJvbV91c2VyYCAoaW5jbHVkaW5nIHBhZGRpbmcpIGJlZm9yZSBiZWluZyBtb2RpZmllZCBhbmQgY29waWVkIGJhY2ssIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBmb3IgUklTQy1WIGJ5IGFkZGluZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkgYW5kIG1vZGlmeWluZyB0aGUgcGFnZSBtYXBwaW5nIGxvZ2ljIGluIGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UgYW5kIGt2bV9yaXNjdl9tbXVfbWFwLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBpb2N0bCBjb2RlIHBhdGhzIGFuZCBtb2RpZmllcyB0aGUgY29yZSBLVk0gTU1VIGxvZ2ljIG9uIFJJU0MtViwgd2hpY2ggaXMgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODoxNS4xMzY2NDA5NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzg2NDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdmYjhjZjJjNWQ4YzA4NGNhY2FkMTkzM2RjMjlhMDZlZjkxZTVlM2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG5pbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuQEAgLTI4LDYgKzI4LDcgQEAgY29uZmlnIEtWTVxcbiBcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiBcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuIFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbitcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiBcXHRzZWxlY3QgS1ZNX01NSU9cXG4gXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuIFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvdXRfbWFwLVxcdTAwM2VsZXZlbCwgdHJ1ZSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcXG4rXFx0XFx0XFx0b3V0X21hcC1cXHUwMDNlYWRkciA9IEFMSUdOX0RPV04oZ3BhLCBwYWdlX3NpemUpO1xcbitcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuK1xcdFxcdFxcdG91dF9tYXAtXFx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5pbmRleCA2MDM1YjVlYzk1MDM5Li4zM2Q0YmE0MDZiMGRlIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5AQCAtNzQ4LDYgKzc0OCw0OCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xcbitcXHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4rXFx0Z3BhX3QgZW5kO1xcbitcXHRnZm5fdCBnZm47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVxcdTAwM2VncGEpO1xcbitcXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4rXFx0aWYgKCFtZW1zbG90KVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdF9wcm90KG1lbXNsb3QsIGdmbiwgTlVMTCk7XFxuK1xcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbitcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXFx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXFx1MDAyNm91dF9tYXApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKHB0ZV92YWwob3V0X21hcC5wdGUpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0bWFwX3NpemUgPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xcbitcXHRlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VncGEsIG1hcF9zaXplKSArIG1hcF9zaXplO1xcbitcXG4rXFx0cmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtXFx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVxcdTAwM2VncGEpO1xcbit9XFxuK1xcbiBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwZ2RfcGFnZTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXFxuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRjYXNlIEtWTV9DQVBfTVBfU1RBVEU6XFxuIFxcdGNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDpcXG4gXFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlk6XFxuIFxcdFxcdHIgPSAxO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZ2V0LXJlZy1saXN0XFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxcbitURVNUX0dFTl9QUk9HU19yaXNjdiArPSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gcnNlcV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG5AQCAtMTIsNiArMTIsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Zkc28vcHJvY2Vzc29yLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbiBcXG4rI2RlZmluZSBQQUdFX1NISUZUXFx0XFx0MTJcXG4rI2RlZmluZSBQQUdFX1NJWkVcXHRcXHRCSVRfVUxMKFBBR0VfU0hJRlQpXFxuK1xcbiAjZGVmaW5lIElOU05fT1BDT0RFX01BU0tcXHQweDAwN2NcXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFxcdDJcXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cXHQyOFxcbkBAIC0xMjcsNiArMTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGxcXG4gXFxuIHZvaWQgdm1faW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgZXhjZXB0aW9uX2hhbmRsZXJfZm4gaGFuZGxlcik7XFxuIFxcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXFxuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1xcdFxcdFxcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxcbisjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUXFx0XFx0XFx0NDhcXG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xcbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX01BU0tcXHRcXHRcXHQweDAwMDBGRjgwMDAwMDAwMDBVTExcXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVFxcdFxcdFxcdDM5XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uYjRkNDFhNDA3NTUzNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC00Myw2ICs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHtcXG4gXFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcXG4gXFx0UEdUQkxfTDJfSU5ERVhfTUFTSyxcXG4gXFx0UEdUQkxfTDNfSU5ERVhfTUFTSyxcXG4rXFx0UEdUQkxfTDRfSU5ERVhfTUFTSyxcXG4gfTtcXG4gXFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XFxuQEAgLTUwLDYgKzUxLDcgQEAgc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHtcXG4gXFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXFxuIFxcdFBHVEJMX0wyX0lOREVYX1NISUZULFxcbiBcXHRQR1RCTF9MM19JTkRFWF9TSElGVCxcXG4rXFx0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXFxuIH07XFxuIFxcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjA4OjE1Ljc3NTQ4NTc5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjExNjc3MzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VcIixcbiAgICBcImt2bV9yaXNjdl9tbXVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2ZiOGNmMmM1ZDhjMDg0Y2FjYWQxOTMzZGMyOWEwNmVmOTFlNWUzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDEzOjA4OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbmluZGV4IGVjMmNlZTBhMzllMDEuLjhhYzIwOWU4YWM4NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG5AQCAtMjgsNiArMjgsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4rXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuIFx0c2VsZWN0IEtWTV9NTUlPXG4gXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiBcdHNlbGVjdCBTQ0hFRF9JTkZPXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuaW5kZXggZTUwMDJjYjljYmVmMS4uNmJkOGI4ZmQ2Y2ViMiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuQEAgLTI4MCw2ICsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIFx0XHRcdFx0XHRcdCAgICBvdXRfbWFwLVx1MDAzZWxldmVsLCB0cnVlKTtcbiBcdFx0fSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHtcbiBcdFx0XHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XG4rXHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4rXHRcdFx0b3V0X21hcC1cdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XG4rXHRcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDYwMzViNWVjOTUwMzkuLjMzZDRiYTQwNmIwZGUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC03NDgsNiArNzQ4LDQ4IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtcbitcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4rXHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xuK1x0dW5zaWduZWQgbG9uZyBodmE7XG4rXHRncGFfdCBlbmQ7XG4rXHRnZm5fdCBnZm47XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2ZuID0gZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpO1xuK1x0bWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7XG4rXHRpZiAoIW1lbXNsb3QpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aHZhID0gZ2ZuX3RvX2h2YV9tZW1zbG90X3Byb3QobWVtc2xvdCwgZ2ZuLCBOVUxMKTtcbitcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbitcbitcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmIChwdGVfdmFsKG91dF9tYXAucHRlKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdG1hcF9zaXplID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAob3V0X21hcC5sZXZlbCAqIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0cyk7XG4rXHRlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZWdwYSwgbWFwX3NpemUpICsgbWFwX3NpemU7XG4rXG4rXHRyZXR1cm4gbWluX3QodTY0LCByYW5nZS1cdTAwM2VzaXplLCBlbmQgLSByYW5nZS1cdTAwM2VncGEpO1xuK31cbitcbiBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwZ2RfcGFnZTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92bS5jIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuaW5kZXggYTlmMDgzZmVlYjc2Ny4uNTg1MDBhMTliMzNiZCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbkBAIC0xODcsNiArMTg3LDcgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9NUF9TVEFURTpcbiBcdGNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDpcbiBcdGNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUc6XG4rXHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTIyNSw2ICsyMjUsNyBAQCBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBjb2FsZXNjZWRfaW9fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBnZXQtcmVnLWxpc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBtbXVfc3RyZXNzX3Rlc3RcbitURVNUX0dFTl9QUk9HU19yaXNjdiArPSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSByc2VxX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBzdGVhbF90aW1lXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTEyLDYgKzEyLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdmRzby9wcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4gXG4rI2RlZmluZSBQQUdFX1NISUZUXHRcdDEyXG4rI2RlZmluZSBQQUdFX1NJWkVcdFx0QklUX1VMTChQQUdFX1NISUZUKVxuK1xuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1x0MHgwMDdjXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFx0MlxuICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNXHQyOFxuQEAgLTEyNyw2ICsxMzAsOSBAQCB2b2lkIHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGludCB2ZWN0b3IsIGV4Y2VwdGlvbl9oYW5kbFxuIFxuIHZvaWQgdm1faW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgZXhjZXB0aW9uX2hhbmRsZXJfZm4gaGFuZGxlcik7XG4gXG4rLyogTDQgaW5kZXggQml0WzU2OjQ4XSAqL1xuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1x0XHRcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfU0hJRlRcdFx0XHQ0OFxuIC8qIEwzIGluZGV4IEJpdFs0NzozOV0gKi9cbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX01BU0tcdFx0XHQweDAwMDBGRjgwMDAwMDAwMDBVTExcbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX1NISUZUXHRcdFx0MzlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuaW5kZXggZGVkNTQyOWYzNDQ4My4uYjRkNDFhNDA3NTUzNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbkBAIC00Myw2ICs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHtcbiBcdFBHVEJMX0wxX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MMl9JTkRFWF9NQVNLLFxuIFx0UEdUQkxfTDNfSU5ERVhfTUFTSyxcbitcdFBHVEJMX0w0X0lOREVYX01BU0ssXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuQEAgLTUwLDYgKzUxLDcgQEAgc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHtcbiBcdFBHVEJMX0wxX0lOREVYX1NISUZULFxuIFx0UEdUQkxfTDJfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MM19JTkRFWF9TSElGVCxcbitcdFBHVEJMX0w0X0lOREVYX1NISUZULFxuIH07XG4gXG4gc3RhdGljIHU2NCBwdGVfaW5kZXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90IGd2YSwgaW50IGxldmVsKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDg6MTUuNzc1NDg3OTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczOTkxNTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIG9uIFJJU0MtVi4gSXQgbG9va3MgbGlrZSBpdCB0b3VjaGVzIHRoZSB1c3VhbCBzdXNwZWN0czogYEtjb25maWdgLCBgZ3N0YWdlLmNgLCBgbW11LmNgLCBhbmQgYHZtLmNgIHdpdGhpbiB0aGUgYGFyY2gvcmlzY3Yva3ZtL2AgZGlyZWN0b3J5LiBQbHVzIHNvbWUgc2VsZnRlc3RzLCBuYXR1cmFsbHkuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gdGhhdCdzIHRoZSBjb3JlIG9mIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHByb3ZpZGluZyB0aGUgUklTQy1WLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBwcmUtZmF1bHRpbmcgbWVtb3J5IGluIEtWTS4gSXQgYWxzbyBzZXRzIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpbiBgS2NvbmZpZ2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgS1ZNIGludGVncmF0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaG93IGRvZXMgdXNlcnNwYWNlIGFjY2VzcyB0aGlzPyBBaCwgcmlnaHQsIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoYXQgaW9jdGwgYmVjb21lcyBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBhZGRzIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIHRvIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBpbiBgYXJjaC9yaXNjdi9rdm0vdm0uY2AsIGNvbmZpcm1pbmcgdGhhdC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgYW5kIHRoaXMgaXMgUklTQy1WLCBzbyB0aGF0IHBhcnQgaXMgY2xlYXIuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnMgbm93OiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCAodGhlIG5ldyBvbmUpIGFuZCB0aGUgbW9kaWZpZWQgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzbid0IGRlY2xhcmVkIHN0YXRpYyBhbmQgaXMgcHJvcGVybHkgZXhwb3NlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IHRoZSBnZW5lcmljIEtWTSBjb2RlIHdoZW4gYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgIGlzIHNlbGVjdGVkLiBUaGF0IG1ha2VzIHNlbnNlLiBJJ2xsIGRvIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBlbnRpcmUgdHJlZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODoyMi41MTU0MDYzNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODMxMDE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQwLS8qKlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTcwMT1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTUtXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDg6MjQuMzAzNzIyMjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg3NjIzMjYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBLVk0gTWVtb3J5IEZhdWx0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgZmF1bHRzIGJlZm9yZSB0aGV5IGFjdHVhbGx5IGhhcHBlbiDigJMgdGhhdCBwcmUtZmF1bHQgc3RhZ2UuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpbiB0aGUgY29kZSwgYW5kIEkga25vdyB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJdCdzIGEgc3RhbmRhcmQgcGF0dGVybiwgcmlnaHQ/IExvdy1sZXZlbCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc3R1ZmYgYmVpbmcgaGFuZGxlZCBkb3duc3RyZWFtIGZyb20gdGhlIG1vcmUgZ2VuZXJhbCBLVk0gY29yZSBmdW5jdGlvbi5cblxuTGV0J3MgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCdzIGFjdHVhbGx5IGRvaW5nIGFuZCB3aGVyZSBleGFjdGx5IGl0IGZpdHMgaW4gdGhlIGZhdWx0IGhhbmRsaW5nIHBpcGVsaW5lLiBXaGF0IGFyZSB0aGUga2V5IHRoaW5ncyBpdCdzIHJlc3BvbnNpYmxlIGZvcj8gR290dGEgdHJhY2UgdGhhdCBjb2RlIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBwcmUtZmF1bHQgcm91dGluZSBpcyBpbnZva2VkLiBJcyBpdCByZWxhdGVkIHRvIHNwZWNpZmljIGd1ZXN0IG1lbW9yeSB0eXBlcywgb3IgcGFnZSB0YWJsZSBvcGVyYXRpb25zPyBHb3R0YSB6b29tIGluIGFuZCBnZXQgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODozMC4xNzk5NTgyMTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMTkyNjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NDMwOD1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0va3ZtX21haW4uYzo0MzM0OnN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxudmlydC9rdm0va3ZtX21haW4uYy00MzM1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQwNj1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzOC1cXHRcXHRcXHRicmVhaztcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2Mzk6XFx0XFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXFx1MDAyNnJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NDAtXFx0XFx0LyogUGFzcyBiYWNrIGxlZnRvdmVyIHJhbmdlLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODozMi4wMTE4OTIxMDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDUyNTMxOTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpcyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaW9jdGxgIHNwZWNpZmljYWxseSBmb3IgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2l0aGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGFyZSBoYW5kbGVkLiBBbmQgdGhlbiwgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaW4gYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgaW4gUklTQy1WIEtWTS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGd1ZXN0IHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBnaXZlbiBcImdzdGFnZVwiIGFuZCB0aGUgY29udGV4dCBvZiBwcmUtZmF1bHRpbmcuIExldCdzIGRpZyBpbnRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBub3c7IHRoYXQncyB3aGVyZSB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgcHJlLWZhdWx0aW5nIGxpa2VseSBjb21lIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjA4OjU2LjUzNzIxNDE5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxNzk5NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9NTc9Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3RyeV91cGRhdGVfcHRlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsIHUzMiBsZXZlbCxcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTYwLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjYxOmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjItXFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0xODY9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X2dzdGFnZV91cGRhdGVfcHRlX3Byb3Qoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgdTMyIGxldmVsLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA2LVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjIwNzppbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIwOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM0LVxcdFxcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3MzU6XFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM2LVxcdFxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNy1cXHR9IGVsc2Uge1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjczODpcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzktXFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDg6NTguNDI5MDIxOTk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0NjQ2MTk0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgS1ZNL1JJU0MtViBQYWdlIE1hcHBpbmcgRmxvdyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFnZSBtYXBwaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vUklTQy1WIGVudmlyb25tZW50LiBGcm9tIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGFuZCB0aGUgZmlyc3QgcGxhY2UgaXQncyBjYWxsZWQgZnJvbSBpcyBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGFzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBwcm9iYWJseSBoYW5kbGVzIHRoZSBhY3R1YWwgR3Vlc3QgU3RhZ2UgbWFwcGluZy4gTm93LCB3aGVyZSBpcyAqYGt2bV9yaXNjdl9tbXVfbWFwYCogYmVpbmcgY2FsbGVkIGZyb20/IEFoLCBsb29rcyBsaWtlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYWxzbyBsaWtlbHkgYGt2bV9yaXNjdl92Y3B1X2ZhdWx0YC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UnZCBuZWVkIHRvIG1hcCBwYWdlcyB3aGVuIHRoZXJlJ3MgYSBtZW1vcnkgYWNjZXNzIGZhdWx0IG9yIGR1cmluZyBwcmUtZmF1bHRpbmcgdG8gYW50aWNpcGF0ZSBmdXR1cmUgYWNjZXNzLiBUbyByZWFsbHkgZ2V0IGEgZ3Jhc3Agb24gdGhlIGNvbXBsZXRlIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGludG8gdGhlIGBrdm1fcmlzY3ZfbW11X21hcGAgZnVuY3Rpb24gaXRzZWxmLiBMZXQncyBzdGFydCB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgaXQgb3JjaGVzdHJhdGVzIHRoZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcyMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowOTo0OC44OTM2NDUzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0ODgzMjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfbW11X21hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0xMz12b2lkIGt2bV9yaXNjdl9tbXVfaW91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDoxNDppbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX21tdS5oLTE1LVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01NTI9c3RhdGljIGJvb2wga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MjItXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjIzOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI0LVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz03NTE9bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzc4LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc3OTpcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcXHUwMDI2b3V0X21hcCk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzgwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYz0xNj1zdGF0aWMgaW50IGdzdGFnZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTY2LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjY3OlxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIGZhdWx0X2FkZHIsIGh2YSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy02OC1cXHRcXHRcXHRcXHQodHJhcC1cXHUwMDNlc2NhdXNlID09IEVYQ19TVE9SRV9HVUVTVF9QQUdFX0ZBVUxUKSA/IHRydWUgOiBmYWxzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDk6NTAuNzQyNDkwMTc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNjg3MTE4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUklTQy1WIFBhZ2UgRmF1bHQgSGFuZGxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIEtWTSBSSVNDLVYsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgaXQncyBjZW50ZXJlZCBhcm91bmQgYSBuZXcgZmVhdHVyZSwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIE15IHByaW1hcnkgY29uY2VybiBpcyB0aGF0IGl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgY29yZSBwYWdlIGZhdWx0IGhhbmRsZXIsIGBrdm1fcmlzY3ZfbW11X21hcGAsIHNwZWNpZmljYWxseSBieSBhbHRlcmluZyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgdG8gcG9wdWxhdGUgYG91dF9tYXBgLiBUaGlzIGRlZmluaXRlbHkgaGFzIGZ1enppbmcgcG90ZW50aWFsIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIEFueSBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYXBwaW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHBhdGggbGlrZSBhIHBhZ2UgZmF1bHQgaGFuZGxlciwgd2FycmFudHMgaW1tZWRpYXRlIGFuZCB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5UaGUga2V5IHN5bWJvbHMgSSdsbCBiZSBmb2N1c2luZyBvbiBoZXJlIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG1haW4gaGFuZGxlciBga3ZtX3Jpc2N2X21tdV9tYXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIG5ldyBwcmUtZmF1bHQgbWVjaGFuaXNtIGludGVncmF0ZXMgaW50byB0aGUgZXhpc3RpbmcgcGFnZSBmYXVsdCBwcm9jZXNzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTG9va3MgbGlrZSBgS1ZNYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZW5zdXJlIGlzIGVuYWJsZWQuIEEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUgcGF0Y2ggY29uZmlybWVkIHRoYXQgYHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBhZGRlZCB0byBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBjcnVjaWFsIGZ1bmN0aW9ucyBhcmVuJ3QgaGlkZGVuIGJ5IGJlaW5nIGRlY2xhcmVkIGFzIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoZW0gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuIEdvb2QsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGluZGVlZCBhIHB1YmxpYyBmdW5jdGlvbiB3aXRoIGEgYGxvbmdgIHJldHVybiB0eXBlLiBBbmQgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGlzIGFuIGBpbnRgIGFuZCBub3Qgc3RhdGljLiBBbmQsIGZpbmFsbHksIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYW4gYGludGAgYXMgd2VsbCwgc28gbm8gaXNzdWVzIHRoZXJlLlxuXG5BbHJpZ2h0LCBJJ2xsIHJlY29yZCB0aGVzZSBmaW5kaW5ncy4gVGhpcyBwYXRjaCBkZW1hbmRzIHNvbWUgc2VyaW91cyBzY3J1dGlueS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNCwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDk6NTcuODExMjA2MTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA0OTA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGZvciBSSVNDLVYgYnkgYWRkaW5nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSBhbmQgbW9kaWZ5aW5nIHRoZSBwYWdlIG1hcHBpbmcgbG9naWMgaW4ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBhbmQga3ZtX3Jpc2N2X21tdV9tYXAuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGlvY3RsIGNvZGUgcGF0aHMgYW5kIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBNTVUgbG9naWMgb24gUklTQy1WLCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGZvciBSSVNDLVYgYnkgYWRkaW5nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSBhbmQgbW9kaWZ5aW5nIHRoZSBwYWdlIG1hcHBpbmcgbG9naWMgaW4ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBhbmQga3ZtX3Jpc2N2X21tdV9tYXAuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGlvY3RsIGNvZGUgcGF0aHMgYW5kIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBNTVUgbG9naWMgb24gUklTQy1WLCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjA5OjU3Ljg5MjI2NDM3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzg1NDUxMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDk6NTcuODkyODc2NDk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3MTc4NDgzNjQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgb24gUklTQy1WLiBJdCBhZGRzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdoaWNoIHVzZXMgYSBsb2NhbCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwYCBpbml0aWFsaXplZCB0byBgeyAwIH1gLiBUaGUgYG91dF9tYXBgIGlzIGZ1cnRoZXIgemVyb2VkIG91dCB2aWEgYG1lbXNldGAgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGUgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAgcGFzc2VkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYGNvcHlfZnJvbV91c2VyYCAoaW5jbHVkaW5nIHBhZGRpbmcpIGJlZm9yZSBiZWluZyBtb2RpZmllZCBhbmQgY29waWVkIGJhY2ssIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZmI4Y2YyYzVkOGMwODRjYWNhZDE5MzNkYzI5YTA2ZWY5MWU1ZTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICsyOCw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbitcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gXHRzZWxlY3QgS1ZNX01NSU9cbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IFNDSEVEX0lORk9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uMzNkNGJhNDA2YjBkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICs3NDgsNDggQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2xvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGh2YTtcbitcdGdwYV90IGVuZDtcbitcdGdmbl90IGdmbjtcbitcdGludCByZXQ7XG4rXG4rXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSk7XG4rXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcbitcdGlmICghbWVtc2xvdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuK1x0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0XHRyZXR1cm4gLUVJTlRSO1xuK1xuK1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXHUwMDI2b3V0X21hcCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0aWYgKHB0ZV92YWwob3V0X21hcC5wdGUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0bWFwX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTtcbitcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcbitcbitcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4rfVxuK1xuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbitcdGNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOlxuIFx0XHRyID0gMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGdldC1yZWctbGlzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS92ZHNvL3Byb2Nlc3Nvci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbiBcbisjZGVmaW5lIFBBR0VfU0hJRlRcdFx0MTJcbisjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4rXG4gI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLXHQweDAwN2NcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXHQyXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cdDI4XG5AQCAtMTI3LDYgKzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsXG4gXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcbiBcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXHRcdFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVFx0XHRcdDQ4XG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1x0XHRcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlRcdFx0XHQzOVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuK1x0UEdUQkxfTDRfSU5ERVhfTUFTSyxcbiB9O1xuIFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MMl9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wzX0lOREVYX1NISUZULFxuK1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowOTo1Ny44OTI4Nzk0MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM5OTUxNzQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBvbiBSSVNDLVYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IExldCdzIGJyZWFrIGl0IGRvd24uIEl0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBLY29uZmlnYCwgYGdzdGFnZS5jYCwgYG1tdS5jYCwgYHZtLmNgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBmZWF0dXJlIOKAkyBhbmQgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNjb3BlLCBub3RoaW5nIG9idmlvdXNseSBodWdlIHRoYXQganVtcHMgb3V0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMsIHNwZWNpZmljYWxseSBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgbmV3IGZ1bmN0aW9uIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQuIExvb2tzIGxpa2UgaXQncyBoYW5kbGluZyB0aGUgcHJlLWZhdWx0aW5nIG9mIG1lbW9yeSBmb3IgYSB2aXJ0dWFsIENQVS4gVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgY2FsbGVkIGFuZCBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrLlxuXG5JbnNpZGUgdGhlIG5ldyBmdW5jdGlvbiwgYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIGFuZCBwYXNzZWQgYXMgYSBwb2ludGVyIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgY29ycmVjdC4gSWYgdGhlIGluaXRpYWxpemF0aW9uIGlzIGluY29ycmVjdCwgdGhlbiBmdXp6aW5nIGJlY29tZXMgbXVjaCBtb3JlIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgbmV3IGZ1bmN0aW9uIGlzIGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBjb3VsZCBiZSBleHBsb2l0YWJsZSwgaWYgdGhlIG5ldyB2YXJpYWJsZSBgb3V0X21hcGAgaXNuJ3QgaW5pdGlhbGl6ZWQsIGlmIGl0IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGZ1bmN0aW9uLCB0aGlzIGNvdWxkIGJlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0aGF0IHdvdWxkIGJlIGRpc2NvdmVyZWQgd2l0aCBhIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga3ZtX3Jpc2N2X21tdV9tYXBgIGRvZXMgd2l0aCB0aGF0IHplcm9lZCBgb3V0X21hcGAgc3RydWN0LiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGt2bV9yaXNjdl9tbXVfbWFwYCBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgb3BlcmF0aW9uLCBLTVNBTiB3b3VsZCBsaWtlbHkgcGljayB1cCBhbnkgdXNlLWJlZm9yZS1pbml0aWFsaXphdGlvbiBpc3N1ZXMgaW4gdGhpcyBmdW5jdGlvbi4gSSdsbCBjaGVjayB0aGF0IGZ1bmN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjA3LjI5MjQwMDgxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3Njk3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9tbXVfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTU1Mj1zdGF0aWMgYm9vbCBrdm1fcmlzY3ZfbW11X2RpcnR5X2xvZ193cml0ZV9mYXVsdF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyMi1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo2MjM6aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MjQtXFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTc1MT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NzgtXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6Nzc5OlxcdFxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVxcdTAwM2VncGEsIGh2YSwgZmFsc2UsIFxcdTAwMjZvdXRfbWFwKTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03ODAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MDcuNTgwMTA2NTM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mjk1NjE0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGltcGxlbWVudGF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGt2bV9yaXNjdl9tbXVfbWFwKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpbnRlcmFjdHMgd2l0aCB0aGUgUklTQy1WIE1NVSBmb3IgbWVtb3J5IG1hcHBpbmcuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY29yZSBvZiB0cmFuc2xhdGluZyBndWVzdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcywgaGFuZGxpbmcgcGFnZSB0YWJsZSB3YWxrcywgYW5kIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBtYXBwaW5ncyB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZS4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUklTQy1WIHNwZWNpZmljIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zIGFuZCBob3cgaXQgbWlnaHQgaGFuZGxlIGRpZmZlcmVudCBtZW1vcnkgYWNjZXNzIHR5cGVzIGFuZCBwcm90ZWN0aW9uIGxldmVscy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBUTEIgaW52YWxpZGF0aW9ucyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb2hlcmVudC4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTU5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjExLjEwOTY3MTMwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIzLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMzpcXHRpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiA2MjQ6XFx0XFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG4gNjI1OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHRpbnQgcmV0O1xcbiA2Mjg6XFx0XFx0a3ZtX3Bmbl90IGhmbjtcXG4gNjI5OlxcdFxcdGJvb2wgaXNfaHVnZXRsYjtcXG4gNjMwOlxcdFxcdGJvb2wgd3JpdGFibGU7XFxuIDYzMTpcXHRcXHR1bnNpZ25lZCBpbnQgdm1hX3BhZ2VzaGlmdDtcXG4gNjMyOlxcdFxcdGdmbl90IGdmbiA9IGdwYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA2MzM6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDYzNDpcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIDYzNTpcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9wYWdlX2NhY2hlO1xcbiA2MzY6XFx0XFx0Ym9vbCBsb2dnaW5nID0ga3ZtX3Nsb3RfZGlydHlfdHJhY2tfZW5hYmxlZChtZW1zbG90KSBcXHUwMDI2XFx1MDAyNlxcbiA2Mzc6XFx0XFx0XFx0ICAgICAgICEobWVtc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKTtcXG4gNjM4OlxcdFxcdHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzaXplLCBtbXVfc2VxO1xcbiA2Mzk6XFx0XFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xcbiA2NDA6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcXHUwMDI2Z3N0YWdlLCBrdm0pO1xcbiA2NDM6XFx0XFxuIDY0NDpcXHRcXHQvKiBTZXR1cCBpbml0aWFsIHN0YXRlIG9mIG91dHB1dCBtYXBwaW5nICovXFxuIDY0NTpcXHRcXHRtZW1zZXQob3V0X21hcCwgMCwgc2l6ZW9mKCpvdXRfbWFwKSk7XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdFxcdGlmIChpc193cml0ZSBcXHUwMDI2XFx1MDAyNiBsb2dnaW5nIFxcdTAwMjZcXHUwMDI2XFxuIDY0ODpcXHRcXHQgICAga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChrdm0sIG1lbXNsb3QsIGdwYSwgb3V0X21hcCkpXFxuIDY0OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0LyogV2UgbmVlZCBtaW5pbXVtIHNlY29uZCt0aGlyZCBsZXZlbCBwYWdlcyAqL1xcbiA2NTI6XFx0XFx0cmV0ID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUocGNhY2hlLCBrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscyk7XFxuIDY1MzpcXHRcXHRpZiAocmV0KSB7XFxuIDY1NDpcXHRcXHRcXHRrdm1fZXJyKFxcXCJGYWlsZWQgdG8gdG9wdXAgRy1zdGFnZSBjYWNoZVxcXFxuXFxcIik7XFxuIDY1NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2NTY6XFx0XFx0fVxcbiA2NTc6XFx0XFxuIDY1ODpcXHRcXHRtbWFwX3JlYWRfbG9jayhjdXJyZW50LVxcdTAwM2VtbSk7XFxuIDY1OTpcXHRcXG4gNjYwOlxcdFxcdHZtYSA9IHZtYV9sb29rdXAoY3VycmVudC1cXHUwMDNlbW0sIGh2YSk7XFxuIDY2MTpcXHRcXHRpZiAodW5saWtlbHkoIXZtYSkpIHtcXG4gNjYyOlxcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byBmaW5kIFZNQSBmb3IgaHZhIDB4JWx4XFxcXG5cXFwiLCBodmEpO1xcbiA2NjM6XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhjdXJyZW50LVxcdTAwM2VtbSk7XFxuIDY2NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjY1OlxcdFxcdH1cXG4gNjY2OlxcdFxcbiA2Njc6XFx0XFx0aXNfaHVnZXRsYiA9IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpO1xcbiA2Njg6XFx0XFx0aWYgKGlzX2h1Z2V0bGIpXFxuIDY2OTpcXHRcXHRcXHR2bWFfcGFnZXNoaWZ0ID0gaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZV92bWEodm1hKSk7XFxuIDY3MDpcXHRcXHRlbHNlXFxuIDY3MTpcXHRcXHRcXHR2bWFfcGFnZXNoaWZ0ID0gUEFHRV9TSElGVDtcXG4gNjcyOlxcdFxcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXFx1MDAzY1xcdTAwM2Mgdm1hX3BhZ2VzaGlmdDtcXG4gNjczOlxcdFxcdGlmIChsb2dnaW5nIHx8ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSlcXG4gNjc0OlxcdFxcdFxcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcXG4gNjc1OlxcdFxcdGVsc2UgaWYgKGlzX2h1Z2V0bGIpXFxuIDY3NjpcXHRcXHRcXHR2bWFfcGFnZXNpemUgPSBodWdldGxiX21hcHBpbmdfc2l6ZShtZW1zbG90LCBodmEsIHZtYV9wYWdlc2l6ZSk7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdC8qXFxuIDY3OTpcXHRcXHQgKiBGb3IgaHVnZXRsYiBtYXBwaW5ncywgdm1hX3BhZ2VzaXplIG1pZ2h0IGhhdmUgYmVlbiByZWR1Y2VkIGZyb20gdGhlXFxuIDY4MDpcXHRcXHQgKiBWTUEgc2l6ZSB0byBhIHNtYWxsZXIgc2FmZSBtYXBwaW5nIHNpemUuXFxuIDY4MTpcXHRcXHQgKi9cXG4gNjgyOlxcdFxcdGlmICh2bWFfcGFnZXNpemUgPT0gUE1EX1NJWkUgfHwgdm1hX3BhZ2VzaXplID09IFBVRF9TSVpFKVxcbiA2ODM6XFx0XFx0XFx0Z2ZuID0gQUxJR05fRE9XTihncGEsIHZtYV9wYWdlc2l6ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LypcXG4gNjg2OlxcdFxcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcXG4gNjg3OlxcdFxcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcXG4gNjg4OlxcdFxcdCAqIGt2bS1cXHUwMDNlbW11X2xvY2suXFxuIDY4OTpcXHRcXHQgKlxcbiA2OTA6XFx0XFx0ICogUmVseSBvbiBtbWFwX3JlYWRfdW5sb2NrKCkgZm9yIGFuIGltcGxpY2l0IHNtcF9ybWIoKSwgd2hpY2ggcGFpcnNcXG4gNjkxOlxcdFxcdCAqIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuXFxuIDY5MjpcXHRcXHQgKi9cXG4gNjkzOlxcdFxcdG1tdV9zZXEgPSBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4gNjk0OlxcdFxcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRpZiAodm1hX3BhZ2VzaXplICE9IFBVRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuIDY5NzpcXHRcXHQgICAgdm1hX3BhZ2VzaXplICE9IFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuIDY5ODpcXHRcXHQgICAgdm1hX3BhZ2VzaXplICE9IFBBR0VfU0laRSkge1xcbiA2OTk6XFx0XFx0XFx0a3ZtX2VycihcXFwiSW52YWxpZCBWTUEgcGFnZSBzaXplIDB4JWx4XFxcXG5cXFwiLCB2bWFfcGFnZXNpemUpO1xcbiA3MDA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDcwMTpcXHRcXHR9XFxuIDcwMjpcXHRcXG4gNzAzOlxcdFxcdGhmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKG1lbXNsb3QsIGdmbiwgaXNfd3JpdGUgPyBGT0xMX1dSSVRFIDogMCxcXG4gNzA0OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ3cml0YWJsZSwgXFx1MDAyNnBhZ2UpO1xcbiA3MDU6XFx0XFx0aWYgKGhmbiA9PSBLVk1fUEZOX0VSUl9IV1BPSVNPTikge1xcbiA3MDY6XFx0XFx0XFx0c2VuZF9zaWdfbWNlZXJyKEJVU19NQ0VFUlJfQVIsICh2b2lkIF9fdXNlciAqKWh2YSxcXG4gNzA3OlxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2hpZnQsIGN1cnJlbnQpO1xcbiA3MDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDcwOTpcXHRcXHR9XFxuIDcxMDpcXHRcXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihoZm4pKVxcbiA3MTE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdC8qXFxuIDcxNDpcXHRcXHQgKiBJZiBsb2dnaW5nIGlzIGFjdGl2ZSB0aGVuIHdlIGFsbG93IHdyaXRhYmxlIHBhZ2VzIG9ubHlcXG4gNzE1OlxcdFxcdCAqIGZvciB3cml0ZSBmYXVsdHMuXFxuIDcxNjpcXHRcXHQgKi9cXG4gNzE3OlxcdFxcdGlmIChsb2dnaW5nIFxcdTAwMjZcXHUwMDI2ICFpc193cml0ZSlcXG4gNzE4OlxcdFxcdFxcdHdyaXRhYmxlID0gZmFsc2U7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnkoa3ZtLCBtbXVfc2VxKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MTEuMTA5ODExNDk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjU2NDc2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBga3ZtX3Jpc2N2X21tdV9tYXBgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBga3ZtX3Jpc2N2X21tdV9tYXBgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgYG1lbXNldChvdXRfbWFwLCAwLCBzaXplb2YoKm91dF9tYXApKTtgLiAgQWxyaWdodCwgc28gdGhlIG91dHB1dCBtYXAsIGBvdXRfbWFwYCwgaXMgZ2V0dGluZyB6ZXJvZWQgb3V0IHJpZ2h0IGF0IHRoZSBzdGFydC4gIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IG1ha2VzIG1lIHRoaW5rLi4uIGlmIGBvdXRfbWFwYCBpcyBiZWluZyAqcGFzc2VkKiBpbnRvIHRoZSBmdW5jdGlvbiwgaXQncyBiZWluZyBvdmVyd3JpdHRlbi4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNhY2hpbmcgYW5kIHNoYXJpbmcgZXhpc3RpbmcgTU1VIHN0YXRlLlxuXG5Ob3csIEkgc2VlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBiZWluZyBjYWxsZWQgc29tZXdoZXJlIGluc2lkZSBga3ZtX3Jpc2N2X21tdV9tYXBgLiAgVGhhdCdzIHdoZXJlIHRoZSByZWFsIE1NVSB0cmFuc2xhdGlvbiB3b3JrIGlzIHByb2JhYmx5IGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB6ZXJvZWQtb3V0IGBvdXRfbWFwYCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwYWdlIG1hcHBpbmdzLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoYXQgYG91dF9tYXBgIHZhcmlhYmxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MTYuNjM1NDYyNTIxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIzOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gNzI0OlxcdFxcbiA3MjU6XFx0XFx0LypcXG4gNzI2OlxcdFxcdCAqIENoZWNrIGlmIHdlIGFyZSBiYWNrZWQgYnkgYSBUSFAgYW5kIHRodXMgdXNlIGJsb2NrIG1hcHBpbmcgaWZcXG4gNzI3OlxcdFxcdCAqIHBvc3NpYmxlLiBIdWdldGxiIG1hcHBpbmdzIGFscmVhZHkgc2VsZWN0ZWQgdGhlaXIgdGFyZ2V0IHNpemUgYWJvdmUsXFxuIDcyODpcXHRcXHQgKiBzbyBkbyBub3QgcHJvbW90ZSB0aGVtIHRocm91Z2ggdGhlIFRIUCBoZWxwZXIuXFxuIDcyOTpcXHRcXHQgKi9cXG4gNzMwOlxcdFxcdGlmICghbG9nZ2luZyBcXHUwMDI2XFx1MDAyNiAhaXNfaHVnZXRsYiBcXHUwMDI2XFx1MDAyNiB2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKVxcbiA3MzE6XFx0XFx0XFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcXHUwMDI2aGZuLCBcXHUwMDI2Z3BhKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHdyaXRhYmxlKSB7XFxuIDczNDpcXHRcXHRcXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XFxuIDczNTpcXHRcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xcbiA3Mzc6XFx0XFx0fSBlbHNlIHtcXG4gNzM4OlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiA3Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHJldClcXG4gNzQzOlxcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byBtYXAgaW4gRy1zdGFnZVxcXFxuXFxcIik7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdG91dF91bmxvY2s6XFxuIDc0NjpcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCByZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FRVhJU1QsIHdyaXRhYmxlKTtcXG4gNzQ3OlxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIDc0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NDk6XFx0fVxcbiA3NTA6XFx0XFxuIDc1MTpcXHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDc1MjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4gNzUzOlxcdHtcXG4gNzU0OlxcdFxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcbiA3NTU6XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4gNzU2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XFxuIDc1NzpcXHRcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4gNzU4OlxcdFxcdGdwYV90IGVuZDtcXG4gNzU5OlxcdFxcdGdmbl90IGdmbjtcXG4gNzYwOlxcdFxcdGludCByZXQ7XFxuIDc2MTpcXHRcXG4gNzYyOlxcdFxcdGdmbiA9IGdwYV90b19nZm4ocmFuZ2UtXFx1MDAzZWdwYSk7XFxuIDc2MzpcXHRcXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4gNzY0OlxcdFxcdGlmICghbWVtc2xvdClcXG4gNzY1OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xcbiA3Njg6XFx0XFx0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcXG4gNzY5OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRcXHRmb3IgKDs7KSB7XFxuIDc3MjpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDc3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiA3NzQ6XFx0XFxuIDc3NTpcXHRcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gNzc2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA3Nzc6XFx0XFxuIDc3ODpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNzc5OlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVxcdTAwM2VncGEsIGh2YSwgZmFsc2UsIFxcdTAwMjZvdXRfbWFwKTtcXG4gNzgwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDc4MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODI6XFx0XFxuIDc4MzpcXHRcXHRcXHRpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpXFxuIDc4NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzg1OlxcdFxcdH1cXG4gNzg2OlxcdFxcbiA3ODc6XFx0XFx0bWFwX3NpemUgPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xcbiA3ODg6XFx0XFx0ZW5kID0gQUxJR05fRE9XTihyYW5nZS1cXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0cmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtXFx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVxcdTAwM2VncGEpO1xcbiA3OTE6XFx0fVxcbiA3OTI6XFx0XFxuIDc5MzpcXHRpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnBnZCAhPSBOVUxMKSB7XFxuIDc5ODpcXHRcXHRcXHRrdm1fZXJyKFxcXCJrdm1fYXJjaCBhbHJlYWR5IGluaXRpYWxpemVkP1xcXFxuXFxcIik7XFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODAwOlxcdFxcdH1cXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0cGdkX3BhZ2UgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPLFxcbiA4MDM6XFx0XFx0XFx0XFx0ICAgICAgIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7XFxuIDgwNDpcXHRcXHRpZiAoIXBnZF9wYWdlKVxcbiA4MDU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDgwNjpcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTtcXG4gODA3OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5wZ2RfcGh5cyA9IHBhZ2VfdG9fcGh5cyhwZ2RfcGFnZSk7XFxuIDgwODpcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscyA9IGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHM7XFxuIDgwOTpcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRyZXR1cm4gMDtcXG4gODEyOlxcdH1cXG4gODEzOlxcdFxcbiA4MTQ6XFx0dm9pZCBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkKHN0cnVjdCBrdm0gKmt2bSlcXG4gODE1OlxcdHtcXG4gODE2OlxcdFxcdHN0cnVjdCBrdm1fZ3N0YWdlIGdzdGFnZTtcXG4gODE3OlxcdFxcdHZvaWQgKnBnZCA9IE5VTEw7XFxuIDgxODpcXHRcXHRib29sIGZsdXNoID0gZmFsc2U7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiA4MjE6XFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5wZ2QpIHtcXG4gODIyOlxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcXHUwMDI2Z3N0YWdlLCBrdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMDoxNi42MzU1OTMwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg1MDE1NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAsIGFuZCBpdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgY2FzZSB3aGVyZSB0aGUgcGFnZSBpcyAqYWxyZWFkeSogbWFwcGVkLiBUaGUgb3JpZ2luYWwgY29kZSBkaWRuJ3QgaGFuZGxlIHRoaXMgc2NlbmFyaW8sIGJ1dCB0aGUgYWRkZWQgbGluZXMgaW5kaWNhdGUgdGhhdCBpZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyAoaHBhKSBvZiB0aGUgcGFnZSBhbGlnbmVkIGRvd24gdG8gdGhlIHBhZ2Ugc2l6ZSBtYXRjaGVzIHRoZSBhbGlnbmVkLWRvd24gcGh5c2ljYWwgYWRkcmVzcyBkZXJpdmVkIGZyb20gdGhlIHBhZ2UgdGFibGUgZW50cnksIHdlIG5vdyBwb3B1bGF0ZSBgb3V0X21hcGAuIFNwZWNpZmljYWxseSwgaXQgc2V0cyBgb3V0X21hcC1cdTAwM2VhZGRyYCwgYG91dF9tYXAtXHUwMDNlbGV2ZWxgLCBhbmQgYG91dF9tYXAtXHUwMDNlcHRlYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBhdm9pZHMgdW5uZWNlc3NhcnkgcmUtbWFwcGluZ3Mgb3IsIHBvc3NpYmx5LCBpbmNvcnJlY3QgbWFwcGluZ3MuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqZG9lcyogYG91dF9tYXBgIGdldCBzZW50IHRvIHVzZXJzcGFjZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuXG5cbk15IGludHVpdGlvbiBzYXlzIHRoYXQgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcHJlLWZhdWx0IHNpdHVhdGlvbiwgdGhlbiBgb3V0X21hcGAgcHJvYmFibHkgaXMgbm90IHNlbnQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlOyBob3dldmVyLCB0aGUgaW5mb3JtYXRpb24gaW4gYG91dF9tYXBgIG1heSBiZSB1c2VkIHRvIHJlc3BvbmQgdG8gYSB1c2Vyc3BhY2UgcmVxdWVzdCwgbWF5YmUgaW4gYSBtYW5uZXIgdGhhdCdzIHRyYW5zcGFyZW50IHRvIHRoZSB1c2Vyc3BhY2UgY2FsbGVyLiBJIGtub3cgdGhhdCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBpbnZvbHZlZCBpbiBhIHByZS1mYXVsdCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaW9jdGxfcHJlX2ZhdWx0X21lbW9yeWAsIG9yIHNvbWV0aGluZyBsaWtlIGl0LiBJIHNob3VsZCB2ZXJpZnkgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIGluIGBvdXRfbWFwYCBpcyB1c2VkIGRvd25zdHJlYW0uIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBzZWUgaG93IHRoaXMgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjQ4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MjIuOTIwNjEyOTExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg3MTA5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQwLS8qKlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTcwMT1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTUtXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MjQuNjA3NzMwMjYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Mzg2OTEyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBga3ZtX21haW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgdmlydC9rdm0va3ZtX21haW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MzM0LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcnVjaWFsIHBhcnRzIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCBpdCBjb3VsZCBiZSB0aGUgcGxhY2UgdG8gZmluZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBwcm9ibGVtIGJ5IGRpZ2dpbmcgaW50byB0aGF0IHNlY3Rpb24gZGlyZWN0bHkuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgaXMgcHJvYmFibHkgbG9jYXRlZCBpbiBhIHJlZ2lvbiBvZiBjb2RlIG5lYXIgbGluZSA0MzM0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjMxLjA0NjQyNDk0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzM0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzM0OlxcdHN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuNDMzNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuNDMzNjpcXHR7XFxuNDMzNzpcXHRcXHRpbnQgaWR4O1xcbjQzMzg6XFx0XFx0bG9uZyByO1xcbjQzMzk6XFx0XFx0dTY0IGZ1bGxfc2l6ZTtcXG40MzQwOlxcdFxcbjQzNDE6XFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VmbGFncylcXG40MzQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzNDM6XFx0XFxuNDM0NDpcXHRcXHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cXHUwMDNlZ3BhKSB8fFxcbjQzNDU6XFx0XFx0ICAgICFQQUdFX0FMSUdORUQocmFuZ2UtXFx1MDAzZXNpemUpIHx8XFxuNDM0NjpcXHRcXHQgICAgcmFuZ2UtXFx1MDAzZWdwYSArIHJhbmdlLVxcdTAwM2VzaXplIFxcdTAwM2M9IHJhbmdlLVxcdTAwM2VncGEpXFxuNDM0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MzQ4OlxcdFxcbjQzNDk6XFx0XFx0dmNwdV9sb2FkKHZjcHUpO1xcbjQzNTA6XFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuNDM1MTpcXHRcXG40MzUyOlxcdFxcdGZ1bGxfc2l6ZSA9IHJhbmdlLVxcdTAwM2VzaXplO1xcbjQzNTM6XFx0XFx0ZG8ge1xcbjQzNTQ6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuNDM1NTpcXHRcXHRcXHRcXHRyID0gLUVJTlRSO1xcbjQzNTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDM1NzpcXHRcXHRcXHR9XFxuNDM1ODpcXHRcXG40MzU5OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgcmFuZ2UpO1xcbjQzNjA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG40MzYxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQzNjI6XFx0XFxuNDM2MzpcXHRcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuNDM2NDpcXHRcXHRcXHRcXHRicmVhaztcXG40MzY1OlxcdFxcbjQzNjY6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXNpemUgLT0gcjtcXG40MzY3OlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VncGEgKz0gcjtcXG40MzY4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjQzNjk6XFx0XFx0fSB3aGlsZSAocmFuZ2UtXFx1MDAzZXNpemUpO1xcbjQzNzA6XFx0XFxuNDM3MTpcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuNDM3MjpcXHRcXHR2Y3B1X3B1dCh2Y3B1KTtcXG40MzczOlxcdFxcbjQzNzQ6XFx0XFx0LyogUmV0dXJuIHN1Y2Nlc3MgaWYgYXQgbGVhc3Qgb25lIHBhZ2Ugd2FzIG1hcHBlZCBzdWNjZXNzZnVsbHkuICAqL1xcbjQzNzU6XFx0XFx0cmV0dXJuIGZ1bGxfc2l6ZSA9PSByYW5nZS1cXHUwMDNlc2l6ZSA/IHIgOiAwO1xcbjQzNzY6XFx0fVxcbjQzNzc6XFx0I2VuZGlmXFxuNDM3ODpcXHRcXG40Mzc5OlxcdHN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG40MzgwOlxcdHtcXG40MzgxOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG40MzgyOlxcdFxcbjQzODM6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MzEuMDQ2ODIwOTQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2OTAzOTQxMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgKipcblxuQWxyaWdodCwgc28gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLi4uIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgbWVudGFsIGFsYXJtIGJlbGxzLiBJIGtub3cgd2hlcmUgdGhhdCBmdW5jdGlvbiBzaXRzIGluIHRoZSBLVk0gY29kZWJhc2U7IGl0J3MgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIGNvbm5lY3RpbmcgdGhlIGRvdHMuIGBrdm1fdmNwdV9pb2N0bGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBhIHdob2xlIHJhZnQgb2YgaHlwZXJ2aXNvciByZXF1ZXN0cywgZXNzZW50aWFsbHkgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBndWVzdCBPUydzIHVzZXJzcGFjZSBhbmQgdGhlIEtWTSBjb3JlJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuXG5cblNvLCB0aGlzIG1lYW5zIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBiZWluZyBpbnZva2VkICpkdXJpbmcqIGFuIElPQ1RMIGNhbGwuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGZhaXJseSBjbGVhci4gSXQncyBsaWtlbHkgaGFuZGxpbmcgbWVtb3J5IGZhdWx0cyAqYmVmb3JlKiB0aGV5IGFyZSB0cnVseSByYWlzZWQgYnkgdGhlIGhhcmR3YXJlIE1NVS4gVGhpcyBzdWdnZXN0cyBpdCdzIHBhcnQgb2YgYSBwcmUtZW1wdGl2ZSBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc20sIHBvdGVudGlhbGx5IGFpbWluZyBhdCBvcHRpbWl6aW5nIHBhZ2UgZmF1bHRzLCBkZWFsaW5nIHdpdGggbWVtb3J5IGJhbGxvb25pbmcgb3BlcmF0aW9ucywgb3IgaW1wbGVtZW50aW5nIHNvbWUgZm9ybSBvZiBtZW1vcnkgcHJvdGVjdGlvbi92aXJ0dWFsaXphdGlvbi4gSeKAmWQgZ3Vlc3MgaXQgaXMgd29ya2luZyB3aXRoIHNvbWUgZm9ybSBvZiBwcmUtZW1wdGl2ZSBtZW1vcnkgZmF1bHQsIGxpa2VseSB0byBpbXByb3ZlIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIHRoZSBndWVzdCBpbiBzb21lIHdheS5cblxuSSdkIHdhbnQgdG8gcXVpY2tseSBjaGVjayB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLCB0byBrbm93IHdoYXQgc3BlY2lmaWNhbGx5IGlzIHRoZSB0eXBlIG9mIGZhdWx0IGl0J3MgYW50aWNpcGF0aW5nLiBBbHNvLCBpdOKAmWQgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGUgZmF1bHQgaXMgYmVpbmcgcHJlLWVtcHRlZCBhbmQgaG93IEtWTSBpcyBoYW5kbGluZyB0aGlzIHBvdGVudGlhbCBndWVzdC1sZXZlbCBmYXVsdC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIGFueSBhc3NvY2lhdGVkIG9wdGltaXphdGlvbnMuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udHJvbCBmbG93IHRvIHNlZSB3aGVuIGl0J3MgY2FsbGVkIGFuZCB0aGUgdHlwaWNhbCB3b3JrbG9hZC4gQSBxdWljayBncmVwIG9mIHRoZSBjb2RlIGJhc2Ugd2lsbCBjZXJ0YWlubHkgaWxsdW1pbmF0ZSB0aGluZ3MgbW9yZSBxdWlja2x5LiBUaGlzIGlzIHdoZXJlIHRoZSBmdW4gYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6NDcuOTUwNzY1OTY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc2ODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVxcdFxcdFxcdGJyZWFrO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYzOTpcXHRcXHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcXHUwMDI2cmFuZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY0MC1cXHRcXHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjQ4LjAwMjU0NDA0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE3MTI1MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fdmNwdV9pb2N0bGAgKGNpcmNhIGxpbmUgNDYzOCkqKlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYGt2bV92Y3B1X2lvY3RsYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ2MzggaW4gdGhlIHNvdXJjZS4gR2l2ZW4gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3RlbnRpYWwgaXNzdWUsIEkgc3VzcGVjdCB0aGF0IHRoZSBjcml0aWNhbCBkYXRhIGlzIHByb2Nlc3NlZCBpbiBvciBhcm91bmQgdGhhdCBsaW5lLiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0LCB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIGEgY2VydGFpbiBpbnN0cnVjdGlvbiBvciBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgQ1BVIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGhhbmRsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgZnVuY3Rpb24gdG8gY29uZmlybSB0aGF0IG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGVycm9yIGNvZGVzIGFuZCB0aGUgZGF0YSBiZWluZyBwYXNzZWQgaW4gdGhlIGlvY3RsIGNvbW1hbmRzLiBMZXQgbWUgZG91YmxlIGNoZWNrIGlmIEknbSB0aGlua2luZyBvZiB0aGUgcmlnaHQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMDo1MS45MTk2NzIxNDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYzMDpcXHRcXHRcXHRicmVhaztcXG40NjMxOlxcdFxcdH1cXG40NjMyOlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbjQ2MzM6XFx0XFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcbjQ2MzQ6XFx0XFx0XFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlO1xcbjQ2MzU6XFx0XFxuNDYzNjpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG40NjM3OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cmFuZ2UsIGFyZ3AsIHNpemVvZihyYW5nZSkpKVxcbjQ2Mzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYzOTpcXHRcXHRcXHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcXHUwMDI2cmFuZ2UpO1xcbjQ2NDA6XFx0XFx0XFx0LyogUGFzcyBiYWNrIGxlZnRvdmVyIHJhbmdlLiAqL1xcbjQ2NDE6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2cmFuZ2UsIHNpemVvZihyYW5nZSkpKVxcbjQ2NDI6XFx0XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNDY0MzpcXHRcXHRcXHRicmVhaztcXG40NjQ0OlxcdFxcdH1cXG40NjQ1OlxcdCNlbmRpZlxcbjQ2NDY6XFx0XFx0ZGVmYXVsdDpcXG40NjQ3OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xcbjQ2NDg6XFx0XFx0fVxcbjQ2NDk6XFx0b3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMDo1MS45MTk5MjUzNzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MjExMzkxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrcyBpbiBLVk0gUHJlLUZhdWx0IE1lbW9yeSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBjYXNlIGFuZCB0aGUgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlLiBUaGUgaW5pdGlhbCBjb25jZXJuIHdhcyB0aGF0IHRoZSBgcmFuZ2VgIHN0cnVjdCwgYWZ0ZXIgYmVpbmcgcHJvY2Vzc2VkIGJ5IGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIG1lbW9yeSB3aGVuIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIEhvd2V2ZXIsIG9uIGNsb3NlciBpbnNwZWN0aW9uLCBpdCdzIGNsZWFyIHRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2Ugd2l0aCBgY29weV9mcm9tX3VzZXIoXHUwMDI2cmFuZ2UsIGFyZ3AsIHNpemVvZihyYW5nZSkpYCAqYmVmb3JlKiBpdCdzIGV2ZW4gcGFzc2VkIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbi4gU28sIHRoZSBvbmx5IGRhdGEgcmV0dXJuZWQgdG8gdXNlciBzcGFjZSBpbiBgcmFuZ2VgIGlzIHRoZSB1cGRhdGVkICdsZWZ0b3ZlcicgcGFydCBvZiB0aGUgb3JpZ2luYWwgZGF0YS4gVGhhdCdzIGdvb2Q7IHRoZSBpbml0aWFsIHdvcnJ5IGlzIGFkZHJlc3NlZC5cblxuTXkgbmV4dCBsaW5lIG9mIGludmVzdGlnYXRpb24gY2VudGVyZWQgb24gYG91dF9tYXBgIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIGFyb3VuZCBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHJldHVybmVkLiBUaGUgY29kZSBzaG93cyB0aGF0IGBvdXRfbWFwYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIChgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07YCkuIFRoZW4gaXQgaXMgYWdhaW4gemVyb2VkIGluIGBrdm1fcmlzY3ZfbW11X21hcGAgd2l0aCBgbWVtc2V0KG91dF9tYXAsIDAsIHNpemVvZigqb3V0X21hcCkpYCwgKmJlZm9yZSogYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHBvcHVsYXRlcyBzb21lIG9mIGl0cyBtZW1iZXJzLlxuXG5UaGUgbG9naWMgd2l0aGluIGBrdm1fcmlzY3ZfbW11X21hcGAgZWl0aGVyIHNldHMgYG91dF9tYXAucHRlYCwgYWxvbmcgd2l0aCBvdGhlciBtZW1iZXJzLCBvciByZXR1cm5zIHdpdGhvdXQgc2V0dGluZyBhbnkgb2YgdGhvc2UgdmFsdWVzLiBUaGUgbG9vcCBpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBjb250aW51ZXMgaWYgYG91dF9tYXAucHRlYCBpcyBub3Qgc2V0OyBvdGhlcndpc2UsIGl0IGJyZWFrcy4gSW1wb3J0YW50bHksIGBvdXRfbWFwLmxldmVsYCBpcyB1c2VkICphZnRlciogdGhpcy4gU2luY2UgYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIGFueSB1bmluaXRpYWxpemVkIHJlYWRzIGluIGBvdXRfbWFwYCB3aWxsIHJlYWQgemVyby4gTm8gaW5mb3JtYXRpb24gbGVha3MgaGVyZS5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoZSBgb3V0X21hcGAgaXMgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIGFueSBmaWVsZHMgYXJlIGNvbmRpdGlvbmFsbHkgc2V0IGJhc2VkIG9uIHRoZSBtYXBwaW5nIHByb2Nlc3MuIFRoaXMgY2xlYXIgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgaXMga2V5LiBJJ20gbm93IGNvbmZpZGVudCB0aGF0IHRoZXJlJ3Mgbm8gcGF0aCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBgb3V0X21hcGAgdG8gbGVhayBiYWNrIHRvIHVzZXIgc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTE6NTguNjQxMDY4NzcyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzNjQ1NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMTo1OC43Nzc0NDU0NjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MTA3ODM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBrdm1fZ3N0YWdlX21hcHBpbmdgKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBhY3R1YWxseSAqaXMqLiBUaGlzIHNvdW5kcyBsaWtlIGEga2V5IGRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIGxheWVyLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBndWVzdCBzdGFnZSB0YWJsZS4gSXQncyB0aW1lIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGxvY2F0aW9uIGluIHRoZSBLVk0gc291cmNlIGNvZGUuIEtub3dpbmcgaXRzIHN0cnVjdHVyZSB3aWxsIGluZm9ybSBob3cgdGhlIHZpcnR1YWxpemF0aW9uIHN5c3RlbSBoYW5kbGVzIG1lbW9yeS4gTGV0J3Mgc2VlIGlmIGl04oCZcyBpbiBhIGhlYWRlciBmaWxlLCBhbmQgSSBleHBlY3QgaXQgaXMsIHByb2JhYmx5IG5lc3RlZCB3aXRoaW4gYSBjb3JlIEtWTSBpbmNsdWRlIGRpcmVjdG9yeS4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCB0byBsb2NhdGUgdGhlIGRlY2xhcmF0aW9uIGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMjowMy41Mzg1MjY3MjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTUxNDMwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9MTI9c3RydWN0IGt2bV9nc3RhZ2Uge1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtMjAtXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6MjE6c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyB7XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtMjItXFx0Z3BhX3QgYWRkcjtcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTUzPWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NldF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC01NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjU1OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqbWFwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC01Ni1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTYxPWludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02NC1cXHRcXHRcXHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaDo2NTpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Ni1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX21tdS5oPTE0PWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fbW11LmgtMTUtXFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDoxNjpcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0xNy1pbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE0Mj1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMTQzLVxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MTQ0OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqbWFwKVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTE0NS17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0yMDc9aW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIxMC1cXHRcXHRcXHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzoyMTE6XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMTIte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDA9aW50IGt2bV9yaXNjdl9tbXVfaW9yZW1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgcGh5c19hZGRyX3QgaHBhLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTEtXFx0fTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo1MjpcXHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG1hcDtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01My1cXHRzdHJ1Y3Qga3ZtX2dzdGFnZSBnc3RhZ2U7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01NTI9c3RhdGljIGJvb2wga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01NTQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBncGFfdCBncGEsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NTU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01NTYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI0LVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjI1OlxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTc1MT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTMte1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1NDpcXHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTUtXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE2PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtMTgte1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjE5OlxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgaG9zdF9tYXA7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtMjAtXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MDUuMjMzNjc1NTY2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjE5MjU2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIEctU3RhZ2Ugb24gUklTQy1WKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBLVk0gZ3Vlc3Qgc3RhZ2Ugb24gUklTQy1WLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaGAgaGVhZGVyLiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSAyMSwgbGlrZWx5IHNvbWUgY3J1Y2lhbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvciBtYWNybyB0aGF0IEkgd2FudCB0byByZXZpZXcgaW4gZGV0YWlsLiBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIG9yIGhhbmRsZWQgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiB0aGF0IEkgd2FudCB0byBhbmFseXplLiBJJ20gZ29pbmcgaW4gd2l0aCBhIHRhcmdldGVkIGFwcHJvYWNoIHRvIHF1aWNrbHkgcGFyc2UgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NzksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMjoxMC41OTU2MDQ4ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0I2RlZmluZSBLVk1fR1NUQUdFX0ZMQUdTX0xPQ0FMXFx0XFx0QklUKDApXFxuICAxNjpcXHRcXHR1bnNpZ25lZCBsb25nIHZtaWQ7XFxuICAxNzpcXHRcXHRwZ2RfdCAqcGdkO1xcbiAgMTg6XFx0XFx0dW5zaWduZWQgbG9uZyBwZ2RfbGV2ZWxzO1xcbiAgMTk6XFx0fTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyB7XFxuICAyMjpcXHRcXHRncGFfdCBhZGRyO1xcbiAgMjM6XFx0XFx0cHRlX3QgcHRlO1xcbiAgMjQ6XFx0XFx0dTMyIGxldmVsO1xcbiAgMjU6XFx0fTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0I2lmZGVmIENPTkZJR182NEJJVFxcbiAgMjg6XFx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcXHQ5XFxuICAyOTpcXHQjZWxzZVxcbiAgMzA6XFx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcXHQxMFxcbiAgMzE6XFx0I2VuZGlmXFxuICAzMjpcXHRcXG4gIDMzOlxcdGV4dGVybiB1bnNpZ25lZCBsb25nIGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHM7XFxuICAzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MTAuNTk1NzA2MzI3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjIzNTkyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBLVk0gUklTQy1WIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gUklTQy1WIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ2AuIEkgc2VlIGl0IGhhcyB0aGUgc3RhbmRhcmQgYGFkZHJgLCBgcHRlYCwgYW5kIGBsZXZlbGAgZmllbGRzLiBHb29kLiBJIG5vdGUgdGhhdCBpdCdzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAgaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBhbHNvIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gaXQgb3V0LiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBnYXJiYWdlIGxlZnQgYmVoaW5kIHRoZXJlLiBHb29kLCB3ZSdyZSBjb3ZlcmluZyBvdXIgYmFzZXMuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIHRvIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBUaGlzIG9uZSdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGJlaW5nIGNvcGllZCBmcm9tIGFuZCB0byB1c2Vyc3BhY2UuIFRoYXQncyBhbHdheXMgYSBwb3RlbnRpYWwgaG90c3BvdCBmb3IgdnVsbmVyYWJpbGl0aWVzLiBJIHNlZSB0aGUgc3RydWN0IGRlZmluaXRpb246IGBncGFgLCBgc2l6ZWAsIGBmbGFnc2AsIGFuZCBzb21lIHBhZGRpbmcuIEhtbSwgdGhlIHBhZGRpbmcuIFRoYXQncyB3aGVyZSB0aGluZ3MgY291bGQgZ2V0IHRyaWNreS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LCBvdGhlcndpc2Ugd2UgbWlnaHQgaGF2ZSBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvci4gVGltZSB0byBjaGVjayB0aGUga2VybmVsIGhlYWRlcnMgZm9yIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBMZXQncyBnZXQgdGhlIGRlZmluaXRpdmUgc291cmNlIG9uIHRoYXQgZGVmaW5pdGlvbiBmcm9tIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgLiBJJ2xsIGNvbmZpcm0gaG93IHRoYXQgc3RydWN0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQsIGVzcGVjaWFsbHkgdGhhdCBwYWRkaW5nIGZpZWxkLCBiZWZvcmUgcHJvY2VlZGluZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MTcuMDU4MDY5NDM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk1ODE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjYzLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY0OiNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcXHRfSU9XUihLVk1JTywgMHhkNSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5KVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY2OnN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjctXFx0X191NjQgZ3BhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMjoxNy4xMDQwMzQxNDNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzNzc0OTY2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gS1ZNIEhlYWRlciBEZWZpbml0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEtWTSBpbnRlcmZhY2UgZGV0YWlscywgc3BlY2lmaWNhbGx5IHNvbWUgb2YgdGhlIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyB1c2VkIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBoeXBlcnZpc29yLiBJIHJlbWVtYmVyIGEgc3BlY2lmaWMgYXJlYSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gZGVidWdnaW5nLCBzbyBsZXQncyBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCdzIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgIGZpbGUuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSAxNjY2IHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEknbSBiZXR0aW5nIHRoYXQgYXJlYSBwcm9iYWJseSBkZWZpbmVzIHNvbWV0aGluZyBjcnVjaWFsIHRvIHRoZSBmdW5jdGlvbmFsaXR5IEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSB3aWxsIHNlZSBpZiB0aGF0IGlzIHRoZSBjb3JyZWN0IGVudHJ5cG9pbnQgYW5kIHdvcmsgbXkgd2F5IGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MzUuNDgxNTM0NzU2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTY2NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY2NjpcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbjE2Njc6XFx0XFx0X191NjQgZ3BhO1xcbjE2Njg6XFx0XFx0X191NjQgc2l6ZTtcXG4xNjY5OlxcdFxcdF9fdTY0IGZsYWdzO1xcbjE2NzA6XFx0XFx0X191NjQgcGFkZGluZ1s1XTtcXG4xNjcxOlxcdH07XFxuMTY3MjpcXHRcXG4xNjczOlxcdCNlbmRpZiAvKiBfX0xJTlVYX0tWTV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEyOjM1LjQ4MTg3NzM2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDE5NTgxNDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBLVk0gUHJlLUZhdWx0IE1lbW9yeSBmb3IgUklTQy1WKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgbmV3IEtWTSBmZWF0dXJlIGZvciBSSVNDLVY6IHByZS1mYXVsdGluZyBtZW1vcnkuIFRoZSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMuXG5cbkZpcnN0LCB0aGUgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBzdHJ1Y3QgaXRzZWxmIGlzIGNvcGllZCBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXJgLiBDcnVjaWFsbHksIHRoaXMgY29waWVzIHRoZSAqZW50aXJlKiBzdHJ1Y3QsIGluY2x1ZGluZyB0aGUgcGFkZGluZy4gU28sIGFsbCBmaWVsZHMsIGluY2x1ZGluZyB0aGUgcGFkZGluZywgYXJlIGluaXRpYWxpemVkIHdpdGggdXNlci1wcm92aWRlZCBkYXRhLiBUaGUga2VybmVsIHRoZW4gdXBkYXRlcyBgc2l6ZWAgYW5kIGBncGFgLiBUaGUgZW50aXJlIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBwb3RlbnRpYWxseSB1cGRhdGVkIGZpZWxkcywgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSB1c2luZyBgY29weV90b191c2VyYC4gTm8ga2VybmVsIGRhdGEgaXMgbGVha2VkLCB0aGUgcGFkZGluZyBzaW1wbHkgcmV0YWlucyBpdHMgb3JpZ2luYWwgdmFsdWUuXG5cbk5leHQsIHdlIGRpdmUgaW50byBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gIEkgc2VlIGEgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2AgaGVyZS4gIFRoYXQncyBnb29kLCBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4gIFRoZSBjb2RlIHRoZW4gY2FsbHMgYGt2bV9yaXNjdl9tbXVfbWFwYC4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBsZWF2ZSBgb3V0X21hcGAgaW4gYSBwYXJ0aWFsIGluaXRpYWxpemVkIHN0YXRlLiAgV2UgY2FuIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgZXhwbGljaXRseSBgbWVtc2V0YHMgYG91dF9tYXBgIHRvIHplcm8gYW5kIHRoZW4gY2FsbHMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLCB3aGljaCBzZXRzIGBvdXRfbWFwLmxldmVsYCBhbmQgYG91dF9tYXAucHRlYCB0b2dldGhlci5cblxuTGV0J3MgY2hlY2sgYGt2bV9yaXNjdl9tbXVfbWFwYCBpdHNlbGYsIGp1c3QgdG8gYmUgc3VyZS4gIFllcywgaXQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBzdHJ1Y3QsIHNvIHRoYXQgaXMgc2FmZS5cblxuVGhlbiwgYXJlIHRoZXJlIG90aGVyIHBsYWNlcyB0aGUgc3RydWN0IGlzIHVzZWQ/IExldCdzIHRyYWNlIGl0IGFuZCBkb3VibGUtY2hlY2suIE9rYXksIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGxvY2FsIHZhcmlhYmxlcyBgZ2ZuYCwgYG1lbXNsb3RgLCBgaHZhYCwgYHJldGAsIGBtYXBfc2l6ZWAsIGFuZCBgZW5kYCwgYW5kIHVzZWQgdmFyaWFibGVzIGFyZSBhbGwgYXNzaWduZWQgYmVmb3JlIHVzZSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQsIHRoZSBvdGhlcnMgYXJlIGFzc2lnbmVkLlxuXG5TZWxmdGVzdHMgYXJlbid0IGEgY29uY2VybiBmb3Iga2VybmVsIG1lbW9yeSBzYWZldHkgaW4gdGhlbXNlbHZlczsgdGhleSdyZSB1c2VyLXNwYWNlLlxuXG5TbywgaXQgc2VlbXMgdGhhdCB0aGVyZSdzIG5vIHBhdGggdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLiAgVGhlIGNvZGUgY29uc2lzdGVudGx5IGluaXRpYWxpemVzIG9yIGFzc2lnbnMgYWxsIHZhcmlhYmxlcyBiZWZvcmUgdXNlLCBhbmQgYW55IHVzZXItcHJvdmlkZWQgcGFkZGluZyBpcyBleHBsaWNpdGx5IGNvcGllZC4gIFRoZSBwYXRjaCBqdXN0IGFkZHMgYSBuZXcgY2FwYWJpbGl0eSwgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAsIHdoaWNoIG1hcHMgbWVtb3J5IHBhZ2VzIGFoZWFkIG9mIHRpbWUuIEkgd291bGQgZXhwZWN0IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIGJ1ZyBkZXRlY3RvcnMgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd3JvbmcgcGFnZSBzaXplcywgb3IgbG9ja2luZyBwcm9ibGVtcy4gR2l2ZW4gdGhpcyBhbmFseXNpcywgSSBkb24ndCBzZWUgYW55IHJpc2sgdGhhdCByZXF1aXJlcyBLTVNBTi4gV2UncmUgZ29vZCB3aXRoIEtBU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUyMCwiT3V0cHV0VG9rZW5zIjoyMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6NDkuNjc3Njk0NzkzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBvbiBSSVNDLVYuIEl0IGFkZHMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2hpY2ggdXNlcyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXBgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAuIFRoZSBgb3V0X21hcGAgaXMgZnVydGhlciB6ZXJvZWQgb3V0IHZpYSBgbWVtc2V0YCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQuIFRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBwYXNzZWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgIChpbmNsdWRpbmcgcGFkZGluZykgYmVmb3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBjb3BpZWQgYmFjaywgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIG9uIFJJU0MtVi4gSXQgYWRkcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB3aGljaCB1c2VzIGEgbG9jYWwgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcGAgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YC4gVGhlIGBvdXRfbWFwYCBpcyBmdXJ0aGVyIHplcm9lZCBvdXQgdmlhIGBtZW1zZXRgIGluIGBrdm1fcmlzY3ZfbW11X21hcGAgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZC4gVGhlIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHBhc3NlZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBjb3B5X2Zyb21fdXNlcmAgKGluY2x1ZGluZyBwYWRkaW5nKSBiZWZvcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGNvcGllZCBiYWNrLCBzbyB0aGVyZSBpcyBubyBrZXJuZWwgaW5mby1sZWFrLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowjcf2f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 12:48:13 +0000 UTC FinishedAt: 2026-08-14 13:12:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b5060a4aa33d7d78a8c1837ab08ef0c81ea96650", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b5060a4aa33d7d78a8c1837ab08ef0c81ea96650", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "6553562a-bd67-401b-829a-8a52c87155a3" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_pre_fault_memory", "kvm_riscv_gstage_map_page", "kvm_riscv_mmu_map" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgb24gUklTQy1WLiBJdCBhZGRzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdoaWNoIHVzZXMgYSBsb2NhbCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwYCBpbml0aWFsaXplZCB0byBgeyAwIH1gLiBUaGUgYG91dF9tYXBgIGlzIGZ1cnRoZXIgemVyb2VkIG91dCB2aWEgYG1lbXNldGAgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGUgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAgcGFzc2VkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYGNvcHlfZnJvbV91c2VyYCAoaW5jbHVkaW5nIHBhZGRpbmcpIGJlZm9yZSBiZWluZyBtb2RpZmllZCBhbmQgY29waWVkIGJhY2ssIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdmYjhjZjJjNWQ4YzA4NGNhY2FkMTkzM2RjMjlhMDZlZjkxZTVlM2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzowODoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICYjNDM7MjgsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4mIzQzO1x0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiBcdHNlbGVjdCBLVk1fTU1JT1xuIFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGU1MDAyY2I5Y2JlZjEuLjZiZDhiOGZkNmNlYjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0yODAsNiAmIzQzOzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbiYjNDM7XHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRcdG91dF9tYXAtXHUwMDNlbGV2ZWwgPSBwdGVwX2xldmVsO1xuJiM0MztcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uMzNkNGJhNDA2YjBkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICYjNDM7NzQ4LDQ4IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHZhO1xuJiM0MztcdGdwYV90IGVuZDtcbiYjNDM7XHRnZm5fdCBnZm47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z2ZuID0gZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpO1xuJiM0MztcdG1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuJiM0MztcdGlmICghbWVtc2xvdClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuJiM0MztcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXHUwMDI2b3V0X21hcCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChwdGVfdmFsKG91dF9tYXAucHRlKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xuJiM0MztcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgJiM0MzsgbWFwX3NpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGdkX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5AQCAtMTg3LDYgJiM0MzsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBzdGVhbF90aW1lXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTEyLDYgJiM0MzsxMiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28vcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4gXG4mIzQzOyNkZWZpbmUgUEFHRV9TSElGVFx0XHQxMlxuJiM0MzsjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4mIzQzO1xuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1x0MHgwMDdjXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFx0MlxuICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNXHQyOFxuQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGxcbiBcbiB2b2lkIHZtX2luc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGhhbmRsZXIpO1xuIFxuJiM0MzsvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4mIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1x0XHRcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUXHRcdFx0NDhcbiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9NQVNLXHRcdFx0MHgwMDAwRkY4MDAwMDAwMDAwVUxMXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVFx0XHRcdDM5XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmI0ZDQxYTQwNzU1MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuJiM0MztcdFBHVEJMX0w0X0lOREVYX01BU0ssXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuQEAgLTUwLDYgJiM0Mzs1MSw3IEBAIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG4gXHRQR1RCTF9MMV9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wyX0lOREVYX1NISUZULFxuIFx0UEdUQkxfTDNfSU5ERVhfU0hJRlQsXG4mIzQzO1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGZvciBSSVNDLVYgYnkgYWRkaW5nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSBhbmQgbW9kaWZ5aW5nIHRoZSBwYWdlIG1hcHBpbmcgbG9naWMgaW4ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBhbmQga3ZtX3Jpc2N2X21tdV9tYXAuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGlvY3RsIGNvZGUgcGF0aHMgYW5kIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBNTVUgbG9naWMgb24gUklTQy1WLCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZmI4Y2YyYzVkOGMwODRjYWNhZDE5MzNkYzI5YTA2ZWY5MWU1ZTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI4LDYgJiM0MzsyOCw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKJiM0MzsJc2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKIAlzZWxlY3QgS1ZNX01NSU8KIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgU0NIRURfSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwppbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwpAQCAtMjgwLDYgJiM0MzsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAogCQkJCQkJICAgIG91dF9tYXAtJmd0O2xldmVsLCB0cnVlKTsKIAkJfSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHsKIAkJCWt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTsKJiM0MzsJCQlvdXRfbWFwLSZndDthZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7bGV2ZWwgPSBwdGVwX2xldmVsOwomIzQzOwkJCW91dF9tYXAtJmd0O3B0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDYwMzViNWVjOTUwMzkuLjMzZDRiYTQwNmIwZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCkBAIC03NDgsNiAmIzQzOzc0OCw0OCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCXJldHVybiByZXQ7CiB9CiAKJiM0Mztsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHZhOwomIzQzOwlncGFfdCBlbmQ7CiYjNDM7CWdmbl90IGdmbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2ZuID0gZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKTsKJiM0MzsJbWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7CiYjNDM7CWlmICghbWVtc2xvdCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpOwomIzQzOwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCXJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLSZndDtncGEsIGh2YSwgZmFsc2UsICZhbXA7b3V0X21hcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFwX3NpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpOwomIzQzOwllbmQgPSBBTElHTl9ET1dOKHJhbmdlLSZndDtncGEsIG1hcF9zaXplKSAmIzQzOyBtYXBfc2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtJmd0O3NpemUsIGVuZCAtIHJhbmdlLSZndDtncGEpOwomIzQzO30KJiM0MzsKIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IHBhZ2UgKnBnZF9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKaW5kZXggYTlmMDgzZmVlYjc2Ny4uNTg1MDBhMTliMzNiZCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCkBAIC0xODcsNiAmIzQzOzE4Nyw3IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDoKIAljYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHOgomIzQzOwljYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWToKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtMjI1LDYgJiM0MzsyMjUsNyBAQCBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHN0ZWFsX3RpbWUKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAppbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaApAQCAtMTIsNiAmIzQzOzEyLDkgQEAKICNpbmNsdWRlICZsdDthc20vdmRzby9wcm9jZXNzb3IuaCZndDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiAKJiM0MzsjZGVmaW5lIFBBR0VfU0hJRlQJCTEyCiYjNDM7I2RlZmluZSBQQUdFX1NJWkUJCUJJVF9VTEwoUEFHRV9TSElGVCkKJiM0MzsKICNkZWZpbmUgSU5TTl9PUENPREVfTUFTSwkweDAwN2MKICNkZWZpbmUgSU5TTl9PUENPREVfU0hJRlQJMgogI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU0JMjgKQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGwKIAogdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTsKIAomIzQzOy8qIEw0IGluZGV4IEJpdFs1Njo0OF0gKi8KJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX01BU0sJCQkweDAxRkYwMDAwMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUCQkJNDgKIC8qIEwzIGluZGV4IEJpdFs0NzozOV0gKi8KICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTSwkJCTB4MDAwMEZGODAwMDAwMDAwMFVMTAogI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVAkJCTM5CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwppbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHsKIAlQR1RCTF9MMV9JTkRFWF9NQVNLLAogCVBHVEJMX0wyX0lOREVYX01BU0ssCiAJUEdUQkxfTDNfSU5ERVhfTUFTSywKJiM0MzsJUEdUQkxfTDRfSU5ERVhfTUFTSywKIH07CiAKIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7CkBAIC01MCw2ICYjNDM7NTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0gewogCVBHVEJMX0wxX0lOREVYX1NISUZULAogCVBHVEJMX0wyX0lOREVYX1NISUZULAogCVBHVEJMX0wzX0lOREVYX1NISUZULAomIzQzOwlQR1RCTF9MNF9JTkRFWF9TSElGVCwKIH07CiAKIHN0YXRpYyB1NjQgcHRlX2luZGV4KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCBndmEsIGludCBsZXZlbCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgc3VwcG9ydCBmb3IgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgb24gUklTQy1WLiBJdCBsb29rcyBsaWtlIGl0IHRvdWNoZXMgdGhlIHVzdWFsIHN1c3BlY3RzOiBgS2NvbmZpZ2AsIGBnc3RhZ2UuY2AsIGBtbXUuY2AsIGFuZCBgdm0uY2Agd2l0aGluIHRoZSBgYXJjaC9yaXNjdi9rdm0vYCBkaXJlY3RvcnkuIFBsdXMgc29tZSBzZWxmdGVzdHMsIG5hdHVyYWxseS4KCk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciAtIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgcHJvdmlkaW5nIHRoZSBSSVNDLVYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIHByZS1mYXVsdGluZyBtZW1vcnkgaW4gS1ZNLiBJdCBhbHNvIHNldHMgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgIGluIGBLY29uZmlnYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB0aGUgb3ZlcmFsbCBLVk0gaW50ZWdyYXRpb24uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgaG93IGRvZXMgdXNlcnNwYWNlIGFjY2VzcyB0aGlzPyBBaCwgcmlnaHQsIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoYXQgaW9jdGwgYmVjb21lcyBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBhZGRzIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIHRvIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBpbiBgYXJjaC9yaXNjdi9rdm0vdm0uY2AsIGNvbmZpcm1pbmcgdGhhdC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LCBhbmQgdGhpcyBpcyBSSVNDLVYsIHNvIHRoYXQgcGFydCBpcyBjbGVhci4KCkkmIzM5O20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25zIG5vdzogYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgKHRoZSBuZXcgb25lKSBhbmQgdGhlIG1vZGlmaWVkIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXNuJiMzOTt0IGRlY2xhcmVkIHN0YXRpYyBhbmQgaXMgcHJvcGVybHkgZXhwb3NlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgZ2VuZXJpYyBLVk0gY29kZSB3aGVuIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBzZWxlY3RlZC4gVGhhdCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgZG8gYSBxdWljayBzZWFyY2ggb2YgdGhlIGVudGlyZSB0cmVlIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc1MC1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0MC0vKipcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQyLSAqIEB2Y3B1OiB0aGUgdmNwdSB0aGF0IHNoYWxsIGFwcGVhciB0byBoYXZlIGdlbmVyYXRlZCB0aGUgZmF1bHQtaW4uXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg2MDpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2MS17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTczPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTAxNzpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTgtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE3MDE9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMy1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzE1LVx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTUtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MzM0PXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxudmlydC9rdm0va3ZtX21haW4uYzo0MzU5Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM2MC1cdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTczCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBLVk0gTWVtb3J5IEZhdWx0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IEtWTSBoYW5kbGVzIG1lbW9yeSBmYXVsdHMgYmVmb3JlIHRoZXkgYWN0dWFsbHkgaGFwcGVuIOKAkyB0aGF0IHByZS1mYXVsdCBzdGFnZS4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGluIHRoZSBjb2RlLCBhbmQgSSBrbm93IHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJdCYjMzk7cyBhIHN0YW5kYXJkIHBhdHRlcm4sIHJpZ2h0PyBMb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHN0dWZmIGJlaW5nIGhhbmRsZWQgZG93bnN0cmVhbSBmcm9tIHRoZSBtb3JlIGdlbmVyYWwgS1ZNIGNvcmUgZnVuY3Rpb24uCgpMZXQmIzM5O3MgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCYjMzk7cyBhY3R1YWxseSBkb2luZyBhbmQgd2hlcmUgZXhhY3RseSBpdCBmaXRzIGluIHRoZSBmYXVsdCBoYW5kbGluZyBwaXBlbGluZS4gV2hhdCBhcmUgdGhlIGtleSB0aGluZ3MgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yPyBHb3R0YSB0cmFjZSB0aGF0IGNvZGUgcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIHByZS1mYXVsdCByb3V0aW5lIGlzIGludm9rZWQuIElzIGl0IHJlbGF0ZWQgdG8gc3BlY2lmaWMgZ3Vlc3QgbWVtb3J5IHR5cGVzLCBvciBwYWdlIHRhYmxlIG9wZXJhdGlvbnM/IEdvdHRhIHpvb20gaW4gYW5kIGdldCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9NDMwOD1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzMzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxudmlydC9rdm0va3ZtX21haW4uYzo0MzM0OnN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzUtXHRcdFx0XHQgICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzOC1cdFx0XHRicmVhaztcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYzOTpcdFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXHUwMDI2cmFuZ2UpO1xudmlydC9rdm0va3ZtX21haW4uYy00NjQwLVx0XHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYCBzcGVjaWZpY2FsbHkgZm9yIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAuIEludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdpdGhpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3MgYXJlIGhhbmRsZWQuIEFuZCB0aGVuLCB0aGVyZSYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaW4gYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGluIFJJU0MtViBLVk0uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgZ3Vlc3QgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IGdpdmVuICYjMzQ7Z3N0YWdlJiMzNDsgYW5kIHRoZSBjb250ZXh0IG9mIHByZS1mYXVsdGluZy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBub3c7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lY2hhbmljcyBvZiB0aGlzIHByZS1mYXVsdGluZyBsaWtlbHkgY29tZSB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTU3PWJvb2wga3ZtX3Jpc2N2X2dzdGFnZV90cnlfdXBkYXRlX3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjAtXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaDo2MTppbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjItXHRcdFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM9MTg2PXN0YXRpYyB2b2lkIGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsIHUzMiBsZXZlbCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDYtXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzoyMDc6aW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIwOC1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzQtXHRcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjczNTpcdFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzYtXHRcdFx0XHRcdFx0dm1hX3BhZ2VzaXplLCBmYWxzZSwgdHJ1ZSwgb3V0X21hcCk7XG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzctXHR9IGVsc2Uge1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzM4Olx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczOS1cdFx0XHRcdFx0XHR2bWFfcGFnZXNpemUsIHRydWUsIHRydWUsIG91dF9tYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgS1ZNL1JJU0MtViBQYWdlIE1hcHBpbmcgRmxvdyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhZ2UgbWFwcGluZyBwcm9jZXNzIHdpdGhpbiB0aGUgS1ZNL1JJU0MtViBlbnZpcm9ubWVudC4gRnJvbSB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgdGhlIGZpcnN0IHBsYWNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGlzIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoYXQgc2VlbXMgbG9naWNhbCwgYXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHByb2JhYmx5IGhhbmRsZXMgdGhlIGFjdHVhbCBHdWVzdCBTdGFnZSBtYXBwaW5nLiBOb3csIHdoZXJlIGlzICpga3ZtX3Jpc2N2X21tdV9tYXBgKiBiZWluZyBjYWxsZWQgZnJvbT8gQWgsIGxvb2tzIGxpa2UgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBhbHNvIGxpa2VseSBga3ZtX3Jpc2N2X3ZjcHVfZmF1bHRgLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSYjMzk7ZCBuZWVkIHRvIG1hcCBwYWdlcyB3aGVuIHRoZXJlJiMzOTtzIGEgbWVtb3J5IGFjY2VzcyBmYXVsdCBvciBkdXJpbmcgcHJlLWZhdWx0aW5nIHRvIGFudGljaXBhdGUgZnV0dXJlIGFjY2Vzcy4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHRoZSBjb21wbGV0ZSBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSBkZWx2ZSBpbnRvIHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGZ1bmN0aW9uIGl0c2VsZi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0xMz12b2lkIGt2bV9yaXNjdl9tbXVfaW91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX21tdS5oOjE0OmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0xNS1cdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01NTI9c3RhdGljIGJvb2wga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjIyLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjIzOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MjQtXHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NzUxPWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NzgtXHRcdGNvbmRfcmVzY2hlZCgpO1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6Nzc5Olx0XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzgwLVx0XHRpZiAocmV0KVxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE2PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTY2LVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM6Njc6XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCBmYXVsdF9hZGRyLCBodmEsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy02OC1cdFx0XHRcdCh0cmFwLVx1MDAzZXNjYXVzZSA9PSBFWENfU1RPUkVfR1VFU1RfUEFHRV9GQVVMVCkgPyB0cnVlIDogZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzQKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFJJU0MtViBQYWdlIEZhdWx0IEhhbmRsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZm9yIEtWTSBSSVNDLVYsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgaXQmIzM5O3MgY2VudGVyZWQgYXJvdW5kIGEgbmV3IGZlYXR1cmUsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhhdCBpdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGVyLCBga3ZtX3Jpc2N2X21tdV9tYXBgLCBzcGVjaWZpY2FsbHkgYnkgYWx0ZXJpbmcgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHBvcHVsYXRlIGBvdXRfbWFwYC4gVGhpcyBkZWZpbml0ZWx5IGhhcyBmdXp6aW5nIHBvdGVudGlhbCB3cml0dGVuIGFsbCBvdmVyIGl0LiBBbnkgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFwcGluZyBsb2dpYywgZXNwZWNpYWxseSB3aXRoaW4gYSBjcml0aWNhbCBwYXRoIGxpa2UgYSBwYWdlIGZhdWx0IGhhbmRsZXIsIHdhcnJhbnRzIGltbWVkaWF0ZSBhbmQgdGhvcm91Z2ggdGVzdGluZy4KClRoZSBrZXkgc3ltYm9scyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiBoZXJlIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG1haW4gaGFuZGxlciBga3ZtX3Jpc2N2X21tdV9tYXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIG5ldyBwcmUtZmF1bHQgbWVjaGFuaXNtIGludGVncmF0ZXMgaW50byB0aGUgZXhpc3RpbmcgcGFnZSBmYXVsdCBwcm9jZXNzLgoKSSBuZWVkIHRvIHF1aWNrbHkgZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExvb2tzIGxpa2UgYEtWTWAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGVuc3VyZSBpcyBlbmFibGVkLiBBIHF1aWNrIHNlYXJjaCB3aXRoaW4gdGhlIHBhdGNoIGNvbmZpcm1lZCB0aGF0IGBzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWWAgaXMgYWRkZWQgdG8gYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRob3NlIGNydWNpYWwgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaGlkZGVuIGJ5IGJlaW5nIGRlY2xhcmVkIGFzIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoZW0gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuIEdvb2QsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGluZGVlZCBhIHB1YmxpYyBmdW5jdGlvbiB3aXRoIGEgYGxvbmdgIHJldHVybiB0eXBlLiBBbmQgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGlzIGFuIGBpbnRgIGFuZCBub3Qgc3RhdGljLiBBbmQsIGZpbmFsbHksIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYW4gYGludGAgYXMgd2VsbCwgc28gbm8gaXNzdWVzIHRoZXJlLgoKQWxyaWdodCwgSSYjMzk7bGwgcmVjb3JkIHRoZXNlIGZpbmRpbmdzLiBUaGlzIHBhdGNoIGRlbWFuZHMgc29tZSBzZXJpb3VzIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBvbiBSSVNDLVYuIEl0IGFkZHMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2hpY2ggdXNlcyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXBgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAuIFRoZSBgb3V0X21hcGAgaXMgZnVydGhlciB6ZXJvZWQgb3V0IHZpYSBgbWVtc2V0YCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQuIFRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBwYXNzZWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgIChpbmNsdWRpbmcgcGFkZGluZykgYmVmb3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBjb3BpZWQgYmFjaywgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZmI4Y2YyYzVkOGMwODRjYWNhZDE5MzNkYzI5YTA2ZWY5MWU1ZTNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI4LDYgJiM0MzsyOCw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKJiM0MzsJc2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKIAlzZWxlY3QgS1ZNX01NSU8KIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgU0NIRURfSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwppbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwpAQCAtMjgwLDYgJiM0MzsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAogCQkJCQkJICAgIG91dF9tYXAtJmd0O2xldmVsLCB0cnVlKTsKIAkJfSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHsKIAkJCWt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTsKJiM0MzsJCQlvdXRfbWFwLSZndDthZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7bGV2ZWwgPSBwdGVwX2xldmVsOwomIzQzOwkJCW91dF9tYXAtJmd0O3B0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDYwMzViNWVjOTUwMzkuLjMzZDRiYTQwNmIwZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCkBAIC03NDgsNiAmIzQzOzc0OCw0OCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCXJldHVybiByZXQ7CiB9CiAKJiM0Mztsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHZhOwomIzQzOwlncGFfdCBlbmQ7CiYjNDM7CWdmbl90IGdmbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2ZuID0gZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKTsKJiM0MzsJbWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7CiYjNDM7CWlmICghbWVtc2xvdCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpOwomIzQzOwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJaWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpCiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCXJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLSZndDtncGEsIGh2YSwgZmFsc2UsICZhbXA7b3V0X21hcCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFwX3NpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpOwomIzQzOwllbmQgPSBBTElHTl9ET1dOKHJhbmdlLSZndDtncGEsIG1hcF9zaXplKSAmIzQzOyBtYXBfc2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtJmd0O3NpemUsIGVuZCAtIHJhbmdlLSZndDtncGEpOwomIzQzO30KJiM0MzsKIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IHBhZ2UgKnBnZF9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKaW5kZXggYTlmMDgzZmVlYjc2Ny4uNTg1MDBhMTliMzNiZCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCkBAIC0xODcsNiAmIzQzOzE4Nyw3IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpCiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDoKIAljYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHOgomIzQzOwljYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWToKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9OUl9WQ1BVUzoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQpAQCAtMjI1LDYgJiM0MzsyMjUsNyBAQCBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gY29hbGVzY2VkX2lvX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBkaXJ0eV9sb2dfcGVyZl90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gbW11X3N0cmVzc190ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHN0ZWFsX3RpbWUKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAppbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaApAQCAtMTIsNiAmIzQzOzEyLDkgQEAKICNpbmNsdWRlICZsdDthc20vdmRzby9wcm9jZXNzb3IuaCZndDsKICNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiAKJiM0MzsjZGVmaW5lIFBBR0VfU0hJRlQJCTEyCiYjNDM7I2RlZmluZSBQQUdFX1NJWkUJCUJJVF9VTEwoUEFHRV9TSElGVCkKJiM0MzsKICNkZWZpbmUgSU5TTl9PUENPREVfTUFTSwkweDAwN2MKICNkZWZpbmUgSU5TTl9PUENPREVfU0hJRlQJMgogI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU0JMjgKQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGwKIAogdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTsKIAomIzQzOy8qIEw0IGluZGV4IEJpdFs1Njo0OF0gKi8KJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX01BU0sJCQkweDAxRkYwMDAwMDAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUCQkJNDgKIC8qIEwzIGluZGV4IEJpdFs0NzozOV0gKi8KICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTSwkJCTB4MDAwMEZGODAwMDAwMDAwMFVMTAogI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVAkJCTM5CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwppbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHsKIAlQR1RCTF9MMV9JTkRFWF9NQVNLLAogCVBHVEJMX0wyX0lOREVYX01BU0ssCiAJUEdUQkxfTDNfSU5ERVhfTUFTSywKJiM0MzsJUEdUQkxfTDRfSU5ERVhfTUFTSywKIH07CiAKIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7CkBAIC01MCw2ICYjNDM7NTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0gewogCVBHVEJMX0wxX0lOREVYX1NISUZULAogCVBHVEJMX0wyX0lOREVYX1NISUZULAogCVBHVEJMX0wzX0lOREVYX1NISUZULAomIzQzOwlQR1RCTF9MNF9JTkRFWF9TSElGVCwKIH07CiAKIHN0YXRpYyB1NjQgcHRlX2luZGV4KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCBndmEsIGludCBsZXZlbCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIG9uIFJJU0MtVi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIEl0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBLY29uZmlnYCwgYGdzdGFnZS5jYCwgYG1tdS5jYCwgYHZtLmNgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBmZWF0dXJlIOKAkyBhbmQgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNjb3BlLCBub3RoaW5nIG9idmlvdXNseSBodWdlIHRoYXQganVtcHMgb3V0LgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBsb2dpYywgc3BlY2lmaWNhbGx5IGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFRoZSBuZXcgZnVuY3Rpb24gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgaXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludC4gTG9va3MgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcHJlLWZhdWx0aW5nIG9mIG1lbW9yeSBmb3IgYSB2aXJ0dWFsIENQVS4gVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgY2FsbGVkIGFuZCBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrLgoKSW5zaWRlIHRoZSBuZXcgZnVuY3Rpb24sIGBvdXRfbWFwYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgcGFzc2VkIGFzIGEgcG9pbnRlciB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNvcnJlY3QuIElmIHRoZSBpbml0aWFsaXphdGlvbiBpcyBpbmNvcnJlY3QsIHRoZW4gZnV6emluZyBiZWNvbWVzIG11Y2ggbW9yZSBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIG5ldyBmdW5jdGlvbiBpcyBhIG5ldyBjb2RlIHBhdGguIFRoaXMgY291bGQgYmUgZXhwbG9pdGFibGUsIGlmIHRoZSBuZXcgdmFyaWFibGUgYG91dF9tYXBgIGlzbiYjMzk7dCBpbml0aWFsaXplZCwgaWYgaXQgaXMgbm90IGhhbmRsZWQgYnkgdGhlIGBrdm1fcmlzY3ZfbW11X21hcGAgZnVuY3Rpb24sIHRoaXMgY291bGQgYmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHRoYXQgd291bGQgYmUgZGlzY292ZXJlZCB3aXRoIGEgZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgZG9lcyB3aXRoIHRoYXQgemVyb2VkIGBvdXRfbWFwYCBzdHJ1Y3QuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGt2bV9yaXNjdl9tbXVfbWFwYCBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgb3BlcmF0aW9uLCBLTVNBTiB3b3VsZCBsaWtlbHkgcGljayB1cCBhbnkgdXNlLWJlZm9yZS1pbml0aWFsaXphdGlvbiBpc3N1ZXMgaW4gdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgY2hlY2sgdGhhdCBmdW5jdGlvbiBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9NTUyPXN0YXRpYyBib29sIGt2bV9yaXNjdl9tbXVfZGlydHlfbG9nX3dyaXRlX2ZhdWx0X2Zhc3Qoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyMi1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjYyMzppbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI0LVx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTc1MT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzc4LVx0XHRjb25kX3Jlc2NoZWQoKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc3OTpcdFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcdTAwMjZvdXRfbWFwKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc4MC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU5MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlIGBrdm1fcmlzY3ZfbW11X21hcGAgaW1wbGVtZW50YXRpb246CgoqKkRpdmluZyBpbnRvIGt2bV9yaXNjdl9tbXVfbWFwKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYGt2bV9yaXNjdl9tbXVfbWFwYCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpbnRlcmFjdHMgd2l0aCB0aGUgUklTQy1WIE1NVSBmb3IgbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGNvcmUgb2YgdHJhbnNsYXRpbmcgZ3Vlc3QgdmlydHVhbCBhZGRyZXNzZXMgdG8gaG9zdCBwaHlzaWNhbCBhZGRyZXNzZXMsIGhhbmRsaW5nIHBhZ2UgdGFibGUgd2Fsa3MsIGFuZCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgbWFwcGluZ3Mgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBSSVNDLVYgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMgYW5kIGhvdyBpdCBtaWdodCBoYW5kbGUgZGlmZmVyZW50IG1lbW9yeSBhY2Nlc3MgdHlwZXMgYW5kIHByb3RlY3Rpb24gbGV2ZWxzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBUTEIgaW52YWxpZGF0aW9ucyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb2hlcmVudC4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMzpcdGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gNjI0Olx0XHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG4gNjI1Olx0XHRcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXG4gNjI2Olx0e1xuIDYyNzpcdFx0aW50IHJldDtcbiA2Mjg6XHRcdGt2bV9wZm5fdCBoZm47XG4gNjI5Olx0XHRib29sIGlzX2h1Z2V0bGI7XG4gNjMwOlx0XHRib29sIHdyaXRhYmxlO1xuIDYzMTpcdFx0dW5zaWduZWQgaW50IHZtYV9wYWdlc2hpZnQ7XG4gNjMyOlx0XHRnZm5fdCBnZm4gPSBncGEgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNjMzOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiA2MzQ6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIDYzNTpcdFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUgPSBcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gubW11X3BhZ2VfY2FjaGU7XG4gNjM2Olx0XHRib29sIGxvZ2dpbmcgPSBrdm1fc2xvdF9kaXJ0eV90cmFja19lbmFibGVkKG1lbXNsb3QpIFx1MDAyNlx1MDAyNlxuIDYzNzpcdFx0XHQgICAgICAgIShtZW1zbG90LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKTtcbiA2Mzg6XHRcdHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzaXplLCBtbXVfc2VxO1xuIDYzOTpcdFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuIDY0MDpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gNjQxOlx0XG4gNjQyOlx0XHRrdm1fcmlzY3ZfZ3N0YWdlX2luaXQoXHUwMDI2Z3N0YWdlLCBrdm0pO1xuIDY0MzpcdFxuIDY0NDpcdFx0LyogU2V0dXAgaW5pdGlhbCBzdGF0ZSBvZiBvdXRwdXQgbWFwcGluZyAqL1xuIDY0NTpcdFx0bWVtc2V0KG91dF9tYXAsIDAsIHNpemVvZigqb3V0X21hcCkpO1xuIDY0NjpcdFxuIDY0NzpcdFx0aWYgKGlzX3dyaXRlIFx1MDAyNlx1MDAyNiBsb2dnaW5nIFx1MDAyNlx1MDAyNlxuIDY0ODpcdFx0ICAgIGt2bV9yaXNjdl9tbXVfZGlydHlfbG9nX3dyaXRlX2ZhdWx0X2Zhc3Qoa3ZtLCBtZW1zbG90LCBncGEsIG91dF9tYXApKVxuIDY0OTpcdFx0XHRyZXR1cm4gMDtcbiA2NTA6XHRcbiA2NTE6XHRcdC8qIFdlIG5lZWQgbWluaW11bSBzZWNvbmQmIzQzO3RoaXJkIGxldmVsIHBhZ2VzICovXG4gNjUyOlx0XHRyZXQgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShwY2FjaGUsIGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMpO1xuIDY1MzpcdFx0aWYgKHJldCkge1xuIDY1NDpcdFx0XHRrdm1fZXJyKFwmIzM0O0ZhaWxlZCB0byB0b3B1cCBHLXN0YWdlIGNhY2hlXFxuXCYjMzQ7KTtcbiA2NTU6XHRcdFx0cmV0dXJuIHJldDtcbiA2NTY6XHRcdH1cbiA2NTc6XHRcbiA2NTg6XHRcdG1tYXBfcmVhZF9sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIDY1OTpcdFxuIDY2MDpcdFx0dm1hID0gdm1hX2xvb2t1cChjdXJyZW50LVx1MDAzZW1tLCBodmEpO1xuIDY2MTpcdFx0aWYgKHVubGlrZWx5KCF2bWEpKSB7XG4gNjYyOlx0XHRcdGt2bV9lcnIoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgVk1BIGZvciBodmEgMHglbHhcXG5cJiMzNDssIGh2YSk7XG4gNjYzOlx0XHRcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4gNjY0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDY2NTpcdFx0fVxuIDY2NjpcdFxuIDY2NzpcdFx0aXNfaHVnZXRsYiA9IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpO1xuIDY2ODpcdFx0aWYgKGlzX2h1Z2V0bGIpXG4gNjY5Olx0XHRcdHZtYV9wYWdlc2hpZnQgPSBodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlX3ZtYSh2bWEpKTtcbiA2NzA6XHRcdGVsc2VcbiA2NzE6XHRcdFx0dm1hX3BhZ2VzaGlmdCA9IFBBR0VfU0hJRlQ7XG4gNjcyOlx0XHR2bWFfcGFnZXNpemUgPSAxVUxMIFx1MDAzY1x1MDAzYyB2bWFfcGFnZXNoaWZ0O1xuIDY3MzpcdFx0aWYgKGxvZ2dpbmcgfHwgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKSlcbiA2NzQ6XHRcdFx0dm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFO1xuIDY3NTpcdFx0ZWxzZSBpZiAoaXNfaHVnZXRsYilcbiA2NzY6XHRcdFx0dm1hX3BhZ2VzaXplID0gaHVnZXRsYl9tYXBwaW5nX3NpemUobWVtc2xvdCwgaHZhLCB2bWFfcGFnZXNpemUpO1xuIDY3NzpcdFxuIDY3ODpcdFx0LypcbiA2Nzk6XHRcdCAqIEZvciBodWdldGxiIG1hcHBpbmdzLCB2bWFfcGFnZXNpemUgbWlnaHQgaGF2ZSBiZWVuIHJlZHVjZWQgZnJvbSB0aGVcbiA2ODA6XHRcdCAqIFZNQSBzaXplIHRvIGEgc21hbGxlciBzYWZlIG1hcHBpbmcgc2l6ZS5cbiA2ODE6XHRcdCAqL1xuIDY4MjpcdFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXG4gNjgzOlx0XHRcdGdmbiA9IEFMSUdOX0RPV04oZ3BhLCB2bWFfcGFnZXNpemUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDY4NDpcdFxuIDY4NTpcdFx0LypcbiA2ODY6XHRcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcbiA2ODc6XHRcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcbiA2ODg6XHRcdCAqIGt2bS1cdTAwM2VtbXVfbG9jay5cbiA2ODk6XHRcdCAqXG4gNjkwOlx0XHQgKiBSZWx5IG9uIG1tYXBfcmVhZF91bmxvY2soKSBmb3IgYW4gaW1wbGljaXQgc21wX3JtYigpLCB3aGljaCBwYWlyc1xuIDY5MTpcdFx0ICogd2l0aCB0aGUgc21wX3dtYigpIGluIGt2bV9tbXVfaW52YWxpZGF0ZV9lbmQoKS5cbiA2OTI6XHRcdCAqL1xuIDY5MzpcdFx0bW11X3NlcSA9IGt2bS1cdTAwM2VtbXVfaW52YWxpZGF0ZV9zZXE7XG4gNjk0Olx0XHRtbWFwX3JlYWRfdW5sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuIDY5NTpcdFxuIDY5NjpcdFx0aWYgKHZtYV9wYWdlc2l6ZSAhPSBQVURfU0laRSBcdTAwMjZcdTAwMjZcbiA2OTc6XHRcdCAgICB2bWFfcGFnZXNpemUgIT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2XG4gNjk4Olx0XHQgICAgdm1hX3BhZ2VzaXplICE9IFBBR0VfU0laRSkge1xuIDY5OTpcdFx0XHRrdm1fZXJyKFwmIzM0O0ludmFsaWQgVk1BIHBhZ2Ugc2l6ZSAweCVseFxcblwmIzM0Oywgdm1hX3BhZ2VzaXplKTtcbiA3MDA6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzAxOlx0XHR9XG4gNzAyOlx0XG4gNzAzOlx0XHRoZm4gPSBfX2t2bV9mYXVsdGluX3BmbihtZW1zbG90LCBnZm4sIGlzX3dyaXRlID8gRk9MTF9XUklURSA6IDAsXG4gNzA0Olx0XHRcdFx0XHRcdTAwMjZ3cml0YWJsZSwgXHUwMDI2cGFnZSk7XG4gNzA1Olx0XHRpZiAoaGZuID09IEtWTV9QRk5fRVJSX0hXUE9JU09OKSB7XG4gNzA2Olx0XHRcdHNlbmRfc2lnX21jZWVycihCVVNfTUNFRVJSX0FSLCAodm9pZCBfX3VzZXIgKilodmEsXG4gNzA3Olx0XHRcdFx0XHR2bWFfcGFnZXNoaWZ0LCBjdXJyZW50KTtcbiA3MDg6XHRcdFx0cmV0dXJuIDA7XG4gNzA5Olx0XHR9XG4gNzEwOlx0XHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihoZm4pKVxuIDcxMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA3MTI6XHRcbiA3MTM6XHRcdC8qXG4gNzE0Olx0XHQgKiBJZiBsb2dnaW5nIGlzIGFjdGl2ZSB0aGVuIHdlIGFsbG93IHdyaXRhYmxlIHBhZ2VzIG9ubHlcbiA3MTU6XHRcdCAqIGZvciB3cml0ZSBmYXVsdHMuXG4gNzE2Olx0XHQgKi9cbiA3MTc6XHRcdGlmIChsb2dnaW5nIFx1MDAyNlx1MDAyNiAhaXNfd3JpdGUpXG4gNzE4Olx0XHRcdHdyaXRhYmxlID0gZmFsc2U7XG4gNzE5Olx0XG4gNzIwOlx0XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gNzIxOlx0XG4gNzIyOlx0XHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnkoa3ZtLCBtbXVfc2VxKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIGBrdm1fcmlzY3ZfbW11X21hcGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGt2bV9yaXNjdl9tbXVfbWFwYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyBhIGBtZW1zZXQob3V0X21hcCwgMCwgc2l6ZW9mKCpvdXRfbWFwKSk7YC4gIEFscmlnaHQsIHNvIHRoZSBvdXRwdXQgbWFwLCBgb3V0X21hcGAsIGlzIGdldHRpbmcgemVyb2VkIG91dCByaWdodCBhdCB0aGUgc3RhcnQuICBUaGF0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIGluaXRpYWxpemF0aW9uLCBidXQgaXQgbWFrZXMgbWUgdGhpbmsuLi4gaWYgYG91dF9tYXBgIGlzIGJlaW5nICpwYXNzZWQqIGludG8gdGhlIGZ1bmN0aW9uLCBpdCYjMzk7cyBiZWluZyBvdmVyd3JpdHRlbi4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNhY2hpbmcgYW5kIHNoYXJpbmcgZXhpc3RpbmcgTU1VIHN0YXRlLgoKTm93LCBJIHNlZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgYmVpbmcgY2FsbGVkIHNvbWV3aGVyZSBpbnNpZGUgYGt2bV9yaXNjdl9tbXVfbWFwYC4gIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgTU1VIHRyYW5zbGF0aW9uIHdvcmsgaXMgcHJvYmFibHkgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHplcm9lZC1vdXQgYG91dF9tYXBgIGludGVyYWN0cyB3aXRoIHRoZXNlIHBhZ2UgbWFwcGluZ3MuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGF0IGBvdXRfbWFwYCB2YXJpYWJsZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gNzI0Olx0XG4gNzI1Olx0XHQvKlxuIDcyNjpcdFx0ICogQ2hlY2sgaWYgd2UgYXJlIGJhY2tlZCBieSBhIFRIUCBhbmQgdGh1cyB1c2UgYmxvY2sgbWFwcGluZyBpZlxuIDcyNzpcdFx0ICogcG9zc2libGUuIEh1Z2V0bGIgbWFwcGluZ3MgYWxyZWFkeSBzZWxlY3RlZCB0aGVpciB0YXJnZXQgc2l6ZSBhYm92ZSxcbiA3Mjg6XHRcdCAqIHNvIGRvIG5vdCBwcm9tb3RlIHRoZW0gdGhyb3VnaCB0aGUgVEhQIGhlbHBlci5cbiA3Mjk6XHRcdCAqL1xuIDczMDpcdFx0aWYgKCFsb2dnaW5nIFx1MDAyNlx1MDAyNiAhaXNfaHVnZXRsYiBcdTAwMjZcdTAwMjYgdm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSlcbiA3MzE6XHRcdFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcdTAwMjZoZm4sIFx1MDAyNmdwYSk7XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAod3JpdGFibGUpIHtcbiA3MzQ6XHRcdFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xuIDczNTpcdFx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiA3MzY6XHRcdFx0XHRcdFx0XHR2bWFfcGFnZXNpemUsIGZhbHNlLCB0cnVlLCBvdXRfbWFwKTtcbiA3Mzc6XHRcdH0gZWxzZSB7XG4gNzM4Olx0XHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIDczOTpcdFx0XHRcdFx0XHRcdHZtYV9wYWdlc2l6ZSwgdHJ1ZSwgdHJ1ZSwgb3V0X21hcCk7XG4gNzQwOlx0XHR9XG4gNzQxOlx0XG4gNzQyOlx0XHRpZiAocmV0KVxuIDc0MzpcdFx0XHRrdm1fZXJyKFwmIzM0O0ZhaWxlZCB0byBtYXAgaW4gRy1zdGFnZVxcblwmIzM0Oyk7XG4gNzQ0Olx0XG4gNzQ1Olx0b3V0X3VubG9jazpcbiA3NDY6XHRcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZShrdm0sIHBhZ2UsIHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FRVhJU1QsIHdyaXRhYmxlKTtcbiA3NDc6XHRcdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuIDc0ODpcdFx0cmV0dXJuIHJldDtcbiA3NDk6XHR9XG4gNzUwOlx0XG4gNzUxOlx0bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDc1MjpcdFx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4gNzUzOlx0e1xuIDc1NDpcdFx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG4gNzU1Olx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuIDc1NjpcdFx0dW5zaWduZWQgbG9uZyBtYXBfc2l6ZTtcbiA3NTc6XHRcdHVuc2lnbmVkIGxvbmcgaHZhO1xuIDc1ODpcdFx0Z3BhX3QgZW5kO1xuIDc1OTpcdFx0Z2ZuX3QgZ2ZuO1xuIDc2MDpcdFx0aW50IHJldDtcbiA3NjE6XHRcbiA3NjI6XHRcdGdmbiA9IGdwYV90b19nZm4ocmFuZ2UtXHUwMDNlZ3BhKTtcbiA3NjM6XHRcdG1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuIDc2NDpcdFx0aWYgKCFtZW1zbG90KVxuIDc2NTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3NjY6XHRcbiA3Njc6XHRcdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdF9wcm90KG1lbXNsb3QsIGdmbiwgTlVMTCk7XG4gNzY4Olx0XHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKVxuIDc2OTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA3NzA6XHRcbiA3NzE6XHRcdGZvciAoOzspIHtcbiA3NzI6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIDc3MzpcdFx0XHRcdHJldHVybiAtRUlOVFI7XG4gNzc0Olx0XG4gNzc1Olx0XHRcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX1ZNX0RFQUQsIHZjcHUpKVxuIDc3NjpcdFx0XHRcdHJldHVybiAtRUlPO1xuIDc3NzpcdFxuIDc3ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA3Nzk6XHRcdFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcdTAwMjZvdXRfbWFwKTtcbiA3ODA6XHRcdFx0aWYgKHJldClcbiA3ODE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDc4MjpcdFxuIDc4MzpcdFx0XHRpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpXG4gNzg0Olx0XHRcdFx0YnJlYWs7XG4gNzg1Olx0XHR9XG4gNzg2Olx0XG4gNzg3Olx0XHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xuIDc4ODpcdFx0ZW5kID0gQUxJR05fRE9XTihyYW5nZS1cdTAwM2VncGEsIG1hcF9zaXplKSAmIzQzOyBtYXBfc2l6ZTtcbiA3ODk6XHRcbiA3OTA6XHRcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4gNzkxOlx0fVxuIDc5MjpcdFxuIDc5MzpcdGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4gNzk0Olx0e1xuIDc5NTpcdFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuIDc5NjpcdFxuIDc5NzpcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLnBnZCAhPSBOVUxMKSB7XG4gNzk4Olx0XHRcdGt2bV9lcnIoXCYjMzQ7a3ZtX2FyY2ggYWxyZWFkeSBpbml0aWFsaXplZD9cXG5cJiMzNDspO1xuIDc5OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MDA6XHRcdH1cbiA4MDE6XHRcbiA4MDI6XHRcdHBnZF9wYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyxcbiA4MDM6XHRcdFx0XHQgICAgICAgZ2V0X29yZGVyKGt2bV9yaXNjdl9nc3RhZ2VfcGdkX3NpemUpKTtcbiA4MDQ6XHRcdGlmICghcGdkX3BhZ2UpXG4gODA1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgwNjpcdFx0a3ZtLVx1MDAzZWFyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTtcbiA4MDc6XHRcdGt2bS1cdTAwM2VhcmNoLnBnZF9waHlzID0gcGFnZV90b19waHlzKHBnZF9wYWdlKTtcbiA4MDg6XHRcdGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMgPSBrdm1fcmlzY3ZfZ3N0YWdlX21heF9wZ2RfbGV2ZWxzO1xuIDgwOTpcdFx0a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xuIDgxMDpcdFxuIDgxMTpcdFx0cmV0dXJuIDA7XG4gODEyOlx0fVxuIDgxMzpcdFxuIDgxNDpcdHZvaWQga3ZtX3Jpc2N2X21tdV9mcmVlX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4gODE1Olx0e1xuIDgxNjpcdFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuIDgxNzpcdFx0dm9pZCAqcGdkID0gTlVMTDtcbiA4MTg6XHRcdGJvb2wgZmx1c2ggPSBmYWxzZTtcbiA4MTk6XHRcbiA4MjA6XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiA4MjE6XHRcdGlmIChrdm0tXHUwMDNlYXJjaC5wZ2QpIHtcbiA4MjI6XHRcdFx0a3ZtX3Jpc2N2X2dzdGFnZV9pbml0KFx1MDAyNmdzdGFnZSwga3ZtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAsIGFuZCBpdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgY2FzZSB3aGVyZSB0aGUgcGFnZSBpcyAqYWxyZWFkeSogbWFwcGVkLiBUaGUgb3JpZ2luYWwgY29kZSBkaWRuJiMzOTt0IGhhbmRsZSB0aGlzIHNjZW5hcmlvLCBidXQgdGhlIGFkZGVkIGxpbmVzIGluZGljYXRlIHRoYXQgaWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgKGhwYSkgb2YgdGhlIHBhZ2UgYWxpZ25lZCBkb3duIHRvIHRoZSBwYWdlIHNpemUgbWF0Y2hlcyB0aGUgYWxpZ25lZC1kb3duIHBoeXNpY2FsIGFkZHJlc3MgZGVyaXZlZCBmcm9tIHRoZSBwYWdlIHRhYmxlIGVudHJ5LCB3ZSBub3cgcG9wdWxhdGUgYG91dF9tYXBgLiBTcGVjaWZpY2FsbHksIGl0IHNldHMgYG91dF9tYXAtJmd0O2FkZHJgLCBgb3V0X21hcC0mZ3Q7bGV2ZWxgLCBhbmQgYG91dF9tYXAtJmd0O3B0ZWAuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgYXZvaWRzIHVubmVjZXNzYXJ5IHJlLW1hcHBpbmdzIG9yLCBwb3NzaWJseSwgaW5jb3JyZWN0IG1hcHBpbmdzLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgKmRvZXMqIGBvdXRfbWFwYCBnZXQgc2VudCB0byB1c2Vyc3BhY2U/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZmlndXJlIG91dC4KCk15IGludHVpdGlvbiBzYXlzIHRoYXQgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHByZS1mYXVsdCBzaXR1YXRpb24sIHRoZW4gYG91dF9tYXBgIHByb2JhYmx5IGlzIG5vdCBzZW50IGRpcmVjdGx5IHRvIHVzZXJzcGFjZTsgaG93ZXZlciwgdGhlIGluZm9ybWF0aW9uIGluIGBvdXRfbWFwYCBtYXkgYmUgdXNlZCB0byByZXNwb25kIHRvIGEgdXNlcnNwYWNlIHJlcXVlc3QsIG1heWJlIGluIGEgbWFubmVyIHRoYXQmIzM5O3MgdHJhbnNwYXJlbnQgdG8gdGhlIHVzZXJzcGFjZSBjYWxsZXIuIEkga25vdyB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGludm9sdmVkIGluIGEgcHJlLWZhdWx0LCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIGBrdm1fdmNwdV9pb2N0bF9wcmVfZmF1bHRfbWVtb3J5YCwgb3Igc29tZXRoaW5nIGxpa2UgaXQuIEkgc2hvdWxkIHZlcmlmeSB0aGUgY2FsbCBjaGFpbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgaW4gYG91dF9tYXBgIGlzIHVzZWQgZG93bnN0cmVhbS4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIHNlZSBob3cgdGhpcyBkYXRhIGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3NTE6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUyLVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3OTc9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NDAtLyoqXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg0MTogKiBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKSAtLSBwcmUtZmF1bHQgYW5kIGxpbmsgZ21hcCBkYXQgdGFibGVzXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODU5LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NjEte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDE4LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNzAxPXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzE0Olx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxNS1cdCAqIGJlZm9yZSBrdm1fdGR4LVx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTA9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjE0Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1OC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXHRcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDMyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBrdm1fbWFpbi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDMzNC4gVGhhdCBhcmVhIHVzdWFsbHkgaG9sZHMgY3J1Y2lhbCBwYXJ0cyBvZiB0aGUgS1ZNIGFyY2hpdGVjdHVyZSwgaXQgY291bGQgYmUgdGhlIHBsYWNlIHRvIGZpbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBJJiMzOTttIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBwcm9ibGVtIGJ5IGRpZ2dpbmcgaW50byB0aGF0IHNlY3Rpb24gZGlyZWN0bHkuIEl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIGlzc3VlIGlzIHByb2JhYmx5IGxvY2F0ZWQgaW4gYSByZWdpb24gb2YgY29kZSBuZWFyIGxpbmUgNDMzNC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzM0Olx0c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjQzMzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbjQzMzY6XHR7XG40MzM3Olx0XHRpbnQgaWR4O1xuNDMzODpcdFx0bG9uZyByO1xuNDMzOTpcdFx0dTY0IGZ1bGxfc2l6ZTtcbjQzNDA6XHRcbjQzNDE6XHRcdGlmIChyYW5nZS1cdTAwM2VmbGFncylcbjQzNDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzQzOlx0XG40MzQ0Olx0XHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VncGEpIHx8XG40MzQ1Olx0XHQgICAgIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VzaXplKSB8fFxuNDM0NjpcdFx0ICAgIHJhbmdlLVx1MDAzZWdwYSAmIzQzOyByYW5nZS1cdTAwM2VzaXplIFx1MDAzYz0gcmFuZ2UtXHUwMDNlZ3BhKVxuNDM0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzNDg6XHRcbjQzNDk6XHRcdHZjcHVfbG9hZCh2Y3B1KTtcbjQzNTA6XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuNDM1MTpcdFxuNDM1MjpcdFx0ZnVsbF9zaXplID0gcmFuZ2UtXHUwMDNlc2l6ZTtcbjQzNTM6XHRcdGRvIHtcbjQzNTQ6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG40MzU1Olx0XHRcdFx0ciA9IC1FSU5UUjtcbjQzNTY6XHRcdFx0XHRicmVhaztcbjQzNTc6XHRcdFx0fVxuNDM1ODpcdFxuNDM1OTpcdFx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbjQzNjA6XHRcdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbjQzNjE6XHRcdFx0XHRicmVhaztcbjQzNjI6XHRcbjQzNjM6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG40MzY0Olx0XHRcdFx0YnJlYWs7XG40MzY1Olx0XG40MzY2Olx0XHRcdHJhbmdlLVx1MDAzZXNpemUgLT0gcjtcbjQzNjc6XHRcdFx0cmFuZ2UtXHUwMDNlZ3BhICYjNDM7PSByO1xuNDM2ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjQzNjk6XHRcdH0gd2hpbGUgKHJhbmdlLVx1MDAzZXNpemUpO1xuNDM3MDpcdFxuNDM3MTpcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuNDM3MjpcdFx0dmNwdV9wdXQodmNwdSk7XG40MzczOlx0XG40Mzc0Olx0XHQvKiBSZXR1cm4gc3VjY2VzcyBpZiBhdCBsZWFzdCBvbmUgcGFnZSB3YXMgbWFwcGVkIHN1Y2Nlc3NmdWxseS4gICovXG40Mzc1Olx0XHRyZXR1cm4gZnVsbF9zaXplID09IHJhbmdlLVx1MDAzZXNpemUgPyByIDogMDtcbjQzNzY6XHR9XG40Mzc3Olx0I2VuZGlmXG40Mzc4Olx0XG40Mzc5Olx0c3RhdGljIGludCBrdm1fd2FpdF9mb3JfdmNwdV9vbmxpbmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuNDM4MDpcdHtcbjQzODE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuNDM4MjpcdFxuNDM4MzpcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgKioKCkFscmlnaHQsIHNvIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4uLiB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIG15IG1lbnRhbCBhbGFybSBiZWxscy4gSSBrbm93IHdoZXJlIHRoYXQgZnVuY3Rpb24gc2l0cyBpbiB0aGUgS1ZNIGNvZGViYXNlOyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaW9jdGxgLiBNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgY29ubmVjdGluZyB0aGUgZG90cy4gYGt2bV92Y3B1X2lvY3RsYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGEgd2hvbGUgcmFmdCBvZiBoeXBlcnZpc29yIHJlcXVlc3RzLCBlc3NlbnRpYWxseSB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGd1ZXN0IE9TJiMzOTtzIHVzZXJzcGFjZSBhbmQgdGhlIEtWTSBjb3JlJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlLgoKU28sIHRoaXMgbWVhbnMgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGJlaW5nIGludm9rZWQgKmR1cmluZyogYW4gSU9DVEwgY2FsbC4gVGhlIGltcGxpY2F0aW9ucyBhcmUgZmFpcmx5IGNsZWFyLiBJdCYjMzk7cyBsaWtlbHkgaGFuZGxpbmcgbWVtb3J5IGZhdWx0cyAqYmVmb3JlKiB0aGV5IGFyZSB0cnVseSByYWlzZWQgYnkgdGhlIGhhcmR3YXJlIE1NVS4gVGhpcyBzdWdnZXN0cyBpdCYjMzk7cyBwYXJ0IG9mIGEgcHJlLWVtcHRpdmUgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtLCBwb3RlbnRpYWxseSBhaW1pbmcgYXQgb3B0aW1pemluZyBwYWdlIGZhdWx0cywgZGVhbGluZyB3aXRoIG1lbW9yeSBiYWxsb29uaW5nIG9wZXJhdGlvbnMsIG9yIGltcGxlbWVudGluZyBzb21lIGZvcm0gb2YgbWVtb3J5IHByb3RlY3Rpb24vdmlydHVhbGl6YXRpb24uIEnigJlkIGd1ZXNzIGl0IGlzIHdvcmtpbmcgd2l0aCBzb21lIGZvcm0gb2YgcHJlLWVtcHRpdmUgbWVtb3J5IGZhdWx0LCBsaWtlbHkgdG8gaW1wcm92ZSB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiB0aGUgZ3Vlc3QgaW4gc29tZSB3YXkuCgpJJiMzOTtkIHdhbnQgdG8gcXVpY2tseSBjaGVjayB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLCB0byBrbm93IHdoYXQgc3BlY2lmaWNhbGx5IGlzIHRoZSB0eXBlIG9mIGZhdWx0IGl0JiMzOTtzIGFudGljaXBhdGluZy4gQWxzbywgaXTigJlkIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgKndoeSogdGhlIGZhdWx0IGlzIGJlaW5nIHByZS1lbXB0ZWQgYW5kIGhvdyBLVk0gaXMgaGFuZGxpbmcgdGhpcyBwb3RlbnRpYWwgZ3Vlc3QtbGV2ZWwgZmF1bHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0IGFuZCBkZXRlcm1pbmUgYW55IGFzc29jaWF0ZWQgb3B0aW1pemF0aW9ucy4gSSYjMzk7ZCBkZWZpbml0ZWx5IHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udHJvbCBmbG93IHRvIHNlZSB3aGVuIGl0JiMzOTtzIGNhbGxlZCBhbmQgdGhlIHR5cGljYWwgd29ya2xvYWQuIEEgcXVpY2sgZ3JlcCBvZiB0aGUgY29kZSBiYXNlIHdpbGwgY2VydGFpbmx5IGlsbHVtaW5hdGUgdGhpbmdzIG1vcmUgcXVpY2tseS4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzNS1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MDY9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVx0XHRcdGJyZWFrO1xudmlydC9rdm0va3ZtX21haW4uYzo0NjM5Olx0XHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcdTAwMjZyYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NDAtXHRcdC8qIFBhc3MgYmFjayBsZWZ0b3ZlciByYW5nZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBrdm1fdmNwdV9pb2N0bGAgKGNpcmNhIGxpbmUgNDYzOCkqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBrdm1fdmNwdV9pb2N0bGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0NjM4IGluIHRoZSBzb3VyY2UuIEdpdmVuIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG90ZW50aWFsIGlzc3VlLCBJIHN1c3BlY3QgdGhhdCB0aGUgY3JpdGljYWwgZGF0YSBpcyBwcm9jZXNzZWQgaW4gb3IgYXJvdW5kIHRoYXQgbGluZS4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gdGhlIHByZXZpb3VzIGNvbnRleHQsIHRoYXQgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgYSBjZXJ0YWluIGluc3RydWN0aW9uIG9yIHNlcmllcyBvZiBpbnN0cnVjdGlvbnMgcmVsYXRlZCB0byB0aGUgdmlydHVhbCBDUFUgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGhhbmRsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgZnVuY3Rpb24gdG8gY29uZmlybSB0aGF0IG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGVycm9yIGNvZGVzIGFuZCB0aGUgZGF0YSBiZWluZyBwYXNzZWQgaW4gdGhlIGlvY3RsIGNvbW1hbmRzLiBMZXQgbWUgZG91YmxlIGNoZWNrIGlmIEkmIzM5O20gdGhpbmtpbmcgb2YgdGhlIHJpZ2h0IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDYzMDpcdFx0XHRicmVhaztcbjQ2MzE6XHRcdH1cbjQ2MzI6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbjQ2MzM6XHRcdGNhc2UgS1ZNX1BSRV9GQVVMVF9NRU1PUlk6IHtcbjQ2MzQ6XHRcdFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlO1xuNDYzNTpcdFxuNDYzNjpcdFx0XHRyID0gLUVGQVVMVDtcbjQ2Mzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnJhbmdlLCBhcmdwLCBzaXplb2YocmFuZ2UpKSlcbjQ2Mzg6XHRcdFx0XHRicmVhaztcbjQ2Mzk6XHRcdFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXHUwMDI2cmFuZ2UpO1xuNDY0MDpcdFx0XHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXG40NjQxOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2cmFuZ2UsIHNpemVvZihyYW5nZSkpKVxuNDY0MjpcdFx0XHRcdHIgPSAtRUZBVUxUO1xuNDY0MzpcdFx0XHRicmVhaztcbjQ2NDQ6XHRcdH1cbjQ2NDU6XHQjZW5kaWZcbjQ2NDY6XHRcdGRlZmF1bHQ6XG40NjQ3Olx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuNDY0ODpcdFx0fVxuNDY0OTpcdG91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5NzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrcyBpbiBLVk0gUHJlLUZhdWx0IE1lbW9yeSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGNhc2UgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxlYWthZ2UuIFRoZSBpbml0aWFsIGNvbmNlcm4gd2FzIHRoYXQgdGhlIGByYW5nZWAgc3RydWN0LCBhZnRlciBiZWluZyBwcm9jZXNzZWQgYnkgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdoZW4gY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZS4gSG93ZXZlciwgb24gY2xvc2VyIGluc3BlY3Rpb24sIGl0JiMzOTtzIGNsZWFyIHRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2Ugd2l0aCBgY29weV9mcm9tX3VzZXIoJmFtcDtyYW5nZSwgYXJncCwgc2l6ZW9mKHJhbmdlKSlgICpiZWZvcmUqIGl0JiMzOTtzIGV2ZW4gcGFzc2VkIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbi4gU28sIHRoZSBvbmx5IGRhdGEgcmV0dXJuZWQgdG8gdXNlciBzcGFjZSBpbiBgcmFuZ2VgIGlzIHRoZSB1cGRhdGVkICYjMzk7bGVmdG92ZXImIzM5OyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBkYXRhLiBUaGF0JiMzOTtzIGdvb2Q7IHRoZSBpbml0aWFsIHdvcnJ5IGlzIGFkZHJlc3NlZC4KCk15IG5leHQgbGluZSBvZiBpbnZlc3RpZ2F0aW9uIGNlbnRlcmVkIG9uIGBvdXRfbWFwYCB3aXRoaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFRoaXMgc3RydWN0IGlzIHBhc3NlZCBhcm91bmQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyByZXR1cm5lZC4gVGhlIGNvZGUgc2hvd3MgdGhhdCBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyAoYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2ApLiBUaGVuIGl0IGlzIGFnYWluIHplcm9lZCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIHdpdGggYG1lbXNldChvdXRfbWFwLCAwLCBzaXplb2YoKm91dF9tYXApKWAsICpiZWZvcmUqIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBwb3B1bGF0ZXMgc29tZSBvZiBpdHMgbWVtYmVycy4KClRoZSBsb2dpYyB3aXRoaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBlaXRoZXIgc2V0cyBgb3V0X21hcC5wdGVgLCBhbG9uZyB3aXRoIG90aGVyIG1lbWJlcnMsIG9yIHJldHVybnMgd2l0aG91dCBzZXR0aW5nIGFueSBvZiB0aG9zZSB2YWx1ZXMuIFRoZSBsb29wIGluIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGNvbnRpbnVlcyBpZiBgb3V0X21hcC5wdGVgIGlzIG5vdCBzZXQ7IG90aGVyd2lzZSwgaXQgYnJlYWtzLiBJbXBvcnRhbnRseSwgYG91dF9tYXAubGV2ZWxgIGlzIHVzZWQgKmFmdGVyKiB0aGlzLiBTaW5jZSBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgYW55IHVuaW5pdGlhbGl6ZWQgcmVhZHMgaW4gYG91dF9tYXBgIHdpbGwgcmVhZCB6ZXJvLiBObyBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLgoKVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoZSBgb3V0X21hcGAgaXMgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIGFueSBmaWVsZHMgYXJlIGNvbmRpdGlvbmFsbHkgc2V0IGJhc2VkIG9uIHRoZSBtYXBwaW5nIHByb2Nlc3MuIFRoaXMgY2xlYXIgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgaXMga2V5LiBJJiMzOTttIG5vdyBjb25maWRlbnQgdGhhdCB0aGVyZSYjMzk7cyBubyBwYXRoIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGBvdXRfbWFwYCB0byBsZWFrIGJhY2sgdG8gdXNlciBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBrdm1fZ3N0YWdlX21hcHBpbmdgKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ2AgYWN0dWFsbHkgKmlzKi4gVGhpcyBzb3VuZHMgbGlrZSBhIGtleSBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsaXphdGlvbiBsYXllciwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZ3Vlc3Qgc3RhZ2UgdGFibGUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byBwaW5wb2ludCBpdHMgZXhhY3QgbG9jYXRpb24gaW4gdGhlIEtWTSBzb3VyY2UgY29kZS4gS25vd2luZyBpdHMgc3RydWN0dXJlIHdpbGwgaW5mb3JtIGhvdyB0aGUgdmlydHVhbGl6YXRpb24gc3lzdGVtIGhhbmRsZXMgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlIGlmIGl04oCZcyBpbiBhIGhlYWRlciBmaWxlLCBhbmQgSSBleHBlY3QgaXQgaXMsIHByb2JhYmx5IG5lc3RlZCB3aXRoaW4gYSBjb3JlIEtWTSBpbmNsdWRlIGRpcmVjdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggdG8gbG9jYXRlIHRoZSBkZWNsYXJhdGlvbiBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTEyPXN0cnVjdCBrdm1fZ3N0YWdlIHtcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC0yMC1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjIxOnN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtMjItXHRncGFfdCBhZGRyO1xuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTUzPWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NldF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTU0LVx0XHRcdCAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaDo1NTpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm1hcCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC01Ni1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaD02MT1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTY0LVx0XHRcdCAgICAgIGJvb2wgcGFnZV9yZG9ubHksIGJvb2wgcGFnZV9leGVjLFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6NjU6XHRcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Ni1cbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0xND1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fbW11LmgtMTUtXHRcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDoxNjpcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCk7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0xNy1pbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0xNDI9aW50IGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMTQzLVx0XHRcdCAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzoxNDQ6XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICptYXApXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0xNDUte1xuLS1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTIwNz1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIxMC1cdFx0XHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjIxMTpcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjEyLXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz00MD1pbnQga3ZtX3Jpc2N2X21tdV9pb3JlbWFwKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCBwaHlzX2FkZHJfdCBocGEsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTEtXHR9O1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NTI6XHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG1hcDtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTUzLVx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTU1Mj1zdGF0aWMgYm9vbCBrdm1fcmlzY3ZfbW11X2RpcnR5X2xvZ193cml0ZV9mYXVsdF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01NTQtXHRcdFx0XHRcdFx0ICAgICBncGFfdCBncGEsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo1NTU6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTU2LXtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyNC1cdFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjYyNTpcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyNi17XG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NzUxPWxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTMte1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzU0Olx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTUtXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE2PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTE4LXtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjE5Olx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBob3N0X21hcDtcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTIwLVx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSBHLVN0YWdlIG9uIFJJU0MtVioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgS1ZNIGd1ZXN0IHN0YWdlIG9uIFJJU0MtVi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oYCBoZWFkZXIuIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGludGVyZXN0aW5nIGFyb3VuZCBsaW5lIDIxLCBsaWtlbHkgc29tZSBjcnVjaWFsIHN0cnVjdHVyZSBkZWZpbml0aW9uIG9yIG1hY3JvIHRoYXQgSSB3YW50IHRvIHJldmlldyBpbiBkZXRhaWwuIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIG9yIGhhbmRsZWQgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiB0aGF0IEkgd2FudCB0byBhbmFseXplLiBJJiMzOTttIGdvaW5nIGluIHdpdGggYSB0YXJnZXRlZCBhcHByb2FjaCB0byBxdWlja2x5IHBhcnNlIHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0I2RlZmluZSBLVk1fR1NUQUdFX0ZMQUdTX0xPQ0FMXHRcdEJJVCgwKVxuICAxNjpcdFx0dW5zaWduZWQgbG9uZyB2bWlkO1xuICAxNzpcdFx0cGdkX3QgKnBnZDtcbiAgMTg6XHRcdHVuc2lnbmVkIGxvbmcgcGdkX2xldmVscztcbiAgMTk6XHR9O1xuICAyMDpcdFxuICAyMTpcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xuICAyMjpcdFx0Z3BhX3QgYWRkcjtcbiAgMjM6XHRcdHB0ZV90IHB0ZTtcbiAgMjQ6XHRcdHUzMiBsZXZlbDtcbiAgMjU6XHR9O1xuICAyNjpcdFxuICAyNzpcdCNpZmRlZiBDT05GSUdfNjRCSVRcbiAgMjg6XHQjZGVmaW5lIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0c1x0OVxuICAyOTpcdCNlbHNlXG4gIDMwOlx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcdDEwXG4gIDMxOlx0I2VuZGlmXG4gIDMyOlx0XG4gIDMzOlx0ZXh0ZXJuIHVuc2lnbmVkIGxvbmcga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVscztcbiAgMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBLVk0gUklTQy1WIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEtWTSBSSVNDLVYgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYC4gSSBzZWUgaXQgaGFzIHRoZSBzdGFuZGFyZCBgYWRkcmAsIGBwdGVgLCBhbmQgYGxldmVsYCBmaWVsZHMuIEdvb2QuIEkgbm90ZSB0aGF0IGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAgaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBhbHNvIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gaXQgb3V0LiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IGdhcmJhZ2UgbGVmdCBiZWhpbmQgdGhlcmUuIEdvb2QsIHdlJiMzOTtyZSBjb3ZlcmluZyBvdXIgYmFzZXMuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgdG8gYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAuIFRoaXMgb25lJiMzOTtzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBiZWluZyBjb3BpZWQgZnJvbSBhbmQgdG8gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGFsd2F5cyBhIHBvdGVudGlhbCBob3RzcG90IGZvciB2dWxuZXJhYmlsaXRpZXMuIEkgc2VlIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbjogYGdwYWAsIGBzaXplYCwgYGZsYWdzYCwgYW5kIHNvbWUgcGFkZGluZy4gSG1tLCB0aGUgcGFkZGluZy4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgY291bGQgZ2V0IHRyaWNreS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LCBvdGhlcndpc2Ugd2UgbWlnaHQgaGF2ZSBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvci4gVGltZSB0byBjaGVjayB0aGUga2VybmVsIGhlYWRlcnMgZm9yIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBMZXQmIzM5O3MgZ2V0IHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvbiB0aGF0IGRlZmluaXRpb24gZnJvbSBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gSSYjMzk7bGwgY29uZmlybSBob3cgdGhhdCBzdHJ1Y3QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCwgZXNwZWNpYWxseSB0aGF0IHBhZGRpbmcgZmllbGQsIGJlZm9yZSBwcm9jZWVkaW5nLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2My1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY0OiNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcdF9JT1dSKEtWTUlPLCAweGQ1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2NS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY2OnN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2Ny1cdF9fdTY0IGdwYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIEtWTSBIZWFkZXIgRGVmaW5pdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgS1ZNIGludGVyZmFjZSBkZXRhaWxzLCBzcGVjaWZpY2FsbHkgc29tZSBvZiB0aGUgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIHVzZWQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGh5cGVydmlzb3IuIEkgcmVtZW1iZXIgYSBzcGVjaWZpYyBhcmVhIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gZGVidWdnaW5nLCBzbyBsZXQmIzM5O3MganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYGluY2x1ZGUvdWFwaS9saW51eC9rdm0uaGAgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSAxNjY2IHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEkmIzM5O20gYmV0dGluZyB0aGF0IGFyZWEgcHJvYmFibHkgZGVmaW5lcyBzb21ldGhpbmcgY3J1Y2lhbCB0byB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLiBJIHdpbGwgc2VlIGlmIHRoYXQgaXMgdGhlIGNvcnJlY3QgZW50cnlwb2ludCBhbmQgd29yayBteSB3YXkgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgva3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NjY6XHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xuMTY2NzpcdFx0X191NjQgZ3BhO1xuMTY2ODpcdFx0X191NjQgc2l6ZTtcbjE2Njk6XHRcdF9fdTY0IGZsYWdzO1xuMTY3MDpcdFx0X191NjQgcGFkZGluZ1s1XTtcbjE2NzE6XHR9O1xuMTY3MjpcdFxuMTY3MzpcdCNlbmRpZiAvKiBfX0xJTlVYX0tWTV9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTIwCgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDE0MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogS1ZNIFByZS1GYXVsdCBNZW1vcnkgZm9yIFJJU0MtVioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIG5ldyBLVk0gZmVhdHVyZSBmb3IgUklTQy1WOiBwcmUtZmF1bHRpbmcgbWVtb3J5LiBUaGUgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzLgoKRmlyc3QsIHRoZSBga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHN0cnVjdCBpdHNlbGYgaXMgY29waWVkIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAuIENydWNpYWxseSwgdGhpcyBjb3BpZXMgdGhlICplbnRpcmUqIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBwYWRkaW5nLiBTbywgYWxsIGZpZWxkcywgaW5jbHVkaW5nIHRoZSBwYWRkaW5nLCBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB1c2VyLXByb3ZpZGVkIGRhdGEuIFRoZSBrZXJuZWwgdGhlbiB1cGRhdGVzIGBzaXplYCBhbmQgYGdwYWAuIFRoZSBlbnRpcmUgc3RydWN0LCBpbmNsdWRpbmcgdGhlIHBvdGVudGlhbGx5IHVwZGF0ZWQgZmllbGRzLCBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3RvX3VzZXJgLiBObyBrZXJuZWwgZGF0YSBpcyBsZWFrZWQsIHRoZSBwYWRkaW5nIHNpbXBseSByZXRhaW5zIGl0cyBvcmlnaW5hbCB2YWx1ZS4KCk5leHQsIHdlIGRpdmUgaW50byBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gIEkgc2VlIGEgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2AgaGVyZS4gIFRoYXQmIzM5O3MgZ29vZCwgYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uICBUaGUgY29kZSB0aGVuIGNhbGxzIGBrdm1fcmlzY3ZfbW11X21hcGAuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IGxlYXZlIGBvdXRfbWFwYCBpbiBhIHBhcnRpYWwgaW5pdGlhbGl6ZWQgc3RhdGUuICBXZSBjYW4gc2VlIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCBleHBsaWNpdGx5IGBtZW1zZXRgcyBgb3V0X21hcGAgdG8gemVybyBhbmQgdGhlbiBjYWxscyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAsIHdoaWNoIHNldHMgYG91dF9tYXAubGV2ZWxgIGFuZCBgb3V0X21hcC5wdGVgIHRvZ2V0aGVyLgoKTGV0JiMzOTtzIGNoZWNrIGBrdm1fcmlzY3ZfbW11X21hcGAgaXRzZWxmLCBqdXN0IHRvIGJlIHN1cmUuICBZZXMsIGl0IGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgc3RydWN0LCBzbyB0aGF0IGlzIHNhZmUuCgpUaGVuLCBhcmUgdGhlcmUgb3RoZXIgcGxhY2VzIHRoZSBzdHJ1Y3QgaXMgdXNlZD8gTGV0JiMzOTtzIHRyYWNlIGl0IGFuZCBkb3VibGUtY2hlY2suIE9rYXksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMgYGdmbmAsIGBtZW1zbG90YCwgYGh2YWAsIGByZXRgLCBgbWFwX3NpemVgLCBhbmQgYGVuZGAsIGFuZCB1c2VkIHZhcmlhYmxlcyBhcmUgYWxsIGFzc2lnbmVkIGJlZm9yZSB1c2Ugd2l0aGluIHRoZSBmdW5jdGlvbi4gYG91dF9tYXBgIGlzIGluaXRpYWxpemVkLCB0aGUgb3RoZXJzIGFyZSBhc3NpZ25lZC4KClNlbGZ0ZXN0cyBhcmVuJiMzOTt0IGEgY29uY2VybiBmb3Iga2VybmVsIG1lbW9yeSBzYWZldHkgaW4gdGhlbXNlbHZlczsgdGhleSYjMzk7cmUgdXNlci1zcGFjZS4KClNvLCBpdCBzZWVtcyB0aGF0IHRoZXJlJiMzOTtzIG5vIHBhdGggdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLiAgVGhlIGNvZGUgY29uc2lzdGVudGx5IGluaXRpYWxpemVzIG9yIGFzc2lnbnMgYWxsIHZhcmlhYmxlcyBiZWZvcmUgdXNlLCBhbmQgYW55IHVzZXItcHJvdmlkZWQgcGFkZGluZyBpcyBleHBsaWNpdGx5IGNvcGllZC4gIFRoZSBwYXRjaCBqdXN0IGFkZHMgYSBuZXcgY2FwYWJpbGl0eSwgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAsIHdoaWNoIG1hcHMgbWVtb3J5IHBhZ2VzIGFoZWFkIG9mIHRpbWUuIEkgd291bGQgZXhwZWN0IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIGJ1ZyBkZXRlY3RvcnMgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd3JvbmcgcGFnZSBzaXplcywgb3IgbG9ja2luZyBwcm9ibGVtcy4gR2l2ZW4gdGhpcyBhbmFseXNpcywgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIHRoYXQgcmVxdWlyZXMgS01TQU4uIFdlJiMzOTtyZSBnb29kIHdpdGggS0FTQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIG9uIFJJU0MtVi4gSXQgYWRkcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB3aGljaCB1c2VzIGEgbG9jYWwgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcGAgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YC4gVGhlIGBvdXRfbWFwYCBpcyBmdXJ0aGVyIHplcm9lZCBvdXQgdmlhIGBtZW1zZXRgIGluIGBrdm1fcmlzY3ZfbW11X21hcGAgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZC4gVGhlIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHBhc3NlZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBjb3B5X2Zyb21fdXNlcmAgKGluY2x1ZGluZyBwYWRkaW5nKSBiZWZvcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGNvcGllZCBiYWNrLCBzbyB0aGVyZSBpcyBubyBrZXJuZWwgaW5mby1sZWFrLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBvbiBSSVNDLVYuIEl0IGFkZHMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2hpY2ggdXNlcyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXBgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAuIFRoZSBgb3V0X21hcGAgaXMgZnVydGhlciB6ZXJvZWQgb3V0IHZpYSBgbWVtc2V0YCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQuIFRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBwYXNzZWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgIChpbmNsdWRpbmcgcGFkZGluZykgYmVmb3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBjb3BpZWQgYmFjaywgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODoxNS4xMzY2MzI0MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQ1NDEwOTM3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgb24gUklTQy1WLiBJdCBhZGRzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdoaWNoIHVzZXMgYSBsb2NhbCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwYCBpbml0aWFsaXplZCB0byBgeyAwIH1gLiBUaGUgYG91dF9tYXBgIGlzIGZ1cnRoZXIgemVyb2VkIG91dCB2aWEgYG1lbXNldGAgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGUgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAgcGFzc2VkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYGNvcHlfZnJvbV91c2VyYCAoaW5jbHVkaW5nIHBhZGRpbmcpIGJlZm9yZSBiZWluZyBtb2RpZmllZCBhbmQgY29waWVkIGJhY2ssIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBmb3IgUklTQy1WIGJ5IGFkZGluZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkgYW5kIG1vZGlmeWluZyB0aGUgcGFnZSBtYXBwaW5nIGxvZ2ljIGluIGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UgYW5kIGt2bV9yaXNjdl9tbXVfbWFwLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBpb2N0bCBjb2RlIHBhdGhzIGFuZCBtb2RpZmllcyB0aGUgY29yZSBLVk0gTU1VIGxvZ2ljIG9uIFJJU0MtViwgd2hpY2ggaXMgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODoxNS4xMzY2NDA5NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzg2NDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdmYjhjZjJjNWQ4YzA4NGNhY2FkMTkzM2RjMjlhMDZlZjkxZTVlM2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG5pbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuQEAgLTI4LDYgKzI4LDcgQEAgY29uZmlnIEtWTVxcbiBcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiBcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuIFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbitcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiBcXHRzZWxlY3QgS1ZNX01NSU9cXG4gXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuIFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvdXRfbWFwLVxcdTAwM2VsZXZlbCwgdHJ1ZSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcXG4rXFx0XFx0XFx0b3V0X21hcC1cXHUwMDNlYWRkciA9IEFMSUdOX0RPV04oZ3BhLCBwYWdlX3NpemUpO1xcbitcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuK1xcdFxcdFxcdG91dF9tYXAtXFx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5pbmRleCA2MDM1YjVlYzk1MDM5Li4zM2Q0YmE0MDZiMGRlIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5AQCAtNzQ4LDYgKzc0OCw0OCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xcbitcXHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4rXFx0Z3BhX3QgZW5kO1xcbitcXHRnZm5fdCBnZm47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVxcdTAwM2VncGEpO1xcbitcXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4rXFx0aWYgKCFtZW1zbG90KVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdF9wcm90KG1lbXNsb3QsIGdmbiwgTlVMTCk7XFxuK1xcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0Zm9yICg7Oykge1xcbitcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbitcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXFx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXFx1MDAyNm91dF9tYXApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0aWYgKHB0ZV92YWwob3V0X21hcC5wdGUpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0bWFwX3NpemUgPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xcbitcXHRlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVxcdTAwM2VncGEsIG1hcF9zaXplKSArIG1hcF9zaXplO1xcbitcXG4rXFx0cmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtXFx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVxcdTAwM2VncGEpO1xcbit9XFxuK1xcbiBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlICpwZ2RfcGFnZTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXFxuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxcbiBcXHRjYXNlIEtWTV9DQVBfTVBfU1RBVEU6XFxuIFxcdGNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDpcXG4gXFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcXG4rXFx0Y2FzZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlk6XFxuIFxcdFxcdHIgPSAxO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZ2V0LXJlZy1saXN0XFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxcbitURVNUX0dFTl9QUk9HU19yaXNjdiArPSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gcnNlcV90ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG5AQCAtMTIsNiArMTIsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Zkc28vcHJvY2Vzc29yLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbiBcXG4rI2RlZmluZSBQQUdFX1NISUZUXFx0XFx0MTJcXG4rI2RlZmluZSBQQUdFX1NJWkVcXHRcXHRCSVRfVUxMKFBBR0VfU0hJRlQpXFxuK1xcbiAjZGVmaW5lIElOU05fT1BDT0RFX01BU0tcXHQweDAwN2NcXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFxcdDJcXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cXHQyOFxcbkBAIC0xMjcsNiArMTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGxcXG4gXFxuIHZvaWQgdm1faW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgZXhjZXB0aW9uX2hhbmRsZXJfZm4gaGFuZGxlcik7XFxuIFxcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXFxuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1xcdFxcdFxcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxcbisjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUXFx0XFx0XFx0NDhcXG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xcbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX01BU0tcXHRcXHRcXHQweDAwMDBGRjgwMDAwMDAwMDBVTExcXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVFxcdFxcdFxcdDM5XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uYjRkNDFhNDA3NTUzNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC00Myw2ICs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHtcXG4gXFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcXG4gXFx0UEdUQkxfTDJfSU5ERVhfTUFTSyxcXG4gXFx0UEdUQkxfTDNfSU5ERVhfTUFTSyxcXG4rXFx0UEdUQkxfTDRfSU5ERVhfTUFTSyxcXG4gfTtcXG4gXFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XFxuQEAgLTUwLDYgKzUxLDcgQEAgc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHtcXG4gXFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXFxuIFxcdFBHVEJMX0wyX0lOREVYX1NISUZULFxcbiBcXHRQR1RCTF9MM19JTkRFWF9TSElGVCxcXG4rXFx0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXFxuIH07XFxuIFxcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjA4OjE1Ljc3NTQ4NTc5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjExNjc3MzI2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VcIixcbiAgICBcImt2bV9yaXNjdl9tbXVfbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgZm9yIFJJU0MtViBieSBhZGRpbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5IGFuZCBtb2RpZnlpbmcgdGhlIHBhZ2UgbWFwcGluZyBsb2dpYyBpbiBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlIGFuZCBrdm1fcmlzY3ZfbW11X21hcC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgaW9jdGwgY29kZSBwYXRocyBhbmQgbW9kaWZpZXMgdGhlIGNvcmUgS1ZNIE1NVSBsb2dpYyBvbiBSSVNDLVYsIHdoaWNoIGlzIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2ZiOGNmMmM1ZDhjMDg0Y2FjYWQxOTMzZGMyOWEwNmVmOTFlNWUzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDEzOjA4OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbmluZGV4IGVjMmNlZTBhMzllMDEuLjhhYzIwOWU4YWM4NzAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXG5AQCAtMjgsNiArMjgsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4rXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuIFx0c2VsZWN0IEtWTV9NTUlPXG4gXHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiBcdHNlbGVjdCBTQ0hFRF9JTkZPXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuaW5kZXggZTUwMDJjYjljYmVmMS4uNmJkOGI4ZmQ2Y2ViMiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuQEAgLTI4MCw2ICsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIFx0XHRcdFx0XHRcdCAgICBvdXRfbWFwLVx1MDAzZWxldmVsLCB0cnVlKTtcbiBcdFx0fSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHtcbiBcdFx0XHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XG4rXHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4rXHRcdFx0b3V0X21hcC1cdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XG4rXHRcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDYwMzViNWVjOTUwMzkuLjMzZDRiYTQwNmIwZGUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC03NDgsNiArNzQ4LDQ4IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbit7XG4rXHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtcbitcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4rXHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xuK1x0dW5zaWduZWQgbG9uZyBodmE7XG4rXHRncGFfdCBlbmQ7XG4rXHRnZm5fdCBnZm47XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2ZuID0gZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpO1xuK1x0bWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7XG4rXHRpZiAoIW1lbXNsb3QpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0aHZhID0gZ2ZuX3RvX2h2YV9tZW1zbG90X3Byb3QobWVtc2xvdCwgZ2ZuLCBOVUxMKTtcbitcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbitcbitcdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfVk1fREVBRCwgdmNwdSkpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmIChwdGVfdmFsKG91dF9tYXAucHRlKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdG1hcF9zaXplID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAob3V0X21hcC5sZXZlbCAqIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0cyk7XG4rXHRlbmQgPSBBTElHTl9ET1dOKHJhbmdlLVx1MDAzZWdwYSwgbWFwX3NpemUpICsgbWFwX3NpemU7XG4rXG4rXHRyZXR1cm4gbWluX3QodTY0LCByYW5nZS1cdTAwM2VzaXplLCBlbmQgLSByYW5nZS1cdTAwM2VncGEpO1xuK31cbitcbiBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwZ2RfcGFnZTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92bS5jIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuaW5kZXggYTlmMDgzZmVlYjc2Ny4uNTg1MDBhMTliMzNiZCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbkBAIC0xODcsNiArMTg3LDcgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9NUF9TVEFURTpcbiBcdGNhc2UgS1ZNX0NBUF9JTU1FRElBVEVfRVhJVDpcbiBcdGNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUc6XG4rXHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTIyNSw2ICsyMjUsNyBAQCBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBjb2FsZXNjZWRfaW9fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBnZXQtcmVnLWxpc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBtbXVfc3RyZXNzX3Rlc3RcbitURVNUX0dFTl9QUk9HU19yaXNjdiArPSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSByc2VxX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBzdGVhbF90aW1lXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTEyLDYgKzEyLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdmRzby9wcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFwia3ZtX3V0aWwuaFwiXG4gXG4rI2RlZmluZSBQQUdFX1NISUZUXHRcdDEyXG4rI2RlZmluZSBQQUdFX1NJWkVcdFx0QklUX1VMTChQQUdFX1NISUZUKVxuK1xuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1x0MHgwMDdjXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFx0MlxuICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNXHQyOFxuQEAgLTEyNyw2ICsxMzAsOSBAQCB2b2lkIHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGludCB2ZWN0b3IsIGV4Y2VwdGlvbl9oYW5kbFxuIFxuIHZvaWQgdm1faW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgZXhjZXB0aW9uX2hhbmRsZXJfZm4gaGFuZGxlcik7XG4gXG4rLyogTDQgaW5kZXggQml0WzU2OjQ4XSAqL1xuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1x0XHRcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfU0hJRlRcdFx0XHQ0OFxuIC8qIEwzIGluZGV4IEJpdFs0NzozOV0gKi9cbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX01BU0tcdFx0XHQweDAwMDBGRjgwMDAwMDAwMDBVTExcbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX1NISUZUXHRcdFx0MzlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuaW5kZXggZGVkNTQyOWYzNDQ4My4uYjRkNDFhNDA3NTUzNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbkBAIC00Myw2ICs0Myw3IEBAIHN0YXRpYyB1NjQgcHRlX2luZGV4X21hc2tbXSA9IHtcbiBcdFBHVEJMX0wxX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MMl9JTkRFWF9NQVNLLFxuIFx0UEdUQkxfTDNfSU5ERVhfTUFTSyxcbitcdFBHVEJMX0w0X0lOREVYX01BU0ssXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuQEAgLTUwLDYgKzUxLDcgQEAgc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHtcbiBcdFBHVEJMX0wxX0lOREVYX1NISUZULFxuIFx0UEdUQkxfTDJfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MM19JTkRFWF9TSElGVCxcbitcdFBHVEJMX0w0X0lOREVYX1NISUZULFxuIH07XG4gXG4gc3RhdGljIHU2NCBwdGVfaW5kZXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90IGd2YSwgaW50IGxldmVsKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDg6MTUuNzc1NDg3OTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczOTkxNTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIG9uIFJJU0MtVi4gSXQgbG9va3MgbGlrZSBpdCB0b3VjaGVzIHRoZSB1c3VhbCBzdXNwZWN0czogYEtjb25maWdgLCBgZ3N0YWdlLmNgLCBgbW11LmNgLCBhbmQgYHZtLmNgIHdpdGhpbiB0aGUgYGFyY2gvcmlzY3Yva3ZtL2AgZGlyZWN0b3J5LiBQbHVzIHNvbWUgc2VsZnRlc3RzLCBuYXR1cmFsbHkuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gdGhhdCdzIHRoZSBjb3JlIG9mIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIHByb3ZpZGluZyB0aGUgUklTQy1WLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBwcmUtZmF1bHRpbmcgbWVtb3J5IGluIEtWTS4gSXQgYWxzbyBzZXRzIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpbiBgS2NvbmZpZ2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIG92ZXJhbGwgS1ZNIGludGVncmF0aW9uLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaG93IGRvZXMgdXNlcnNwYWNlIGFjY2VzcyB0aGlzPyBBaCwgcmlnaHQsIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwuIFRoYXQgaW9jdGwgYmVjb21lcyBhdmFpbGFibGUgd2hlbiBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBhZGRzIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIHRvIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBpbiBgYXJjaC9yaXNjdi9rdm0vdm0uY2AsIGNvbmZpcm1pbmcgdGhhdC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGlzIGEgaGFyZCByZXF1aXJlbWVudCwgYW5kIHRoaXMgaXMgUklTQy1WLCBzbyB0aGF0IHBhcnQgaXMgY2xlYXIuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnMgbm93OiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCAodGhlIG5ldyBvbmUpIGFuZCB0aGUgbW9kaWZpZWQgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzbid0IGRlY2xhcmVkIHN0YXRpYyBhbmQgaXMgcHJvcGVybHkgZXhwb3NlZC4gWWVzLCBpdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IHRoZSBnZW5lcmljIEtWTSBjb2RlIHdoZW4gYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgIGlzIHNlbGVjdGVkLiBUaGF0IG1ha2VzIHNlbnNlLiBJJ2xsIGRvIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBlbnRpcmUgdHJlZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODoyMi41MTU0MDYzNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODMxMDE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQwLS8qKlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTcwMT1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTUtXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDg6MjQuMzAzNzIyMjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg3NjIzMjYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBLVk0gTWVtb3J5IEZhdWx0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBLVk0gaGFuZGxlcyBtZW1vcnkgZmF1bHRzIGJlZm9yZSB0aGV5IGFjdHVhbGx5IGhhcHBlbiDigJMgdGhhdCBwcmUtZmF1bHQgc3RhZ2UuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpbiB0aGUgY29kZSwgYW5kIEkga25vdyB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJdCdzIGEgc3RhbmRhcmQgcGF0dGVybiwgcmlnaHQ/IExvdy1sZXZlbCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc3R1ZmYgYmVpbmcgaGFuZGxlZCBkb3duc3RyZWFtIGZyb20gdGhlIG1vcmUgZ2VuZXJhbCBLVk0gY29yZSBmdW5jdGlvbi5cblxuTGV0J3MgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCdzIGFjdHVhbGx5IGRvaW5nIGFuZCB3aGVyZSBleGFjdGx5IGl0IGZpdHMgaW4gdGhlIGZhdWx0IGhhbmRsaW5nIHBpcGVsaW5lLiBXaGF0IGFyZSB0aGUga2V5IHRoaW5ncyBpdCdzIHJlc3BvbnNpYmxlIGZvcj8gR290dGEgdHJhY2UgdGhhdCBjb2RlIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBwcmUtZmF1bHQgcm91dGluZSBpcyBpbnZva2VkLiBJcyBpdCByZWxhdGVkIHRvIHNwZWNpZmljIGd1ZXN0IG1lbW9yeSB0eXBlcywgb3IgcGFnZSB0YWJsZSBvcGVyYXRpb25zPyBHb3R0YSB6b29tIGluIGFuZCBnZXQgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODozMC4xNzk5NTgyMTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMTkyNjYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9NDMwOD1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxudmlydC9rdm0va3ZtX21haW4uYzo0MzM0OnN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxudmlydC9rdm0va3ZtX21haW4uYy00MzM1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQwNj1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzOC1cXHRcXHRcXHRicmVhaztcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2Mzk6XFx0XFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXFx1MDAyNnJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NDAtXFx0XFx0LyogUGFzcyBiYWNrIGxlZnRvdmVyIHJhbmdlLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowODozMi4wMTE4OTIxMDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDUyNTMxOTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpcyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaW9jdGxgIHNwZWNpZmljYWxseSBmb3IgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYC4gSW50ZXJlc3RpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2l0aGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIGFyZSBoYW5kbGVkLiBBbmQgdGhlbiwgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaW4gYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgaW4gUklTQy1WIEtWTS4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGd1ZXN0IHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBnaXZlbiBcImdzdGFnZVwiIGFuZCB0aGUgY29udGV4dCBvZiBwcmUtZmF1bHRpbmcuIExldCdzIGRpZyBpbnRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBub3c7IHRoYXQncyB3aGVyZSB0aGUgbWVjaGFuaWNzIG9mIHRoaXMgcHJlLWZhdWx0aW5nIGxpa2VseSBjb21lIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjA4OjU2LjUzNzIxNDE5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkxNzk5NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9NTc9Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3RyeV91cGRhdGVfcHRlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsIHUzMiBsZXZlbCxcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTYwLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjYxOmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjItXFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0xODY9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X2dzdGFnZV91cGRhdGVfcHRlX3Byb3Qoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgdTMyIGxldmVsLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA2LVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjIwNzppbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIwOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM0LVxcdFxcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3MzU6XFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM2LVxcdFxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNy1cXHR9IGVsc2Uge1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjczODpcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzktXFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDg6NTguNDI5MDIxOTk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0NjQ2MTk0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgS1ZNL1JJU0MtViBQYWdlIE1hcHBpbmcgRmxvdyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFnZSBtYXBwaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vUklTQy1WIGVudmlyb25tZW50LiBGcm9tIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGFuZCB0aGUgZmlyc3QgcGxhY2UgaXQncyBjYWxsZWQgZnJvbSBpcyBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGF0IHNlZW1zIGxvZ2ljYWwsIGFzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBwcm9iYWJseSBoYW5kbGVzIHRoZSBhY3R1YWwgR3Vlc3QgU3RhZ2UgbWFwcGluZy4gTm93LCB3aGVyZSBpcyAqYGt2bV9yaXNjdl9tbXVfbWFwYCogYmVpbmcgY2FsbGVkIGZyb20/IEFoLCBsb29rcyBsaWtlIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYWxzbyBsaWtlbHkgYGt2bV9yaXNjdl92Y3B1X2ZhdWx0YC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UnZCBuZWVkIHRvIG1hcCBwYWdlcyB3aGVuIHRoZXJlJ3MgYSBtZW1vcnkgYWNjZXNzIGZhdWx0IG9yIGR1cmluZyBwcmUtZmF1bHRpbmcgdG8gYW50aWNpcGF0ZSBmdXR1cmUgYWNjZXNzLiBUbyByZWFsbHkgZ2V0IGEgZ3Jhc3Agb24gdGhlIGNvbXBsZXRlIHByb2Nlc3MsIEkgc2hvdWxkIHByb2JhYmx5IGRlbHZlIGludG8gdGhlIGBrdm1fcmlzY3ZfbW11X21hcGAgZnVuY3Rpb24gaXRzZWxmLiBMZXQncyBzdGFydCB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgaXQgb3JjaGVzdHJhdGVzIHRoZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcyMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowOTo0OC44OTM2NDUzOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0ODgzMjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfbW11X21hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0xMz12b2lkIGt2bV9yaXNjdl9tbXVfaW91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDoxNDppbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX21tdS5oLTE1LVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01NTI9c3RhdGljIGJvb2wga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MjItXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjIzOmludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI0LVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz03NTE9bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzc4LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc3OTpcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcXHUwMDI2b3V0X21hcCk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzgwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYz0xNj1zdGF0aWMgaW50IGdzdGFnZV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bixcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTY2LVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjY3OlxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIGZhdWx0X2FkZHIsIGh2YSxcXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy02OC1cXHRcXHRcXHRcXHQodHJhcC1cXHUwMDNlc2NhdXNlID09IEVYQ19TVE9SRV9HVUVTVF9QQUdFX0ZBVUxUKSA/IHRydWUgOiBmYWxzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDk6NTAuNzQyNDkwMTc0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNjg3MTE4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUklTQy1WIFBhZ2UgRmF1bHQgSGFuZGxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIEtWTSBSSVNDLVYsIGFuZCBteSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgaXQncyBjZW50ZXJlZCBhcm91bmQgYSBuZXcgZmVhdHVyZSwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIE15IHByaW1hcnkgY29uY2VybiBpcyB0aGF0IGl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgY29yZSBwYWdlIGZhdWx0IGhhbmRsZXIsIGBrdm1fcmlzY3ZfbW11X21hcGAsIHNwZWNpZmljYWxseSBieSBhbHRlcmluZyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgdG8gcG9wdWxhdGUgYG91dF9tYXBgLiBUaGlzIGRlZmluaXRlbHkgaGFzIGZ1enppbmcgcG90ZW50aWFsIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIEFueSBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYXBwaW5nIGxvZ2ljLCBlc3BlY2lhbGx5IHdpdGhpbiBhIGNyaXRpY2FsIHBhdGggbGlrZSBhIHBhZ2UgZmF1bHQgaGFuZGxlciwgd2FycmFudHMgaW1tZWRpYXRlIGFuZCB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5UaGUga2V5IHN5bWJvbHMgSSdsbCBiZSBmb2N1c2luZyBvbiBoZXJlIGFyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG1haW4gaGFuZGxlciBga3ZtX3Jpc2N2X21tdV9tYXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIG5ldyBwcmUtZmF1bHQgbWVjaGFuaXNtIGludGVncmF0ZXMgaW50byB0aGUgZXhpc3RpbmcgcGFnZSBmYXVsdCBwcm9jZXNzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTG9va3MgbGlrZSBgS1ZNYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZW5zdXJlIGlzIGVuYWJsZWQuIEEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUgcGF0Y2ggY29uZmlybWVkIHRoYXQgYHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBhZGRlZCB0byBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBjcnVjaWFsIGZ1bmN0aW9ucyBhcmVuJ3QgaGlkZGVuIGJ5IGJlaW5nIGRlY2xhcmVkIGFzIHN0YXRpYy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gaG9vayBpbnRvIHRoZW0gZm9yIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuIEdvb2QsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGluZGVlZCBhIHB1YmxpYyBmdW5jdGlvbiB3aXRoIGEgYGxvbmdgIHJldHVybiB0eXBlLiBBbmQgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGlzIGFuIGBpbnRgIGFuZCBub3Qgc3RhdGljLiBBbmQsIGZpbmFsbHksIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYW4gYGludGAgYXMgd2VsbCwgc28gbm8gaXNzdWVzIHRoZXJlLlxuXG5BbHJpZ2h0LCBJJ2xsIHJlY29yZCB0aGVzZSBmaW5kaW5ncy4gVGhpcyBwYXRjaCBkZW1hbmRzIHNvbWUgc2VyaW91cyBzY3J1dGlueS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNCwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDk6NTcuODExMjA2MTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA0OTA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGZvciBSSVNDLVYgYnkgYWRkaW5nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSBhbmQgbW9kaWZ5aW5nIHRoZSBwYWdlIG1hcHBpbmcgbG9naWMgaW4ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBhbmQga3ZtX3Jpc2N2X21tdV9tYXAuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGlvY3RsIGNvZGUgcGF0aHMgYW5kIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBNTVUgbG9naWMgb24gUklTQy1WLCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGZvciBSSVNDLVYgYnkgYWRkaW5nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSBhbmQgbW9kaWZ5aW5nIHRoZSBwYWdlIG1hcHBpbmcgbG9naWMgaW4ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBhbmQga3ZtX3Jpc2N2X21tdV9tYXAuIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGlvY3RsIGNvZGUgcGF0aHMgYW5kIG1vZGlmaWVzIHRoZSBjb3JlIEtWTSBNTVUgbG9naWMgb24gUklTQy1WLCB3aGljaCBpcyBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjA5OjU3Ljg5MjI2NDM3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzg1NDUxMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MDk6NTcuODkyODc2NDk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3MTc4NDgzNjQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgb24gUklTQy1WLiBJdCBhZGRzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIHdoaWNoIHVzZXMgYSBsb2NhbCBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwYCBpbml0aWFsaXplZCB0byBgeyAwIH1gLiBUaGUgYG91dF9tYXBgIGlzIGZ1cnRoZXIgemVyb2VkIG91dCB2aWEgYG1lbXNldGAgaW4gYGt2bV9yaXNjdl9tbXVfbWFwYCBiZWZvcmUgYmVpbmcgcG9wdWxhdGVkLiBUaGUgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAgcGFzc2VkIGZyb20gdXNlciBzcGFjZSBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgYGNvcHlfZnJvbV91c2VyYCAoaW5jbHVkaW5nIHBhZGRpbmcpIGJlZm9yZSBiZWluZyBtb2RpZmllZCBhbmQgY29waWVkIGJhY2ssIHNvIHRoZXJlIGlzIG5vIGtlcm5lbCBpbmZvLWxlYWsuIEFsbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZmI4Y2YyYzVkOGMwODRjYWNhZDE5MzNkYzI5YTA2ZWY5MWU1ZTNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTM6MDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICsyOCw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbitcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gXHRzZWxlY3QgS1ZNX01NSU9cbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IFNDSEVEX0lORk9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uMzNkNGJhNDA2YjBkZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICs3NDgsNDggQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2xvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGh2YTtcbitcdGdwYV90IGVuZDtcbitcdGdmbl90IGdmbjtcbitcdGludCByZXQ7XG4rXG4rXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSk7XG4rXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcbitcdGlmICghbWVtc2xvdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuK1x0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbitcdFx0XHRyZXR1cm4gLUVJTlRSO1xuK1xuK1x0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXHUwMDI2b3V0X21hcCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0aWYgKHB0ZV92YWwob3V0X21hcC5wdGUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0bWFwX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTtcbitcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcbitcbitcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4rfVxuK1xuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbitcdGNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOlxuIFx0XHRyID0gMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGdldC1yZWctbGlzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS92ZHNvL3Byb2Nlc3Nvci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbiBcbisjZGVmaW5lIFBBR0VfU0hJRlRcdFx0MTJcbisjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4rXG4gI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLXHQweDAwN2NcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXHQyXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cdDI4XG5AQCAtMTI3LDYgKzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsXG4gXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcbiBcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXHRcdFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVFx0XHRcdDQ4XG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1x0XHRcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlRcdFx0XHQzOVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuK1x0UEdUQkxfTDRfSU5ERVhfTUFTSyxcbiB9O1xuIFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MMl9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wzX0lOREVYX1NISUZULFxuK1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzowOTo1Ny44OTI4Nzk0MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM5OTUxNzQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBvbiBSSVNDLVYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24/IExldCdzIGJyZWFrIGl0IGRvd24uIEl0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBLY29uZmlnYCwgYGdzdGFnZS5jYCwgYG1tdS5jYCwgYHZtLmNgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBmZWF0dXJlIOKAkyBhbmQgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNjb3BlLCBub3RoaW5nIG9idmlvdXNseSBodWdlIHRoYXQganVtcHMgb3V0LlxuXG5MZXQncyBkaXZlIGludG8gdGhlIGNvcmUgbG9naWMsIHNwZWNpZmljYWxseSBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgbmV3IGZ1bmN0aW9uIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQuIExvb2tzIGxpa2UgaXQncyBoYW5kbGluZyB0aGUgcHJlLWZhdWx0aW5nIG9mIG1lbW9yeSBmb3IgYSB2aXJ0dWFsIENQVS4gVGhlIGltcG9ydGFudCBiaXQgaGVyZSBpcyB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgY2FsbGVkIGFuZCBzZWVtcyB0byBiZSB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrLlxuXG5JbnNpZGUgdGhlIG5ldyBmdW5jdGlvbiwgYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIGFuZCBwYXNzZWQgYXMgYSBwb2ludGVyIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgY29ycmVjdC4gSWYgdGhlIGluaXRpYWxpemF0aW9uIGlzIGluY29ycmVjdCwgdGhlbiBmdXp6aW5nIGJlY29tZXMgbXVjaCBtb3JlIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgbmV3IGZ1bmN0aW9uIGlzIGEgbmV3IGNvZGUgcGF0aC4gVGhpcyBjb3VsZCBiZSBleHBsb2l0YWJsZSwgaWYgdGhlIG5ldyB2YXJpYWJsZSBgb3V0X21hcGAgaXNuJ3QgaW5pdGlhbGl6ZWQsIGlmIGl0IGlzIG5vdCBoYW5kbGVkIGJ5IHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGZ1bmN0aW9uLCB0aGlzIGNvdWxkIGJlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0aGF0IHdvdWxkIGJlIGRpc2NvdmVyZWQgd2l0aCBhIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga3ZtX3Jpc2N2X21tdV9tYXBgIGRvZXMgd2l0aCB0aGF0IHplcm9lZCBgb3V0X21hcGAgc3RydWN0LiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYGt2bV9yaXNjdl9tbXVfbWFwYCBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIgb3BlcmF0aW9uLCBLTVNBTiB3b3VsZCBsaWtlbHkgcGljayB1cCBhbnkgdXNlLWJlZm9yZS1pbml0aWFsaXphdGlvbiBpc3N1ZXMgaW4gdGhpcyBmdW5jdGlvbi4gSSdsbCBjaGVjayB0aGF0IGZ1bmN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjA3LjI5MjQwMDgxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3Njk3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9tbXVfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTU1Mj1zdGF0aWMgYm9vbCBrdm1fcmlzY3ZfbW11X2RpcnR5X2xvZ193cml0ZV9mYXVsdF9mYXN0KHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTYyMi1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo2MjM6aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy02MjQtXFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTc1MT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NzgtXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6Nzc5OlxcdFxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVxcdTAwM2VncGEsIGh2YSwgZmFsc2UsIFxcdTAwMjZvdXRfbWFwKTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03ODAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MDcuNTgwMTA2NTM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mjk1NjE0MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGltcGxlbWVudGF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGt2bV9yaXNjdl9tbXVfbWFwKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBga3ZtX3Jpc2N2X21tdV9tYXBgIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpbnRlcmFjdHMgd2l0aCB0aGUgUklTQy1WIE1NVSBmb3IgbWVtb3J5IG1hcHBpbmcuIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgY29yZSBvZiB0cmFuc2xhdGluZyBndWVzdCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBob3N0IHBoeXNpY2FsIGFkZHJlc3NlcywgaGFuZGxpbmcgcGFnZSB0YWJsZSB3YWxrcywgYW5kIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBtYXBwaW5ncyB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZS4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgUklTQy1WIHNwZWNpZmljIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zIGFuZCBob3cgaXQgbWlnaHQgaGFuZGxlIGRpZmZlcmVudCBtZW1vcnkgYWNjZXNzIHR5cGVzIGFuZCBwcm90ZWN0aW9uIGxldmVscy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIGZvciBjb25jdXJyZW5jeSwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBUTEIgaW52YWxpZGF0aW9ucyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjb2hlcmVudC4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTU5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjExLjEwOTY3MTMwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIzLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMzpcXHRpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiA2MjQ6XFx0XFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG4gNjI1OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuIDYyNjpcXHR7XFxuIDYyNzpcXHRcXHRpbnQgcmV0O1xcbiA2Mjg6XFx0XFx0a3ZtX3Bmbl90IGhmbjtcXG4gNjI5OlxcdFxcdGJvb2wgaXNfaHVnZXRsYjtcXG4gNjMwOlxcdFxcdGJvb2wgd3JpdGFibGU7XFxuIDYzMTpcXHRcXHR1bnNpZ25lZCBpbnQgdm1hX3BhZ2VzaGlmdDtcXG4gNjMyOlxcdFxcdGdmbl90IGdmbiA9IGdwYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA2MzM6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDYzNDpcXHRcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuIDYzNTpcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSA9IFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm1tdV9wYWdlX2NhY2hlO1xcbiA2MzY6XFx0XFx0Ym9vbCBsb2dnaW5nID0ga3ZtX3Nsb3RfZGlydHlfdHJhY2tfZW5hYmxlZChtZW1zbG90KSBcXHUwMDI2XFx1MDAyNlxcbiA2Mzc6XFx0XFx0XFx0ICAgICAgICEobWVtc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX1JFQURPTkxZKTtcXG4gNjM4OlxcdFxcdHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzaXplLCBtbXVfc2VxO1xcbiA2Mzk6XFx0XFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xcbiA2NDA6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcXHUwMDI2Z3N0YWdlLCBrdm0pO1xcbiA2NDM6XFx0XFxuIDY0NDpcXHRcXHQvKiBTZXR1cCBpbml0aWFsIHN0YXRlIG9mIG91dHB1dCBtYXBwaW5nICovXFxuIDY0NTpcXHRcXHRtZW1zZXQob3V0X21hcCwgMCwgc2l6ZW9mKCpvdXRfbWFwKSk7XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdFxcdGlmIChpc193cml0ZSBcXHUwMDI2XFx1MDAyNiBsb2dnaW5nIFxcdTAwMjZcXHUwMDI2XFxuIDY0ODpcXHRcXHQgICAga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChrdm0sIG1lbXNsb3QsIGdwYSwgb3V0X21hcCkpXFxuIDY0OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0LyogV2UgbmVlZCBtaW5pbXVtIHNlY29uZCt0aGlyZCBsZXZlbCBwYWdlcyAqL1xcbiA2NTI6XFx0XFx0cmV0ID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUocGNhY2hlLCBrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscyk7XFxuIDY1MzpcXHRcXHRpZiAocmV0KSB7XFxuIDY1NDpcXHRcXHRcXHRrdm1fZXJyKFxcXCJGYWlsZWQgdG8gdG9wdXAgRy1zdGFnZSBjYWNoZVxcXFxuXFxcIik7XFxuIDY1NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2NTY6XFx0XFx0fVxcbiA2NTc6XFx0XFxuIDY1ODpcXHRcXHRtbWFwX3JlYWRfbG9jayhjdXJyZW50LVxcdTAwM2VtbSk7XFxuIDY1OTpcXHRcXG4gNjYwOlxcdFxcdHZtYSA9IHZtYV9sb29rdXAoY3VycmVudC1cXHUwMDNlbW0sIGh2YSk7XFxuIDY2MTpcXHRcXHRpZiAodW5saWtlbHkoIXZtYSkpIHtcXG4gNjYyOlxcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byBmaW5kIFZNQSBmb3IgaHZhIDB4JWx4XFxcXG5cXFwiLCBodmEpO1xcbiA2NjM6XFx0XFx0XFx0bW1hcF9yZWFkX3VubG9jayhjdXJyZW50LVxcdTAwM2VtbSk7XFxuIDY2NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjY1OlxcdFxcdH1cXG4gNjY2OlxcdFxcbiA2Njc6XFx0XFx0aXNfaHVnZXRsYiA9IGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpO1xcbiA2Njg6XFx0XFx0aWYgKGlzX2h1Z2V0bGIpXFxuIDY2OTpcXHRcXHRcXHR2bWFfcGFnZXNoaWZ0ID0gaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZV92bWEodm1hKSk7XFxuIDY3MDpcXHRcXHRlbHNlXFxuIDY3MTpcXHRcXHRcXHR2bWFfcGFnZXNoaWZ0ID0gUEFHRV9TSElGVDtcXG4gNjcyOlxcdFxcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXFx1MDAzY1xcdTAwM2Mgdm1hX3BhZ2VzaGlmdDtcXG4gNjczOlxcdFxcdGlmIChsb2dnaW5nIHx8ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSlcXG4gNjc0OlxcdFxcdFxcdHZtYV9wYWdlc2l6ZSA9IFBBR0VfU0laRTtcXG4gNjc1OlxcdFxcdGVsc2UgaWYgKGlzX2h1Z2V0bGIpXFxuIDY3NjpcXHRcXHRcXHR2bWFfcGFnZXNpemUgPSBodWdldGxiX21hcHBpbmdfc2l6ZShtZW1zbG90LCBodmEsIHZtYV9wYWdlc2l6ZSk7XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdC8qXFxuIDY3OTpcXHRcXHQgKiBGb3IgaHVnZXRsYiBtYXBwaW5ncywgdm1hX3BhZ2VzaXplIG1pZ2h0IGhhdmUgYmVlbiByZWR1Y2VkIGZyb20gdGhlXFxuIDY4MDpcXHRcXHQgKiBWTUEgc2l6ZSB0byBhIHNtYWxsZXIgc2FmZSBtYXBwaW5nIHNpemUuXFxuIDY4MTpcXHRcXHQgKi9cXG4gNjgyOlxcdFxcdGlmICh2bWFfcGFnZXNpemUgPT0gUE1EX1NJWkUgfHwgdm1hX3BhZ2VzaXplID09IFBVRF9TSVpFKVxcbiA2ODM6XFx0XFx0XFx0Z2ZuID0gQUxJR05fRE9XTihncGEsIHZtYV9wYWdlc2l6ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LypcXG4gNjg2OlxcdFxcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcXG4gNjg3OlxcdFxcdCAqIHZtYV9sb29rdXAoKSBvciBfX2t2bV9mYXVsdGluX3BmbigpIGJlY29tZSBzdGFsZSBwcmlvciB0byBhY3F1aXJpbmdcXG4gNjg4OlxcdFxcdCAqIGt2bS1cXHUwMDNlbW11X2xvY2suXFxuIDY4OTpcXHRcXHQgKlxcbiA2OTA6XFx0XFx0ICogUmVseSBvbiBtbWFwX3JlYWRfdW5sb2NrKCkgZm9yIGFuIGltcGxpY2l0IHNtcF9ybWIoKSwgd2hpY2ggcGFpcnNcXG4gNjkxOlxcdFxcdCAqIHdpdGggdGhlIHNtcF93bWIoKSBpbiBrdm1fbW11X2ludmFsaWRhdGVfZW5kKCkuXFxuIDY5MjpcXHRcXHQgKi9cXG4gNjkzOlxcdFxcdG1tdV9zZXEgPSBrdm0tXFx1MDAzZW1tdV9pbnZhbGlkYXRlX3NlcTtcXG4gNjk0OlxcdFxcdG1tYXBfcmVhZF91bmxvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbiA2OTU6XFx0XFxuIDY5NjpcXHRcXHRpZiAodm1hX3BhZ2VzaXplICE9IFBVRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuIDY5NzpcXHRcXHQgICAgdm1hX3BhZ2VzaXplICE9IFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuIDY5ODpcXHRcXHQgICAgdm1hX3BhZ2VzaXplICE9IFBBR0VfU0laRSkge1xcbiA2OTk6XFx0XFx0XFx0a3ZtX2VycihcXFwiSW52YWxpZCBWTUEgcGFnZSBzaXplIDB4JWx4XFxcXG5cXFwiLCB2bWFfcGFnZXNpemUpO1xcbiA3MDA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDcwMTpcXHRcXHR9XFxuIDcwMjpcXHRcXG4gNzAzOlxcdFxcdGhmbiA9IF9fa3ZtX2ZhdWx0aW5fcGZuKG1lbXNsb3QsIGdmbiwgaXNfd3JpdGUgPyBGT0xMX1dSSVRFIDogMCxcXG4gNzA0OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZ3cml0YWJsZSwgXFx1MDAyNnBhZ2UpO1xcbiA3MDU6XFx0XFx0aWYgKGhmbiA9PSBLVk1fUEZOX0VSUl9IV1BPSVNPTikge1xcbiA3MDY6XFx0XFx0XFx0c2VuZF9zaWdfbWNlZXJyKEJVU19NQ0VFUlJfQVIsICh2b2lkIF9fdXNlciAqKWh2YSxcXG4gNzA3OlxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2hpZnQsIGN1cnJlbnQpO1xcbiA3MDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDcwOTpcXHRcXHR9XFxuIDcxMDpcXHRcXHRpZiAoaXNfZXJyb3Jfbm9zbG90X3BmbihoZm4pKVxcbiA3MTE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdC8qXFxuIDcxNDpcXHRcXHQgKiBJZiBsb2dnaW5nIGlzIGFjdGl2ZSB0aGVuIHdlIGFsbG93IHdyaXRhYmxlIHBhZ2VzIG9ubHlcXG4gNzE1OlxcdFxcdCAqIGZvciB3cml0ZSBmYXVsdHMuXFxuIDcxNjpcXHRcXHQgKi9cXG4gNzE3OlxcdFxcdGlmIChsb2dnaW5nIFxcdTAwMjZcXHUwMDI2ICFpc193cml0ZSlcXG4gNzE4OlxcdFxcdFxcdHdyaXRhYmxlID0gZmFsc2U7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHRpZiAobW11X2ludmFsaWRhdGVfcmV0cnkoa3ZtLCBtbXVfc2VxKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MTEuMTA5ODExNDk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjU2NDc2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBga3ZtX3Jpc2N2X21tdV9tYXBgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBga3ZtX3Jpc2N2X21tdV9tYXBgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgYG1lbXNldChvdXRfbWFwLCAwLCBzaXplb2YoKm91dF9tYXApKTtgLiAgQWxyaWdodCwgc28gdGhlIG91dHB1dCBtYXAsIGBvdXRfbWFwYCwgaXMgZ2V0dGluZyB6ZXJvZWQgb3V0IHJpZ2h0IGF0IHRoZSBzdGFydC4gIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IG1ha2VzIG1lIHRoaW5rLi4uIGlmIGBvdXRfbWFwYCBpcyBiZWluZyAqcGFzc2VkKiBpbnRvIHRoZSBmdW5jdGlvbiwgaXQncyBiZWluZyBvdmVyd3JpdHRlbi4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNhY2hpbmcgYW5kIHNoYXJpbmcgZXhpc3RpbmcgTU1VIHN0YXRlLlxuXG5Ob3csIEkgc2VlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBiZWluZyBjYWxsZWQgc29tZXdoZXJlIGluc2lkZSBga3ZtX3Jpc2N2X21tdV9tYXBgLiAgVGhhdCdzIHdoZXJlIHRoZSByZWFsIE1NVSB0cmFuc2xhdGlvbiB3b3JrIGlzIHByb2JhYmx5IGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB6ZXJvZWQtb3V0IGBvdXRfbWFwYCBpbnRlcmFjdHMgd2l0aCB0aGVzZSBwYWdlIG1hcHBpbmdzLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHJlc3Qgb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoYXQgYG91dF9tYXBgIHZhcmlhYmxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MTYuNjM1NDYyNTIxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjMsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIzOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gNzI0OlxcdFxcbiA3MjU6XFx0XFx0LypcXG4gNzI2OlxcdFxcdCAqIENoZWNrIGlmIHdlIGFyZSBiYWNrZWQgYnkgYSBUSFAgYW5kIHRodXMgdXNlIGJsb2NrIG1hcHBpbmcgaWZcXG4gNzI3OlxcdFxcdCAqIHBvc3NpYmxlLiBIdWdldGxiIG1hcHBpbmdzIGFscmVhZHkgc2VsZWN0ZWQgdGhlaXIgdGFyZ2V0IHNpemUgYWJvdmUsXFxuIDcyODpcXHRcXHQgKiBzbyBkbyBub3QgcHJvbW90ZSB0aGVtIHRocm91Z2ggdGhlIFRIUCBoZWxwZXIuXFxuIDcyOTpcXHRcXHQgKi9cXG4gNzMwOlxcdFxcdGlmICghbG9nZ2luZyBcXHUwMDI2XFx1MDAyNiAhaXNfaHVnZXRsYiBcXHUwMDI2XFx1MDAyNiB2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKVxcbiA3MzE6XFx0XFx0XFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcXHUwMDI2aGZuLCBcXHUwMDI2Z3BhKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHdyaXRhYmxlKSB7XFxuIDczNDpcXHRcXHRcXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XFxuIDczNTpcXHRcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xcbiA3Mzc6XFx0XFx0fSBlbHNlIHtcXG4gNzM4OlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiA3Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHJldClcXG4gNzQzOlxcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byBtYXAgaW4gRy1zdGFnZVxcXFxuXFxcIik7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdG91dF91bmxvY2s6XFxuIDc0NjpcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCByZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FRVhJU1QsIHdyaXRhYmxlKTtcXG4gNzQ3OlxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIDc0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NDk6XFx0fVxcbiA3NTA6XFx0XFxuIDc1MTpcXHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDc1MjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4gNzUzOlxcdHtcXG4gNzU0OlxcdFxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcbiA3NTU6XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4gNzU2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XFxuIDc1NzpcXHRcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4gNzU4OlxcdFxcdGdwYV90IGVuZDtcXG4gNzU5OlxcdFxcdGdmbl90IGdmbjtcXG4gNzYwOlxcdFxcdGludCByZXQ7XFxuIDc2MTpcXHRcXG4gNzYyOlxcdFxcdGdmbiA9IGdwYV90b19nZm4ocmFuZ2UtXFx1MDAzZWdwYSk7XFxuIDc2MzpcXHRcXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4gNzY0OlxcdFxcdGlmICghbWVtc2xvdClcXG4gNzY1OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xcbiA3Njg6XFx0XFx0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcXG4gNzY5OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRcXHRmb3IgKDs7KSB7XFxuIDc3MjpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDc3MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiA3NzQ6XFx0XFxuIDc3NTpcXHRcXHRcXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9WTV9ERUFELCB2Y3B1KSlcXG4gNzc2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA3Nzc6XFx0XFxuIDc3ODpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gNzc5OlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLVxcdTAwM2VncGEsIGh2YSwgZmFsc2UsIFxcdTAwMjZvdXRfbWFwKTtcXG4gNzgwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDc4MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3ODI6XFx0XFxuIDc4MzpcXHRcXHRcXHRpZiAocHRlX3ZhbChvdXRfbWFwLnB0ZSkpXFxuIDc4NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNzg1OlxcdFxcdH1cXG4gNzg2OlxcdFxcbiA3ODc6XFx0XFx0bWFwX3NpemUgPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xcbiA3ODg6XFx0XFx0ZW5kID0gQUxJR05fRE9XTihyYW5nZS1cXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0cmV0dXJuIG1pbl90KHU2NCwgcmFuZ2UtXFx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVxcdTAwM2VncGEpO1xcbiA3OTE6XFx0fVxcbiA3OTI6XFx0XFxuIDc5MzpcXHRpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxcbiA3OTQ6XFx0e1xcbiA3OTU6XFx0XFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xcbiA3OTY6XFx0XFxuIDc5NzpcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnBnZCAhPSBOVUxMKSB7XFxuIDc5ODpcXHRcXHRcXHRrdm1fZXJyKFxcXCJrdm1fYXJjaCBhbHJlYWR5IGluaXRpYWxpemVkP1xcXFxuXFxcIik7XFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODAwOlxcdFxcdH1cXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0cGdkX3BhZ2UgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPLFxcbiA4MDM6XFx0XFx0XFx0XFx0ICAgICAgIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7XFxuIDgwNDpcXHRcXHRpZiAoIXBnZF9wYWdlKVxcbiA4MDU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDgwNjpcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTtcXG4gODA3OlxcdFxcdGt2bS1cXHUwMDNlYXJjaC5wZ2RfcGh5cyA9IHBhZ2VfdG9fcGh5cyhwZ2RfcGFnZSk7XFxuIDgwODpcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkX2xldmVscyA9IGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHM7XFxuIDgwOTpcXHRcXHRrdm0tXFx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xcbiA4MTA6XFx0XFxuIDgxMTpcXHRcXHRyZXR1cm4gMDtcXG4gODEyOlxcdH1cXG4gODEzOlxcdFxcbiA4MTQ6XFx0dm9pZCBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkKHN0cnVjdCBrdm0gKmt2bSlcXG4gODE1OlxcdHtcXG4gODE2OlxcdFxcdHN0cnVjdCBrdm1fZ3N0YWdlIGdzdGFnZTtcXG4gODE3OlxcdFxcdHZvaWQgKnBnZCA9IE5VTEw7XFxuIDgxODpcXHRcXHRib29sIGZsdXNoID0gZmFsc2U7XFxuIDgxOTpcXHRcXG4gODIwOlxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbiA4MjE6XFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC5wZ2QpIHtcXG4gODIyOlxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcXHUwMDI2Z3N0YWdlLCBrdm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMDoxNi42MzU1OTMwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mjg1MDE1NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAsIGFuZCBpdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgY2FzZSB3aGVyZSB0aGUgcGFnZSBpcyAqYWxyZWFkeSogbWFwcGVkLiBUaGUgb3JpZ2luYWwgY29kZSBkaWRuJ3QgaGFuZGxlIHRoaXMgc2NlbmFyaW8sIGJ1dCB0aGUgYWRkZWQgbGluZXMgaW5kaWNhdGUgdGhhdCBpZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyAoaHBhKSBvZiB0aGUgcGFnZSBhbGlnbmVkIGRvd24gdG8gdGhlIHBhZ2Ugc2l6ZSBtYXRjaGVzIHRoZSBhbGlnbmVkLWRvd24gcGh5c2ljYWwgYWRkcmVzcyBkZXJpdmVkIGZyb20gdGhlIHBhZ2UgdGFibGUgZW50cnksIHdlIG5vdyBwb3B1bGF0ZSBgb3V0X21hcGAuIFNwZWNpZmljYWxseSwgaXQgc2V0cyBgb3V0X21hcC1cdTAwM2VhZGRyYCwgYG91dF9tYXAtXHUwMDNlbGV2ZWxgLCBhbmQgYG91dF9tYXAtXHUwMDNlcHRlYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBhdm9pZHMgdW5uZWNlc3NhcnkgcmUtbWFwcGluZ3Mgb3IsIHBvc3NpYmx5LCBpbmNvcnJlY3QgbWFwcGluZ3MuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqZG9lcyogYG91dF9tYXBgIGdldCBzZW50IHRvIHVzZXJzcGFjZT8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQuXG5cbk15IGludHVpdGlvbiBzYXlzIHRoYXQgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcHJlLWZhdWx0IHNpdHVhdGlvbiwgdGhlbiBgb3V0X21hcGAgcHJvYmFibHkgaXMgbm90IHNlbnQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlOyBob3dldmVyLCB0aGUgaW5mb3JtYXRpb24gaW4gYG91dF9tYXBgIG1heSBiZSB1c2VkIHRvIHJlc3BvbmQgdG8gYSB1c2Vyc3BhY2UgcmVxdWVzdCwgbWF5YmUgaW4gYSBtYW5uZXIgdGhhdCdzIHRyYW5zcGFyZW50IHRvIHRoZSB1c2Vyc3BhY2UgY2FsbGVyLiBJIGtub3cgdGhhdCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBpbnZvbHZlZCBpbiBhIHByZS1mYXVsdCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBga3ZtX3ZjcHVfaW9jdGxfcHJlX2ZhdWx0X21lbW9yeWAsIG9yIHNvbWV0aGluZyBsaWtlIGl0LiBJIHNob3VsZCB2ZXJpZnkgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIGluIGBvdXRfbWFwYCBpcyB1c2VkIGRvd25zdHJlYW0uIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBzZWUgaG93IHRoaXMgZGF0YSBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjQ4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MjIuOTIwNjEyOTExWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg3MTA5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQwLS8qKlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTcwMT1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTUtXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MjQuNjA3NzMwMjYxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Mzg2OTEyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBga3ZtX21haW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgdmlydC9rdm0va3ZtX21haW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MzM0LiBUaGF0IGFyZWEgdXN1YWxseSBob2xkcyBjcnVjaWFsIHBhcnRzIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCBpdCBjb3VsZCBiZSB0aGUgcGxhY2UgdG8gZmluZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBwcm9ibGVtIGJ5IGRpZ2dpbmcgaW50byB0aGF0IHNlY3Rpb24gZGlyZWN0bHkuIEl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSBoYXZlIGEgZmVlbGluZyB0aGUgaXNzdWUgaXMgcHJvYmFibHkgbG9jYXRlZCBpbiBhIHJlZ2lvbiBvZiBjb2RlIG5lYXIgbGluZSA0MzM0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjMxLjA0NjQyNDk0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzM0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzM0OlxcdHN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuNDMzNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuNDMzNjpcXHR7XFxuNDMzNzpcXHRcXHRpbnQgaWR4O1xcbjQzMzg6XFx0XFx0bG9uZyByO1xcbjQzMzk6XFx0XFx0dTY0IGZ1bGxfc2l6ZTtcXG40MzQwOlxcdFxcbjQzNDE6XFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VmbGFncylcXG40MzQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzNDM6XFx0XFxuNDM0NDpcXHRcXHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cXHUwMDNlZ3BhKSB8fFxcbjQzNDU6XFx0XFx0ICAgICFQQUdFX0FMSUdORUQocmFuZ2UtXFx1MDAzZXNpemUpIHx8XFxuNDM0NjpcXHRcXHQgICAgcmFuZ2UtXFx1MDAzZWdwYSArIHJhbmdlLVxcdTAwM2VzaXplIFxcdTAwM2M9IHJhbmdlLVxcdTAwM2VncGEpXFxuNDM0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MzQ4OlxcdFxcbjQzNDk6XFx0XFx0dmNwdV9sb2FkKHZjcHUpO1xcbjQzNTA6XFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuNDM1MTpcXHRcXG40MzUyOlxcdFxcdGZ1bGxfc2l6ZSA9IHJhbmdlLVxcdTAwM2VzaXplO1xcbjQzNTM6XFx0XFx0ZG8ge1xcbjQzNTQ6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuNDM1NTpcXHRcXHRcXHRcXHRyID0gLUVJTlRSO1xcbjQzNTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDM1NzpcXHRcXHRcXHR9XFxuNDM1ODpcXHRcXG40MzU5OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgcmFuZ2UpO1xcbjQzNjA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG40MzYxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQzNjI6XFx0XFxuNDM2MzpcXHRcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuNDM2NDpcXHRcXHRcXHRcXHRicmVhaztcXG40MzY1OlxcdFxcbjQzNjY6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXNpemUgLT0gcjtcXG40MzY3OlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VncGEgKz0gcjtcXG40MzY4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjQzNjk6XFx0XFx0fSB3aGlsZSAocmFuZ2UtXFx1MDAzZXNpemUpO1xcbjQzNzA6XFx0XFxuNDM3MTpcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuNDM3MjpcXHRcXHR2Y3B1X3B1dCh2Y3B1KTtcXG40MzczOlxcdFxcbjQzNzQ6XFx0XFx0LyogUmV0dXJuIHN1Y2Nlc3MgaWYgYXQgbGVhc3Qgb25lIHBhZ2Ugd2FzIG1hcHBlZCBzdWNjZXNzZnVsbHkuICAqL1xcbjQzNzU6XFx0XFx0cmV0dXJuIGZ1bGxfc2l6ZSA9PSByYW5nZS1cXHUwMDNlc2l6ZSA/IHIgOiAwO1xcbjQzNzY6XFx0fVxcbjQzNzc6XFx0I2VuZGlmXFxuNDM3ODpcXHRcXG40Mzc5OlxcdHN0YXRpYyBpbnQga3ZtX3dhaXRfZm9yX3ZjcHVfb25saW5lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG40MzgwOlxcdHtcXG40MzgxOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG40MzgyOlxcdFxcbjQzODM6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6MzEuMDQ2ODIwOTQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2OTAzOTQxMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgKipcblxuQWxyaWdodCwgc28gYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLi4uIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgbWVudGFsIGFsYXJtIGJlbGxzLiBJIGtub3cgd2hlcmUgdGhhdCBmdW5jdGlvbiBzaXRzIGluIHRoZSBLVk0gY29kZWJhc2U7IGl0J3MgY2FsbGVkIGZyb20gYGt2bV92Y3B1X2lvY3RsYC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIGNvbm5lY3RpbmcgdGhlIGRvdHMuIGBrdm1fdmNwdV9pb2N0bGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBhIHdob2xlIHJhZnQgb2YgaHlwZXJ2aXNvciByZXF1ZXN0cywgZXNzZW50aWFsbHkgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBndWVzdCBPUydzIHVzZXJzcGFjZSBhbmQgdGhlIEtWTSBjb3JlJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuXG5cblNvLCB0aGlzIG1lYW5zIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBiZWluZyBpbnZva2VkICpkdXJpbmcqIGFuIElPQ1RMIGNhbGwuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIGZhaXJseSBjbGVhci4gSXQncyBsaWtlbHkgaGFuZGxpbmcgbWVtb3J5IGZhdWx0cyAqYmVmb3JlKiB0aGV5IGFyZSB0cnVseSByYWlzZWQgYnkgdGhlIGhhcmR3YXJlIE1NVS4gVGhpcyBzdWdnZXN0cyBpdCdzIHBhcnQgb2YgYSBwcmUtZW1wdGl2ZSBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc20sIHBvdGVudGlhbGx5IGFpbWluZyBhdCBvcHRpbWl6aW5nIHBhZ2UgZmF1bHRzLCBkZWFsaW5nIHdpdGggbWVtb3J5IGJhbGxvb25pbmcgb3BlcmF0aW9ucywgb3IgaW1wbGVtZW50aW5nIHNvbWUgZm9ybSBvZiBtZW1vcnkgcHJvdGVjdGlvbi92aXJ0dWFsaXphdGlvbi4gSeKAmWQgZ3Vlc3MgaXQgaXMgd29ya2luZyB3aXRoIHNvbWUgZm9ybSBvZiBwcmUtZW1wdGl2ZSBtZW1vcnkgZmF1bHQsIGxpa2VseSB0byBpbXByb3ZlIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIHRoZSBndWVzdCBpbiBzb21lIHdheS5cblxuSSdkIHdhbnQgdG8gcXVpY2tseSBjaGVjayB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLCB0byBrbm93IHdoYXQgc3BlY2lmaWNhbGx5IGlzIHRoZSB0eXBlIG9mIGZhdWx0IGl0J3MgYW50aWNpcGF0aW5nLiBBbHNvLCBpdOKAmWQgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGUgZmF1bHQgaXMgYmVpbmcgcHJlLWVtcHRlZCBhbmQgaG93IEtWTSBpcyBoYW5kbGluZyB0aGlzIHBvdGVudGlhbCBndWVzdC1sZXZlbCBmYXVsdC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIGFueSBhc3NvY2lhdGVkIG9wdGltaXphdGlvbnMuIEknZCBkZWZpbml0ZWx5IHdhbnQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29udHJvbCBmbG93IHRvIHNlZSB3aGVuIGl0J3MgY2FsbGVkIGFuZCB0aGUgdHlwaWNhbCB3b3JrbG9hZC4gQSBxdWljayBncmVwIG9mIHRoZSBjb2RlIGJhc2Ugd2lsbCBjZXJ0YWlubHkgaWxsdW1pbmF0ZSB0aGluZ3MgbW9yZSBxdWlja2x5LiBUaGlzIGlzIHdoZXJlIHRoZSBmdW4gYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTA6NDcuOTUwNzY1OTY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTc2ODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVxcdFxcdFxcdGJyZWFrO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYzOTpcXHRcXHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcXHUwMDI2cmFuZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY0MC1cXHRcXHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEwOjQ4LjAwMjU0NDA0NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE3MTI1MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fdmNwdV9pb2N0bGAgKGNpcmNhIGxpbmUgNDYzOCkqKlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYGt2bV92Y3B1X2lvY3RsYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ2MzggaW4gdGhlIHNvdXJjZS4gR2l2ZW4gbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3RlbnRpYWwgaXNzdWUsIEkgc3VzcGVjdCB0aGF0IHRoZSBjcml0aWNhbCBkYXRhIGlzIHByb2Nlc3NlZCBpbiBvciBhcm91bmQgdGhhdCBsaW5lLiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0LCB0aGF0IHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIGEgY2VydGFpbiBpbnN0cnVjdGlvbiBvciBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgQ1BVIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCdzIGhhbmRsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgZnVuY3Rpb24gdG8gY29uZmlybSB0aGF0IG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0LiBNb3JlIHNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGVycm9yIGNvZGVzIGFuZCB0aGUgZGF0YSBiZWluZyBwYXNzZWQgaW4gdGhlIGlvY3RsIGNvbW1hbmRzLiBMZXQgbWUgZG91YmxlIGNoZWNrIGlmIEknbSB0aGlua2luZyBvZiB0aGUgcmlnaHQgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwOTksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMDo1MS45MTk2NzIxNDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYzMDpcXHRcXHRcXHRicmVhaztcXG40NjMxOlxcdFxcdH1cXG40NjMyOlxcdCNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbjQ2MzM6XFx0XFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcbjQ2MzQ6XFx0XFx0XFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlO1xcbjQ2MzU6XFx0XFxuNDYzNjpcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG40NjM3OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cmFuZ2UsIGFyZ3AsIHNpemVvZihyYW5nZSkpKVxcbjQ2Mzg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYzOTpcXHRcXHRcXHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcXHUwMDI2cmFuZ2UpO1xcbjQ2NDA6XFx0XFx0XFx0LyogUGFzcyBiYWNrIGxlZnRvdmVyIHJhbmdlLiAqL1xcbjQ2NDE6XFx0XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2cmFuZ2UsIHNpemVvZihyYW5nZSkpKVxcbjQ2NDI6XFx0XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNDY0MzpcXHRcXHRcXHRicmVhaztcXG40NjQ0OlxcdFxcdH1cXG40NjQ1OlxcdCNlbmRpZlxcbjQ2NDY6XFx0XFx0ZGVmYXVsdDpcXG40NjQ3OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xcbjQ2NDg6XFx0XFx0fVxcbjQ2NDk6XFx0b3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMDo1MS45MTk5MjUzNzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MjExMzkxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrcyBpbiBLVk0gUHJlLUZhdWx0IE1lbW9yeSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBjYXNlIGFuZCB0aGUgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlLiBUaGUgaW5pdGlhbCBjb25jZXJuIHdhcyB0aGF0IHRoZSBgcmFuZ2VgIHN0cnVjdCwgYWZ0ZXIgYmVpbmcgcHJvY2Vzc2VkIGJ5IGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIG1lbW9yeSB3aGVuIGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UuIEhvd2V2ZXIsIG9uIGNsb3NlciBpbnNwZWN0aW9uLCBpdCdzIGNsZWFyIHRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2Ugd2l0aCBgY29weV9mcm9tX3VzZXIoXHUwMDI2cmFuZ2UsIGFyZ3AsIHNpemVvZihyYW5nZSkpYCAqYmVmb3JlKiBpdCdzIGV2ZW4gcGFzc2VkIHRvIHRoZSBpbnRlcm5hbCBmdW5jdGlvbi4gU28sIHRoZSBvbmx5IGRhdGEgcmV0dXJuZWQgdG8gdXNlciBzcGFjZSBpbiBgcmFuZ2VgIGlzIHRoZSB1cGRhdGVkICdsZWZ0b3ZlcicgcGFydCBvZiB0aGUgb3JpZ2luYWwgZGF0YS4gVGhhdCdzIGdvb2Q7IHRoZSBpbml0aWFsIHdvcnJ5IGlzIGFkZHJlc3NlZC5cblxuTXkgbmV4dCBsaW5lIG9mIGludmVzdGlnYXRpb24gY2VudGVyZWQgb24gYG91dF9tYXBgIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIGFyb3VuZCBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHJldHVybmVkLiBUaGUgY29kZSBzaG93cyB0aGF0IGBvdXRfbWFwYCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIChgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07YCkuIFRoZW4gaXQgaXMgYWdhaW4gemVyb2VkIGluIGBrdm1fcmlzY3ZfbW11X21hcGAgd2l0aCBgbWVtc2V0KG91dF9tYXAsIDAsIHNpemVvZigqb3V0X21hcCkpYCwgKmJlZm9yZSogYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHBvcHVsYXRlcyBzb21lIG9mIGl0cyBtZW1iZXJzLlxuXG5UaGUgbG9naWMgd2l0aGluIGBrdm1fcmlzY3ZfbW11X21hcGAgZWl0aGVyIHNldHMgYG91dF9tYXAucHRlYCwgYWxvbmcgd2l0aCBvdGhlciBtZW1iZXJzLCBvciByZXR1cm5zIHdpdGhvdXQgc2V0dGluZyBhbnkgb2YgdGhvc2UgdmFsdWVzLiBUaGUgbG9vcCBpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBjb250aW51ZXMgaWYgYG91dF9tYXAucHRlYCBpcyBub3Qgc2V0OyBvdGhlcndpc2UsIGl0IGJyZWFrcy4gSW1wb3J0YW50bHksIGBvdXRfbWFwLmxldmVsYCBpcyB1c2VkICphZnRlciogdGhpcy4gU2luY2UgYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8sIGFueSB1bmluaXRpYWxpemVkIHJlYWRzIGluIGBvdXRfbWFwYCB3aWxsIHJlYWQgemVyby4gTm8gaW5mb3JtYXRpb24gbGVha3MgaGVyZS5cblxuVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoZSBgb3V0X21hcGAgaXMgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIGFueSBmaWVsZHMgYXJlIGNvbmRpdGlvbmFsbHkgc2V0IGJhc2VkIG9uIHRoZSBtYXBwaW5nIHByb2Nlc3MuIFRoaXMgY2xlYXIgaW5pdGlhbGl6YXRpb24gc3RyYXRlZ3kgaXMga2V5LiBJJ20gbm93IGNvbmZpZGVudCB0aGF0IHRoZXJlJ3Mgbm8gcGF0aCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBgb3V0X21hcGAgdG8gbGVhayBiYWNrIHRvIHVzZXIgc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTE6NTguNjQxMDY4NzcyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYzNjQ1NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMTo1OC43Nzc0NDU0NjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MTA3ODM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBrdm1fZ3N0YWdlX21hcHBpbmdgKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBhY3R1YWxseSAqaXMqLiBUaGlzIHNvdW5kcyBsaWtlIGEga2V5IGRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWxpemF0aW9uIGxheWVyLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBndWVzdCBzdGFnZSB0YWJsZS4gSXQncyB0aW1lIHRvIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGxvY2F0aW9uIGluIHRoZSBLVk0gc291cmNlIGNvZGUuIEtub3dpbmcgaXRzIHN0cnVjdHVyZSB3aWxsIGluZm9ybSBob3cgdGhlIHZpcnR1YWxpemF0aW9uIHN5c3RlbSBoYW5kbGVzIG1lbW9yeS4gTGV0J3Mgc2VlIGlmIGl04oCZcyBpbiBhIGhlYWRlciBmaWxlLCBhbmQgSSBleHBlY3QgaXQgaXMsIHByb2JhYmx5IG5lc3RlZCB3aXRoaW4gYSBjb3JlIEtWTSBpbmNsdWRlIGRpcmVjdG9yeS4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCB0byBsb2NhdGUgdGhlIGRlY2xhcmF0aW9uIGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMjowMy41Mzg1MjY3MjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTUxNDMwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9MTI9c3RydWN0IGt2bV9nc3RhZ2Uge1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtMjAtXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6MjE6c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyB7XFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtMjItXFx0Z3BhX3QgYWRkcjtcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTUzPWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NldF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC01NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjU1OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqbWFwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC01Ni1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTYxPWludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02NC1cXHRcXHRcXHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaDo2NTpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Ni1cXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX21tdS5oPTE0PWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fbW11LmgtMTUtXFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDoxNjpcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKTtcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0xNy1pbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE0Mj1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMTQzLVxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MTQ0OlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqbWFwKVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTE0NS17XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0yMDc9aW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIxMC1cXHRcXHRcXHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzoyMTE6XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMTIte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDA9aW50IGt2bV9yaXNjdl9tbXVfaW9yZW1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgcGh5c19hZGRyX3QgaHBhLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNTEtXFx0fTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo1MjpcXHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG1hcDtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01My1cXHRzdHJ1Y3Qga3ZtX2dzdGFnZSBnc3RhZ2U7XFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz01NTI9c3RhdGljIGJvb2wga3ZtX3Jpc2N2X21tdV9kaXJ0eV9sb2dfd3JpdGVfZmF1bHRfZmFzdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01NTQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBncGFfdCBncGEsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NTU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcClcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy01NTYte1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI0LVxcdFxcdCAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NjI1OlxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNjI2LXtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTc1MT1sb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTMte1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1NDpcXHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTUtXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE2PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtMTgte1xcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jOjE5OlxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgaG9zdF9tYXA7XFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtMjAtXFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MDUuMjMzNjc1NTY2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjE5MjU2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNIEctU3RhZ2Ugb24gUklTQy1WKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBLVk0gZ3Vlc3Qgc3RhZ2Ugb24gUklTQy1WLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaGAgaGVhZGVyLiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSAyMSwgbGlrZWx5IHNvbWUgY3J1Y2lhbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvciBtYWNybyB0aGF0IEkgd2FudCB0byByZXZpZXcgaW4gZGV0YWlsLiBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIHRoZXJlIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIG9yIGhhbmRsZWQgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGFyY2hpdGVjdHVyZS4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiB0aGF0IEkgd2FudCB0byBhbmFseXplLiBJJ20gZ29pbmcgaW4gd2l0aCBhIHRhcmdldGVkIGFwcHJvYWNoIHRvIHF1aWNrbHkgcGFyc2UgdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NzksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMjoxMC41OTU2MDQ4ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0I2RlZmluZSBLVk1fR1NUQUdFX0ZMQUdTX0xPQ0FMXFx0XFx0QklUKDApXFxuICAxNjpcXHRcXHR1bnNpZ25lZCBsb25nIHZtaWQ7XFxuICAxNzpcXHRcXHRwZ2RfdCAqcGdkO1xcbiAgMTg6XFx0XFx0dW5zaWduZWQgbG9uZyBwZ2RfbGV2ZWxzO1xcbiAgMTk6XFx0fTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyB7XFxuICAyMjpcXHRcXHRncGFfdCBhZGRyO1xcbiAgMjM6XFx0XFx0cHRlX3QgcHRlO1xcbiAgMjQ6XFx0XFx0dTMyIGxldmVsO1xcbiAgMjU6XFx0fTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0I2lmZGVmIENPTkZJR182NEJJVFxcbiAgMjg6XFx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcXHQ5XFxuICAyOTpcXHQjZWxzZVxcbiAgMzA6XFx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcXHQxMFxcbiAgMzE6XFx0I2VuZGlmXFxuICAzMjpcXHRcXG4gIDMzOlxcdGV4dGVybiB1bnNpZ25lZCBsb25nIGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHM7XFxuICAzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MTAuNTk1NzA2MzI3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjIzNTkyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBpbiBLVk0gUklTQy1WIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBLVk0gUklTQy1WIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ2AuIEkgc2VlIGl0IGhhcyB0aGUgc3RhbmRhcmQgYGFkZHJgLCBgcHRlYCwgYW5kIGBsZXZlbGAgZmllbGRzLiBHb29kLiBJIG5vdGUgdGhhdCBpdCdzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAgaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFuZCBhbHNvIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gaXQgb3V0LiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBnYXJiYWdlIGxlZnQgYmVoaW5kIHRoZXJlLiBHb29kLCB3ZSdyZSBjb3ZlcmluZyBvdXIgYmFzZXMuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIHRvIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBUaGlzIG9uZSdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGJlaW5nIGNvcGllZCBmcm9tIGFuZCB0byB1c2Vyc3BhY2UuIFRoYXQncyBhbHdheXMgYSBwb3RlbnRpYWwgaG90c3BvdCBmb3IgdnVsbmVyYWJpbGl0aWVzLiBJIHNlZSB0aGUgc3RydWN0IGRlZmluaXRpb246IGBncGFgLCBgc2l6ZWAsIGBmbGFnc2AsIGFuZCBzb21lIHBhZGRpbmcuIEhtbSwgdGhlIHBhZGRpbmcuIFRoYXQncyB3aGVyZSB0aGluZ3MgY291bGQgZ2V0IHRyaWNreS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWRkaW5nIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LCBvdGhlcndpc2Ugd2UgbWlnaHQgaGF2ZSBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBiZWhhdmlvci4gVGltZSB0byBjaGVjayB0aGUga2VybmVsIGhlYWRlcnMgZm9yIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBMZXQncyBnZXQgdGhlIGRlZmluaXRpdmUgc291cmNlIG9uIHRoYXQgZGVmaW5pdGlvbiBmcm9tIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgLiBJJ2xsIGNvbmZpcm0gaG93IHRoYXQgc3RydWN0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQsIGVzcGVjaWFsbHkgdGhhdCBwYWRkaW5nIGZpZWxkLCBiZWZvcmUgcHJvY2VlZGluZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDA1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MTcuMDU4MDY5NDM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk1ODE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjYzLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY0OiNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcXHRfSU9XUihLVk1JTywgMHhkNSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5KVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY2OnN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjctXFx0X191NjQgZ3BhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzoxMjoxNy4xMDQwMzQxNDNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzNzc0OTY2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gS1ZNIEhlYWRlciBEZWZpbml0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEtWTSBpbnRlcmZhY2UgZGV0YWlscywgc3BlY2lmaWNhbGx5IHNvbWUgb2YgdGhlIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyB1c2VkIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBoeXBlcnZpc29yLiBJIHJlbWVtYmVyIGEgc3BlY2lmaWMgYXJlYSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gZGVidWdnaW5nLCBzbyBsZXQncyBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCdzIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgIGZpbGUuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSAxNjY2IHRvIHN0YXJ0IHBva2luZyBhcm91bmQuIEknbSBiZXR0aW5nIHRoYXQgYXJlYSBwcm9iYWJseSBkZWZpbmVzIHNvbWV0aGluZyBjcnVjaWFsIHRvIHRoZSBmdW5jdGlvbmFsaXR5IEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSB3aWxsIHNlZSBpZiB0aGF0IGlzIHRoZSBjb3JyZWN0IGVudHJ5cG9pbnQgYW5kIHdvcmsgbXkgd2F5IGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6MzUuNDgxNTM0NzU2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTY2NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY2NjpcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbjE2Njc6XFx0XFx0X191NjQgZ3BhO1xcbjE2Njg6XFx0XFx0X191NjQgc2l6ZTtcXG4xNjY5OlxcdFxcdF9fdTY0IGZsYWdzO1xcbjE2NzA6XFx0XFx0X191NjQgcGFkZGluZ1s1XTtcXG4xNjcxOlxcdH07XFxuMTY3MjpcXHRcXG4xNjczOlxcdCNlbmRpZiAvKiBfX0xJTlVYX0tWTV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjEyOjM1LjQ4MTg3NzM2NloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDE5NTgxNDA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBLVk0gUHJlLUZhdWx0IE1lbW9yeSBmb3IgUklTQy1WKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgbmV3IEtWTSBmZWF0dXJlIGZvciBSSVNDLVY6IHByZS1mYXVsdGluZyBtZW1vcnkuIFRoZSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMuXG5cbkZpcnN0LCB0aGUgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBzdHJ1Y3QgaXRzZWxmIGlzIGNvcGllZCBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXJgLiBDcnVjaWFsbHksIHRoaXMgY29waWVzIHRoZSAqZW50aXJlKiBzdHJ1Y3QsIGluY2x1ZGluZyB0aGUgcGFkZGluZy4gU28sIGFsbCBmaWVsZHMsIGluY2x1ZGluZyB0aGUgcGFkZGluZywgYXJlIGluaXRpYWxpemVkIHdpdGggdXNlci1wcm92aWRlZCBkYXRhLiBUaGUga2VybmVsIHRoZW4gdXBkYXRlcyBgc2l6ZWAgYW5kIGBncGFgLiBUaGUgZW50aXJlIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBwb3RlbnRpYWxseSB1cGRhdGVkIGZpZWxkcywgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSB1c2luZyBgY29weV90b191c2VyYC4gTm8ga2VybmVsIGRhdGEgaXMgbGVha2VkLCB0aGUgcGFkZGluZyBzaW1wbHkgcmV0YWlucyBpdHMgb3JpZ2luYWwgdmFsdWUuXG5cbk5leHQsIHdlIGRpdmUgaW50byBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gIEkgc2VlIGEgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2AgaGVyZS4gIFRoYXQncyBnb29kLCBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4gIFRoZSBjb2RlIHRoZW4gY2FsbHMgYGt2bV9yaXNjdl9tbXVfbWFwYC4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBsZWF2ZSBgb3V0X21hcGAgaW4gYSBwYXJ0aWFsIGluaXRpYWxpemVkIHN0YXRlLiAgV2UgY2FuIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgZXhwbGljaXRseSBgbWVtc2V0YHMgYG91dF9tYXBgIHRvIHplcm8gYW5kIHRoZW4gY2FsbHMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLCB3aGljaCBzZXRzIGBvdXRfbWFwLmxldmVsYCBhbmQgYG91dF9tYXAucHRlYCB0b2dldGhlci5cblxuTGV0J3MgY2hlY2sgYGt2bV9yaXNjdl9tbXVfbWFwYCBpdHNlbGYsIGp1c3QgdG8gYmUgc3VyZS4gIFllcywgaXQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBzdHJ1Y3QsIHNvIHRoYXQgaXMgc2FmZS5cblxuVGhlbiwgYXJlIHRoZXJlIG90aGVyIHBsYWNlcyB0aGUgc3RydWN0IGlzIHVzZWQ/IExldCdzIHRyYWNlIGl0IGFuZCBkb3VibGUtY2hlY2suIE9rYXksIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGxvY2FsIHZhcmlhYmxlcyBgZ2ZuYCwgYG1lbXNsb3RgLCBgaHZhYCwgYHJldGAsIGBtYXBfc2l6ZWAsIGFuZCBgZW5kYCwgYW5kIHVzZWQgdmFyaWFibGVzIGFyZSBhbGwgYXNzaWduZWQgYmVmb3JlIHVzZSB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBgb3V0X21hcGAgaXMgaW5pdGlhbGl6ZWQsIHRoZSBvdGhlcnMgYXJlIGFzc2lnbmVkLlxuXG5TZWxmdGVzdHMgYXJlbid0IGEgY29uY2VybiBmb3Iga2VybmVsIG1lbW9yeSBzYWZldHkgaW4gdGhlbXNlbHZlczsgdGhleSdyZSB1c2VyLXNwYWNlLlxuXG5TbywgaXQgc2VlbXMgdGhhdCB0aGVyZSdzIG5vIHBhdGggdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLiAgVGhlIGNvZGUgY29uc2lzdGVudGx5IGluaXRpYWxpemVzIG9yIGFzc2lnbnMgYWxsIHZhcmlhYmxlcyBiZWZvcmUgdXNlLCBhbmQgYW55IHVzZXItcHJvdmlkZWQgcGFkZGluZyBpcyBleHBsaWNpdGx5IGNvcGllZC4gIFRoZSBwYXRjaCBqdXN0IGFkZHMgYSBuZXcgY2FwYWJpbGl0eSwgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAsIHdoaWNoIG1hcHMgbWVtb3J5IHBhZ2VzIGFoZWFkIG9mIHRpbWUuIEkgd291bGQgZXhwZWN0IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHVzdWFsIGJ1ZyBkZXRlY3RvcnMgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd3JvbmcgcGFnZSBzaXplcywgb3IgbG9ja2luZyBwcm9ibGVtcy4gR2l2ZW4gdGhpcyBhbmFseXNpcywgSSBkb24ndCBzZWUgYW55IHJpc2sgdGhhdCByZXF1aXJlcyBLTVNBTi4gV2UncmUgZ29vZCB3aXRoIEtBU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUyMCwiT3V0cHV0VG9rZW5zIjoyMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MTI6NDkuNjc3Njk0NzkzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBvbiBSSVNDLVYuIEl0IGFkZHMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2hpY2ggdXNlcyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXBgIGluaXRpYWxpemVkIHRvIGB7IDAgfWAuIFRoZSBgb3V0X21hcGAgaXMgZnVydGhlciB6ZXJvZWQgb3V0IHZpYSBgbWVtc2V0YCBpbiBga3ZtX3Jpc2N2X21tdV9tYXBgIGJlZm9yZSBiZWluZyBwb3B1bGF0ZWQuIFRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBwYXNzZWQgZnJvbSB1c2VyIHNwYWNlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgIChpbmNsdWRpbmcgcGFkZGluZykgYmVmb3JlIGJlaW5nIG1vZGlmaWVkIGFuZCBjb3BpZWQgYmFjaywgc28gdGhlcmUgaXMgbm8ga2VybmVsIGluZm8tbGVhay4gQWxsIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIG9uIFJJU0MtVi4gSXQgYWRkcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB3aGljaCB1c2VzIGEgbG9jYWwgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcGAgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YC4gVGhlIGBvdXRfbWFwYCBpcyBmdXJ0aGVyIHplcm9lZCBvdXQgdmlhIGBtZW1zZXRgIGluIGBrdm1fcmlzY3ZfbW11X21hcGAgYmVmb3JlIGJlaW5nIHBvcHVsYXRlZC4gVGhlIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHBhc3NlZCBmcm9tIHVzZXIgc3BhY2UgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBjb3B5X2Zyb21fdXNlcmAgKGluY2x1ZGluZyBwYWRkaW5nKSBiZWZvcmUgYmVpbmcgbW9kaWZpZWQgYW5kIGNvcGllZCBiYWNrLCBzbyB0aGVyZSBpcyBubyBrZXJuZWwgaW5mby1sZWFrLiBBbGwgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowjcf2f[1] Phase: Succeeded StartedAt: 2026-08-14 13:13:01 +0000 UTC FinishedAt: 2026-08-14 13:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 13:13:01 +0000 UTC FinishedAt: 2026-08-14 13:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2] Phase: Succeeded StartedAt: 2026-08-14 13:13:01 +0000 UTC FinishedAt: 2026-08-14 13:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 13:13:01 +0000 UTC FinishedAt: 2026-08-14 13:54:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 13:13:01 +0000 UTC FinishedAt: 2026-08-14 13:13:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 13:13:01 +0000 UTC FinishedAt: 2026-08-14 13:13:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjcf2f/series-workflowjcf2f-convert-artifact-3134283051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 13:13:12 +0000 UTC FinishedAt: 2026-08-14 13:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 13:13:12 +0000 UTC FinishedAt: 2026-08-14 13:30:20 +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:*e0870b16-ebe1-4921-b4e2-b5b6e9dd1c0a,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-workflowjcf2f/series-workflowjcf2f-convert-artifact-3134283051/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": "dffbc451-622f-4a75-bc51-5ca257b80b9a", "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-workflowjcf2f/series-workflowjcf2f-build-action-4213501481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 13:13:12 +0000 UTC FinishedAt: 2026-08-14 13:30:10 +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:*e0870b16-ebe1-4921-b4e2-b5b6e9dd1c0a,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-workflowjcf2f/series-workflowjcf2f-convert-artifact-3134283051/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": "dffbc451-622f-4a75-bc51-5ca257b80b9a", "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-workflowjcf2f/series-workflowjcf2f-build-action-4213501481/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 13:30:20 +0000 UTC FinishedAt: 2026-08-14 13:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 13:30:20 +0000 UTC FinishedAt: 2026-08-14 13:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 13:30:20 +0000 UTC FinishedAt: 2026-08-14 13:30:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 13:30:20 +0000 UTC FinishedAt: 2026-08-14 13:30:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjcf2f/series-workflowjcf2f-convert-artifact-3188414210/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 13:30:30 +0000 UTC FinishedAt: 2026-08-14 13:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 13:30:30 +0000 UTC FinishedAt: 2026-08-14 13:32:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dffbc451-622f-4a75-bc51-5ca257b80b9a,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-workflowjcf2f/series-workflowjcf2f-build-action-4213501481/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-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 13:32:59 +0000 UTC FinishedAt: 2026-08-14 13:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 13:32:59 +0000 UTC FinishedAt: 2026-08-14 13:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 13:32:59 +0000 UTC FinishedAt: 2026-08-14 13:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 13:32:59 +0000 UTC FinishedAt: 2026-08-14 13:49:57 +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:*e0870b16-ebe1-4921-b4e2-b5b6e9dd1c0a,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-workflowjcf2f/series-workflowjcf2f-convert-artifact-3188414210/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": "689cf573-3231-40cf-b97a-a891a25ad7aa", "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-workflowjcf2f/series-workflowjcf2f-build-action-54477142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 13:32:59 +0000 UTC FinishedAt: 2026-08-14 13:49:47 +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:*e0870b16-ebe1-4921-b4e2-b5b6e9dd1c0a,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-workflowjcf2f/series-workflowjcf2f-convert-artifact-3188414210/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": "689cf573-3231-40cf-b97a-a891a25ad7aa", "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-workflowjcf2f/series-workflowjcf2f-build-action-54477142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 13:49:57 +0000 UTC FinishedAt: 2026-08-14 13:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 13:49:57 +0000 UTC FinishedAt: 2026-08-14 13:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 13:49:57 +0000 UTC FinishedAt: 2026-08-14 13:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 13:49:57 +0000 UTC FinishedAt: 2026-08-14 13:51:45 +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:*689cf573-3231-40cf-b97a-a891a25ad7aa,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-workflowjcf2f/series-workflowjcf2f-build-action-54477142/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-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 13:51:55 +0000 UTC FinishedAt: 2026-08-14 13:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 13:51:55 +0000 UTC FinishedAt: 2026-08-14 13:54:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"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:*dffbc451-622f-4a75-bc51-5ca257b80b9a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*689cf573-3231-40cf-b97a-a891a25ad7aa,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-workflowjcf2f/series-workflowjcf2f-build-action-4213501481/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-workflowjcf2f/series-workflowjcf2f-build-action-54477142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 13:51:55 +0000 UTC FinishedAt: 2026-08-14 13:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 13:51:55 +0000 UTC FinishedAt: 2026-08-14 13:52:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"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-workflowjcf2f/series-workflowjcf2f-convert-artifact-3724882231/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 13:51:55 +0000 UTC FinishedAt: 2026-08-14 13:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 13:51:55 +0000 UTC FinishedAt: 2026-08-14 13:51:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 13:51:56 +0000 UTC FinishedAt: 2026-08-14 13:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 13:52:06 +0000 UTC FinishedAt: 2026-08-14 13:54:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcf2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page","kvm_riscv_mmu_map"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b5060a4aa33d7d78a8c1837ab08ef0c81ea96650","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"6553562a-bd67-401b-829a-8a52c87155a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 13:52:06 +0000 UTC FinishedAt: 2026-08-14 13:54:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dffbc451-622f-4a75-bc51-5ca257b80b9a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*689cf573-3231-40cf-b97a-a891a25ad7aa,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-workflowjcf2f/series-workflowjcf2f-build-action-4213501481/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-workflowjcf2f/series-workflowjcf2f-build-action-54477142/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-workflowjcf2f/series-workflowjcf2f-convert-artifact-3724882231/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,}