Name: series-workflowlh24c Phase: Succeeded StartedAt: 2026-08-19 09:59:16 +0000 UTC FinishedAt: 2026-08-19 13:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[0] Phase: Succeeded StartedAt: 2026-08-19 09:59:16 +0000 UTC FinishedAt: 2026-08-19 10:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 09:59:16 +0000 UTC FinishedAt: 2026-08-19 10:05:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_INTEL", "KVM_INTEL_TDX", "INTEL_TDX_HOST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_INTEL", "KVM_INTEL_TDX", "INTEL_TDX_HOST" ], "series_id": "52bf6549-c6cd-4daa-b308-8cafdaec1407" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vmx_handle_exit", "tdx_handle_exit", "vt_handle_bus_lock_vmexit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nIGNvZGUgdG8gc2hhcmUgY29tbW9uIGxvZ2ljIGZvciBub3RpZnkgYW5kIGJ1cyBsb2NrIFZNLWV4aXRzLiBJdCBhbHNvIGludHJvZHVjZXMgYSBzeW50aGVzaXplZCBpbnZhbGlkIGV4aXQgcmVhc29uIGZvciBURFggdG8gcHJldmVudCB0aGUgY29uc3VtcHRpb24gb2Ygc3RhbGUgZXhpdCByZWFzb25zIGZyb20gcHJldmlvdXMgcnVucy4gXG5cbjEuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHZjcHUtXHUwMDNlcnVuYCAod2hpY2ggaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UpIGFyZSBsaW1pdGVkIHRvIHNldHRpbmcgc3BlY2lmaWMgZmllbGRzIChgZXhpdF9yZWFzb25gLCBgbm90aWZ5LmZsYWdzYCwgYGZsYWdzYCkgd2l0aCBkZXRlcm1pbmlzdGljIHZhbHVlcywgaWRlbnRpY2FsIHRvIHRoZSBwcmUtZXhpc3RpbmcgVk1YIGxvZ2ljLlxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMGApIGJlZm9yZSBzZXR0aW5nIHRoZSBiYXNpYyBleGl0IHJlYXNvbiwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBiaXRzIGZyb20gYmVpbmcgdXNlZC5cbjMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgZml4aW5nIGEgbG9naWMgYnVnIChzdGFsZSBleGl0IHJlYXNvbikuIFRoZXkgZG8gbm90IGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5TdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjhkYWFkMjQwOWQwNTkyZGNhOGMyZWVhYjcyMzBkZDgzYzhjZTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6MDI6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbmluZGV4IDA4MDA1Njc2NzAyYzIuLmJiZWVjMTk3YTUwN2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG4gXG5AQCAtMTgzLDYgJiM0MzsxODQsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcbiYjNDM7e1xuJiM0MztcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuJiM0MztcbiYjNDM7XHQmIzQzOyYjNDM7dmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG4mIzQzO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4mIzQzO1x0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuJiM0MztcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuJiM0MztcdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTE1NCwxNSAmIzQzOzE1NCw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdHJldHVybiB2bXhfdmNwdV9ydW4odmNwdSwgcnVuX2ZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tXHRcdFx0ICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aClcbi17XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4tXG4tXHRyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbi19XG4tXG4gc3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbkBAIC04NzYsNiAmIzQzOzg2Nyw0NCBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuJiM0MztpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuJiM0MztcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZ1xuJiM0MztcdCAqIHRvIC5oYW5kbGVfZXhpdCgpIGNhbGxiYWNrLlxuJiM0MztcdCAqL1xuJiM0MztcdHRvX3Z0KHZjcHUpLVx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG4mIzQzO1x0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4mIzQzO1x0XHRyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuJiM0MztcdGVsc2VcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHRyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4mIzQzO1x0ICogYSBidXMgbG9jayBpbiBndWVzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAjZGVmaW5lIFZNWF9SRVFVSVJFRF9BUElDVl9JTkhJQklUU1x0XHRcdFx0XFxcbiBcdChCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fRElTQUJMRUQpIHxcdFx0XHRcXFxuIFx0IEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHxcdFx0XHRcXFxuQEAgLTk0OSw3ICYjNDM7OTc4LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksXG4gXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXG4tXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXG4mIzQzO1x0LmhhbmRsZV9leGl0ID0gdnRfaGFuZGxlX2V4aXQsXG4gXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuIFx0LnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTkyMSwzNiAmIzQzOzkyMSw1NCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBFWElUX1JFQVNPTl9URENBTEw7XG4gfVxuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpXG4ge1xuLVx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4tXG4tXHRzd2l0Y2ggKHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuJiM0MztcdHN3aXRjaCAodnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG4gXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URDpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9OT05fQUNDRVNTSUJMRTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4mIzQzOyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT05cdFx0VTE2X01BWFxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuJiM0MztcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXR1cm4gdGhlIHN5bnRoZXNpemVkIGludmFsaWQgRXhpdCBSZWFzb24sIGFzIHRoZSBURFggbW9kdWxlXG4mIzQzO1x0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMgdW5kZWZpbmVkLFxuJiM0MztcdCAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSlcbiYjNDM7XHRcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XG4mIzQzO1x0XHRcdC5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLFxuJiM0MztcdFx0fTtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxuIFx0XHQvKlxuIFx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG4gXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAtMXU7XG4mIzQzO1x0XHRleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0dnQtXHUwMDNlZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmN4O1xuIFx0dGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yZHg7XG5AQCAtOTgxLDggJiM0Mzs5OTksNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbiYjNDM7XHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCAmIzQzOzEwODgsMjEgQEAgZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0ICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kXG4gXHQgKiBURENBTExzLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cdTAwM2Vrdm0pLVx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHZDUFUgbmV2ZXIgZW50ZXJlZCB0aGUgZ3Vlc3QsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYVxuJiM0MztcdFx0ICogaGFuZGxlZCBleGl0IHRvIHRoZSBjYWxsZXIuICBTeW50aGVzaXplIGFuIGludmFsaWQgZXhpdFxuJiM0MztcdFx0ICogcmVhc29uIHNvIHRoZSBwcmV2aW91cyBleGl0JiMzOTtzIHN0YWxlIHZhbHVlIGlzbiYjMzk7dCBjb25zdW1lZFxuJiM0MztcdFx0ICogYSBzZWNvbmQgdGltZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBNYWtlIGl0IHN1cGVyIGNsZWFyIHRoYXQgYml0WzMxOjE2XSBpcyBjbGVhcmVkIHRvIDAgYW5kIG9ubHlcbiYjNDM7XHRcdCAqIGJhc2ljIGV4aXQgcmVhc29uIChiaXRbMTU6MF0pIGlzIHNldCB0byB0aGUgc3ludGhlc2l6ZWRcbiYjNDM7XHRcdCAqIGludmFsaWQgZXhpdCByZWFzb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwO1xuJiM0MztcdFx0dnQtXHUwMDNlZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xuJiM0MztcdH1cbiBcbiBcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXHUwMDI2IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpO1xuIFxuQEAgLTIxMjYsNiAmIzQzOzIxNTYsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRcdCAqIC0gSWYgaXQmIzM5O3Mgbm90IGFuIE1TTUksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS5cbiBcdFx0ICovXG4gXHRcdHJldHVybiAxO1xuJiM0MztcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxuJiM0MztcdFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xuJiM0MztcdFx0cmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbiYjNDM7XHRcdHJldHVybiB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjE0MSw3ICYjNDM7MjE3Niw3IEBAIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XG4mIzQzO1x0aWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSkge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgJiM0MzszMTg5LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbiYjNDM7XHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4mIzQzO1x0XHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxuJiM0MztcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xuJiM0MztcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uNDkwYmFhZTU2Y2YxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDIzICYjNDM7NjI2NSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqL1xuIFxuLXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0Lypcbi1cdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuLVx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvXG4tXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cbi1cdCAqL1xuLVx0dG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSB0cnVlO1xuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbi1cdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuLVxuLVx0JiM0MzsmIzQzO3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgJiM0Mzs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sXG4gXHRcdFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xuIFxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbi1cdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4tXHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdHJldHVybiAxO1xuJiM0MztcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgZXhpdF9xdWFsKTtcbiB9XG4gXG4gc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC02Mzc1LDcgJiM0Mzs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuIFx0W0VYSVRfUkVBU09OX1ZNRlVOQ11cdFx0ICAgICAgPSBoYW5kbGVfdm14X2luc3RydWN0aW9uLFxuIFx0W0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdXHQgICAgICA9IGhhbmRsZV9wcmVlbXB0aW9uX3RpbWVyLFxuIFx0W0VYSVRfUkVBU09OX0VOQ0xTXVx0XHQgICAgICA9IGhhbmRsZV9lbmNscyxcbi1cdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSBoYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuJiM0MztcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuIFx0W0VYSVRfUkVBU09OX05PVElGWV1cdFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxuIFx0W0VYSVRfUkVBU09OX1NFQU1DQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG4gXHRbRVhJVF9SRUFTT05fVERDQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG5AQCAtNjcwMyw3ICYjNDM7NjY4MSw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgKiBUaGUgZ3Vlc3QgaGFzIGV4aXRlZC4gIFNlZSBpZiB3ZSBjYW4gZml4IGl0IG9yIGlmIHdlIG5lZWQgdXNlcnNwYWNlXG4gICogYXNzaXN0YW5jZS5cbiAgKi9cbi1zdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuJiM0MztpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbkBAIC02ODYyLDI0ICYjNDM7Njg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbi17XG4tXHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XG4tXG4tXHQvKlxuLVx0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcbi1cdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXG4tXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XG4tXHRcdGlmIChyZXQgXHUwMDNlIDApXG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4tXG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHZvaWQgdm14X3VwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRwciwgaW50IGlycilcbiB7XG4gXHRpbnQgdHByX3RocmVzaG9sZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bXhfaGFuZGxlX2V4aXQmIzM0OywKICAgICYjMzQ7dGR4X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3Z0X2hhbmRsZV9idXNfbG9ja192bWV4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgYnVzIGxvY2sgZGV0ZWN0aW9uIGFuZCBub3RpZnkgVk0gZXhpdHMuIEl0IGludHJvZHVjZXMgYSBjb21tb24gdnRfaGFuZGxlX2V4aXQgYW5kIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQgZm9yIGJvdGggVk1YIGFuZCBURFgsIGFuZCB1cGRhdGVzIHRkeF9oYW5kbGVfZXhpdCB0byBoYW5kbGUgdGhlc2UgZXhpdHMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIHBhdGhzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDowMjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCmluZGV4IDA4MDA1Njc2NzAyYzIuLmJiZWVjMTk3YTUwN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bW11LmgmIzM0OwogCkBAIC0xODMsNiAmIzQzOzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpCiYjNDM7ewomIzQzOwlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwomIzQzOwomIzQzOwkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKJiM0MzsJICAgIGNvbnRleHRfaW52YWxpZCkgewomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KJiM0MzsJCQkJCSAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKQEAgLTE1NCwxNSAmIzQzOzE1NCw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAlyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aCkKLXsKLQlpZiAoaXNfdGRfdmNwdSh2Y3B1KSkKLQkJcmV0dXJuIHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7Ci0KLQlyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKLX0KLQogc3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGlzX3RkX3ZjcHUodmNwdSkpIHsKQEAgLTg3Niw2ICYjNDM7ODY3LDQ0IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCiYjNDM7CSAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZwomIzQzOwkgKiB0byAuaGFuZGxlX2V4aXQoKSBjYWxsYmFjay4KJiM0MzsJICovCiYjNDM7CXRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKJiM0MzsJCQkgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKJiM0MzsJaWYgKGlzX3RkX3ZjcHUodmNwdSkpCiYjNDM7CQlyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQlyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwomIzQzOwkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSzsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTCQkJCVwKIAkoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8CQkJXAogCSBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8CQkJXApAQCAtOTQ5LDcgJiM0Mzs5NzgsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCiAJLnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSwKIAkudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksCi0JLmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLAomIzQzOwkuaGFuZGxlX2V4aXQgPSB2dF9oYW5kbGVfZXhpdCwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTkyMSwzNiAmIzQzOzkyMSw1NCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpCiB7Ci0Jc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7Ci0JdTMyIGV4aXRfcmVhc29uOwotCi0Jc3dpdGNoICh0ZHgtJmd0O3ZwX2VudGVyX3JldCAmYW1wOyBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHsKJiM0MzsJc3dpdGNoICh2cF9lbnRlcl9yZXQgJmFtcDsgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7CiAJY2FzZSBURFhfU1VDQ0VTUzoKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVToKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVEQ6CiAJY2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX05PTl9BQ0NFU1NJQkxFOgogCWNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC0xdTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiYjNDM7fQomIzQzOwomIzQzOy8qIFN5bnRoZXNpemVkIGludmFsaWQgRXhpdCBSZWFzb24gKi8KJiM0MzsjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OCQlVMTZfTUFYCiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiYjNDM7CXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYIG1vZHVsZQomIzQzOwkgKiBuZXZlciBhdHRlbXB0ZWQgdG8gcnVuIHRoZSB2Q1BVLCBpLmUuIHRoZSBFeGl0IFJlYXNvbiBpcyB1bmRlZmluZWQsCiYjNDM7CSAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci4KJiM0MzsJICovCiYjNDM7CWlmICghdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHRkeC0mZ3Q7dnBfZW50ZXJfcmV0KSkKJiM0MzsJCXJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7CiYjNDM7CQkJLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04sCiYjNDM7CQl9OwogCi0Jc3dpdGNoIChleGl0X3JlYXNvbikgewomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC05NjcsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAl0ZHgtJmd0O3ZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcigmYW1wO3RkeC0mZ3Q7dnAsICZhbXA7dGR4LSZndDt2cF9lbnRlcl9hcmdzKTsKIAotCXZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdnQtJmd0O2V4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKIAogCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MucmN4OwogCXRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yZHg7CkBAIC05ODEsOCAmIzQzOzk5OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTA3MSw4ICYjNDM7MTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCiAJICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kCiAJICogVERDQUxMcy4KIAkgKi8KLQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3dhaXRfZm9yX3NlcHRfemFwKSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgdkNQVSBuZXZlciBlbnRlcmVkIHRoZSBndWVzdCwgYnV0IHRoaXMgbG9va3MgbGlrZSBhCiYjNDM7CQkgKiBoYW5kbGVkIGV4aXQgdG8gdGhlIGNhbGxlci4gIFN5bnRoZXNpemUgYW4gaW52YWxpZCBleGl0CiYjNDM7CQkgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQmIzM5O3Mgc3RhbGUgdmFsdWUgaXNuJiMzOTt0IGNvbnN1bWVkCiYjNDM7CQkgKiBhIHNlY29uZCB0aW1lLgomIzQzOwkJICoKJiM0MzsJCSAqIE1ha2UgaXQgc3VwZXIgY2xlYXIgdGhhdCBiaXRbMzE6MTZdIGlzIGNsZWFyZWQgdG8gMCBhbmQgb25seQomIzQzOwkJICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZAomIzQzOwkJICogaW52YWxpZCBleGl0IHJlYXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmZ1bGwgPSAwOwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDsKJiM0MzsJfQogCiAJdHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyAmYW1wOyBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTsKIApAQCAtMjEyNiw2ICYjNDM7MjE1NiwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIAkJICogLSBJZiBpdCYjMzk7cyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgogCQkgKi8KIAkJcmV0dXJuIDE7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fTk9USUZZOgomIzQzOwkJLyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqLwomIzQzOwkJcmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6CiYjNDM7CQlyZXR1cm4gdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0yMTQxLDcgJiM0MzsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKLQlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKJiM0MzsJaWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtJmd0O3ZwX2VudGVyX3JldCkpIHsKIAkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCSppbmZvMiA9IHRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjsKIAkJKmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwpAQCAtMzE1NCw2ICYjNDM7MzE4OSwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAl0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoJmFtcDt0ZHgtJmd0O3Z0LnBpX2Rlc2MpKTsKIAl0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTsKIAomIzQzOwlpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQl0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCQkJIFNFQ09OREFSWV9FWEVDX05PVElGWV9WTV9FWElUSU5HKTsKJiM0MzsJCXRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csCiYjNDM7CQkJCXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ub3RpZnlfd2luZG93KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKQomIzQzOwkJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsCiYjNDM7CQkJCSBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pOwomIzQzOwogCXRkeC0mZ3Q7c3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCBlM2JmZTZhY2ExYTBlLi40OTBiYWFlNTZjZjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTYyNjUsMjMgJiM0Mzs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqLwogCi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCS8qCi0JICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCi0JICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvCi0JICogdm14X2hhbmRsZV9leGl0KCkuCi0JICovCi0JdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwotCWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7Ci0KLQkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwogCiAJLyoKIAkgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyOTEsMTUgJiM0Mzs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCiAJCQkgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CiAKLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKLQkgICAgY29udGV4dF9pbnZhbGlkKSB7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KLQkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02Mzc1LDcgJiM0Mzs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0gewogCVtFWElUX1JFQVNPTl9WTUZVTkNdCQkgICAgICA9IGhhbmRsZV92bXhfaW5zdHJ1Y3Rpb24sCiAJW0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdCSAgICAgID0gaGFuZGxlX3ByZWVtcHRpb25fdGltZXIsCiAJW0VYSVRfUkVBU09OX0VOQ0xTXQkJICAgICAgPSBoYW5kbGVfZW5jbHMsCi0JW0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IGhhbmRsZV9idXNfbG9ja192bWV4aXQsCiYjNDM7CVtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LAogCVtFWElUX1JFQVNPTl9OT1RJRlldCQkgICAgICA9IGhhbmRsZV9ub3RpZnksCiAJW0VYSVRfUkVBU09OX1NFQU1DQUxMXQkJICAgICAgPSBoYW5kbGVfdGR4X2luc3RydWN0aW9uLAogCVtFWElUX1JFQVNPTl9URENBTExdCQkgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sCkBAIC02NzAzLDcgJiM0Mzs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICogVGhlIGd1ZXN0IGhhcyBleGl0ZWQuICBTZWUgaWYgd2UgY2FuIGZpeCBpdCBvciBpZiB3ZSBuZWVkIHVzZXJzcGFjZQogICogYXNzaXN0YW5jZS4KICAqLwotc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKJiM0MztpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CkBAIC02ODYyLDI0ICYjNDM7Njg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCi17Ci0JaW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpOwotCi0JLyoKLQkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwotCSAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuCi0JICovCi0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKLQkJaWYgKHJldCAmZ3Q7IDApCi0JCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwotCi0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiB2b2lkIHZteF91cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0cHIsIGludCBpcnIpCiB7CiAJaW50IHRwcl90aHJlc2hvbGQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBLVk0gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IHR3ZWFrcyBLVk0mIzM5O3MgVk1YIGFuZCBURFggY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBWTSBleGl0cyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwsIHNpbmNlIHRoYXQmIzM5O3MgYSBrZXkgcGFydCBvZiBlbnN1cmluZyBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb21lIG5ldyBmdW5jdGlvbnM6IGBfX3Z0X2hhbmRsZV9ub3RpZnlgIChzdGF0aWMgaW5saW5lKSwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBsaWtlIGB0ZHhfaGFuZGxlX2V4aXRgLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAsIGFuZCBgdGR4X3ZjcHVfaW5pdGAuIEl0IGFsc28gdG91Y2hlcyBgdnRfaGFuZGxlX2V4aXRgIGFuZCBgdm14X2hhbmRsZV9leGl0YC4KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IFREWCDigJMgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCBzbyBJIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gV2Uga25vdyBLVk0gaXRzZWxmIGdldHMgYSBsb3Qgb2YgbG92ZSBmcm9tIHN5emthbGxlci4gVGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcmVuJiMzOTt0IHdvcnRoIGZ1enppbmcsIGJ1dCBURFggaXMgYSBiaXQgZGlmZmVyZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzcGVjaWZpYyBURFggY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlLCBldmVuIGlmIGZ1bGwgVERYIGVtdWxhdGlvbiBpc24mIzM5O3QgZmVhc2libGUuIEkga25vdyBRRU1VIGhhcyBzb21lIFREWCBzdXBwb3J0LCBidXQgaXQmIzM5O3MgcmVsaWFudCBvbiBLVk0gYW5kIGhhcmR3YXJlLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpUaGVuLCB0aGVyZSYjMzk7cyBgdnRfaGFuZGxlX2V4aXRgLCB3aGljaCBpcyB0aGUgY29tbW9uIGV4aXQgaGFuZGxlciBmb3IgYm90aCBWTVggYW5kIFREWC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggbW92ZXMgYnVzIGxvY2sgZGV0ZWN0aW9uIGZyb20gYHZteF9oYW5kbGVfZXhpdGAgdG8gYHZ0X2hhbmRsZV9leGl0YC4gQmVjYXVzZSBpdCBhZmZlY3RzIGJvdGggVk1YIGFuZCBURFgsIGV2ZW4gaW4gUUVNVSwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSB3b3J0aCBmdXp6aW5nLiBWTVggaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcyBsaWtlIFFFTVUgaW5zaWRlIEdDRS4gU2luY2UgYnVzIGxvY2sgZGV0ZWN0aW9uIGlzIG5vdyByb3V0ZWQgdGhyb3VnaCBgdnRfaGFuZGxlX2V4aXRgLCB0aGlzIGFyZWEgcmVxdWlyZXMgY2xvc2Ugc2NydXRpbnkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBXZSBoYXZlIGB2dF9oYW5kbGVfZXhpdGAgKHN0YXRpYyksIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCAobm9uLXN0YXRpYyksIGB2bXhfaGFuZGxlX2V4aXRgIChub24tc3RhdGljKSwgYHRkeF9oYW5kbGVfZXhpdGAgKG5vbi1zdGF0aWMpLCBhbmQgYF9fdnRfaGFuZGxlX25vdGlmeWAgKHN0YXRpYyBpbmxpbmUpLiBJJiMzOTtsbCB1c2UgY29kZSBzZWFyY2ggdG8gdmVyaWZ5IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgYW5kIG5lZWQgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTIwNT1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6MjA2OmludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIwNy1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NTQ9c3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjktXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzA6aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODcxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTIwNjE9aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTYyLVx0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjE2MzpcdFx0cmV0dXJuIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNjQtXHRkZWZhdWx0OlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjMwNT1zdGF0aWMgaW50ICgqa3ZtX3ZteF9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MzU1LVx0W0VYSVRfUkVBU09OX0VOQ0xTXVx0XHQgICAgICA9IGhhbmRsZV9lbmNscyxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjM1NjpcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MzU3LVx0W0VYSVRfUkVBU09OX05PVElGWV1cdFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBFeGl0IEhhbmRsZXJzOiBgdnRfaGFuZGxlX2V4aXRgIHZzLiBgdm14X2hhbmRsZV9leGl0YCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGVzZSBleGl0IGhhbmRsZXJzLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgY29yZSBkaWZmZXJlbmNlIC0gSW50ZWwgVlQteCB2ZXJzdXMgQU1ELVYsIG9yIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyBsaWtlIGEgcGFydGljdWxhciBndWVzdCBPUyBiZWhhdmlvciBvciBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb24uIENoZWNraW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgKSBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB3aGVuIHRoZSBndWVzdCB0cmllcyB0byBkbyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBpbnRlcnZlbnRpb24gZnJvbSB0aGUgaHlwZXJ2aXNvci4gCgpJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2libGUgZXhpdCByZWFzb25zIEkgZXhwZWN0IHRvIHNlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwcml2aWxlZ2UgbGV2ZWwgdHJhbnNpdGlvbnMsIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucywgb3IgcGVyaGFwcyBjb250cm9sIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnM/IEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBsb2dpYyB3aXRoaW4gZWFjaCBoYW5kbGVyIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGVtIGFuZCBob3cgdGhlIGh5cGVydmlzb3IgcmVzcG9uZHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYXJlYXMgcHJvbmUgdG8gZXJyb3JzLCBhbmQgYW55IHZ1bG5lcmFiaWxpdGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4aXQgaGFuZGxpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoLCBhbmQgYW55IHdlYWtuZXNzIGhlcmUgY291bGQgYmUgZXhwbG9pdGVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlc2UgaGFuZGxlcnMgYXJlIHdoZXJlIHRoZSBoeXBlcnZpc29yJiMzOTtzIHNlY3VyaXR5IHBvbGljaWVzIGFyZSBlbmZvcmNlZC4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSB0aGUgZ2F0ZWtlZXBlcnMgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z0X2hhbmRsZV9leGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg3MD1pbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODgwLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODgxOnN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODgyLVx0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9OTE3PXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTgwLVx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTgxOlx0LmhhbmRsZV9leGl0ID0gdnRfaGFuZGxlX2V4aXQsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05ODItXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMgRXhpdCBIYW5kbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZXhpdCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGB2dF9oYW5kbGVfZXhpdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWxlIGB2bXhfaGFuZGxlX2V4aXRgIGlzIG5vdC4gVGhpcyBkaWZmZXJlbmNlIGlzIGZ1bmRhbWVudGFsIGFuZCBoYXMgY2xlYXIgaW1wbGljYXRpb25zIGZvciB0aGVpciBzY29wZSBhbmQgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4KCmB2dF9oYW5kbGVfZXhpdGAgYmVpbmcgYHN0YXRpY2AgbWVhbnMgaXQmIzM5O3MgbG9jYWwgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGhpZGRlbiBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW07IGl0IGNhbiYjMzk7dCBiZSBkaXJlY3RseSBjYWxsZWQgb3IgYWNjZXNzZWQgZnJvbSBleHRlcm5hbCBtb2R1bGVzLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHZ0X2hhbmRsZV9leGl0YCBpcyBzcGVjaWZpYyB0byB0aGUgdmlydHVhbC04MDg2IHRhc2sgb3IgYSBwYXJ0aWN1bGFyIHZpcnR1YWwgbWFjaGluZSBtYW5hZ2VtZW50IGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IG1vZHVsZSwgZGVzaWduZWQgZm9yIHZlcnkgZm9jdXNlZCwgbG93LWxldmVsIHRhc2tzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBjb250ZXh0LCBidXQgdGhhdCYjMzk7cyBteSBpbml0aWFsIHRha2UuCgpgdm14X2hhbmRsZV9leGl0YCwgb24gdGhlIG90aGVyIGhhbmQsIGJlaW5nIG5vbi1zdGF0aWMsIGluZGljYXRlcyB0aGF0IGl0JiMzOTtzIG1lYW50IHRvIGJlIHZpc2libGUgYW5kIHBvdGVudGlhbGx5IHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSXQgY291bGQgYmUgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBnZW5lcmFsIFZNWCB2aXJ0dWFsaXphdGlvbiBsYXllciwgb3IgYSBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlIGludGVyZmFjZSBmb3IgaGFuZGxpbmcgZXhpdHMgaW4gdGhlIFZNWCBlbnZpcm9ubWVudC4gSXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIG1vZHVsZXMgY2FsbGluZyBpbnRvIGl0IGZvciBleGl0IHByb2Nlc3NpbmcsIHN1Z2dlc3RpbmcgYSBtb3JlIHB1YmxpYyBvciBnZW5lcmFsaXplZCBwdXJwb3NlLiBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHdoZW4gSSBzdGFydCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdoYXQgcGFydCBvZiB0aGUgc3lzdGVtIGlzIHRoZSBvd25lciBvZiB3aGljaCByZXNwb25zaWJpbGl0eSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBTZWVpbmcgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgd2lsbCBnaXZlIG1lIGEgdmVyeSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHNwZWNpZmljIHJvbGVzIGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgdGhlIHVzZSBvZiBgc3RhdGljYCBmb3Igb25lIGFuZCBub3QgdGhlIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODE9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODkwLSNlbmRpZlxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODkxOlx0XHRyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODkyLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTkxNz1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzEtXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzI6XHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdm14X2hhbmRsZV9leGl0X2lycW9mZixcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzMtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDI5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ5NC1cdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU0OTU6XHQgKiBTZWUgdGhlIGNvbW1lbnRzIGluIHZteF9oYW5kbGVfZXhpdC5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ5Ni1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjQ3OT12b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02NjgzLSAqL1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2Njg0OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY2ODUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzEzOD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTUzLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTU0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxNTUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI4PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoyOTppbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMwOnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzEtaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0PTE1OTI9Tm90ZXM6XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTItICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NjI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjY2MmU5IHZteF92Y3B1X3J1biYjNDM7MHgzYjkgKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYzBmNjE5YTAgX192bXhfY28uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjEzOiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODcyOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5Y2ZiMiB2Y3B1X2VudGVyX2d1ZXN0JiM0MzsweDc1MiAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY1ZjU3MCB2bXhfLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxNC0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg4MTogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWQwMjggdmNwdV9lbnRlcl9ndWVzdCYjNDM7MHg3YzggKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYjIzNGY5MDAgX19zci4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTU6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDlkMDZmIHZjcHVfZW50ZXJfZ3Vlc3QmIzQzOzB4ODBmIChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjcyZTMwIHZteF8uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE2OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3MmUzZCB2bXhfaGFuZGxlX2V4aXQmIzQzOzB4ZCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY3MjdjMCBfX3ZteF9oLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJiMTUgX192bXhfaGFuZGxlX2V4aXQmIzQzOzB4MzU1IChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjYwYWUwIHZteC4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTg6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyOTk0IF9fdm14X2hhbmRsZV9leGl0JiM0MzsweDFkNCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNzA5MCBrdm0uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjE5LSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzOTAzOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTBiNzBmMSBrdm1fZW11bGF0ZV9jcHVpZCYjNDM7MHg2MSAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNmUxMCBrdm1fLi4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIFZNIEV4aXQgSGFuZGxlcnMqKgoKQWxyaWdodCwgc28gSSBzZWUgdGhyZWUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGVyZSB0aGF0IGFyZSBhbGwgZGVzaWduZWQgdG8gaGFuZGxlIHNwZWNpZmljIHR5cGVzIG9mIFZNWCAoVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMpIGV4aXRzLiBGaXJzdCwgdGhlcmUmIzM5O3MgYHZteF9oYW5kbGVfZXhpdGAsIHdoaWNoLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCBpcyB0aGUgZ2VuZXJhbCBoYW5kbGVyIGZvciBWTVggZXhpdHMuIFRoZW4sIHRoZXJlJiMzOTtzIGB0ZHhfaGFuZGxlX2V4aXRgIGZvciBURFggZXhpdHMgLSB3aGljaCBpcyBpbnRlcmVzdGluZywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIHNlcGFyYXRlIGZvciBURFguIEZpbmFsbHkgdGhlcmUmIzM5O3MgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCB3aGljaCBpcyBkZXNpZ25lZCBmb3IgYSBidXMgbG9jayB2bWV4aXQsIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHRvIGRlc2lnbiBteSBzeXN0ZW0uCgpMZXQmIzM5O3MgY2hlY2sgYHRkeF9oYW5kbGVfZXhpdGAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODE9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODg3LVx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4ODg6XHRcdHJldCA9IHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04ODktXHRlbHNlXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05NDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NjYtXHRcdC8qXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk2NzpcdFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NjgtXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTExNjI9c3RhdGljIGludCB0ZHhfaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTE2Ny1cdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjExNjg6XHQgKiB0ZHhfaGFuZGxlX2V4aXQoKSB3aXRoIFREWF9OT05fUkVDT1ZFUkFCTEUgc2V0IGlmIGEgI01DIG9jY3VycyBvblxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTY5LVx0ICogVk0tRW50cnkuICBOTUlzIGFyZSBoYW5kbGVkIGJ5IHRkeF92Y3B1X2VudGVyX2V4aXQoKS5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTIwNDc9aW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjA2MC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjA2MTppbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjA2Mi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTQzPXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxNDQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xNDUtXHRcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MDAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVk0gRXhpdHM6IEEgVGFyZ2V0ZWQgUmV2aWV3KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBWTSBleGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlc2UgZnVuY3Rpb25zOiBgdm14X2hhbmRsZV9leGl0YCwgYHRkeF9oYW5kbGVfZXhpdGAsIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCk5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFREWCwgSSBiZXQgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBgQ09ORklHX0tWTV9JTlRFTF9URFhgIChvciBzb21ldGhpbmcgY29tcGFyYWJsZSkgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGFuZCBlbnN1cmUgdGhlIHByb3BlciBidWlsZCBmbGFncyBhcmUgc2V0IGZvciB0aGUgcmVsZXZhbnQgZmVhdHVyZXMuIFRoZSBjb2RlIGl0c2VsZiwgb2YgY291cnNlLCBpcyBuZXN0bGVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9gLCBzbyBJJiMzOTtsbCBiZSBzcGVuZGluZyBtb3N0IG9mIG15IHRpbWUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgVERYIFN1cHBvcnQgaW4gdGhlIEtWTS94ODYgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEtWTSBzdXBwb3J0IGZvciBJbnRlbCYjMzk7cyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUsIHNvIGl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdGhhdCBJJiMzOTtkIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgS1ZNX0lOVEVMX1REWGAgdGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcywgaWYgYW55LCBhcmUgbmVlZGVkIHRvIGVuYWJsZSBgS1ZNX0lOVEVMX1REWGAuIEl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBkZXBlbmQgb24gc29tZSBvZiB0aGUgQ1BVIGZlYXR1cmVzIGFuZCBvdGhlciBsb3ctbGV2ZWwgS1ZNIHNldHRpbmdzLiBJIHdhbnQgdG8gc2VlIHdoaWNoIG90aGVycyBhcmUgY29ubmVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgVERYIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgdGhlIHZpcnR1YWxpemVkIGNvbXBvbmVudCBkZXBlbmRzIG9uIHRoZSBob3N0IHN1cHBvcnQsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZGV0YWlscyBzdHJhaWdodC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBJTlRFTF9URFhfSE9TVGAgbm93IGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYGFyY2gveDg2L0tjb25maWdgIGZvciBgSU5URUxfVERYX0hPU1RgIGRlcGVuZGVuY2llczoKCioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgVERYIEhvc3QgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBzdXJyb3VuZGluZyBJbnRlbCYjMzk7cyBURFggSG9zdCBzdXBwb3J0IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGltZSB0byBkZWx2ZSBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBnYXRlLCBkZXBlbmQgb24sIG9yIGJlIHJlcXVpcmVkICpieSogYElOVEVMX1REWF9IT1NUYC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBGaXJzdCwgSSB3YW50IHRvIGVuc3VyZSBteSBzZXR1cCBwcm9wZXJseSBlbmFibGVzIGV2ZXJ5dGhpbmcgbmVlZGVkLiBTZWNvbmQsIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgaW4gdHJvdWJsZXNob290aW5nIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzLCBvciBpZiBzb21ldGhpbmcgaXMgZGlzYWJsZWQgd2hlbiBpdCBzaG91bGRuJiMzOTt0IGJlLiBUaGlyZCwgSSBzaG91bGQgYmUgYWJsZSB0byBwcmVkaWN0IHdoYXQgY2hhbmdlcyBtYXkgb2NjdXIgaW4gZnV0dXJlIHJlbGVhc2VzIGJ5IHVuZGVyc3RhbmRpbmcgd2hhdCBvdGhlciBmZWF0dXJlcyB0b3VjaCB0aGUgc2FtZSBwYXJ0cyBvZiB0aGUgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLiBJJiMzOTtsbCBsb29rIGZvciBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgcmVxdWlyZXNgLCBvciBldmVuIGltcGxpZWQgcmVsYXRpb25zaGlwcyB0aHJvdWdoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4xODgwOlx0Y29uZmlnIEVGSVxuMTg4MTpcdFx0Ym9vbCBcJiMzNDtFRkkgcnVudGltZSBzZXJ2aWNlIHN1cHBvcnRcJiMzNDtcbjE4ODI6XHRcdGRlcGVuZHMgb24gQUNQSVxuMTg4MzpcdFx0c2VsZWN0IFVDUzJfU1RSSU5HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjE4CgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBWTVgvVERYIEV4aXQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHdlJiMzOTtyZSBlbmFibGluZyBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBpbml0aWFsbHksIGJ1dCB0aGVuIEkgcmVhbGl6ZWQgaXQmIzM5O3MgdG91Y2hpbmcgYHZteF9oYW5kbGVfZXhpdGAgYW5kIGB2dF9oYW5kbGVfZXhpdGAsIHdoaWNoIGFyZSBjb3JlIFZNWCBjb21wb25lbnRzIOKAkyB0aGF0JiMzOTtzIHdoZW4gSSBrbmV3IGBLVk1fSU5URUxgIHdhcyBjcml0aWNhbCBoZXJlLgoKVG8gY29uZmlybSB0aGlzLCBJIGNoZWNrZWQgd2hpY2ggZmlsZXMgd2VyZSBiZWluZyBtb2RpZmllZDogYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCwgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBUaGUgY2hhbmdlcyBpbiBgdm14LmNgIGFuZCBgbWFpbi5jYCBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX0tWTV9JTlRFTGAgd2hpbGUgdGhvc2UgaW4gYHRkeC5jYCBhcmUgZ2F0ZWQgYnkgYENPTkZJR19LVk1fSU5URUxfVERYYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuCgpJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAsIHdoaWNoIGlzIGRlZmluZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AsIGFuZCB0aGF0JiMzOTtzIGNvbXBpbGVkIHdpdGggYEtWTV9JTlRFTGAuIFRoZW4gSSB3ZW50IGJhY2sgdG8gYHZteF9oYW5kbGVfZXhpdGAsIHdoaWNoIGxpdmVzIGluIGB2bXguY2AuIEV4YW1pbmluZyB0aGUgcGF0Y2gsIEkgZm91bmQgdGhhdCBgdm14X2hhbmRsZV9leGl0YCBoYWQgYmVlbiByZW5hbWVkIHRvIGBfX3ZteF9oYW5kbGVfZXhpdGAgYW5kIHRoZSBvbGQgYHZteF9oYW5kbGVfZXhpdGAgd2FzIHJlbW92ZWQsIHdpdGggdGhlIGJ1cyBsb2NrIGRldGVjdGlvbiBsb2dpYyBtb3ZlZCB0byBgdnRfaGFuZGxlX2V4aXRgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciB0ZXN0aW5nIGFuZCBhbmFseXNpcyBhcmUgbm93IGNsZWFyOiBgdm14X2hhbmRsZV9leGl0YCwgYHRkeF9oYW5kbGVfZXhpdGAsIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuCgpUaGUgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZTogYEtWTV9JTlRFTGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBJTlRFTF9URFhfSE9TVGAuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZGl2ZXMgaW50byB0aGUgZnVuZGFtZW50YWwgS1ZNIFZNWCBleGl0IGhhbmRsaW5nLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCByZWFjaGFibGUgZHVyaW5nIGd1ZXN0IGV4ZWN1dGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBidXMgbG9jayBkZXRlY3Rpb24gYW5kIG5vdGlmeSBWTSBleGl0cy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGNlbnRyYWxpemVzIGV4aXQgaGFuZGxpbmcgZm9yIFZNWCBhbmQgVERYLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBidXMgbG9ja3MgYW5kIG5vdGlmaWVzLiBTcGVjaWZpY2FsbHksIGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBhcmUgaW50cm9kdWNlZCBmb3IgdGhpcyBwdXJwb3NlLiBUaGUgcGF0Y2ggdXBkYXRlcyBgdGR4X2hhbmRsZV9leGl0YCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyB0aGF0IG5lZWQgdG8gYmUgZnV6emVkIGR1ZSB0byB0aGVpciBkaXJlY3QgaW1wYWN0IG9uIGd1ZXN0IGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nIGNvZGUgdG8gc2hhcmUgY29tbW9uIGxvZ2ljIGZvciBub3RpZnkgYW5kIGJ1cyBsb2NrIFZNLWV4aXRzLiBJdCBhbHNvIGludHJvZHVjZXMgYSBzeW50aGVzaXplZCBpbnZhbGlkIGV4aXQgcmVhc29uIGZvciBURFggdG8gcHJldmVudCB0aGUgY29uc3VtcHRpb24gb2Ygc3RhbGUgZXhpdCByZWFzb25zIGZyb20gcHJldmlvdXMgcnVucy4gXG5cbjEuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHZjcHUtXHUwMDNlcnVuYCAod2hpY2ggaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UpIGFyZSBsaW1pdGVkIHRvIHNldHRpbmcgc3BlY2lmaWMgZmllbGRzIChgZXhpdF9yZWFzb25gLCBgbm90aWZ5LmZsYWdzYCwgYGZsYWdzYCkgd2l0aCBkZXRlcm1pbmlzdGljIHZhbHVlcywgaWRlbnRpY2FsIHRvIHRoZSBwcmUtZXhpc3RpbmcgVk1YIGxvZ2ljLlxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMGApIGJlZm9yZSBzZXR0aW5nIHRoZSBiYXNpYyBleGl0IHJlYXNvbiwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBiaXRzIGZyb20gYmVpbmcgdXNlZC5cbjMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgZml4aW5nIGEgbG9naWMgYnVnIChzdGFsZSBleGl0IHJlYXNvbikuIFRoZXkgZG8gbm90IGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5TdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDowMjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCmluZGV4IDA4MDA1Njc2NzAyYzIuLmJiZWVjMTk3YTUwN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bW11LmgmIzM0OwogCkBAIC0xODMsNiAmIzQzOzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpCiYjNDM7ewomIzQzOwlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwomIzQzOwomIzQzOwkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKJiM0MzsJICAgIGNvbnRleHRfaW52YWxpZCkgewomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KJiM0MzsJCQkJCSAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKQEAgLTE1NCwxNSAmIzQzOzE1NCw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAlyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aCkKLXsKLQlpZiAoaXNfdGRfdmNwdSh2Y3B1KSkKLQkJcmV0dXJuIHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7Ci0KLQlyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKLX0KLQogc3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGlzX3RkX3ZjcHUodmNwdSkpIHsKQEAgLTg3Niw2ICYjNDM7ODY3LDQ0IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCiYjNDM7CSAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZwomIzQzOwkgKiB0byAuaGFuZGxlX2V4aXQoKSBjYWxsYmFjay4KJiM0MzsJICovCiYjNDM7CXRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKJiM0MzsJCQkgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKJiM0MzsJaWYgKGlzX3RkX3ZjcHUodmNwdSkpCiYjNDM7CQlyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQlyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwomIzQzOwkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSzsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTCQkJCVwKIAkoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8CQkJXAogCSBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8CQkJXApAQCAtOTQ5LDcgJiM0Mzs5NzgsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCiAJLnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSwKIAkudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksCi0JLmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLAomIzQzOwkuaGFuZGxlX2V4aXQgPSB2dF9oYW5kbGVfZXhpdCwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTkyMSwzNiAmIzQzOzkyMSw1NCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpCiB7Ci0Jc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7Ci0JdTMyIGV4aXRfcmVhc29uOwotCi0Jc3dpdGNoICh0ZHgtJmd0O3ZwX2VudGVyX3JldCAmYW1wOyBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHsKJiM0MzsJc3dpdGNoICh2cF9lbnRlcl9yZXQgJmFtcDsgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7CiAJY2FzZSBURFhfU1VDQ0VTUzoKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVToKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVEQ6CiAJY2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX05PTl9BQ0NFU1NJQkxFOgogCWNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC0xdTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiYjNDM7fQomIzQzOwomIzQzOy8qIFN5bnRoZXNpemVkIGludmFsaWQgRXhpdCBSZWFzb24gKi8KJiM0MzsjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OCQlVMTZfTUFYCiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiYjNDM7CXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYIG1vZHVsZQomIzQzOwkgKiBuZXZlciBhdHRlbXB0ZWQgdG8gcnVuIHRoZSB2Q1BVLCBpLmUuIHRoZSBFeGl0IFJlYXNvbiBpcyB1bmRlZmluZWQsCiYjNDM7CSAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci4KJiM0MzsJICovCiYjNDM7CWlmICghdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHRkeC0mZ3Q7dnBfZW50ZXJfcmV0KSkKJiM0MzsJCXJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7CiYjNDM7CQkJLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04sCiYjNDM7CQl9OwogCi0Jc3dpdGNoIChleGl0X3JlYXNvbikgewomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC05NjcsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAl0ZHgtJmd0O3ZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcigmYW1wO3RkeC0mZ3Q7dnAsICZhbXA7dGR4LSZndDt2cF9lbnRlcl9hcmdzKTsKIAotCXZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdnQtJmd0O2V4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKIAogCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MucmN4OwogCXRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yZHg7CkBAIC05ODEsOCAmIzQzOzk5OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTA3MSw4ICYjNDM7MTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCiAJICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kCiAJICogVERDQUxMcy4KIAkgKi8KLQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3dhaXRfZm9yX3NlcHRfemFwKSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgdkNQVSBuZXZlciBlbnRlcmVkIHRoZSBndWVzdCwgYnV0IHRoaXMgbG9va3MgbGlrZSBhCiYjNDM7CQkgKiBoYW5kbGVkIGV4aXQgdG8gdGhlIGNhbGxlci4gIFN5bnRoZXNpemUgYW4gaW52YWxpZCBleGl0CiYjNDM7CQkgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQmIzM5O3Mgc3RhbGUgdmFsdWUgaXNuJiMzOTt0IGNvbnN1bWVkCiYjNDM7CQkgKiBhIHNlY29uZCB0aW1lLgomIzQzOwkJICoKJiM0MzsJCSAqIE1ha2UgaXQgc3VwZXIgY2xlYXIgdGhhdCBiaXRbMzE6MTZdIGlzIGNsZWFyZWQgdG8gMCBhbmQgb25seQomIzQzOwkJICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZAomIzQzOwkJICogaW52YWxpZCBleGl0IHJlYXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmZ1bGwgPSAwOwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDsKJiM0MzsJfQogCiAJdHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyAmYW1wOyBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTsKIApAQCAtMjEyNiw2ICYjNDM7MjE1NiwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIAkJICogLSBJZiBpdCYjMzk7cyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgogCQkgKi8KIAkJcmV0dXJuIDE7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fTk9USUZZOgomIzQzOwkJLyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqLwomIzQzOwkJcmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6CiYjNDM7CQlyZXR1cm4gdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0yMTQxLDcgJiM0MzsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKLQlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKJiM0MzsJaWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtJmd0O3ZwX2VudGVyX3JldCkpIHsKIAkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCSppbmZvMiA9IHRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjsKIAkJKmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwpAQCAtMzE1NCw2ICYjNDM7MzE4OSwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAl0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoJmFtcDt0ZHgtJmd0O3Z0LnBpX2Rlc2MpKTsKIAl0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTsKIAomIzQzOwlpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQl0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCQkJIFNFQ09OREFSWV9FWEVDX05PVElGWV9WTV9FWElUSU5HKTsKJiM0MzsJCXRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csCiYjNDM7CQkJCXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ub3RpZnlfd2luZG93KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKQomIzQzOwkJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsCiYjNDM7CQkJCSBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pOwomIzQzOwogCXRkeC0mZ3Q7c3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCBlM2JmZTZhY2ExYTBlLi40OTBiYWFlNTZjZjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTYyNjUsMjMgJiM0Mzs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqLwogCi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCS8qCi0JICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCi0JICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvCi0JICogdm14X2hhbmRsZV9leGl0KCkuCi0JICovCi0JdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwotCWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7Ci0KLQkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwogCiAJLyoKIAkgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyOTEsMTUgJiM0Mzs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCiAJCQkgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CiAKLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKLQkgICAgY29udGV4dF9pbnZhbGlkKSB7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KLQkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02Mzc1LDcgJiM0Mzs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0gewogCVtFWElUX1JFQVNPTl9WTUZVTkNdCQkgICAgICA9IGhhbmRsZV92bXhfaW5zdHJ1Y3Rpb24sCiAJW0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdCSAgICAgID0gaGFuZGxlX3ByZWVtcHRpb25fdGltZXIsCiAJW0VYSVRfUkVBU09OX0VOQ0xTXQkJICAgICAgPSBoYW5kbGVfZW5jbHMsCi0JW0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IGhhbmRsZV9idXNfbG9ja192bWV4aXQsCiYjNDM7CVtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LAogCVtFWElUX1JFQVNPTl9OT1RJRlldCQkgICAgICA9IGhhbmRsZV9ub3RpZnksCiAJW0VYSVRfUkVBU09OX1NFQU1DQUxMXQkJICAgICAgPSBoYW5kbGVfdGR4X2luc3RydWN0aW9uLAogCVtFWElUX1JFQVNPTl9URENBTExdCQkgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sCkBAIC02NzAzLDcgJiM0Mzs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICogVGhlIGd1ZXN0IGhhcyBleGl0ZWQuICBTZWUgaWYgd2UgY2FuIGZpeCBpdCBvciBpZiB3ZSBuZWVkIHVzZXJzcGFjZQogICogYXNzaXN0YW5jZS4KICAqLwotc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKJiM0MztpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CkBAIC02ODYyLDI0ICYjNDM7Njg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCi17Ci0JaW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpOwotCi0JLyoKLQkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwotCSAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuCi0JICovCi0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKLQkJaWYgKHJldCAmZ3Q7IDApCi0JCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwotCi0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiB2b2lkIHZteF91cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0cHIsIGludCBpcnIpCiB7CiAJaW50IHRwcl90aHJlc2hvbGQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIEtWTSBWTVgvVERYIGV4aXQgaGFuZGxpbmcgY29kZSwgd2hpY2ggYWx3YXlzIG1ha2VzIG1lIHBheSBleHRyYSBhdHRlbnRpb24uIFJlZmFjdG9yaW5nIGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLCBhbG9uZyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fdnRfaGFuZGxlX25vdGlmeWAgYW5kIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIFREWCBleGl0IHJlYXNvbiBoYW5kbGluZy4uLiB0aGF0JiMzOTtzIGEgZGVjZW50IGFtb3VudCBvZiBjaHVybi4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gU28sIGBfX3Z0X2hhbmRsZV9ub3RpZnlgIGlzIGJlaW5nIGV4dHJhY3RlZCBmcm9tIGBoYW5kbGVfbm90aWZ5YCBpbiBgdm14LmNgIGFuZCBpcyBub3cgaW4gYGNvbW1vbi5oYC4gQW5kIGl0JiMzOTtzIHNldHRpbmcgYHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7YCBhbmQgYHZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8gS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO2AuIEhhbmcgb24gYSBzZWNvbmQuLi4gYHZjcHUtJmd0O3J1bmAgaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHNoYXJlZCEgQWxhcm0gYmVsbHMgYXJlIGFscmVhZHkgcmluZ2luZyBhIGJpdC4KCldlJiMzOTtyZSB3cml0aW5nIHRvIGB2Y3B1LSZndDtydW5gLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gTm93LCB0aGlzIGB2Y3B1LSZndDtydW4tJmd0O25vdGlmeS5mbGFnc2AgYXNzaWdubWVudOKApiBXaGF0IGFib3V0ICpvdGhlciogZmllbGRzIHdpdGhpbiBgdmNwdS0mZ3Q7cnVuLSZndDtub3RpZnlgPyBBcmUgd2UgaW5pdGlhbGl6aW5nIGV2ZXJ5dGhpbmcgY29ycmVjdGx5PyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLiBQb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IFRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBLTVNBTiBsb3ZlcyB0byBmaW5kLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3Qga3ZtX3J1bmAgYW5kIHRoZSBgbm90aWZ5YCBmaWVsZCBkZWZpbml0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNDM9c3RydWN0IGt2bV9leGl0X3NucF9yZXFfY2VydHMge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTAtLypcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoyMTE6ICogc3RydWN0IGt2bV9ydW4gY2FuIGJlIG1vZGlmaWVkIGJ5IHVzZXJzcGFjZSBhdCBhbnkgdGltZSwgc28gS1ZNIG11c3QgYmVcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTItICogY2FyZWZ1bCB0byBhdm9pZCBUT0NUT1UgYnVncy4gSW4gb3JkZXIgdG8gcHJvdGVjdCBLVk0sIEhJTlRfVU5TQUZFX0lOX0tWTSgpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjEzOiAqIHJlbmFtZXMgZmllbGRzIGluIHN0cnVjdCBrdm1fcnVuIGZyb20gXHUwMDNjc3ltYm9sXHUwMDNlIHRvIFx1MDAzY3N5bWJvbFx1MDAzZV9fdW5zYWZlIHdoZW5cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTQtICogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBlbnN1cmluZyB0aGF0IGFueSB1c2Ugd2l0aGluIEtWTSBpcyBvYnZpb3VzIGFuZFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMjMtLyogZm9yIEtWTV9SVU4sIHJldHVybmVkIGJ5IG1tYXAodmNwdV9mZCwgb2Zmc2V0PTApICovXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjI0OnN0cnVjdCBrdm1fcnVuIHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMjUtXHQvKiBpbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODk4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGt2bV9ydW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBgc3RydWN0IGt2bV9ydW5gLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBLVk0gcHV6emxlLCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCB0aGUgaG9zdCBkdXJpbmcgdGhlIFZNIGV4ZWN1dGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGxvb2sgdXAgdGhlIGRlZmluaXRpb24uIEkmIzM5O20gYWZ0ZXIgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCYjMzk7cyBzaGFyZWQgdGhyb3VnaCB0aGlzIHN0cnVjdHVyZSBhdCBhIGxvdyBsZXZlbC4gQXJlIHdlIHRhbGtpbmcgcmVnaXN0ZXJzLCBtZW1vcnkgYWNjZXNzIGluZm8sIFZNIGV4aXQgcmVhc29ucywgYW5kIHNvIGZvcnRoPyBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZSBvZiBpdHMgbWVtYmVycywgdGhlaXIgcHVycG9zZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBtZWNoYW5pc21zLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNoYW5nZXMgaW4gbW9yZSByZWNlbnQga2VybmVsIHZlcnNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyNDpcdHN0cnVjdCBrdm1fcnVuIHtcbiAyMjU6XHRcdC8qIGluICovXG4gMjI2Olx0XHRfX3U4IHJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdztcbiAyMjc6XHRcdF9fdTggSElOVF9VTlNBRkVfSU5fS1ZNKGltbWVkaWF0ZV9leGl0KTtcbiAyMjg6XHRcdF9fdTggcGFkZGluZzFbNl07XG4gMjI5Olx0XG4gMjMwOlx0XHQvKiBvdXQgKi9cbiAyMzE6XHRcdF9fdTMyIGV4aXRfcmVhc29uO1xuIDIzMjpcdFx0X191OCByZWFkeV9mb3JfaW50ZXJydXB0X2luamVjdGlvbjtcbiAyMzM6XHRcdF9fdTggaWZfZmxhZztcbiAyMzQ6XHRcdF9fdTE2IGZsYWdzO1xuIDIzNTpcdFxuIDIzNjpcdFx0LyogaW4gKHByZV9rdm1fcnVuKSwgb3V0IChwb3N0X2t2bV9ydW4pICovXG4gMjM3Olx0XHRfX3U2NCBjcjg7XG4gMjM4Olx0XHRfX3U2NCBhcGljX2Jhc2U7XG4gMjM5Olx0XG4gMjQwOlx0I2lmZGVmIF9fS1ZNX1MzOTBcbiAyNDE6XHRcdC8qIHRoZSBwcm9jZXNzb3Igc3RhdHVzIHdvcmQgZm9yIHMzOTAgKi9cbiAyNDI6XHRcdF9fdTY0IHBzd19tYXNrOyAvKiBwc3cgdXBwZXIgaGFsZiAqL1xuIDI0MzpcdFx0X191NjQgcHN3X2FkZHI7IC8qIHBzdyBsb3dlciBoYWxmICovXG4gMjQ0Olx0I2VuZGlmXG4gMjQ1Olx0XHR1bmlvbiB7XG4gMjQ2Olx0XHRcdC8qIEtWTV9FWElUX1VOS05PV04gKi9cbiAyNDc6XHRcdFx0c3RydWN0IHtcbiAyNDg6XHRcdFx0XHRfX3U2NCBoYXJkd2FyZV9leGl0X3JlYXNvbjtcbiAyNDk6XHRcdFx0fSBodztcbiAyNTA6XHRcdFx0LyogS1ZNX0VYSVRfRkFJTF9FTlRSWSAqL1xuIDI1MTpcdFx0XHRzdHJ1Y3Qge1xuIDI1MjpcdFx0XHRcdF9fdTY0IGhhcmR3YXJlX2VudHJ5X2ZhaWx1cmVfcmVhc29uO1xuIDI1MzpcdFx0XHRcdF9fdTMyIGNwdTtcbiAyNTQ6XHRcdFx0fSBmYWlsX2VudHJ5O1xuIDI1NTpcdFx0XHQvKiBLVk1fRVhJVF9FWENFUFRJT04gKi9cbiAyNTY6XHRcdFx0c3RydWN0IHtcbiAyNTc6XHRcdFx0XHRfX3UzMiBleGNlcHRpb247XG4gMjU4Olx0XHRcdFx0X191MzIgZXJyb3JfY29kZTtcbiAyNTk6XHRcdFx0fSBleDtcbiAyNjA6XHRcdFx0LyogS1ZNX0VYSVRfSU8gKi9cbiAyNjE6XHRcdFx0c3RydWN0IHtcbiAyNjI6XHQjZGVmaW5lIEtWTV9FWElUX0lPX0lOICAwXG4gMjYzOlx0I2RlZmluZSBLVk1fRVhJVF9JT19PVVQgMVxuIDI2NDpcdFx0XHRcdF9fdTggZGlyZWN0aW9uO1xuIDI2NTpcdFx0XHRcdF9fdTggc2l6ZTsgLyogYnl0ZXMgKi9cbiAyNjY6XHRcdFx0XHRfX3UxNiBwb3J0O1xuIDI2NzpcdFx0XHRcdF9fdTMyIGNvdW50O1xuIDI2ODpcdFx0XHRcdF9fdTY0IGRhdGFfb2Zmc2V0OyAvKiByZWxhdGl2ZSB0byBrdm1fcnVuIHN0YXJ0ICovXG4gMjY5Olx0XHRcdH0gaW87XG4gMjcwOlx0XHRcdC8qIEtWTV9FWElUX0RFQlVHICovXG4gMjcxOlx0XHRcdHN0cnVjdCB7XG4gMjcyOlx0XHRcdFx0c3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggYXJjaDtcbiAyNzM6XHRcdFx0fSBkZWJ1ZztcbiAyNzQ6XHRcdFx0LyogS1ZNX0VYSVRfTU1JTyAqL1xuIDI3NTpcdFx0XHRzdHJ1Y3Qge1xuIDI3NjpcdFx0XHRcdF9fdTY0IHBoeXNfYWRkcjtcbiAyNzc6XHRcdFx0XHRfX3U4ICBkYXRhWzhdO1xuIDI3ODpcdFx0XHRcdF9fdTMyIGxlbjtcbiAyNzk6XHRcdFx0XHRfX3U4ICBpc193cml0ZTtcbiAyODA6XHRcdFx0fSBtbWlvO1xuIDI4MTpcdFx0XHQvKiBLVk1fRVhJVF9MT09OR0FSQ0hfSU9DU1IgKi9cbiAyODI6XHRcdFx0c3RydWN0IHtcbiAyODM6XHRcdFx0XHRfX3U2NCBwaHlzX2FkZHI7XG4gMjg0Olx0XHRcdFx0X191OCAgZGF0YVs4XTtcbiAyODU6XHRcdFx0XHRfX3UzMiBsZW47XG4gMjg2Olx0XHRcdFx0X191OCAgaXNfd3JpdGU7XG4gMjg3Olx0XHRcdH0gaW9jc3JfaW87XG4gMjg4Olx0XHRcdC8qIEtWTV9FWElUX0hZUEVSQ0FMTCAqL1xuIDI4OTpcdFx0XHRzdHJ1Y3Qge1xuIDI5MDpcdFx0XHRcdF9fdTY0IG5yO1xuIDI5MTpcdFx0XHRcdF9fdTY0IGFyZ3NbNl07XG4gMjkyOlx0XHRcdFx0X191NjQgcmV0O1xuIDI5MzpcdFxuIDI5NDpcdFx0XHRcdHVuaW9uIHtcbiAyOTU6XHQjaWZuZGVmIF9fS0VSTkVMX19cbiAyOTY6XHRcdFx0XHRcdF9fdTMyIGxvbmdtb2RlO1xuIDI5NzpcdCNlbmRpZlxuIDI5ODpcdFx0XHRcdFx0X191NjQgZmxhZ3M7XG4gMjk5Olx0XHRcdFx0fTtcbiAzMDA6XHRcdFx0fSBoeXBlcmNhbGw7XG4gMzAxOlx0XHRcdC8qIEtWTV9FWElUX1RQUl9BQ0NFU1MgKi9cbiAzMDI6XHRcdFx0c3RydWN0IHtcbiAzMDM6XHRcdFx0XHRfX3U2NCByaXA7XG4gMzA0Olx0XHRcdFx0X191MzIgaXNfd3JpdGU7XG4gMzA1Olx0XHRcdFx0X191MzIgcGFkO1xuIDMwNjpcdFx0XHR9IHRwcl9hY2Nlc3M7XG4gMzA3Olx0XHRcdC8qIEtWTV9FWElUX1MzOTBfU0lFSUMgKi9cbiAzMDg6XHRcdFx0c3RydWN0IHtcbiAzMDk6XHRcdFx0XHRfX3U4IGljcHRjb2RlO1xuIDMxMDpcdFx0XHRcdF9fdTE2IGlwYTtcbiAzMTE6XHRcdFx0XHRfX3UzMiBpcGI7XG4gMzEyOlx0XHRcdH0gczM5MF9zaWVpYztcbiAzMTM6XHRcdFx0LyogS1ZNX0VYSVRfUzM5MF9SRVNFVCAqL1xuIDMxNDpcdFx0XHRfX3U2NCBzMzkwX3Jlc2V0X2ZsYWdzO1xuIDMxNTpcdFx0XHQvKiBLVk1fRVhJVF9TMzkwX1VDT05UUk9MICovXG4gMzE2Olx0XHRcdHN0cnVjdCB7XG4gMzE3Olx0XHRcdFx0X191NjQgdHJhbnNfZXhjX2NvZGU7XG4gMzE4Olx0XHRcdFx0X191MzIgcGdtX2NvZGU7XG4gMzE5Olx0XHRcdH0gczM5MF91Y29udHJvbDtcbiAzMjA6XHRcdFx0LyogS1ZNX0VYSVRfRENSIChkZXByZWNhdGVkKSAqL1xuIDMyMTpcdFx0XHRzdHJ1Y3Qge1xuIDMyMjpcdFx0XHRcdF9fdTMyIGRjcm47XG4gMzIzOlx0XHRcdFx0X191MzIgZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBLVk0mIzM5O3MgYGt2bV9ydW5gIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZGlnIGludG8gdGhlIGBrdm1fcnVuYCBzdHJ1Y3R1cmUgYSBiaXQgbW9yZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYG5vdGlmeWAgZmllbGQgaXMgdXNlZC4gV2UmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBiYXNpY3MsIGJ1dCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoYXQgcGFydGljdWxhciBlbGVtZW50LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZG8gc29tZSBtb3JlIHJlYWRpbmcgaW4gdGhlIGNvZGUhIExldCYjMzk7cyBzZWUgaG93IGBub3RpZnlgIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI0Olx0XHRcdFx0X191OCAgaXNfd3JpdGU7XG4gMzI1Olx0XHRcdH0gZGNyO1xuIDMyNjpcdFx0XHQvKiBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUiAqL1xuIDMyNzpcdFx0XHRzdHJ1Y3Qge1xuIDMyODpcdFx0XHRcdF9fdTMyIHN1YmVycm9yO1xuIDMyOTpcdFx0XHRcdC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfSU5URVJOQUxfRVJST1JfREFUQTogKi9cbiAzMzA6XHRcdFx0XHRfX3UzMiBuZGF0YTtcbiAzMzE6XHRcdFx0XHRfX3U2NCBkYXRhWzE2XTtcbiAzMzI6XHRcdFx0fSBpbnRlcm5hbDtcbiAzMzM6XHRcdFx0LypcbiAzMzQ6XHRcdFx0ICogS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTlxuIDMzNTpcdFx0XHQgKlxuIDMzNjpcdFx0XHQgKiBcJiMzNDtzdHJ1Y3QgZW11bGF0aW9uX2ZhaWx1cmVcJiMzNDsgaXMgYW4gb3ZlcmxheSBvZiBcJiMzNDtzdHJ1Y3QgaW50ZXJuYWxcJiMzNDtcbiAzMzc6XHRcdFx0ICogdGhhdCBpcyB1c2VkIGZvciB0aGUgS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTiBzdWItdHlwZSBvZlxuIDMzODpcdFx0XHQgKiBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUi4gIE5vdGUsIHVubGlrZSBvdGhlciBpbnRlcm5hbCBlcnJvclxuIDMzOTpcdFx0XHQgKiBzdWItdHlwZXMsIHRoaXMgc3RydWN0IGlzIEFCSSEgIEl0IGFsc28gbmVlZHMgdG8gYmUgYmFja3dhcmRzXG4gMzQwOlx0XHRcdCAqIGNvbXBhdGlibGUgd2l0aCBcJiMzNDtzdHJ1Y3QgaW50ZXJuYWxcJiMzNDsuICBUYWtlIHNwZWNpYWwgY2FyZSB0aGF0XG4gMzQxOlx0XHRcdCAqIFwmIzM0O25kYXRhXCYjMzQ7IGlzIGNvcnJlY3QsIHRoYXQgbmV3IGZpZWxkcyBhcmUgZW51bWVyYXRlZCBpbiBcJiMzNDtmbGFnc1wmIzM0OyxcbiAzNDI6XHRcdFx0ICogYW5kIHRoYXQgZWFjaCBmbGFnIGVudW1lcmF0ZXMgZmllbGRzIHRoYXQgYXJlIDY0LWJpdCBhbGlnbmVkXG4gMzQzOlx0XHRcdCAqIGFuZCBzaXplZCAoc28gdGhhdCBuZGF0YSYjNDM7aW50ZXJuYWwuZGF0YVtdIGlzIHZhbGlkL2FjY3VyYXRlKS5cbiAzNDQ6XHRcdFx0ICpcbiAzNDU6XHRcdFx0ICogU3BhY2UgYmV5b25kIHRoZSBkZWZpbmVkIGZpZWxkcyBtYXkgYmUgdXNlZCB0byBzdG9yZSBhcmJpdHJhcnlcbiAzNDY6XHRcdFx0ICogZGVidWcgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gdGhlIGVtdWxhdGlvbiBmYWlsdXJlLiBJdCBpc1xuIDM0NzpcdFx0XHQgKiBhY2NvdW50ZWQgZm9yIGluIFwmIzM0O25kYXRhXCYjMzQ7IGJ1dCB0aGUgZm9ybWF0IGlzIHVuc3BlY2lmaWVkIGFuZCBpc1xuIDM0ODpcdFx0XHQgKiBub3QgcmVwcmVzZW50ZWQgaW4gXCYjMzQ7ZmxhZ3NcJiMzNDsuIEFueSBzdWNoIGluZm9ybWF0aW9uIGlzICpub3QqIEFCSSFcbiAzNDk6XHRcdFx0ICovXG4gMzUwOlx0XHRcdHN0cnVjdCB7XG4gMzUxOlx0XHRcdFx0X191MzIgc3ViZXJyb3I7XG4gMzUyOlx0XHRcdFx0X191MzIgbmRhdGE7XG4gMzUzOlx0XHRcdFx0X191NjQgZmxhZ3M7XG4gMzU0Olx0XHRcdFx0dW5pb24ge1xuIDM1NTpcdFx0XHRcdFx0c3RydWN0IHtcbiAzNTY6XHRcdFx0XHRcdFx0X191OCAgaW5zbl9zaXplO1xuIDM1NzpcdFx0XHRcdFx0XHRfX3U4ICBpbnNuX2J5dGVzWzE1XTtcbiAzNTg6XHRcdFx0XHRcdH07XG4gMzU5Olx0XHRcdFx0fTtcbiAzNjA6XHRcdFx0XHQvKiBBcmJpdHJhcnkgZGVidWcgZGF0YSBtYXkgZm9sbG93LiAqL1xuIDM2MTpcdFx0XHR9IGVtdWxhdGlvbl9mYWlsdXJlO1xuIDM2MjpcdFx0XHQvKiBLVk1fRVhJVF9PU0kgKi9cbiAzNjM6XHRcdFx0c3RydWN0IHtcbiAzNjQ6XHRcdFx0XHRfX3U2NCBncHJzWzMyXTtcbiAzNjU6XHRcdFx0fSBvc2k7XG4gMzY2Olx0XHRcdC8qIEtWTV9FWElUX1BBUFJfSENBTEwgKi9cbiAzNjc6XHRcdFx0c3RydWN0IHtcbiAzNjg6XHRcdFx0XHRfX3U2NCBucjtcbiAzNjk6XHRcdFx0XHRfX3U2NCByZXQ7XG4gMzcwOlx0XHRcdFx0X191NjQgYXJnc1s5XTtcbiAzNzE6XHRcdFx0fSBwYXByX2hjYWxsO1xuIDM3MjpcdFx0XHQvKiBLVk1fRVhJVF9TMzkwX1RTQ0ggKi9cbiAzNzM6XHRcdFx0c3RydWN0IHtcbiAzNzQ6XHRcdFx0XHRfX3UxNiBzdWJjaGFubmVsX2lkO1xuIDM3NTpcdFx0XHRcdF9fdTE2IHN1YmNoYW5uZWxfbnI7XG4gMzc2Olx0XHRcdFx0X191MzIgaW9faW50X3Bhcm07XG4gMzc3Olx0XHRcdFx0X191MzIgaW9faW50X3dvcmQ7XG4gMzc4Olx0XHRcdFx0X191MzIgaXBiO1xuIDM3OTpcdFx0XHRcdF9fdTggZGVxdWV1ZWQ7XG4gMzgwOlx0XHRcdH0gczM5MF90c2NoO1xuIDM4MTpcdFx0XHQvKiBLVk1fRVhJVF9FUFIgKi9cbiAzODI6XHRcdFx0c3RydWN0IHtcbiAzODM6XHRcdFx0XHRfX3UzMiBlcHI7XG4gMzg0Olx0XHRcdH0gZXByO1xuIDM4NTpcdFx0XHQvKiBLVk1fRVhJVF9TWVNURU1fRVZFTlQgKi9cbiAzODY6XHRcdFx0c3RydWN0IHtcbiAzODc6XHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfU0hVVERPV04gICAgICAgMVxuIDM4ODpcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9SRVNFVCAgICAgICAgICAyXG4gMzg5Olx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX0NSQVNIICAgICAgICAgIDNcbiAzOTA6XHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfV0FLRVVQICAgICAgICAgNFxuIDM5MTpcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9TVVNQRU5EICAgICAgICA1XG4gMzkyOlx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1NFVl9URVJNICAgICAgIDZcbiAzOTM6XHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfVERYX0ZBVEFMICAgICAgN1xuIDM5NDpcdFx0XHRcdF9fdTMyIHR5cGU7XG4gMzk1Olx0XHRcdFx0X191MzIgbmRhdGE7XG4gMzk2Olx0XHRcdFx0dW5pb24ge1xuIDM5NzpcdCNpZm5kZWYgX19LRVJORUxfX1xuIDM5ODpcdFx0XHRcdFx0X191NjQgZmxhZ3M7XG4gMzk5Olx0I2VuZGlmXG4gNDAwOlx0XHRcdFx0XHRfX3U2NCBkYXRhWzE2XTtcbiA0MDE6XHRcdFx0XHR9O1xuIDQwMjpcdFx0XHR9IHN5c3RlbV9ldmVudDtcbiA0MDM6XHRcdFx0LyogS1ZNX0VYSVRfUzM5MF9TVFNJICovXG4gNDA0Olx0XHRcdHN0cnVjdCB7XG4gNDA1Olx0XHRcdFx0X191NjQgYWRkcjtcbiA0MDY6XHRcdFx0XHRfX3U4IGFyO1xuIDQwNzpcdFx0XHRcdF9fdTggcmVzZXJ2ZWQ7XG4gNDA4Olx0XHRcdFx0X191OCBmYztcbiA0MDk6XHRcdFx0XHRfX3U4IHNlbDE7XG4gNDEwOlx0XHRcdFx0X191MTYgc2VsMjtcbiA0MTE6XHRcdFx0fSBzMzkwX3N0c2k7XG4gNDEyOlx0XHRcdC8qIEtWTV9FWElUX0lPQVBJQ19FT0kgKi9cbiA0MTM6XHRcdFx0c3RydWN0IHtcbiA0MTQ6XHRcdFx0XHRfX3U4IHZlY3RvcjtcbiA0MTU6XHRcdFx0fSBlb2k7XG4gNDE2Olx0XHRcdC8qIEtWTV9FWElUX0hZUEVSViAqL1xuIDQxNzpcdFx0XHRzdHJ1Y3Qga3ZtX2h5cGVydl9leGl0IGh5cGVydjtcbiA0MTg6XHRcdFx0LyogS1ZNX0VYSVRfQVJNX05JU1YgLyBLVk1fRVhJVF9BUk1fTERTVDY0QiAqL1xuIDQxOTpcdFx0XHRzdHJ1Y3Qge1xuIDQyMDpcdFx0XHRcdF9fdTY0IGVzcl9pc3M7XG4gNDIxOlx0XHRcdFx0X191NjQgZmF1bHRfaXBhO1xuIDQyMjpcdFx0XHR9IGFybV9uaXN2O1xuIDQyMzpcdFx0XHQvKiBLVk1fRVhJVF9YODZfUkRNU1IgLyBLVk1fRVhJVF9YODZfV1JNU1IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNjAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKKioqCgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgQW50aWNpcGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCAtIEkmIzM5O20gc3VwcG9zZWQgdG8gcHJvY2VzcyB0aGlzIHRleHQgYW5kIHJlcHJlc2VudCBpdCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBpbiBmaXJzdC1wZXJzb24sIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgaXQgYW5kIGZvcm11bGF0aW5nIG15IHVuZGVyc3RhbmRpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIHJlbGF0aXZlbHkgcXVpY2sgYW5kIGVmZmljaWVudCB0YXNrLiBJdCYjMzk7cyBhYm91dCBkaXN0aWxsaW5nIHRoZSBjb3JlIGlkZWFzIGFuZCBpbnRlcm5hbGl6aW5nIHRoZW0uIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBvbiB0aGUgcGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgva3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjQ6XHRcdFx0c3RydWN0IHtcbiA0MjU6XHRcdFx0XHRfX3U4IGVycm9yOyAvKiB1c2VyIC1cdTAwM2Uga2VybmVsICovXG4gNDI2Olx0XHRcdFx0X191OCBwYWRbN107XG4gNDI3Olx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX0lOVkFMXHQoMSBcdTAwM2NcdTAwM2MgMClcbiA0Mjg6XHQjZGVmaW5lIEtWTV9NU1JfRVhJVF9SRUFTT05fVU5LTk9XTlx0KDEgXHUwMDNjXHUwMDNjIDEpXG4gNDI5Olx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX0ZJTFRFUlx0KDEgXHUwMDNjXHUwMDNjIDIpXG4gNDMwOlx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX1ZBTElEX01BU0tcdChLVk1fTVNSX0VYSVRfUkVBU09OX0lOVkFMICAgfFx0XFxcbiA0MzE6XHRcdFx0XHRcdFx0IEtWTV9NU1JfRVhJVF9SRUFTT05fVU5LTk9XTiB8XHRcXFxuIDQzMjpcdFx0XHRcdFx0XHQgS1ZNX01TUl9FWElUX1JFQVNPTl9GSUxURVIpXG4gNDMzOlx0XHRcdFx0X191MzIgcmVhc29uOyAvKiBrZXJuZWwgLVx1MDAzZSB1c2VyICovXG4gNDM0Olx0XHRcdFx0X191MzIgaW5kZXg7IC8qIGtlcm5lbCAtXHUwMDNlIHVzZXIgKi9cbiA0MzU6XHRcdFx0XHRfX3U2NCBkYXRhOyAvKiBrZXJuZWwgXHUwMDNjLVx1MDAzZSB1c2VyICovXG4gNDM2Olx0XHRcdH0gbXNyO1xuIDQzNzpcdFx0XHQvKiBLVk1fRVhJVF9YRU4gKi9cbiA0Mzg6XHRcdFx0c3RydWN0IGt2bV94ZW5fZXhpdCB4ZW47XG4gNDM5Olx0XHRcdC8qIEtWTV9FWElUX1JJU0NWX1NCSSAqL1xuIDQ0MDpcdFx0XHRzdHJ1Y3Qge1xuIDQ0MTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZXh0ZW5zaW9uX2lkO1xuIDQ0MjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZnVuY3Rpb25faWQ7XG4gNDQzOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmdzWzZdO1xuIDQ0NDpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmV0WzJdO1xuIDQ0NTpcdFx0XHR9IHJpc2N2X3NiaTtcbiA0NDY6XHRcdFx0LyogS1ZNX0VYSVRfUklTQ1ZfQ1NSICovXG4gNDQ3Olx0XHRcdHN0cnVjdCB7XG4gNDQ4Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBjc3JfbnVtO1xuIDQ0OTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbmV3X3ZhbHVlO1xuIDQ1MDpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgd3JpdGVfbWFzaztcbiA0NTE6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJldF92YWx1ZTtcbiA0NTI6XHRcdFx0fSByaXNjdl9jc3I7XG4gNDUzOlx0XHRcdC8qIEtWTV9FWElUX05PVElGWSAqL1xuIDQ1NDpcdFx0XHRzdHJ1Y3Qge1xuIDQ1NTpcdCNkZWZpbmUgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSURcdCgxIFx1MDAzY1x1MDAzYyAwKVxuIDQ1NjpcdFx0XHRcdF9fdTMyIGZsYWdzO1xuIDQ1NzpcdFx0XHR9IG5vdGlmeTtcbiA0NTg6XHRcdFx0LyogS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUICovXG4gNDU5Olx0XHRcdHN0cnVjdCB7XG4gNDYwOlx0I2RlZmluZSBLVk1fTUVNT1JZX0VYSVRfRkxBR19QUklWQVRFXHQoMVVMTCBcdTAwM2NcdTAwM2MgMylcbiA0NjE6XHRcdFx0XHRfX3U2NCBmbGFncztcbiA0NjI6XHRcdFx0XHRfX3U2NCBncGE7XG4gNDYzOlx0XHRcdFx0X191NjQgc2l6ZTtcbiA0NjQ6XHRcdFx0fSBtZW1vcnlfZmF1bHQ7XG4gNDY1Olx0XHRcdC8qIEtWTV9FWElUX1REWCAqL1xuIDQ2NjpcdFx0XHRzdHJ1Y3Qge1xuIDQ2NzpcdFx0XHRcdF9fdTY0IGZsYWdzO1xuIDQ2ODpcdFx0XHRcdF9fdTY0IG5yO1xuIDQ2OTpcdFx0XHRcdHVuaW9uIHtcbiA0NzA6XHRcdFx0XHRcdHN0cnVjdCB7XG4gNDcxOlx0XHRcdFx0XHRcdF9fdTY0IHJldDtcbiA0NzI6XHRcdFx0XHRcdFx0X191NjQgZGF0YVs1XTtcbiA0NzM6XHRcdFx0XHRcdH0gdW5rbm93bjtcbiA0NzQ6XHRcdFx0XHRcdHN0cnVjdCB7XG4gNDc1Olx0XHRcdFx0XHRcdF9fdTY0IHJldDtcbiA0NzY6XHRcdFx0XHRcdFx0X191NjQgZ3BhO1xuIDQ3NzpcdFx0XHRcdFx0XHRfX3U2NCBzaXplO1xuIDQ3ODpcdFx0XHRcdFx0fSBnZXRfcXVvdGU7XG4gNDc5Olx0XHRcdFx0XHRzdHJ1Y3Qge1xuIDQ4MDpcdFx0XHRcdFx0XHRfX3U2NCByZXQ7XG4gNDgxOlx0XHRcdFx0XHRcdF9fdTY0IGxlYWY7XG4gNDgyOlx0XHRcdFx0XHRcdF9fdTY0IHIxMSwgcjEyLCByMTMsIHIxNDtcbiA0ODM6XHRcdFx0XHRcdH0gZ2V0X3Rkdm1jYWxsX2luZm87XG4gNDg0Olx0XHRcdFx0XHRzdHJ1Y3Qge1xuIDQ4NTpcdFx0XHRcdFx0XHRfX3U2NCByZXQ7XG4gNDg2Olx0XHRcdFx0XHRcdF9fdTY0IHZlY3RvcjtcbiA0ODc6XHRcdFx0XHRcdH0gc2V0dXBfZXZlbnRfbm90aWZ5O1xuIDQ4ODpcdFx0XHRcdH07XG4gNDg5Olx0XHRcdH0gdGR4O1xuIDQ5MDpcdFx0XHQvKiBLVk1fRVhJVF9BUk1fU0VBICovXG4gNDkxOlx0XHRcdHN0cnVjdCB7XG4gNDkyOlx0I2RlZmluZSBLVk1fRVhJVF9BUk1fU0VBX0ZMQUdfR1BBX1ZBTElEXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbiA0OTM6XHRcdFx0XHRfX3U2NCBmbGFncztcbiA0OTQ6XHRcdFx0XHRfX3U2NCBlc3I7XG4gNDk1Olx0XHRcdFx0X191NjQgZ3ZhO1xuIDQ5NjpcdFx0XHRcdF9fdTY0IGdwYTtcbiA0OTc6XHRcdFx0fSBhcm1fc2VhO1xuIDQ5ODpcdFx0XHQvKiBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTICovXG4gNDk5Olx0XHRcdHN0cnVjdCBrdm1fZXhpdF9zbnBfcmVxX2NlcnRzIHNucF9yZXFfY2VydHM7XG4gNTAwOlx0XHRcdC8qIEZpeCB0aGUgc2l6ZSBvZiB0aGUgdW5pb24uICovXG4gNTAxOlx0XHRcdGNoYXIgcGFkZGluZ1syNTZdO1xuIDUwMjpcdFx0fTtcbiA1MDM6XHRcbiA1MDQ6XHRcdC8qIDIwNDggaXMgdGhlIHNpemUgb2YgdGhlIGNoYXIgYXJyYXkgdXNlZCB0byBib3VuZC9wYWQgdGhlIHNpemVcbiA1MDU6XHRcdCAqIG9mIHRoZSB1bmlvbiB0aGF0IGhvbGRzIHN5bmMgcmVncy5cbiA1MDY6XHRcdCAqL1xuIDUwNzpcdFx0I2RlZmluZSBTWU5DX1JFR1NfU0laRV9CWVRFUyAyMDQ4XG4gNTA4Olx0XHQvKlxuIDUwOTpcdFx0ICogc2hhcmVkIHJlZ2lzdGVycyBiZXR3ZWVuIGt2bSBhbmQgdXNlcnNwYWNlLlxuIDUxMDpcdFx0ICoga3ZtX3ZhbGlkX3JlZ3Mgc3BlY2lmaWVzIHRoZSByZWdpc3RlciBjbGFzc2VzIHNldCBieSB0aGUgaG9zdFxuIDUxMTpcdFx0ICoga3ZtX2RpcnR5X3JlZ3Mgc3BlY2lmaWVkIHRoZSByZWdpc3RlciBjbGFzc2VzIGRpcnRpZWQgYnkgdXNlcnNwYWNlXG4gNTEyOlx0XHQgKiBzdHJ1Y3Qga3ZtX3N5bmNfcmVncyBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIGFzIHdlbGwgYXMgdGhlXG4gNTEzOlx0XHQgKiBiaXRzIGZvciBrdm1fdmFsaWRfcmVncyBhbmQga3ZtX2RpcnR5X3JlZ3NcbiA1MTQ6XHRcdCAqL1xuIDUxNTpcdFx0X191NjQga3ZtX3ZhbGlkX3JlZ3M7XG4gNTE2Olx0XHRfX3U2NCBrdm1fZGlydHlfcmVncztcbiA1MTc6XHRcdHVuaW9uIHtcbiA1MTg6XHRcdFx0c3RydWN0IGt2bV9zeW5jX3JlZ3MgcmVncztcbiA1MTk6XHRcdFx0Y2hhciBwYWRkaW5nW1NZTkNfUkVHU19TSVpFX0JZVEVTXTtcbiA1MjA6XHRcdH0gcztcbiA1MjE6XHR9O1xuIDUyMjpcdFxuIDUyMzpcdC8qIGZvciBLVk1fUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gLyBLVk1fVU5SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFREWC9WTVggUmVmYWN0b3JpbmcgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgbGFyZ2VseSBhYm91dCBjb2RlIHJlb3JnYW5pemF0aW9uLCB3aXRoIGEgZm9jdXMgb24gc2hhcmVkIGxvZ2ljIGJldHdlZW4gVk1YIGFuZCBURFguIEkgc2VlIHNldmVyYWwgZnVuY3Rpb25zIGJlaW5nIGV4dHJhY3RlZCBvciBtb3ZlZCBhcm91bmQ6IGBfX3Z0X2hhbmRsZV9ub3RpZnlgLCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAsIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYCwgYW5kIGB2dF9oYW5kbGVfZXhpdGAuIFRoZXNlIGFwcGVhciB0byBiZSByZWZhY3RvcmluZyBzdGVwcywgbWFraW5nIHRoZSBjb2RlIG1vcmUgbW9kdWxhciBhbmQgbWFpbnRhaW5hYmxlLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2Ygc3VwcG9ydGluZyBib3RoIFZNWCBhbmQgVERYIGVudmlyb25tZW50cy4KClJlZ2FyZGluZyB0aGUgYG5vdGlmeWAgc3RydWN0IHdpdGhpbiBga3ZtX3J1bmAsIGl0IHNlZW1zIHVudG91Y2hlZCwgYW5kIGp1c3QgdXNlcyBmbGFncyB3aGljaCByZW1haW4gdGhlIHNhbWUuIFRoZSBgX192dF9oYW5kbGVfbm90aWZ5YCBmdW5jdGlvbiBpcyBhIGRpcmVjdCBwb3J0IGZyb20gYHZteC5jYCwgd2hpY2ggbWFrZXMgdGhpbmdzIG11Y2ggbW9yZSBjbGVhci4KClRoZSBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgc2ltaWxhcmx5IG1vdmVzIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIHNldHRpbmcgdGhlIGBidXNfbG9ja19kZXRlY3RlZGAgZmxhZywgZnJvbSBgdm14LmNgLiBUaGlzIGlzIGFub3RoZXIgZXhhbXBsZSBvZiBjb2RlIGNvbnNvbGlkYXRpb24sIG1ha2luZyB0aGUgY29kZSBsZXNzIGNvbXBsZXggYW5kIGVhc2llciB0byBmb2xsb3csIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBnZW5lcmljIGB2dF9oYW5kbGVfZXhpdGAuCgpUaGUgY2hhbmdlIGluIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYCBpcyBtb3JlIGludGVyZXN0aW5nLiBUaGUgcmV0dXJuIHR5cGUgY2hhbmdlZCBmcm9tIGB1MzJgIHRvIGEgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAuIFRoaXMgYXBwZWFycyB0byBiZSBmb3IgZXhwcmVzc2luZyBhbiAmIzM0O2ludmFsaWQmIzM0OyBleGl0IHJlYXNvbiBpbiBURFggd2hlbiB0aGUgdkNQVSBkaWQgbm90IGVudGVyIHRoZSBndWVzdC4gU3ludGhlc2l6aW5nIHRoaXMgaW52YWxpZCBleGl0IHJlYXNvbiBpcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJdCYjMzk7cyBub3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrKiB0byB1c2VyIHNwYWNlLCBidXQgcmF0aGVyIGEgcG90ZW50aWFsIGxvZ2ljIGVycm9yOiB1c2luZyBzdGFsZSwgcG90ZW50aWFsbHkgZ2FyYmFnZSwgZGF0YSBmcm9tIGEgcHJldmlvdXMgZXhpdC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgcHJldmVudHMgdGhlIHVzZSBvZiBzdGFsZSBkYXRhIGJ5IHNldHRpbmcgYHZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gMDsgdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047YC4KClRoZSBjaGVja3Mgb24gYHRkeF9nZXRfZXhpdF9pbmZvYCBhbHNvIHVzZSB0aGF0IGB0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWRgIGZvciB2YWxpZGl0eS4KCkZpbmFsbHksIHRoZSBhZGRpdGlvbnMgaW4gYHRkeF92Y3B1X2luaXRgIGVuYWJsaW5nIHRoZSBWTUNTIGNvbnRyb2xzIGZvciBURFggYXJlIHR5cGljYWwgb2YgZW5hYmxpbmcgVERYIHNwZWNpZmljIGZlYXR1cmVzLiBUaGUgYHZ0X2hhbmRsZV9leGl0YCByZWZhY3RvcmluZyBzaGFyZXMgdGhlIGxvZ2ljIGJldHdlZW4gVk1YIGFuZCBURFggd2hlbiBhIGJ1cyBsb2NrIGlzIGRldGVjdGVkLgoKR2l2ZW4gYWxsIHRoaXMsIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZSAmIzM0O3N0YWxlIGRhdGEmIzM0OyBpc3N1ZSBpcyBoYW5kbGVkIGJ5ICpzeW50aGVzaXppbmcqIGFuIGludmFsaWQgZXhpdCByZWFzb24sIGNsZWFyaW5nIG91dCB0aGUgYml0cywgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhIHN0YWxlIHZhbHVlIGZyb20gYmVpbmcgcmVhZCBhbmQgYWN0ZWQgdXBvbi4gVGh1cywgaXQmIzM5O3MgYSBidWcgKmZpeCogbm90IGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIGhlcmUgdG8gc3VnZ2VzdCB0aGF0IEtNU0FOIHdvdWxkIGJlIHJlcXVpcmVkLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgcGF0Y2gmIzM5O3MgY29ycmVjdG5lc3MgYW5kIGVuc3VyZSB0aGF0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIHVuaW9uIGlzIGNsZWFyZWQgaW4gdGhlIHJpZ2h0IHBsYWNlcywgYW5kIHRoZSBwYXRjaCB3b3JrcyB0byBhdm9pZCBhbnkgcG90ZW50aWFsIHN0YWxlLWRhdGEgaGF6YXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5pb24gdm14X2V4aXRfcmVhc29uIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTAtXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjExOnVuaW9uIHZteF9leGl0X3JlYXNvbiB7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTEyLVx0c3RydWN0IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NDMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFZNWCBFeGl0IFJlYXNvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgdW5pb24gdm14X2V4aXRfcmVhc29uYC4gSSBrbm93IGl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2h5IGEgdmlydHVhbCBtYWNoaW5lIGlzIGV4aXRpbmcgdG8gdGhlIGhvc3QsIHRoZSAmIzM0O1ZNIGV4aXQmIzM0OyBldmVudC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBkZWJ1Z2dpbmcgYW5kIG9wdGltaXppbmcgS1ZNIHBlcmZvcm1hbmNlIG9uIHg4NiwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hpY2ggc3BlY2lmaWMgcmVhc29uIGNvZGVzIG1hcCB0byB3aGF0IGV2ZW50cy4gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLCBzbyBsZXQmIzM5O3MgbmF2aWdhdGUgdGhlcmUuIEkgZXhwZWN0IHRoYXQgSSYjMzk7bGwgZmluZCBhIHVuaW9uIHN0cnVjdHVyZSBvZiBzb21lIHNvcnQuIE1vcmUgdGhhbiBsaWtlbHkgaXQmIzM5O3MgYSBiaXQgZmllbGQuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBjb25maXJtIGl0cyBzdHJ1Y3R1cmUgcXVpY2tseSwgcGVyaGFwcyBjcm9zcy1yZWZlcmVuY2luZyBpdCB3aXRoIHRoZSBJbnRlbCBTRE0gdG8gcGlucG9pbnQgYW55IGVkZ2UtY2FzZSBiZWhhdmlvciBJIG1pZ2h0IGhhdmUgbWlzc2VkLCBvciB0byBjYXRjaCByZWNlbnQgdXBkYXRlcy4gVGltZSB0byBqdW1wIGluIGFuZCByZWZyZXNoIG15IGJyYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDExOlx0dW5pb24gdm14X2V4aXRfcmVhc29uIHtcbiAgMTI6XHRcdHN0cnVjdCB7XG4gIDEzOlx0XHRcdHUzMlx0YmFzaWNcdFx0XHQ6IDE2O1xuICAxNDpcdFx0XHR1MzJcdHJlc2VydmVkMTZcdFx0OiAxO1xuICAxNTpcdFx0XHR1MzJcdHJlc2VydmVkMTdcdFx0OiAxO1xuICAxNjpcdFx0XHR1MzJcdHJlc2VydmVkMThcdFx0OiAxO1xuICAxNzpcdFx0XHR1MzJcdHJlc2VydmVkMTlcdFx0OiAxO1xuICAxODpcdFx0XHR1MzJcdHJlc2VydmVkMjBcdFx0OiAxO1xuICAxOTpcdFx0XHR1MzJcdHJlc2VydmVkMjFcdFx0OiAxO1xuICAyMDpcdFx0XHR1MzJcdHJlc2VydmVkMjJcdFx0OiAxO1xuICAyMTpcdFx0XHR1MzJcdHJlc2VydmVkMjNcdFx0OiAxO1xuICAyMjpcdFx0XHR1MzJcdHJlc2VydmVkMjRcdFx0OiAxO1xuICAyMzpcdFx0XHR1MzJcdHJlc2VydmVkMjVcdFx0OiAxO1xuICAyNDpcdFx0XHR1MzJcdGJ1c19sb2NrX2RldGVjdGVkXHQ6IDE7XG4gIDI1Olx0XHRcdHUzMlx0ZW5jbGF2ZV9tb2RlXHRcdDogMTtcbiAgMjY6XHRcdFx0dTMyXHRzbWlfcGVuZGluZ19tdGZcdFx0OiAxO1xuICAyNzpcdFx0XHR1MzJcdHNtaV9mcm9tX3ZteF9yb290XHQ6IDE7XG4gIDI4Olx0XHRcdHUzMlx0cmVzZXJ2ZWQzMFx0XHQ6IDE7XG4gIDI5Olx0XHRcdHUzMlx0ZmFpbGVkX3ZtZW50cnlcdFx0OiAxO1xuICAzMDpcdFx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMDgKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBhIDMyLWJpdCB1bmlvbiwgYHZteF9leGl0X3JlYXNvbmAuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGVzZSwgYW5kIHRoaXMgcGFydGljdWxhciBvbmUgaXMgc3RydWN0dXJlZCB3aXRoIGEgYml0ZmllbGQsIGAuYmFzaWNgLCBhbmQgYSBjb21wbGV0ZSBgdTMyYCByZXByZXNlbnRhdGlvbiwgYC5mdWxsYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uLiBXaGVuIEkgc2VlIGByZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgeyAuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTiwgfTtgLCBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCwgYWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBgLmJhc2ljYCBnZXRzIGFzc2lnbmVkIGl0cyB2YWx1ZSwgYW5kIHRoZSByZXN0IG9mIHRoZSB1bmlvbiBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQsIGFuZCBJIGRvbiYjMzk7dCBmb3Jlc2VlIGFuIGlzc3VlIGhlcmUuCgpUaGVuLCBsb29raW5nIGF0IHRoZSBjb2RlIGluIGB0ZHhfdmNwdV9ydW5gLCB0aGUgZXhwbGljaXQgemVyb2luZyBvZiBgLmZ1bGxgICpiZWZvcmUqIGFzc2lnbmluZyBgLmJhc2ljYCBpcyBhIHZlcnkgZ29vZCBwcmFjdGljZS4gYHZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gMDtgIGNsZWFycyBhbGwgYml0cywgbWFraW5nIHN1cmUgdGhhdCBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZC4gVGhlbiwgc2V0dGluZyBgdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047YCBtYWtlcyBpdCBkZXRlcm1pbmlzdGljLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaGVyZS4gVGhpcyBpcyBhIHZlcnkgY2xlYW4gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggaXMgYWJvdXQgcmVmYWN0b3JpbmcgY29kZSB0byBzaGFyZSBsb2dpYyBiZXR3ZWVuIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcsIGFuZCBhbHNvIHJlc29sdmVzIGEgbG9naWMgYnVnIHdoZXJlIHN0YWxlIGV4aXQgcmVhc29ucyBtaWdodCBiZSB1c2VkLiBJdCYjMzk7cyBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgYnVnIGZpeGVzIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgdGhlIGNvZGUgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB2bXhfZXhpdF9yZWFzb25gIHVuaW9uLCBlbnN1cmluZyB0aGF0IGl0JiMzOTtzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpBcyBhbiBleHBlcnQsIEkmIzM5O20gY29tZm9ydGFibGUgc3RhdGluZyB0aGF0IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIHRvIGtlZXAgS01TQU4gZW5hYmxlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLgpUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcgY29kZSB0byBzaGFyZSBjb21tb24gbG9naWMgZm9yIG5vdGlmeSBhbmQgYnVzIGxvY2sgVk0tZXhpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBhIHN5bnRoZXNpemVkIGludmFsaWQgZXhpdCByZWFzb24gZm9yIFREWCB0byBwcmV2ZW50IHRoZSBjb25zdW1wdGlvbiBvZiBzdGFsZSBleGl0IHJlYXNvbnMgZnJvbSBwcmV2aW91cyBydW5zLiBcblxuMS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgdmNwdS1cdTAwM2VydW5gICh3aGljaCBpcyBtYXBwZWQgdG8gdXNlciBzcGFjZSkgYXJlIGxpbWl0ZWQgdG8gc2V0dGluZyBzcGVjaWZpYyBmaWVsZHMgKGBleGl0X3JlYXNvbmAsIGBub3RpZnkuZmxhZ3NgLCBgZmxhZ3NgKSB3aXRoIGRldGVybWluaXN0aWMgdmFsdWVzLCBpZGVudGljYWwgdG8gdGhlIHByZS1leGlzdGluZyBWTVggbG9naWMuXG4yLiBUaGUgc3ludGhlc2l6ZWQgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVyb2VzIHRoZSB1bmlvbiAoZS5nLiwgYHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwYCkgYmVmb3JlIHNldHRpbmcgdGhlIGJhc2ljIGV4aXQgcmVhc29uLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIGJpdHMgZnJvbSBiZWluZyB1c2VkLlxuMy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgY29udHJvbCBmbG93LCBjb2RlIGRlZHVwbGljYXRpb24sIGFuZCBmaXhpbmcgYSBsb2dpYyBidWcgKHN0YWxlIGV4aXQgcmVhc29uKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXG5cblN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZyBjb2RlIHRvIHNoYXJlIGNvbW1vbiBsb2dpYyBmb3Igbm90aWZ5IGFuZCBidXMgbG9jayBWTS1leGl0cy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgc3ludGhlc2l6ZWQgaW52YWxpZCBleGl0IHJlYXNvbiBmb3IgVERYIHRvIHByZXZlbnQgdGhlIGNvbnN1bXB0aW9uIG9mIHN0YWxlIGV4aXQgcmVhc29ucyBmcm9tIHByZXZpb3VzIHJ1bnMuIFxuXG4xLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIHRvIGB2Y3B1LVx1MDAzZXJ1bmAgKHdoaWNoIGlzIG1hcHBlZCB0byB1c2VyIHNwYWNlKSBhcmUgbGltaXRlZCB0byBzZXR0aW5nIHNwZWNpZmljIGZpZWxkcyAoYGV4aXRfcmVhc29uYCwgYG5vdGlmeS5mbGFnc2AsIGBmbGFnc2ApIHdpdGggZGV0ZXJtaW5pc3RpYyB2YWx1ZXMsIGlkZW50aWNhbCB0byB0aGUgcHJlLWV4aXN0aW5nIFZNWCBsb2dpYy5cbjIuIFRoZSBzeW50aGVzaXplZCBgdW5pb24gdm14X2V4aXRfcmVhc29uYCBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNvZGUgZXhwbGljaXRseSB6ZXJvZXMgdGhlIHVuaW9uIChlLmcuLCBgdnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDBgKSBiZWZvcmUgc2V0dGluZyB0aGUgYmFzaWMgZXhpdCByZWFzb24sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYml0cyBmcm9tIGJlaW5nIHVzZWQuXG4zLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBjb250cm9sIGZsb3csIGNvZGUgZGVkdXBsaWNhdGlvbiwgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyAoc3RhbGUgZXhpdCByZWFzb24pLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuU3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMjozOS4xMjQ5NTg5NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4MTY4MTM0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidGR4X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcgY29kZSB0byBzaGFyZSBjb21tb24gbG9naWMgZm9yIG5vdGlmeSBhbmQgYnVzIGxvY2sgVk0tZXhpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBhIHN5bnRoZXNpemVkIGludmFsaWQgZXhpdCByZWFzb24gZm9yIFREWCB0byBwcmV2ZW50IHRoZSBjb25zdW1wdGlvbiBvZiBzdGFsZSBleGl0IHJlYXNvbnMgZnJvbSBwcmV2aW91cyBydW5zLiBcXG5cXG4xLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIHRvIGB2Y3B1LVxcdTAwM2VydW5gICh3aGljaCBpcyBtYXBwZWQgdG8gdXNlciBzcGFjZSkgYXJlIGxpbWl0ZWQgdG8gc2V0dGluZyBzcGVjaWZpYyBmaWVsZHMgKGBleGl0X3JlYXNvbmAsIGBub3RpZnkuZmxhZ3NgLCBgZmxhZ3NgKSB3aXRoIGRldGVybWluaXN0aWMgdmFsdWVzLCBpZGVudGljYWwgdG8gdGhlIHByZS1leGlzdGluZyBWTVggbG9naWMuXFxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDBgKSBiZWZvcmUgc2V0dGluZyB0aGUgYmFzaWMgZXhpdCByZWFzb24sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYml0cyBmcm9tIGJlaW5nIHVzZWQuXFxuMy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgY29udHJvbCBmbG93LCBjb2RlIGRlZHVwbGljYXRpb24sIGFuZCBmaXhpbmcgYSBsb2dpYyBidWcgKHN0YWxlIGV4aXQgcmVhc29uKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAyOjM5LjEyNDk2NDg4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzU5NDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6MDI6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5pbmRleCAwODAwNTY3NjcwMmMyLi5iYmVlYzE5N2E1MDdhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXFxuQEAgLTQsNiArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3ZteC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm1tdS5oXFxcIlxcbiBcXG5AQCAtMTgzLDYgKzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpXFxuK3tcXG4rXFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xcbitcXG4rXFx0Kyt2Y3B1LVxcdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XFxuK1xcbitcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxcbitcXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cXG4rXFx0XFx0XFx0XFx0XFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4gbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuQEAgLTE1NCwxNSArMTU0LDYgQEAgc3RhdGljIGZhc3RwYXRoX3QgdnRfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXHRyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi1cXHRcXHRcXHQgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKVxcbi17XFxuLVxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbi1cXHRcXHRyZXR1cm4gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG4tXFxuLVxcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbkBAIC04NzYsNiArODY3LDQ0IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG4gXFxuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcXG4rXFx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nXFxuK1xcdCAqIHRvIC5oYW5kbGVfZXhpdCgpIGNhbGxiYWNrLlxcbitcXHQgKi9cXG4rXFx0dG9fdnQodmNwdSktXFx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHQgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbisjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcXG4rXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuK1xcdFxcdHJldCA9IHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuK1xcdGVsc2VcXG4rI2VuZGlmXFxuK1xcdFxcdHJldCA9IHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpc1xcbitcXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAjZGVmaW5lIFZNWF9SRVFVSVJFRF9BUElDVl9JTkhJQklUU1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFxcdFxcdFxcdFxcXFxcXG4gXFx0IEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHxcXHRcXHRcXHRcXFxcXFxuQEAgLTk0OSw3ICs5NzgsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXG4gXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSxcXG4gXFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxcbi1cXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXFxuK1xcdC5oYW5kbGVfZXhpdCA9IHZ0X2hhbmRsZV9leGl0LFxcbiBcXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxcbiBcXHQudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbixcXG4gXFx0LnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTkyMSwzNiArOTIxLDU0IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh1NjQgdnBfZW50ZXJfcmV0KVxcbiB7XFxuLVxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbi1cXHR1MzIgZXhpdF9yZWFzb247XFxuLVxcbi1cXHRzd2l0Y2ggKHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0IFxcdTAwMjYgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7XFxuK1xcdHN3aXRjaCAodnBfZW50ZXJfcmV0IFxcdTAwMjYgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7XFxuIFxcdGNhc2UgVERYX1NVQ0NFU1M6XFxuIFxcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9WQ1BVOlxcbiBcXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVEQ6XFxuIFxcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9OT05fQUNDRVNTSUJMRTpcXG4gXFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gLTF1O1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4rfVxcbitcXG4rLyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqL1xcbisjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OXFx0XFx0VTE2X01BWFxcbiBcXG4tXFx0ZXhpdF9yZWFzb24gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuK1xcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWCBtb2R1bGVcXG4rXFx0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMgdW5kZWZpbmVkLFxcbitcXHQgKiBidXQgdGhpcyBpcyBOT1QgYSBmYWlsZWQgVk0tRW50ZXIuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXFx1MDAzZXZwX2VudGVyX3JldCkpXFxuK1xcdFxcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XFxuK1xcdFxcdFxcdC5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLFxcbitcXHRcXHR9O1xcbiBcXG4tXFx0c3dpdGNoIChleGl0X3JlYXNvbikge1xcbitcXHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG4rXFxuK1xcdHN3aXRjaCAoZXhpdF9yZWFzb24uYmFzaWMpIHtcXG4gXFx0Y2FzZSBFWElUX1JFQVNPTl9URENBTEw6XFxuIFxcdFxcdGlmICh0ZHZtY2FsbF9leGl0X3R5cGUodmNwdSkpXFxuLVxcdFxcdFxcdHJldHVybiBFWElUX1JFQVNPTl9WTUNBTEw7XFxuLVxcbi1cXHRcXHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0XFx0XFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXhpdF9yZWFzb24uYmFzaWMgPSB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXFxuIFxcdFxcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiAtMXU7XFxuK1xcdFxcdGV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC05NjcsNyArOTg1LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFxcdTAwMjZ0ZHgtXFx1MDAzZXZwLCBcXHUwMDI2dGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzKTtcXG4gXFxuLVxcdHZ0LVxcdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4gXFxuIFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3MucmN4O1xcbiBcXHR0ZHgtXFx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xcbkBAIC05ODEsOCArOTk5LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XFxuK1xcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5O1xcbiB9XFxuIFxcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTEwNzEsOCArMTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXFxuIFxcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxcbiBcXHQgKiBURENBTExzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpXFxuK1xcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSB2Q1BVIG5ldmVyIGVudGVyZWQgdGhlIGd1ZXN0LCBidXQgdGhpcyBsb29rcyBsaWtlIGFcXG4rXFx0XFx0ICogaGFuZGxlZCBleGl0IHRvIHRoZSBjYWxsZXIuICBTeW50aGVzaXplIGFuIGludmFsaWQgZXhpdFxcbitcXHRcXHQgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQncyBzdGFsZSB2YWx1ZSBpc24ndCBjb25zdW1lZFxcbitcXHRcXHQgKiBhIHNlY29uZCB0aW1lLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBNYWtlIGl0IHN1cGVyIGNsZWFyIHRoYXQgYml0WzMxOjE2XSBpcyBjbGVhcmVkIHRvIDAgYW5kIG9ubHlcXG4rXFx0XFx0ICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZFxcbitcXHRcXHQgKiBpbnZhbGlkIGV4aXQgcmVhc29uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwO1xcbitcXHRcXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcXG4gXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xcbitcXHR9XFxuIFxcbiBcXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFxcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XFxuIFxcbkBAIC0yMTI2LDYgKzIxNTYsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIFxcdFxcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxcbitcXHRcXHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXFxuK1xcdFxcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSkpO1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX0JVU19MT0NLOlxcbitcXHRcXHRyZXR1cm4gdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMjE0MSw3ICsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFxuIFxcdCpyZWFzb24gPSB0ZHgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XFxuLVxcdGlmICgqcmVhc29uICE9IC0xdSkge1xcbitcXHRpZiAodGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0KSkge1xcbiBcXHRcXHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0XFx0KmluZm8yID0gdGR4LVxcdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xcbiBcXHRcXHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuQEAgLTMxNTQsNiArMzE4OSwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MpKTtcXG4gXFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFBJTl9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIFBJTl9CQVNFRF9QT1NURURfSU5UUik7XFxuIFxcbitcXHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfTk9USUZZX1ZNX0VYSVRJTkcpO1xcbitcXHRcXHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxcbitcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTtcXG4rXFxuIFxcdHRkeC1cXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTNiZmU2YWNhMWEwZS4uNDkwYmFhZTU2Y2YxNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC02MjY1LDIzICs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfWDg2X1NHWF9LVk0gKi9cXG4gXFxuLXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0LypcXG4tXFx0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXFxuLVxcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xcbi1cXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cXG4tXFx0ICovXFxuLVxcdHRvX3Z0KHZjcHUpLVxcdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XFxuLVxcdHJldHVybiAxO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuLVxcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4tXFxuLVxcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTm90aWZ5IFZNIGV4aXQgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXFxuQEAgLTYyOTEsMTUgKzYyNzcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcXG4gXFx0XFx0XFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xcbiBcXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFxcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcXG4tXFx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XFxuLVxcdFxcdFxcdFxcdFxcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDE7XFxuK1xcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgZXhpdF9xdWFsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtNjM3NSw3ICs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbiBcXHRbRVhJVF9SRUFTT05fVk1GVU5DXVxcdFxcdCAgICAgID0gaGFuZGxlX3ZteF9pbnN0cnVjdGlvbixcXG4gXFx0W0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdXFx0ICAgICAgPSBoYW5kbGVfcHJlZW1wdGlvbl90aW1lcixcXG4gXFx0W0VYSVRfUkVBU09OX0VOQ0xTXVxcdFxcdCAgICAgID0gaGFuZGxlX2VuY2xzLFxcbi1cXHRbRVhJVF9SRUFTT05fQlVTX0xPQ0tdICAgICAgICAgICAgICAgID0gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCxcXG4rXFx0W0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQsXFxuIFxcdFtFWElUX1JFQVNPTl9OT1RJRlldXFx0XFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxcbiBcXHRbRVhJVF9SRUFTT05fU0VBTUNBTExdXFx0XFx0ICAgICAgPSBoYW5kbGVfdGR4X2luc3RydWN0aW9uLFxcbiBcXHRbRVhJVF9SRUFTT05fVERDQUxMXVxcdFxcdCAgICAgID0gaGFuZGxlX3RkeF9pbnN0cnVjdGlvbixcXG5AQCAtNjcwMyw3ICs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKiBUaGUgZ3Vlc3QgaGFzIGV4aXRlZC4gIFNlZSBpZiB3ZSBjYW4gZml4IGl0IG9yIGlmIHdlIG5lZWQgdXNlcnNwYWNlXFxuICAqIGFzc2lzdGFuY2UuXFxuICAqL1xcbi1zdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbitpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xcbkBAIC02ODYyLDI0ICs2ODQwLDYgQEAgc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuLXtcXG4tXFx0aW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcXG4tXFx0ICogYSBidXMgbG9jayBpbiBndWVzdC5cXG4tXFx0ICovXFxuLVxcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xcbi1cXG4tXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4gdm9pZCB2bXhfdXBkYXRlX2NyOF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHByLCBpbnQgaXJyKVxcbiB7XFxuIFxcdGludCB0cHJfdGhyZXNob2xkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMjo0MC41Nzk2MjMxODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NTQ0MDU2OTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ0ZHhfaGFuZGxlX2V4aXRcIixcbiAgICBcInZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBidXMgbG9jayBkZXRlY3Rpb24gYW5kIG5vdGlmeSBWTSBleGl0cy4gSXQgaW50cm9kdWNlcyBhIGNvbW1vbiB2dF9oYW5kbGVfZXhpdCBhbmQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCBmb3IgYm90aCBWTVggYW5kIFREWCwgYW5kIHVwZGF0ZXMgdGR4X2hhbmRsZV9leGl0IHRvIGhhbmRsZSB0aGVzZSBleGl0cy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gcGF0aHMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZjhkYWFkMjQwOWQwNTkyZGNhOGMyZWVhYjcyMzBkZDgzYzhjZTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6MDI6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uYmJlZWMxOTdhNTA3YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibW11LmhcIlxuIFxuQEAgLTE4Myw2ICsxODQsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpXG4re1xuK1x0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4rXG4rXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbitcdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4rXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4rXHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiAxO1xuK31cbitcbiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTE1NCwxNSArMTU0LDYgQEAgc3RhdGljIGZhc3RwYXRoX3QgdnRfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0cmV0dXJuIHZteF92Y3B1X3J1bih2Y3B1LCBydW5fZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHQgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKVxuLXtcbi1cdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuLVx0XHRyZXR1cm4gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbi1cbi1cdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuQEAgLTg3Niw2ICs4NjcsNDQgQEAgc3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbiBcbitpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuK1x0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nXG4rXHQgKiB0byAuaGFuZGxlX2V4aXQoKSBjYWxsYmFjay5cbitcdCAqL1xuK1x0dG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4re1xuK1x0aW50IHJldDtcbitcbisjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcbitcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuK1x0XHRyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuK1x0ZWxzZVxuKyNlbmRpZlxuK1x0XHRyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuK1xuK1x0LypcbitcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4rXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxuK1x0ICovXG4rXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXHRcdFx0XHRcXFxuIFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFx0XHRcdFxcXG4gXHQgQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0FCU0VOVCkgfFx0XHRcdFxcXG5AQCAtOTQ5LDcgKzk3OCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuLVx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuK1x0LmhhbmRsZV9leGl0ID0gdnRfaGFuZGxlX2V4aXQsXG4gXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuIFx0LnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTkyMSwzNiArOTIxLDU0IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIEVYSVRfUkVBU09OX1REQ0FMTDtcbiB9XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh1NjQgdnBfZW50ZXJfcmV0KVxuIHtcbi1cdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuLVx0dTMyIGV4aXRfcmVhc29uO1xuLVxuLVx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbitcdHN3aXRjaCAodnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG4gXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URDpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9OT05fQUNDRVNTSUJMRTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybiAtMXU7XG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbit9XG4rXG4rLyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqL1xuKyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT05cdFx0VTE2X01BWFxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuK1xuK1x0LypcbitcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWCBtb2R1bGVcbitcdCAqIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQgUmVhc29uIGlzIHVuZGVmaW5lZCxcbitcdCAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci5cbitcdCAqL1xuK1x0aWYgKCF0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWQodGR4LVx1MDAzZXZwX2VudGVyX3JldCkpXG4rXHRcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XG4rXHRcdFx0LmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04sXG4rXHRcdH07XG4gXG4tXHRzd2l0Y2ggKGV4aXRfcmVhc29uKSB7XG4rXHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuK1xuK1x0c3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9URENBTEw6XG4gXHRcdGlmICh0ZHZtY2FsbF9leGl0X3R5cGUodmNwdSkpXG4tXHRcdFx0cmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDtcbi1cbi1cdFx0cmV0dXJuIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XG4rXHRcdGVsc2VcbitcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxuIFx0XHQvKlxuIFx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG4gXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAtMXU7XG4rXHRcdGV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtOTY3LDcgKzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHR2dC1cdTAwM2VleGl0X3JlYXNvbiA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4gXG4gXHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yY3g7XG4gXHR0ZHgtXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJkeDtcbkBAIC05ODEsOCArOTk5LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4rXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCArMTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHQgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmRcbiBcdCAqIFREQ0FMTHMuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSlcbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgdkNQVSBuZXZlciBlbnRlcmVkIHRoZSBndWVzdCwgYnV0IHRoaXMgbG9va3MgbGlrZSBhXG4rXHRcdCAqIGhhbmRsZWQgZXhpdCB0byB0aGUgY2FsbGVyLiAgU3ludGhlc2l6ZSBhbiBpbnZhbGlkIGV4aXRcbitcdFx0ICogcmVhc29uIHNvIHRoZSBwcmV2aW91cyBleGl0J3Mgc3RhbGUgdmFsdWUgaXNuJ3QgY29uc3VtZWRcbitcdFx0ICogYSBzZWNvbmQgdGltZS5cbitcdFx0ICpcbitcdFx0ICogTWFrZSBpdCBzdXBlciBjbGVhciB0aGF0IGJpdFszMToxNl0gaXMgY2xlYXJlZCB0byAwIGFuZCBvbmx5XG4rXHRcdCAqIGJhc2ljIGV4aXQgcmVhc29uIChiaXRbMTU6MF0pIGlzIHNldCB0byB0aGUgc3ludGhlc2l6ZWRcbitcdFx0ICogaW52YWxpZCBleGl0IHJlYXNvbi5cbitcdFx0ICovXG4rXHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwO1xuK1x0XHR2dC1cdTAwM2VleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO1xuIFx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XG4rXHR9XG4gXG4gXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFx1MDAyNiBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTtcbiBcbkBAIC0yMTI2LDYgKzIxNTYsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIDE7XG4rXHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcbitcdFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xuK1x0XHRyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbitcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XG4rXHRcdHJldHVybiB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjE0MSw3ICsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdGR4LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcbitcdGlmICh0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWQodGR4LVx1MDAzZXZwX2VudGVyX3JldCkpIHtcbiBcdFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG5AQCAtMzE1NCw2ICszMTg5LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbitcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbitcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4rXHRcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV93aW5kb3cpO1xuK1x0fVxuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7XG4rXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLjQ5MGJhYWU1NmNmMTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjI2NSwyMyArNjI2NSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqL1xuIFxuLXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0Lypcbi1cdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuLVx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvXG4tXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cbi1cdCAqL1xuLVx0dG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSB0cnVlO1xuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbi1cdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuLVxuLVx0Kyt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiBcbiBcdC8qXG4gXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02MjkxLDE1ICs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sXG4gXHRcdFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xuIFxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbi1cdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4tXHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdHJldHVybiAxO1xuK1x0cmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTYzNzUsNyArNjM1Myw3IEBAIHN0YXRpYyBpbnQgKCprdm1fdm14X2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiBcdFtFWElUX1JFQVNPTl9WTUZVTkNdXHRcdCAgICAgID0gaGFuZGxlX3ZteF9pbnN0cnVjdGlvbixcbiBcdFtFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSXVx0ICAgICAgPSBoYW5kbGVfcHJlZW1wdGlvbl90aW1lcixcbiBcdFtFWElUX1JFQVNPTl9FTkNMU11cdFx0ICAgICAgPSBoYW5kbGVfZW5jbHMsXG4tXHRbRVhJVF9SRUFTT05fQlVTX0xPQ0tdICAgICAgICAgICAgICAgID0gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCxcbitcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuIFx0W0VYSVRfUkVBU09OX05PVElGWV1cdFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxuIFx0W0VYSVRfUkVBU09OX1NFQU1DQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG4gXHRbRVhJVF9SRUFTT05fVERDQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG5AQCAtNjcwMyw3ICs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIFRoZSBndWVzdCBoYXMgZXhpdGVkLiAgU2VlIGlmIHdlIGNhbiBmaXggaXQgb3IgaWYgd2UgbmVlZCB1c2Vyc3BhY2VcbiAgKiBhc3Npc3RhbmNlLlxuICAqL1xuLXN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4raW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG5AQCAtNjg2MiwyNCArNjg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbi17XG4tXHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XG4tXG4tXHQvKlxuLVx0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcbi1cdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXG4tXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XG4tXHRcdGlmIChyZXQgXHUwMDNlIDApXG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4tXG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHZvaWQgdm14X3VwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRwciwgaW50IGlycilcbiB7XG4gXHRpbnQgdHByX3RocmVzaG9sZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAyOjQwLjU3OTYyNTgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDcwOTU2MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgS1ZNIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgdHdlYWtzIEtWTSdzIFZNWCBhbmQgVERYIGNvZGUsIHNwZWNpZmljYWxseSBob3cgVk0gZXhpdHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBzaW5jZSB0aGF0J3MgYSBrZXkgcGFydCBvZiBlbnN1cmluZyBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb21lIG5ldyBmdW5jdGlvbnM6IGBfX3Z0X2hhbmRsZV9ub3RpZnlgIChzdGF0aWMgaW5saW5lKSwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBsaWtlIGB0ZHhfaGFuZGxlX2V4aXRgLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAsIGFuZCBgdGR4X3ZjcHVfaW5pdGAuIEl0IGFsc28gdG91Y2hlcyBgdnRfaGFuZGxlX2V4aXRgIGFuZCBgdm14X2hhbmRsZV9leGl0YC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgVERYIOKAkyBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgc28gSSBuZWVkIHRvIGNvbnNpZGVyIGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gV2Uga25vdyBLVk0gaXRzZWxmIGdldHMgYSBsb3Qgb2YgbG92ZSBmcm9tIHN5emthbGxlci4gVGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcmVuJ3Qgd29ydGggZnV6emluZywgYnV0IFREWCBpcyBhIGJpdCBkaWZmZXJlbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHNwZWNpZmljIFREWCBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUsIGV2ZW4gaWYgZnVsbCBURFggZW11bGF0aW9uIGlzbid0IGZlYXNpYmxlLiBJIGtub3cgUUVNVSBoYXMgc29tZSBURFggc3VwcG9ydCwgYnV0IGl0J3MgcmVsaWFudCBvbiBLVk0gYW5kIGhhcmR3YXJlLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cblRoZW4sIHRoZXJlJ3MgYHZ0X2hhbmRsZV9leGl0YCwgd2hpY2ggaXMgdGhlIGNvbW1vbiBleGl0IGhhbmRsZXIgZm9yIGJvdGggVk1YIGFuZCBURFguIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIHBhdGNoIG1vdmVzIGJ1cyBsb2NrIGRldGVjdGlvbiBmcm9tIGB2bXhfaGFuZGxlX2V4aXRgIHRvIGB2dF9oYW5kbGVfZXhpdGAuIEJlY2F1c2UgaXQgYWZmZWN0cyBib3RoIFZNWCBhbmQgVERYLCBldmVuIGluIFFFTVUsIHRoaXMgcGF0Y2ggaXMgbW9zdCBsaWtlbHkgd29ydGggZnV6emluZy4gVk1YIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MgbGlrZSBRRU1VIGluc2lkZSBHQ0UuIFNpbmNlIGJ1cyBsb2NrIGRldGVjdGlvbiBpcyBub3cgcm91dGVkIHRocm91Z2ggYHZ0X2hhbmRsZV9leGl0YCwgdGhpcyBhcmVhIHJlcXVpcmVzIGNsb3NlIHNjcnV0aW55LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFdlIGhhdmUgYHZ0X2hhbmRsZV9leGl0YCAoc3RhdGljKSwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgIChub24tc3RhdGljKSwgYHZteF9oYW5kbGVfZXhpdGAgKG5vbi1zdGF0aWMpLCBgdGR4X2hhbmRsZV9leGl0YCAobm9uLXN0YXRpYyksIGFuZCBgX192dF9oYW5kbGVfbm90aWZ5YCAoc3RhdGljIGlubGluZSkuIEknbGwgdXNlIGNvZGUgc2VhcmNoIHRvIHZlcmlmeSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlbGV2YW50IGFuZCBuZWVkIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTIzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDI6NTAuNjUwNTg0NTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjIzOTIzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTIwNT1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjIwNjppbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMjA3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODU0PXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjktXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODcwOmludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDYxPWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTYyLVxcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMTYzOlxcdFxcdHJldHVybiB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE2NC1cXHRkZWZhdWx0Olxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MzA1PXN0YXRpYyBpbnQgKCprdm1fdm14X2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM1NS1cXHRbRVhJVF9SRUFTT05fRU5DTFNdXFx0XFx0ICAgICAgPSBoYW5kbGVfZW5jbHMsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MzU2OlxcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM1Ny1cXHRbRVhJVF9SRUFTT05fTk9USUZZXVxcdFxcdCAgICAgID0gaGFuZGxlX25vdGlmeSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDI6NTIuOTcyOTgzMzUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNzQzNzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRXhpdCBIYW5kbGVyczogYHZ0X2hhbmRsZV9leGl0YCB2cy4gYHZteF9oYW5kbGVfZXhpdGAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZXNlIGV4aXQgaGFuZGxlcnMuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIGRpZmZlcmVuY2UgLSBJbnRlbCBWVC14IHZlcnN1cyBBTUQtViwgb3IgcGVyaGFwcyBldmVuIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYSBwYXJ0aWN1bGFyIGd1ZXN0IE9TIGJlaGF2aW9yIG9yIGh5cGVydmlzb3IgY29uZmlndXJhdGlvbi4gQ2hlY2tpbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0YCBhbmQgYHZteF9oYW5kbGVfZXhpdGApIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHdoZW4gdGhlIGd1ZXN0IHRyaWVzIHRvIGRvIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGludGVydmVudGlvbiBmcm9tIHRoZSBoeXBlcnZpc29yLiBcblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2libGUgZXhpdCByZWFzb25zIEkgZXhwZWN0IHRvIHNlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwcml2aWxlZ2UgbGV2ZWwgdHJhbnNpdGlvbnMsIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucywgb3IgcGVyaGFwcyBjb250cm9sIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnM/IEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvZ2ljIHdpdGhpbiBlYWNoIGhhbmRsZXIgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZW0gYW5kIGhvdyB0aGUgaHlwZXJ2aXNvciByZXNwb25kcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIHByb25lIHRvIGVycm9ycywgYW5kIGFueSB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGl0IGhhbmRsaW5nIHByb2Nlc3MuIEl0J3MgYSBjcml0aWNhbCBwYXRoLCBhbmQgYW55IHdlYWtuZXNzIGhlcmUgY291bGQgYmUgZXhwbG9pdGVkLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGVzZSBoYW5kbGVycyBhcmUgd2hlcmUgdGhlIGh5cGVydmlzb3IncyBzZWN1cml0eSBwb2xpY2llcyBhcmUgZW5mb3JjZWQuIFRoZXkncmUgZGVmaW5pdGVseSB0aGUgZ2F0ZWtlZXBlcnMgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDI6NTcuMDkwNDI0NjY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjc1MTcxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnRfaGFuZGxlX2V4aXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODcwPWludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg4MC1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4ODE6c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODgyLVxcdFxcdFxcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MTc9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk4MC1cXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTgxOlxcdC5oYW5kbGVfZXhpdCA9IHZ0X2hhbmRsZV9leGl0LFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk4Mi1cXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMjo1OS40NTc5NDgxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjQ4NTM0NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlN0YXRpYyB2cy4gTm9uLVN0YXRpYyBFeGl0IEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZXhpdCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBJdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYHZ0X2hhbmRsZV9leGl0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpbGUgYHZteF9oYW5kbGVfZXhpdGAgaXMgbm90LiBUaGlzIGRpZmZlcmVuY2UgaXMgZnVuZGFtZW50YWwgYW5kIGhhcyBjbGVhciBpbXBsaWNhdGlvbnMgZm9yIHRoZWlyIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLlxuXG5gdnRfaGFuZGxlX2V4aXRgIGJlaW5nIGBzdGF0aWNgIG1lYW5zIGl0J3MgbG9jYWwgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBFc3NlbnRpYWxseSwgaXQncyBoaWRkZW4gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtOyBpdCBjYW4ndCBiZSBkaXJlY3RseSBjYWxsZWQgb3IgYWNjZXNzZWQgZnJvbSBleHRlcm5hbCBtb2R1bGVzLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHZ0X2hhbmRsZV9leGl0YCBpcyBzcGVjaWZpYyB0byB0aGUgdmlydHVhbC04MDg2IHRhc2sgb3IgYSBwYXJ0aWN1bGFyIHZpcnR1YWwgbWFjaGluZSBtYW5hZ2VtZW50IGltcGxlbWVudGF0aW9uLiBJdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIHRoYXQgbW9kdWxlLCBkZXNpZ25lZCBmb3IgdmVyeSBmb2N1c2VkLCBsb3ctbGV2ZWwgdGFza3MuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gY29uZmlybSB0aGUgc3BlY2lmaWMgY29udGV4dCwgYnV0IHRoYXQncyBteSBpbml0aWFsIHRha2UuXG5cbmB2bXhfaGFuZGxlX2V4aXRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgYmVpbmcgbm9uLXN0YXRpYywgaW5kaWNhdGVzIHRoYXQgaXQncyBtZWFudCB0byBiZSB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEl0IGNvdWxkIGJlIHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgZ2VuZXJhbCBWTVggdmlydHVhbGl6YXRpb24gbGF5ZXIsIG9yIGEgbW9yZSB3aWRlbHkgYWNjZXNzaWJsZSBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIGV4aXRzIGluIHRoZSBWTVggZW52aXJvbm1lbnQuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBvdGhlciBtb2R1bGVzIGNhbGxpbmcgaW50byBpdCBmb3IgZXhpdCBwcm9jZXNzaW5nLCBzdWdnZXN0aW5nIGEgbW9yZSBwdWJsaWMgb3IgZ2VuZXJhbGl6ZWQgcHVycG9zZS4gVGhpcyB3aWxsIGJlIGltcG9ydGFudCB3aGVuIEkgc3RhcnQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSB3aGF0IHBhcnQgb2YgdGhlIHN5c3RlbSBpcyB0aGUgb3duZXIgb2Ygd2hpY2ggcmVzcG9uc2liaWxpdHkgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBTZWVpbmcgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgd2lsbCBnaXZlIG1lIGEgdmVyeSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHNwZWNpZmljIHJvbGVzIGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgdGhlIHVzZSBvZiBgc3RhdGljYCBmb3Igb25lIGFuZCBub3QgdGhlIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDM6MDkuMTA2NDg2MDUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjM0NzQ2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X2hhbmRsZV9leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MT1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg5MC0jZW5kaWZcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4OTE6XFx0XFx0cmV0ID0gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04OTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MTc9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzEtXFx0LmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAzMjpcXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdm14X2hhbmRsZV9leGl0X2lycW9mZixcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDI5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NDk0LVxcdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NDk1OlxcdCAqIFNlZSB0aGUgY29tbWVudHMgaW4gdm14X2hhbmRsZV9leGl0LlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ5Ni1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjQ3OT12b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY2ODMtICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2Njg0OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Njg1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzEzOD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxNTMtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTU0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTU1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI4PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6Mjk6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzA6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzEtaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ9MTU5Mj1Ob3RlczpcXG4tLVxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjEyLSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODYyOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY2NjJlOSB2bXhfdmNwdV9ydW4rMHgzYjkgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjYxOWEwIF9fdm14X2NvLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTM6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NzI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDljZmIyIHZjcHVfZW50ZXJfZ3Vlc3QrMHg3NTIgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjVmNTcwIHZteF8uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxNC0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg4MTogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWQwMjggdmNwdV9lbnRlcl9ndWVzdCsweDdjOCAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYjIzNGY5MDAgX19zci4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE1OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5ZDA2ZiB2Y3B1X2VudGVyX2d1ZXN0KzB4ODBmIChba2VybmVsLmthbGxzeW1zXSkgPVxcdTAwM2UgZmZmZmZmZmZjMGY3MmUzMCB2bXhfLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTY6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyZTNkIHZteF9oYW5kbGVfZXhpdCsweGQgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjcyN2MwIF9fdm14X2guLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJiMTUgX192bXhfaGFuZGxlX2V4aXQrMHgzNTUgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjYwYWUwIHZteC4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE4OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzOTAzOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3Mjk5NCBfX3ZteF9oYW5kbGVfZXhpdCsweDFkNCAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzEwYjcwOTAga3ZtLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTktICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMGI3MGYxIGt2bV9lbXVsYXRlX2NwdWlkKzB4NjEgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMxMGI2ZTEwIGt2bV8uLi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDM6MTEuNDI5OTY1NDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5NTAwOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTSBFeGl0IEhhbmRsZXJzKipcblxuQWxyaWdodCwgc28gSSBzZWUgdGhyZWUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGVyZSB0aGF0IGFyZSBhbGwgZGVzaWduZWQgdG8gaGFuZGxlIHNwZWNpZmljIHR5cGVzIG9mIFZNWCAoVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMpIGV4aXRzLiBGaXJzdCwgdGhlcmUncyBgdm14X2hhbmRsZV9leGl0YCwgd2hpY2gsIGFzIHRoZSBuYW1lIGltcGxpZXMsIGlzIHRoZSBnZW5lcmFsIGhhbmRsZXIgZm9yIFZNWCBleGl0cy4gVGhlbiwgdGhlcmUncyBgdGR4X2hhbmRsZV9leGl0YCBmb3IgVERYIGV4aXRzIC0gd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0J3Mgc2VwYXJhdGUgZm9yIFREWC4gRmluYWxseSB0aGVyZSdzIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgd2hpY2ggaXMgZGVzaWduZWQgZm9yIGEgYnVzIGxvY2sgdm1leGl0LCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSB0byBkZXNpZ24gbXkgc3lzdGVtLlxuXG5MZXQncyBjaGVjayBgdGR4X2hhbmRsZV9leGl0YCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzoxNi44MjQ5Nzc3MDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTUwMjQyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2hhbmRsZV9leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MT1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg4Ny1cXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4ODg6XFx0XFx0cmV0ID0gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04ODktXFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05NDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk2Ni1cXHRcXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6OTY3OlxcdFxcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk2OC1cXHRcXHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTExNjI9c3RhdGljIGludCB0ZHhfaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTY3LVxcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxMTY4OlxcdCAqIHRkeF9oYW5kbGVfZXhpdCgpIHdpdGggVERYX05PTl9SRUNPVkVSQUJMRSBzZXQgaWYgYSAjTUMgb2NjdXJzIG9uXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTY5LVxcdCAqIFZNLUVudHJ5LiAgTk1JcyBhcmUgaGFuZGxlZCBieSB0ZHhfdmNwdV9lbnRlcl9leGl0KCkuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTIwNDc9aW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDYwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjA2MTppbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIwNjIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTQzPXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTQ0OmludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTE0NS1cXHRcXHRlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAzOjE4Ljk0MDAxMDQwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzg2MDQ1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFZNIEV4aXRzOiBBIFRhcmdldGVkIFJldmlldyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBWTSBleGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlc2UgZnVuY3Rpb25zOiBgdm14X2hhbmRsZV9leGl0YCwgYHRkeF9oYW5kbGVfZXhpdGAsIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBURFgsIEkgYmV0IHRoZXJlJ3MgYSBzcGVjaWZpYyBgQ09ORklHX0tWTV9JTlRFTF9URFhgIChvciBzb21ldGhpbmcgY29tcGFyYWJsZSkgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIGJ1aWxkIGZsYWdzIGFyZSBzZXQgZm9yIHRoZSByZWxldmFudCBmZWF0dXJlcy4gVGhlIGNvZGUgaXRzZWxmLCBvZiBjb3Vyc2UsIGlzIG5lc3RsZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L2AsIHNvIEknbGwgYmUgc3BlbmRpbmcgbW9zdCBvZiBteSB0aW1lIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzoyNC4zMjYwNTg3MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDE0ODY3MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTF9URFhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzoyNi41Mjc1NTE5OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0NjI2NDA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBURFggU3VwcG9ydCBpbiB0aGUgS1ZNL3g4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLVk0gc3VwcG9ydCBmb3IgSW50ZWwncyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHN0YXJ0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpcyB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsaXZlLCBzbyBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRoYXQgSSdkIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgS1ZNX0lOVEVMX1REWGAgdGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLCBpZiBhbnksIGFyZSBuZWVkZWQgdG8gZW5hYmxlIGBLVk1fSU5URUxfVERYYC4gSXQncyBsaWtlbHkgZ29pbmcgdG8gZGVwZW5kIG9uIHNvbWUgb2YgdGhlIENQVSBmZWF0dXJlcyBhbmQgb3RoZXIgbG93LWxldmVsIEtWTSBzZXR0aW5ncy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlcnMgYXJlIGNvbm5lY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzozMS44NzM4MjA4OTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1ODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxcbiAxNTE6XFx0XFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzozMS44NzU5ODUxMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTYzNDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBURFggRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgdGhlIHZpcnR1YWxpemVkIGNvbXBvbmVudCBkZXBlbmRzIG9uIHRoZSBob3N0IHN1cHBvcnQsIGJ1dCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBkZXRhaWxzIHN0cmFpZ2h0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgSU5URUxfVERYX0hPU1RgIG5vdyBhbmQgc2VlIHdoYXQgdGhhdCdzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAzOjM3LjQzNzYyMTc5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NjI5NDA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDM6MzkuODkzOTIxNjA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNTA2ODkxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBhcmNoL3g4Ni9LY29uZmlnYCBmb3IgYElOVEVMX1REWF9IT1NUYCBkZXBlbmRlbmNpZXM6XG5cbioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgVERYIEhvc3QgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHN1cnJvdW5kaW5nIEludGVsJ3MgVERYIEhvc3Qgc3VwcG9ydCB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGVsdmUgaW50byBgYXJjaC94ODYvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBnYXRlLCBkZXBlbmQgb24sIG9yIGJlIHJlcXVpcmVkICpieSogYElOVEVMX1REWF9IT1NUYC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBGaXJzdCwgSSB3YW50IHRvIGVuc3VyZSBteSBzZXR1cCBwcm9wZXJseSBlbmFibGVzIGV2ZXJ5dGhpbmcgbmVlZGVkLiBTZWNvbmQsIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgaW4gdHJvdWJsZXNob290aW5nIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzLCBvciBpZiBzb21ldGhpbmcgaXMgZGlzYWJsZWQgd2hlbiBpdCBzaG91bGRuJ3QgYmUuIFRoaXJkLCBJIHNob3VsZCBiZSBhYmxlIHRvIHByZWRpY3Qgd2hhdCBjaGFuZ2VzIG1heSBvY2N1ciBpbiBmdXR1cmUgcmVsZWFzZXMgYnkgdW5kZXJzdGFuZGluZyB3aGF0IG90aGVyIGZlYXR1cmVzIHRvdWNoIHRoZSBzYW1lIHBhcnRzIG9mIHRoZSBoYXJkd2FyZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLiBJJ2xsIGxvb2sgZm9yIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGByZXF1aXJlc2AsIG9yIGV2ZW4gaW1wbGllZCByZWxhdGlvbnNoaXBzIHRocm91Z2ggb3RoZXIgcmVsYXRlZCBmZWF0dXJlcy4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzo1My40MDA4MTY0MDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2NDpcXHRjb25maWcgSU5URUxfVERYX0hPU1RcXG4xODY1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4xODY2OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxcbjE4Njc6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4xODcwOlxcdFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4xODcxOlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9NQ0VcXG4xODczOlxcdFxcdGhlbHBcXG4xODc0OlxcdFxcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXFxuMTg3NTpcXHRcXHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxcbjE4NzY6XFx0XFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4Nzk6XFx0XFxuMTg4MDpcXHRjb25maWcgRUZJXFxuMTg4MTpcXHRcXHRib29sIFxcXCJFRkkgcnVudGltZSBzZXJ2aWNlIHN1cHBvcnRcXFwiXFxuMTg4MjpcXHRcXHRkZXBlbmRzIG9uIEFDUElcXG4xODgzOlxcdFxcdHNlbGVjdCBVQ1MyX1NUUklOR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzo1My40MDEwMzg0ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NTkxOTk4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gVk1YL1REWCBFeGl0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgd2UncmUgZW5hYmxpbmcgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggaW5pdGlhbGx5LCBidXQgdGhlbiBJIHJlYWxpemVkIGl0J3MgdG91Y2hpbmcgYHZteF9oYW5kbGVfZXhpdGAgYW5kIGB2dF9oYW5kbGVfZXhpdGAsIHdoaWNoIGFyZSBjb3JlIFZNWCBjb21wb25lbnRzIOKAkyB0aGF0J3Mgd2hlbiBJIGtuZXcgYEtWTV9JTlRFTGAgd2FzIGNyaXRpY2FsIGhlcmUuXG5cblRvIGNvbmZpcm0gdGhpcywgSSBjaGVja2VkIHdoaWNoIGZpbGVzIHdlcmUgYmVpbmcgbW9kaWZpZWQ6IGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gVGhlIGNoYW5nZXMgaW4gYHZteC5jYCBhbmQgYG1haW4uY2AgYXJlIGd1YXJkZWQgYnkgYENPTkZJR19LVk1fSU5URUxgIHdoaWxlIHRob3NlIGluIGB0ZHguY2AgYXJlIGdhdGVkIGJ5IGBDT05GSUdfS1ZNX0lOVEVMX1REWGAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoZSByZXF1aXJlZCBjb25maWdzLlxuXG5JIHRvb2sgYSBjbG9zZXIgbG9vayBhdCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAsIHdoaWNoIGlzIGRlZmluZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AsIGFuZCB0aGF0J3MgY29tcGlsZWQgd2l0aCBgS1ZNX0lOVEVMYC4gVGhlbiBJIHdlbnQgYmFjayB0byBgdm14X2hhbmRsZV9leGl0YCwgd2hpY2ggbGl2ZXMgaW4gYHZteC5jYC4gRXhhbWluaW5nIHRoZSBwYXRjaCwgSSBmb3VuZCB0aGF0IGB2bXhfaGFuZGxlX2V4aXRgIGhhZCBiZWVuIHJlbmFtZWQgdG8gYF9fdm14X2hhbmRsZV9leGl0YCBhbmQgdGhlIG9sZCBgdm14X2hhbmRsZV9leGl0YCB3YXMgcmVtb3ZlZCwgd2l0aCB0aGUgYnVzIGxvY2sgZGV0ZWN0aW9uIGxvZ2ljIG1vdmVkIHRvIGB2dF9oYW5kbGVfZXhpdGAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMgYXJlIG5vdyBjbGVhcjogYHZteF9oYW5kbGVfZXhpdGAsIGB0ZHhfaGFuZGxlX2V4aXRgLCBhbmQgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLlxuXG5UaGUgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZTogYEtWTV9JTlRFTGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBJTlRFTF9URFhfSE9TVGAuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBkaXZlcyBpbnRvIHRoZSBmdW5kYW1lbnRhbCBLVk0gVk1YIGV4aXQgaGFuZGxpbmcsIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCdzIHdvcnRoIGZ1enppbmcuIEl0J3MgYSBjcml0aWNhbCBwYXRoIHJlYWNoYWJsZSBkdXJpbmcgZ3Vlc3QgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBjZW50cmFsaXplcyBleGl0IGhhbmRsaW5nIGZvciBWTVggYW5kIFREWCwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYnVzIGxvY2tzIGFuZCBub3RpZmllcy4gU3BlY2lmaWNhbGx5LCBgdnRfaGFuZGxlX2V4aXRgIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgYXJlIGludHJvZHVjZWQgZm9yIHRoaXMgcHVycG9zZS4gVGhlIHBhdGNoIHVwZGF0ZXMgYHRkeF9oYW5kbGVfZXhpdGAgdG8gYWNjb21tb2RhdGUgdGhlc2UgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gcGF0aHMgdGhhdCBuZWVkIHRvIGJlIGZ1enplZCBkdWUgdG8gdGhlaXIgZGlyZWN0IGltcGFjdCBvbiBndWVzdCBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjE4LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjA1Ljg2MDI0MTU3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTk0NjM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidGR4X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgYnVzIGxvY2sgZGV0ZWN0aW9uIGFuZCBub3RpZnkgVk0gZXhpdHMuIEl0IGludHJvZHVjZXMgYSBjb21tb24gdnRfaGFuZGxlX2V4aXQgYW5kIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQgZm9yIGJvdGggVk1YIGFuZCBURFgsIGFuZCB1cGRhdGVzIHRkeF9oYW5kbGVfZXhpdCB0byBoYW5kbGUgdGhlc2UgZXhpdHMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIHBhdGhzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ0ZHhfaGFuZGxlX2V4aXRcIixcbiAgICBcInZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBidXMgbG9jayBkZXRlY3Rpb24gYW5kIG5vdGlmeSBWTSBleGl0cy4gSXQgaW50cm9kdWNlcyBhIGNvbW1vbiB2dF9oYW5kbGVfZXhpdCBhbmQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCBmb3IgYm90aCBWTVggYW5kIFREWCwgYW5kIHVwZGF0ZXMgdGR4X2hhbmRsZV9leGl0IHRvIGhhbmRsZSB0aGVzZSBleGl0cy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gcGF0aHMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNDowNi4wMjAxOTg1NzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTIxNTYzMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MDYuMDIxMDc2MzgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU0OTIwNjgxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcgY29kZSB0byBzaGFyZSBjb21tb24gbG9naWMgZm9yIG5vdGlmeSBhbmQgYnVzIGxvY2sgVk0tZXhpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBhIHN5bnRoZXNpemVkIGludmFsaWQgZXhpdCByZWFzb24gZm9yIFREWCB0byBwcmV2ZW50IHRoZSBjb25zdW1wdGlvbiBvZiBzdGFsZSBleGl0IHJlYXNvbnMgZnJvbSBwcmV2aW91cyBydW5zLiBcXG5cXG4xLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIHRvIGB2Y3B1LVxcdTAwM2VydW5gICh3aGljaCBpcyBtYXBwZWQgdG8gdXNlciBzcGFjZSkgYXJlIGxpbWl0ZWQgdG8gc2V0dGluZyBzcGVjaWZpYyBmaWVsZHMgKGBleGl0X3JlYXNvbmAsIGBub3RpZnkuZmxhZ3NgLCBgZmxhZ3NgKSB3aXRoIGRldGVybWluaXN0aWMgdmFsdWVzLCBpZGVudGljYWwgdG8gdGhlIHByZS1leGlzdGluZyBWTVggbG9naWMuXFxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDBgKSBiZWZvcmUgc2V0dGluZyB0aGUgYmFzaWMgZXhpdCByZWFzb24sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYml0cyBmcm9tIGJlaW5nIHVzZWQuXFxuMy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgY29udHJvbCBmbG93LCBjb2RlIGRlZHVwbGljYXRpb24sIGFuZCBmaXhpbmcgYSBsb2dpYyBidWcgKHN0YWxlIGV4aXQgcmVhc29uKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDowMjozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5pbmRleCAwODAwNTY3NjcwMmMyLi5iYmVlYzE5N2E1MDdhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4gXG5AQCAtMTgzLDYgKzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBfX3Z0X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcbit7XG4rXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbitcbitcdCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuK1x0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbitcdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCAwZmYzMjMwZmQ5NWU4Li4xMGRmOTY2N2QwYzA2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTU0LDE1ICsxNTQsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHRyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4te1xuLVx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4tXHRcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuLVxuLVx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5AQCAtODc2LDYgKzg2Nyw0NCBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHQvKlxuK1x0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXG4rXHQgKiBWTS1FeGl0cy4gVW5jb25kaXRpb25hbGx5IHNldCB0aGUgZmxhZyBoZXJlIGFuZCBsZWF2ZSB0aGUgaGFuZGxpbmdcbitcdCAqIHRvIC5oYW5kbGVfZXhpdCgpIGNhbGxiYWNrLlxuK1x0ICovXG4rXHR0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0ICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aClcbit7XG4rXHRpbnQgcmV0O1xuK1xuKyNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuK1x0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4rXHRcdHJldCA9IHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4rXHRlbHNlXG4rI2VuZGlmXG4rXHRcdHJldCA9IHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4rXG4rXHQvKlxuK1x0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcbitcdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXG4rXHQgKi9cbitcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbitcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHR9XG4rXG4rXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFNcdFx0XHRcdFxcXG4gXHQoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8XHRcdFx0XFxcbiBcdCBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8XHRcdFx0XFxcbkBAIC05NDksNyArOTc4LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksXG4gXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXG4tXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXG4rXHQuaGFuZGxlX2V4aXQgPSB2dF9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjM2NGEyMzIyYTlmNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtOTIxLDM2ICs5MjEsNTQgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xuIH1cbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpXG4ge1xuLVx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4tXG4tXHRzd2l0Y2ggKHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuK1x0c3dpdGNoICh2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuIFx0Y2FzZSBURFhfU1VDQ0VTUzpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9WQ1BVOlxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REOlxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX05PTl9BQ0NFU1NJQkxFOlxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuK31cbitcbisvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4rI2RlZmluZSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTlx0XHRVMTZfTUFYXG4gXG4tXHRleGl0X3JlYXNvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4rXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb247XG4rXG4rXHQvKlxuK1x0ICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYIG1vZHVsZVxuK1x0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMgdW5kZWZpbmVkLFxuK1x0ICogYnV0IHRoaXMgaXMgTk9UIGEgZmFpbGVkIFZNLUVudGVyLlxuK1x0ICovXG4rXHRpZiAoIXRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSlcbitcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbitcdFx0XHQuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTixcbitcdFx0fTtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbitcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4rXG4rXHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDtcbitcdFx0ZWxzZVxuK1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6XG4gXHRcdC8qXG4gXHRcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cbiBcdFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuIFx0XHQgKi9cbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyArOTg1LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgPSB0ZGhfdnBfZW50ZXIoXHUwMDI2dGR4LVx1MDAzZXZwLCBcdTAwMjZ0ZHgtXHUwMDNldnBfZW50ZXJfYXJncyk7XG4gXG4tXHR2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHZ0LVx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcbiBcdHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xuQEAgLTk4MSw4ICs5OTksNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbitcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTA3MSw4ICsxMDg4LDIxIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxuIFx0ICogVERDQUxMcy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB2Q1BVIG5ldmVyIGVudGVyZWQgdGhlIGd1ZXN0LCBidXQgdGhpcyBsb29rcyBsaWtlIGFcbitcdFx0ICogaGFuZGxlZCBleGl0IHRvIHRoZSBjYWxsZXIuICBTeW50aGVzaXplIGFuIGludmFsaWQgZXhpdFxuK1x0XHQgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQncyBzdGFsZSB2YWx1ZSBpc24ndCBjb25zdW1lZFxuK1x0XHQgKiBhIHNlY29uZCB0aW1lLlxuK1x0XHQgKlxuK1x0XHQgKiBNYWtlIGl0IHN1cGVyIGNsZWFyIHRoYXQgYml0WzMxOjE2XSBpcyBjbGVhcmVkIHRvIDAgYW5kIG9ubHlcbitcdFx0ICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZFxuK1x0XHQgKiBpbnZhbGlkIGV4aXQgcmVhc29uLlxuK1x0XHQgKi9cbitcdFx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDA7XG4rXHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047XG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDtcbitcdH1cbiBcbiBcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXHUwMDI2IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpO1xuIFxuQEAgLTIxMjYsNiArMjE1NiwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdFx0ICogLSBJZiBpdCdzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gMTtcbitcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxuK1x0XHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXG4rXHRcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSkpO1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbitcdFx0cmV0dXJuIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0yMTQxLDcgKzIxNzYsNyBAQCB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbi1cdGlmICgqcmVhc29uICE9IC0xdSkge1xuK1x0aWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSkge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgKzMxODksMTcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4gXHR0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MpKTtcbiBcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBQSU5fQkFTRURfVk1fRVhFQ19DT05UUk9MLCBQSU5fQkFTRURfUE9TVEVEX0lOVFIpO1xuIFxuK1x0aWYgKGt2bV9ub3RpZnlfdm1leGl0X2VuYWJsZWQodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX05PVElGWV9WTV9FWElUSU5HKTtcbitcdFx0dGRfdm1jc193cml0ZTMyKHRkeCwgTk9USUZZX1dJTkRPVyxcbitcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4rXHR9XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbitcdFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXG4rXHRcdFx0XHQgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTtcbitcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uNDkwYmFhZTU2Y2YxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDIzICs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHQvKlxuLVx0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXG4tXHQgKiBWTS1FeGl0cy4gVW5jb25kaXRpb25hbGx5IHNldCB0aGUgZmxhZyBoZXJlIGFuZCBsZWF2ZSB0aGUgaGFuZGxpbmcgdG9cbi1cdCAqIHZteF9oYW5kbGVfZXhpdCgpLlxuLVx0ICovXG4tXHR0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuLVx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4tXG4tXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgKzYyNzcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbiBcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG4gXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuLVx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbi1cdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNjM3NSw3ICs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuIFx0W0VYSVRfUkVBU09OX1ZNRlVOQ11cdFx0ICAgICAgPSBoYW5kbGVfdm14X2luc3RydWN0aW9uLFxuIFx0W0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdXHQgICAgICA9IGhhbmRsZV9wcmVlbXB0aW9uX3RpbWVyLFxuIFx0W0VYSVRfUkVBU09OX0VOQ0xTXVx0XHQgICAgICA9IGhhbmRsZV9lbmNscyxcbi1cdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSBoYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuK1x0W0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQsXG4gXHRbRVhJVF9SRUFTT05fTk9USUZZXVx0XHQgICAgICA9IGhhbmRsZV9ub3RpZnksXG4gXHRbRVhJVF9SRUFTT05fU0VBTUNBTExdXHRcdCAgICAgID0gaGFuZGxlX3RkeF9pbnN0cnVjdGlvbixcbiBcdFtFWElUX1JFQVNPTl9URENBTExdXHRcdCAgICAgID0gaGFuZGxlX3RkeF9pbnN0cnVjdGlvbixcbkBAIC02NzAzLDcgKzY2ODEsNyBAQCB2b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogVGhlIGd1ZXN0IGhhcyBleGl0ZWQuICBTZWUgaWYgd2UgY2FuIGZpeCBpdCBvciBpZiB3ZSBuZWVkIHVzZXJzcGFjZVxuICAqIGFzc2lzdGFuY2UuXG4gICovXG4tc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbitpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbkBAIC02ODYyLDI0ICs2ODQwLDYgQEAgc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuLXtcbi1cdGludCByZXQgPSBfX3ZteF9oYW5kbGVfZXhpdCh2Y3B1LCBleGl0X2Zhc3RwYXRoKTtcbi1cbi1cdC8qXG4tXHQgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpc1xuLVx0ICogYSBidXMgbG9jayBpbiBndWVzdC5cbi1cdCAqL1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbi1cdFx0aWYgKHJldCBcdTAwM2UgMClcbi1cdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbi1cbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gdm9pZCB2bXhfdXBkYXRlX2NyOF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHByLCBpbnQgaXJyKVxuIHtcbiBcdGludCB0cHJfdGhyZXNob2xkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MDYuMDIxMDc5MTEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTQ4NTIxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0J3MgdG91Y2hpbmcgdGhlIEtWTSBWTVgvVERYIGV4aXQgaGFuZGxpbmcgY29kZSwgd2hpY2ggYWx3YXlzIG1ha2VzIG1lIHBheSBleHRyYSBhdHRlbnRpb24uIFJlZmFjdG9yaW5nIGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLCBhbG9uZyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fdnRfaGFuZGxlX25vdGlmeWAgYW5kIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIFREWCBleGl0IHJlYXNvbiBoYW5kbGluZy4uLiB0aGF0J3MgYSBkZWNlbnQgYW1vdW50IG9mIGNodXJuLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gU28sIGBfX3Z0X2hhbmRsZV9ub3RpZnlgIGlzIGJlaW5nIGV4dHJhY3RlZCBmcm9tIGBoYW5kbGVfbm90aWZ5YCBpbiBgdm14LmNgIGFuZCBpcyBub3cgaW4gYGNvbW1vbi5oYC4gQW5kIGl0J3Mgc2V0dGluZyBgdmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7YCBhbmQgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/IEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtgLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGB2Y3B1LVx1MDAzZXJ1bmAgaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0J3Mgc2hhcmVkISBBbGFybSBiZWxscyBhcmUgYWxyZWFkeSByaW5naW5nIGEgYml0LlxuXG5XZSdyZSB3cml0aW5nIHRvIGB2Y3B1LVx1MDAzZXJ1bmAsIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBOb3csIHRoaXMgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFnc2AgYXNzaWdubWVudOKApiBXaGF0IGFib3V0ICpvdGhlciogZmllbGRzIHdpdGhpbiBgdmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5YD8gQXJlIHdlIGluaXRpYWxpemluZyBldmVyeXRoaW5nIGNvcnJlY3RseT8gVGhhdCdzIHRoZSByZWFsIHF1ZXN0aW9uLiBQb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IFRoYXQncyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIEtNU0FOIGxvdmVzIHRvIGZpbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHN0cnVjdCBrdm1fcnVuYCBhbmQgdGhlIGBub3RpZnlgIGZpZWxkIGRlZmluaXRpb24sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjEyLjAzNTkzNDg2NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzI4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTQzPXN0cnVjdCBrdm1fZXhpdF9zbnBfcmVxX2NlcnRzIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTAtLypcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjExOiAqIHN0cnVjdCBrdm1fcnVuIGNhbiBiZSBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYXQgYW55IHRpbWUsIHNvIEtWTSBtdXN0IGJlXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTIxMi0gKiBjYXJlZnVsIHRvIGF2b2lkIFRPQ1RPVSBidWdzLiBJbiBvcmRlciB0byBwcm90ZWN0IEtWTSwgSElOVF9VTlNBRkVfSU5fS1ZNKClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjEzOiAqIHJlbmFtZXMgZmllbGRzIGluIHN0cnVjdCBrdm1fcnVuIGZyb20gXFx1MDAzY3N5bWJvbFxcdTAwM2UgdG8gXFx1MDAzY3N5bWJvbFxcdTAwM2VfX3Vuc2FmZSB3aGVuXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTIxNC0gKiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGVuc3VyaW5nIHRoYXQgYW55IHVzZSB3aXRoaW4gS1ZNIGlzIG9idmlvdXMgYW5kXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMjIzLS8qIGZvciBLVk1fUlVOLCByZXR1cm5lZCBieSBtbWFwKHZjcHVfZmQsIG9mZnNldD0wKSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoyMjQ6c3RydWN0IGt2bV9ydW4ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMjUtXFx0LyogaW4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MTIuMTQwNjY3ODkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTA1MTI3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBrdm1fcnVuYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIGBzdHJ1Y3Qga3ZtX3J1bmAuIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgS1ZNIHB1enpsZSwgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgZHVyaW5nIHRoZSBWTSBleGVjdXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgdXAgdGhlIGRlZmluaXRpb24uIEknbSBhZnRlciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgZXhhY3RseSB3aGF0J3Mgc2hhcmVkIHRocm91Z2ggdGhpcyBzdHJ1Y3R1cmUgYXQgYSBsb3cgbGV2ZWwuIEFyZSB3ZSB0YWxraW5nIHJlZ2lzdGVycywgbWVtb3J5IGFjY2VzcyBpbmZvLCBWTSBleGl0IHJlYXNvbnMsIGFuZCBzbyBmb3J0aD8gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgaXRzIG1lbWJlcnMsIHRoZWlyIHB1cnBvc2UsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gbWVjaGFuaXNtcy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNoYW5nZXMgaW4gbW9yZSByZWNlbnQga2VybmVsIHZlcnNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MTUuMjkxMTg2MTU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjI0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyNDpcXHRzdHJ1Y3Qga3ZtX3J1biB7XFxuIDIyNTpcXHRcXHQvKiBpbiAqL1xcbiAyMjY6XFx0XFx0X191OCByZXF1ZXN0X2ludGVycnVwdF93aW5kb3c7XFxuIDIyNzpcXHRcXHRfX3U4IEhJTlRfVU5TQUZFX0lOX0tWTShpbW1lZGlhdGVfZXhpdCk7XFxuIDIyODpcXHRcXHRfX3U4IHBhZGRpbmcxWzZdO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHQvKiBvdXQgKi9cXG4gMjMxOlxcdFxcdF9fdTMyIGV4aXRfcmVhc29uO1xcbiAyMzI6XFx0XFx0X191OCByZWFkeV9mb3JfaW50ZXJydXB0X2luamVjdGlvbjtcXG4gMjMzOlxcdFxcdF9fdTggaWZfZmxhZztcXG4gMjM0OlxcdFxcdF9fdTE2IGZsYWdzO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHQvKiBpbiAocHJlX2t2bV9ydW4pLCBvdXQgKHBvc3Rfa3ZtX3J1bikgKi9cXG4gMjM3OlxcdFxcdF9fdTY0IGNyODtcXG4gMjM4OlxcdFxcdF9fdTY0IGFwaWNfYmFzZTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0I2lmZGVmIF9fS1ZNX1MzOTBcXG4gMjQxOlxcdFxcdC8qIHRoZSBwcm9jZXNzb3Igc3RhdHVzIHdvcmQgZm9yIHMzOTAgKi9cXG4gMjQyOlxcdFxcdF9fdTY0IHBzd19tYXNrOyAvKiBwc3cgdXBwZXIgaGFsZiAqL1xcbiAyNDM6XFx0XFx0X191NjQgcHN3X2FkZHI7IC8qIHBzdyBsb3dlciBoYWxmICovXFxuIDI0NDpcXHQjZW5kaWZcXG4gMjQ1OlxcdFxcdHVuaW9uIHtcXG4gMjQ2OlxcdFxcdFxcdC8qIEtWTV9FWElUX1VOS05PV04gKi9cXG4gMjQ3OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDI0ODpcXHRcXHRcXHRcXHRfX3U2NCBoYXJkd2FyZV9leGl0X3JlYXNvbjtcXG4gMjQ5OlxcdFxcdFxcdH0gaHc7XFxuIDI1MDpcXHRcXHRcXHQvKiBLVk1fRVhJVF9GQUlMX0VOVFJZICovXFxuIDI1MTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNTI6XFx0XFx0XFx0XFx0X191NjQgaGFyZHdhcmVfZW50cnlfZmFpbHVyZV9yZWFzb247XFxuIDI1MzpcXHRcXHRcXHRcXHRfX3UzMiBjcHU7XFxuIDI1NDpcXHRcXHRcXHR9IGZhaWxfZW50cnk7XFxuIDI1NTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9FWENFUFRJT04gKi9cXG4gMjU2OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDI1NzpcXHRcXHRcXHRcXHRfX3UzMiBleGNlcHRpb247XFxuIDI1ODpcXHRcXHRcXHRcXHRfX3UzMiBlcnJvcl9jb2RlO1xcbiAyNTk6XFx0XFx0XFx0fSBleDtcXG4gMjYwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0lPICovXFxuIDI2MTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNjI6XFx0I2RlZmluZSBLVk1fRVhJVF9JT19JTiAgMFxcbiAyNjM6XFx0I2RlZmluZSBLVk1fRVhJVF9JT19PVVQgMVxcbiAyNjQ6XFx0XFx0XFx0XFx0X191OCBkaXJlY3Rpb247XFxuIDI2NTpcXHRcXHRcXHRcXHRfX3U4IHNpemU7IC8qIGJ5dGVzICovXFxuIDI2NjpcXHRcXHRcXHRcXHRfX3UxNiBwb3J0O1xcbiAyNjc6XFx0XFx0XFx0XFx0X191MzIgY291bnQ7XFxuIDI2ODpcXHRcXHRcXHRcXHRfX3U2NCBkYXRhX29mZnNldDsgLyogcmVsYXRpdmUgdG8ga3ZtX3J1biBzdGFydCAqL1xcbiAyNjk6XFx0XFx0XFx0fSBpbztcXG4gMjcwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0RFQlVHICovXFxuIDI3MTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNzI6XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggYXJjaDtcXG4gMjczOlxcdFxcdFxcdH0gZGVidWc7XFxuIDI3NDpcXHRcXHRcXHQvKiBLVk1fRVhJVF9NTUlPICovXFxuIDI3NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNzY6XFx0XFx0XFx0XFx0X191NjQgcGh5c19hZGRyO1xcbiAyNzc6XFx0XFx0XFx0XFx0X191OCAgZGF0YVs4XTtcXG4gMjc4OlxcdFxcdFxcdFxcdF9fdTMyIGxlbjtcXG4gMjc5OlxcdFxcdFxcdFxcdF9fdTggIGlzX3dyaXRlO1xcbiAyODA6XFx0XFx0XFx0fSBtbWlvO1xcbiAyODE6XFx0XFx0XFx0LyogS1ZNX0VYSVRfTE9PTkdBUkNIX0lPQ1NSICovXFxuIDI4MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyODM6XFx0XFx0XFx0XFx0X191NjQgcGh5c19hZGRyO1xcbiAyODQ6XFx0XFx0XFx0XFx0X191OCAgZGF0YVs4XTtcXG4gMjg1OlxcdFxcdFxcdFxcdF9fdTMyIGxlbjtcXG4gMjg2OlxcdFxcdFxcdFxcdF9fdTggIGlzX3dyaXRlO1xcbiAyODc6XFx0XFx0XFx0fSBpb2Nzcl9pbztcXG4gMjg4OlxcdFxcdFxcdC8qIEtWTV9FWElUX0hZUEVSQ0FMTCAqL1xcbiAyODk6XFx0XFx0XFx0c3RydWN0IHtcXG4gMjkwOlxcdFxcdFxcdFxcdF9fdTY0IG5yO1xcbiAyOTE6XFx0XFx0XFx0XFx0X191NjQgYXJnc1s2XTtcXG4gMjkyOlxcdFxcdFxcdFxcdF9fdTY0IHJldDtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0XFx0XFx0dW5pb24ge1xcbiAyOTU6XFx0I2lmbmRlZiBfX0tFUk5FTF9fXFxuIDI5NjpcXHRcXHRcXHRcXHRcXHRfX3UzMiBsb25nbW9kZTtcXG4gMjk3OlxcdCNlbmRpZlxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0X191NjQgZmxhZ3M7XFxuIDI5OTpcXHRcXHRcXHRcXHR9O1xcbiAzMDA6XFx0XFx0XFx0fSBoeXBlcmNhbGw7XFxuIDMwMTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9UUFJfQUNDRVNTICovXFxuIDMwMjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMDM6XFx0XFx0XFx0XFx0X191NjQgcmlwO1xcbiAzMDQ6XFx0XFx0XFx0XFx0X191MzIgaXNfd3JpdGU7XFxuIDMwNTpcXHRcXHRcXHRcXHRfX3UzMiBwYWQ7XFxuIDMwNjpcXHRcXHRcXHR9IHRwcl9hY2Nlc3M7XFxuIDMwNzpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TMzkwX1NJRUlDICovXFxuIDMwODpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMDk6XFx0XFx0XFx0XFx0X191OCBpY3B0Y29kZTtcXG4gMzEwOlxcdFxcdFxcdFxcdF9fdTE2IGlwYTtcXG4gMzExOlxcdFxcdFxcdFxcdF9fdTMyIGlwYjtcXG4gMzEyOlxcdFxcdFxcdH0gczM5MF9zaWVpYztcXG4gMzEzOlxcdFxcdFxcdC8qIEtWTV9FWElUX1MzOTBfUkVTRVQgKi9cXG4gMzE0OlxcdFxcdFxcdF9fdTY0IHMzOTBfcmVzZXRfZmxhZ3M7XFxuIDMxNTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TMzkwX1VDT05UUk9MICovXFxuIDMxNjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMTc6XFx0XFx0XFx0XFx0X191NjQgdHJhbnNfZXhjX2NvZGU7XFxuIDMxODpcXHRcXHRcXHRcXHRfX3UzMiBwZ21fY29kZTtcXG4gMzE5OlxcdFxcdFxcdH0gczM5MF91Y29udHJvbDtcXG4gMzIwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0RDUiAoZGVwcmVjYXRlZCkgKi9cXG4gMzIxOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDMyMjpcXHRcXHRcXHRcXHRfX3UzMiBkY3JuO1xcbiAzMjM6XFx0XFx0XFx0XFx0X191MzIgZGF0YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MTUuMjkxNDA3MTU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTMwNDYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBLVk0ncyBga3ZtX3J1bmAgU3RydWN0dXJlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZGlnIGludG8gdGhlIGBrdm1fcnVuYCBzdHJ1Y3R1cmUgYSBiaXQgbW9yZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgbm90aWZ5YCBmaWVsZCBpcyB1c2VkLiBXZSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGF0IHBhcnRpY3VsYXIgZWxlbWVudC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRvIHNvbWUgbW9yZSByZWFkaW5nIGluIHRoZSBjb2RlISBMZXQncyBzZWUgaG93IGBub3RpZnlgIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjE4LjI4NDQ1NjY3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjQ6XFx0XFx0XFx0XFx0X191OCAgaXNfd3JpdGU7XFxuIDMyNTpcXHRcXHRcXHR9IGRjcjtcXG4gMzI2OlxcdFxcdFxcdC8qIEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SICovXFxuIDMyNzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMjg6XFx0XFx0XFx0XFx0X191MzIgc3ViZXJyb3I7XFxuIDMyOTpcXHRcXHRcXHRcXHQvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0lOVEVSTkFMX0VSUk9SX0RBVEE6ICovXFxuIDMzMDpcXHRcXHRcXHRcXHRfX3UzMiBuZGF0YTtcXG4gMzMxOlxcdFxcdFxcdFxcdF9fdTY0IGRhdGFbMTZdO1xcbiAzMzI6XFx0XFx0XFx0fSBpbnRlcm5hbDtcXG4gMzMzOlxcdFxcdFxcdC8qXFxuIDMzNDpcXHRcXHRcXHQgKiBLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OXFxuIDMzNTpcXHRcXHRcXHQgKlxcbiAzMzY6XFx0XFx0XFx0ICogXFxcInN0cnVjdCBlbXVsYXRpb25fZmFpbHVyZVxcXCIgaXMgYW4gb3ZlcmxheSBvZiBcXFwic3RydWN0IGludGVybmFsXFxcIlxcbiAzMzc6XFx0XFx0XFx0ICogdGhhdCBpcyB1c2VkIGZvciB0aGUgS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTiBzdWItdHlwZSBvZlxcbiAzMzg6XFx0XFx0XFx0ICogS1ZNX0VYSVRfSU5URVJOQUxfRVJST1IuICBOb3RlLCB1bmxpa2Ugb3RoZXIgaW50ZXJuYWwgZXJyb3JcXG4gMzM5OlxcdFxcdFxcdCAqIHN1Yi10eXBlcywgdGhpcyBzdHJ1Y3QgaXMgQUJJISAgSXQgYWxzbyBuZWVkcyB0byBiZSBiYWNrd2FyZHNcXG4gMzQwOlxcdFxcdFxcdCAqIGNvbXBhdGlibGUgd2l0aCBcXFwic3RydWN0IGludGVybmFsXFxcIi4gIFRha2Ugc3BlY2lhbCBjYXJlIHRoYXRcXG4gMzQxOlxcdFxcdFxcdCAqIFxcXCJuZGF0YVxcXCIgaXMgY29ycmVjdCwgdGhhdCBuZXcgZmllbGRzIGFyZSBlbnVtZXJhdGVkIGluIFxcXCJmbGFnc1xcXCIsXFxuIDM0MjpcXHRcXHRcXHQgKiBhbmQgdGhhdCBlYWNoIGZsYWcgZW51bWVyYXRlcyBmaWVsZHMgdGhhdCBhcmUgNjQtYml0IGFsaWduZWRcXG4gMzQzOlxcdFxcdFxcdCAqIGFuZCBzaXplZCAoc28gdGhhdCBuZGF0YStpbnRlcm5hbC5kYXRhW10gaXMgdmFsaWQvYWNjdXJhdGUpLlxcbiAzNDQ6XFx0XFx0XFx0ICpcXG4gMzQ1OlxcdFxcdFxcdCAqIFNwYWNlIGJleW9uZCB0aGUgZGVmaW5lZCBmaWVsZHMgbWF5IGJlIHVzZWQgdG8gc3RvcmUgYXJiaXRyYXJ5XFxuIDM0NjpcXHRcXHRcXHQgKiBkZWJ1ZyBpbmZvcm1hdGlvbiByZWxhdGluZyB0byB0aGUgZW11bGF0aW9uIGZhaWx1cmUuIEl0IGlzXFxuIDM0NzpcXHRcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGluIFxcXCJuZGF0YVxcXCIgYnV0IHRoZSBmb3JtYXQgaXMgdW5zcGVjaWZpZWQgYW5kIGlzXFxuIDM0ODpcXHRcXHRcXHQgKiBub3QgcmVwcmVzZW50ZWQgaW4gXFxcImZsYWdzXFxcIi4gQW55IHN1Y2ggaW5mb3JtYXRpb24gaXMgKm5vdCogQUJJIVxcbiAzNDk6XFx0XFx0XFx0ICovXFxuIDM1MDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzNTE6XFx0XFx0XFx0XFx0X191MzIgc3ViZXJyb3I7XFxuIDM1MjpcXHRcXHRcXHRcXHRfX3UzMiBuZGF0YTtcXG4gMzUzOlxcdFxcdFxcdFxcdF9fdTY0IGZsYWdzO1xcbiAzNTQ6XFx0XFx0XFx0XFx0dW5pb24ge1xcbiAzNTU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHtcXG4gMzU2OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTggIGluc25fc2l6ZTtcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTggIGluc25fYnl0ZXNbMTVdO1xcbiAzNTg6XFx0XFx0XFx0XFx0XFx0fTtcXG4gMzU5OlxcdFxcdFxcdFxcdH07XFxuIDM2MDpcXHRcXHRcXHRcXHQvKiBBcmJpdHJhcnkgZGVidWcgZGF0YSBtYXkgZm9sbG93LiAqL1xcbiAzNjE6XFx0XFx0XFx0fSBlbXVsYXRpb25fZmFpbHVyZTtcXG4gMzYyOlxcdFxcdFxcdC8qIEtWTV9FWElUX09TSSAqL1xcbiAzNjM6XFx0XFx0XFx0c3RydWN0IHtcXG4gMzY0OlxcdFxcdFxcdFxcdF9fdTY0IGdwcnNbMzJdO1xcbiAzNjU6XFx0XFx0XFx0fSBvc2k7XFxuIDM2NjpcXHRcXHRcXHQvKiBLVk1fRVhJVF9QQVBSX0hDQUxMICovXFxuIDM2NzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzNjg6XFx0XFx0XFx0XFx0X191NjQgbnI7XFxuIDM2OTpcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDM3MDpcXHRcXHRcXHRcXHRfX3U2NCBhcmdzWzldO1xcbiAzNzE6XFx0XFx0XFx0fSBwYXByX2hjYWxsO1xcbiAzNzI6XFx0XFx0XFx0LyogS1ZNX0VYSVRfUzM5MF9UU0NIICovXFxuIDM3MzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzNzQ6XFx0XFx0XFx0XFx0X191MTYgc3ViY2hhbm5lbF9pZDtcXG4gMzc1OlxcdFxcdFxcdFxcdF9fdTE2IHN1YmNoYW5uZWxfbnI7XFxuIDM3NjpcXHRcXHRcXHRcXHRfX3UzMiBpb19pbnRfcGFybTtcXG4gMzc3OlxcdFxcdFxcdFxcdF9fdTMyIGlvX2ludF93b3JkO1xcbiAzNzg6XFx0XFx0XFx0XFx0X191MzIgaXBiO1xcbiAzNzk6XFx0XFx0XFx0XFx0X191OCBkZXF1ZXVlZDtcXG4gMzgwOlxcdFxcdFxcdH0gczM5MF90c2NoO1xcbiAzODE6XFx0XFx0XFx0LyogS1ZNX0VYSVRfRVBSICovXFxuIDM4MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzODM6XFx0XFx0XFx0XFx0X191MzIgZXByO1xcbiAzODQ6XFx0XFx0XFx0fSBlcHI7XFxuIDM4NTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TWVNURU1fRVZFTlQgKi9cXG4gMzg2OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDM4NzpcXHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfU0hVVERPV04gICAgICAgMVxcbiAzODg6XFx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1JFU0VUICAgICAgICAgIDJcXG4gMzg5OlxcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9DUkFTSCAgICAgICAgICAzXFxuIDM5MDpcXHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfV0FLRVVQICAgICAgICAgNFxcbiAzOTE6XFx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1NVU1BFTkQgICAgICAgIDVcXG4gMzkyOlxcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9TRVZfVEVSTSAgICAgICA2XFxuIDM5MzpcXHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfVERYX0ZBVEFMICAgICAgN1xcbiAzOTQ6XFx0XFx0XFx0XFx0X191MzIgdHlwZTtcXG4gMzk1OlxcdFxcdFxcdFxcdF9fdTMyIG5kYXRhO1xcbiAzOTY6XFx0XFx0XFx0XFx0dW5pb24ge1xcbiAzOTc6XFx0I2lmbmRlZiBfX0tFUk5FTF9fXFxuIDM5ODpcXHRcXHRcXHRcXHRcXHRfX3U2NCBmbGFncztcXG4gMzk5OlxcdCNlbmRpZlxcbiA0MDA6XFx0XFx0XFx0XFx0XFx0X191NjQgZGF0YVsxNl07XFxuIDQwMTpcXHRcXHRcXHRcXHR9O1xcbiA0MDI6XFx0XFx0XFx0fSBzeXN0ZW1fZXZlbnQ7XFxuIDQwMzpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TMzkwX1NUU0kgKi9cXG4gNDA0OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQwNTpcXHRcXHRcXHRcXHRfX3U2NCBhZGRyO1xcbiA0MDY6XFx0XFx0XFx0XFx0X191OCBhcjtcXG4gNDA3OlxcdFxcdFxcdFxcdF9fdTggcmVzZXJ2ZWQ7XFxuIDQwODpcXHRcXHRcXHRcXHRfX3U4IGZjO1xcbiA0MDk6XFx0XFx0XFx0XFx0X191OCBzZWwxO1xcbiA0MTA6XFx0XFx0XFx0XFx0X191MTYgc2VsMjtcXG4gNDExOlxcdFxcdFxcdH0gczM5MF9zdHNpO1xcbiA0MTI6XFx0XFx0XFx0LyogS1ZNX0VYSVRfSU9BUElDX0VPSSAqL1xcbiA0MTM6XFx0XFx0XFx0c3RydWN0IHtcXG4gNDE0OlxcdFxcdFxcdFxcdF9fdTggdmVjdG9yO1xcbiA0MTU6XFx0XFx0XFx0fSBlb2k7XFxuIDQxNjpcXHRcXHRcXHQvKiBLVk1fRVhJVF9IWVBFUlYgKi9cXG4gNDE3OlxcdFxcdFxcdHN0cnVjdCBrdm1faHlwZXJ2X2V4aXQgaHlwZXJ2O1xcbiA0MTg6XFx0XFx0XFx0LyogS1ZNX0VYSVRfQVJNX05JU1YgLyBLVk1fRVhJVF9BUk1fTERTVDY0QiAqL1xcbiA0MTk6XFx0XFx0XFx0c3RydWN0IHtcXG4gNDIwOlxcdFxcdFxcdFxcdF9fdTY0IGVzcl9pc3M7XFxuIDQyMTpcXHRcXHRcXHRcXHRfX3U2NCBmYXVsdF9pcGE7XFxuIDQyMjpcXHRcXHRcXHR9IGFybV9uaXN2O1xcbiA0MjM6XFx0XFx0XFx0LyogS1ZNX0VYSVRfWDg2X1JETVNSIC8gS1ZNX0VYSVRfWDg2X1dSTVNSICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjE4LjI4NDcwODkwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE2ODEyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIGdldCB0byBpdC5cblxuKioqXG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBBbnRpY2lwYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCAtIEknbSBzdXBwb3NlZCB0byBwcm9jZXNzIHRoaXMgdGV4dCBhbmQgcmVwcmVzZW50IGl0IGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGluIGZpcnN0LXBlcnNvbiwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGl0IGFuZCBmb3JtdWxhdGluZyBteSB1bmRlcnN0YW5kaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSByZWxhdGl2ZWx5IHF1aWNrIGFuZCBlZmZpY2llbnQgdGFzay4gSXQncyBhYm91dCBkaXN0aWxsaW5nIHRoZSBjb3JlIGlkZWFzIGFuZCBpbnRlcm5hbGl6aW5nIHRoZW0uIE5vdywgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LiBMZXQncyBzZWUgd2hhdCdzIG9uIHRoZSBwYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI2MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNDoyMy4yMDE1MjQzMTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI0OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQyNTpcXHRcXHRcXHRcXHRfX3U4IGVycm9yOyAvKiB1c2VyIC1cXHUwMDNlIGtlcm5lbCAqL1xcbiA0MjY6XFx0XFx0XFx0XFx0X191OCBwYWRbN107XFxuIDQyNzpcXHQjZGVmaW5lIEtWTV9NU1JfRVhJVF9SRUFTT05fSU5WQUxcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiA0Mjg6XFx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX1VOS05PV05cXHQoMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiA0Mjk6XFx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX0ZJTFRFUlxcdCgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuIDQzMDpcXHQjZGVmaW5lIEtWTV9NU1JfRVhJVF9SRUFTT05fVkFMSURfTUFTS1xcdChLVk1fTVNSX0VYSVRfUkVBU09OX0lOVkFMICAgfFxcdFxcXFxcXG4gNDMxOlxcdFxcdFxcdFxcdFxcdFxcdCBLVk1fTVNSX0VYSVRfUkVBU09OX1VOS05PV04gfFxcdFxcXFxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdCBLVk1fTVNSX0VYSVRfUkVBU09OX0ZJTFRFUilcXG4gNDMzOlxcdFxcdFxcdFxcdF9fdTMyIHJlYXNvbjsgLyoga2VybmVsIC1cXHUwMDNlIHVzZXIgKi9cXG4gNDM0OlxcdFxcdFxcdFxcdF9fdTMyIGluZGV4OyAvKiBrZXJuZWwgLVxcdTAwM2UgdXNlciAqL1xcbiA0MzU6XFx0XFx0XFx0XFx0X191NjQgZGF0YTsgLyoga2VybmVsIFxcdTAwM2MtXFx1MDAzZSB1c2VyICovXFxuIDQzNjpcXHRcXHRcXHR9IG1zcjtcXG4gNDM3OlxcdFxcdFxcdC8qIEtWTV9FWElUX1hFTiAqL1xcbiA0Mzg6XFx0XFx0XFx0c3RydWN0IGt2bV94ZW5fZXhpdCB4ZW47XFxuIDQzOTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9SSVNDVl9TQkkgKi9cXG4gNDQwOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ0MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGV4dGVuc2lvbl9pZDtcXG4gNDQyOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZnVuY3Rpb25faWQ7XFxuIDQ0MzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZ3NbNl07XFxuIDQ0NDpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJldFsyXTtcXG4gNDQ1OlxcdFxcdFxcdH0gcmlzY3Zfc2JpO1xcbiA0NDY6XFx0XFx0XFx0LyogS1ZNX0VYSVRfUklTQ1ZfQ1NSICovXFxuIDQ0NzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0NDg6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjc3JfbnVtO1xcbiA0NDk6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfdmFsdWU7XFxuIDQ1MDpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdyaXRlX21hc2s7XFxuIDQ1MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJldF92YWx1ZTtcXG4gNDUyOlxcdFxcdFxcdH0gcmlzY3ZfY3NyO1xcbiA0NTM6XFx0XFx0XFx0LyogS1ZNX0VYSVRfTk9USUZZICovXFxuIDQ1NDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0NTU6XFx0I2RlZmluZSBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuIDQ1NjpcXHRcXHRcXHRcXHRfX3UzMiBmbGFncztcXG4gNDU3OlxcdFxcdFxcdH0gbm90aWZ5O1xcbiA0NTg6XFx0XFx0XFx0LyogS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUICovXFxuIDQ1OTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0NjA6XFx0I2RlZmluZSBLVk1fTUVNT1JZX0VYSVRfRkxBR19QUklWQVRFXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMylcXG4gNDYxOlxcdFxcdFxcdFxcdF9fdTY0IGZsYWdzO1xcbiA0NjI6XFx0XFx0XFx0XFx0X191NjQgZ3BhO1xcbiA0NjM6XFx0XFx0XFx0XFx0X191NjQgc2l6ZTtcXG4gNDY0OlxcdFxcdFxcdH0gbWVtb3J5X2ZhdWx0O1xcbiA0NjU6XFx0XFx0XFx0LyogS1ZNX0VYSVRfVERYICovXFxuIDQ2NjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0Njc6XFx0XFx0XFx0XFx0X191NjQgZmxhZ3M7XFxuIDQ2ODpcXHRcXHRcXHRcXHRfX3U2NCBucjtcXG4gNDY5OlxcdFxcdFxcdFxcdHVuaW9uIHtcXG4gNDcwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ3MTpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDQ3MjpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCBkYXRhWzVdO1xcbiA0NzM6XFx0XFx0XFx0XFx0XFx0fSB1bmtub3duO1xcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHtcXG4gNDc1OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTY0IHJldDtcXG4gNDc2OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTY0IGdwYTtcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTY0IHNpemU7XFxuIDQ3ODpcXHRcXHRcXHRcXHRcXHR9IGdldF9xdW90ZTtcXG4gNDc5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ4MDpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDQ4MTpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCBsZWFmO1xcbiA0ODI6XFx0XFx0XFx0XFx0XFx0XFx0X191NjQgcjExLCByMTIsIHIxMywgcjE0O1xcbiA0ODM6XFx0XFx0XFx0XFx0XFx0fSBnZXRfdGR2bWNhbGxfaW5mbztcXG4gNDg0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ4NTpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDQ4NjpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCB2ZWN0b3I7XFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHR9IHNldHVwX2V2ZW50X25vdGlmeTtcXG4gNDg4OlxcdFxcdFxcdFxcdH07XFxuIDQ4OTpcXHRcXHRcXHR9IHRkeDtcXG4gNDkwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0FSTV9TRUEgKi9cXG4gNDkxOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ5MjpcXHQjZGVmaW5lIEtWTV9FWElUX0FSTV9TRUFfRkxBR19HUEFfVkFMSURcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbiA0OTM6XFx0XFx0XFx0XFx0X191NjQgZmxhZ3M7XFxuIDQ5NDpcXHRcXHRcXHRcXHRfX3U2NCBlc3I7XFxuIDQ5NTpcXHRcXHRcXHRcXHRfX3U2NCBndmE7XFxuIDQ5NjpcXHRcXHRcXHRcXHRfX3U2NCBncGE7XFxuIDQ5NzpcXHRcXHRcXHR9IGFybV9zZWE7XFxuIDQ5ODpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTICovXFxuIDQ5OTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2V4aXRfc25wX3JlcV9jZXJ0cyBzbnBfcmVxX2NlcnRzO1xcbiA1MDA6XFx0XFx0XFx0LyogRml4IHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gKi9cXG4gNTAxOlxcdFxcdFxcdGNoYXIgcGFkZGluZ1syNTZdO1xcbiA1MDI6XFx0XFx0fTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0LyogMjA0OCBpcyB0aGUgc2l6ZSBvZiB0aGUgY2hhciBhcnJheSB1c2VkIHRvIGJvdW5kL3BhZCB0aGUgc2l6ZVxcbiA1MDU6XFx0XFx0ICogb2YgdGhlIHVuaW9uIHRoYXQgaG9sZHMgc3luYyByZWdzLlxcbiA1MDY6XFx0XFx0ICovXFxuIDUwNzpcXHRcXHQjZGVmaW5lIFNZTkNfUkVHU19TSVpFX0JZVEVTIDIwNDhcXG4gNTA4OlxcdFxcdC8qXFxuIDUwOTpcXHRcXHQgKiBzaGFyZWQgcmVnaXN0ZXJzIGJldHdlZW4ga3ZtIGFuZCB1c2Vyc3BhY2UuXFxuIDUxMDpcXHRcXHQgKiBrdm1fdmFsaWRfcmVncyBzcGVjaWZpZXMgdGhlIHJlZ2lzdGVyIGNsYXNzZXMgc2V0IGJ5IHRoZSBob3N0XFxuIDUxMTpcXHRcXHQgKiBrdm1fZGlydHlfcmVncyBzcGVjaWZpZWQgdGhlIHJlZ2lzdGVyIGNsYXNzZXMgZGlydGllZCBieSB1c2Vyc3BhY2VcXG4gNTEyOlxcdFxcdCAqIHN0cnVjdCBrdm1fc3luY19yZWdzIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYywgYXMgd2VsbCBhcyB0aGVcXG4gNTEzOlxcdFxcdCAqIGJpdHMgZm9yIGt2bV92YWxpZF9yZWdzIGFuZCBrdm1fZGlydHlfcmVnc1xcbiA1MTQ6XFx0XFx0ICovXFxuIDUxNTpcXHRcXHRfX3U2NCBrdm1fdmFsaWRfcmVncztcXG4gNTE2OlxcdFxcdF9fdTY0IGt2bV9kaXJ0eV9yZWdzO1xcbiA1MTc6XFx0XFx0dW5pb24ge1xcbiA1MTg6XFx0XFx0XFx0c3RydWN0IGt2bV9zeW5jX3JlZ3MgcmVncztcXG4gNTE5OlxcdFxcdFxcdGNoYXIgcGFkZGluZ1tTWU5DX1JFR1NfU0laRV9CWVRFU107XFxuIDUyMDpcXHRcXHR9IHM7XFxuIDUyMTpcXHR9O1xcbiA1MjI6XFx0XFxuIDUyMzpcXHQvKiBmb3IgS1ZNX1JFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIC8gS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MjMuMjAxNzgyMzcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMzE1Njk0MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBURFgvVk1YIFJlZmFjdG9yaW5nIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGxhcmdlbHkgYWJvdXQgY29kZSByZW9yZ2FuaXphdGlvbiwgd2l0aCBhIGZvY3VzIG9uIHNoYXJlZCBsb2dpYyBiZXR3ZWVuIFZNWCBhbmQgVERYLiBJIHNlZSBzZXZlcmFsIGZ1bmN0aW9ucyBiZWluZyBleHRyYWN0ZWQgb3IgbW92ZWQgYXJvdW5kOiBgX192dF9oYW5kbGVfbm90aWZ5YCwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAsIGFuZCBgdnRfaGFuZGxlX2V4aXRgLiBUaGVzZSBhcHBlYXIgdG8gYmUgcmVmYWN0b3Jpbmcgc3RlcHMsIG1ha2luZyB0aGUgY29kZSBtb3JlIG1vZHVsYXIgYW5kIG1haW50YWluYWJsZSwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHN1cHBvcnRpbmcgYm90aCBWTVggYW5kIFREWCBlbnZpcm9ubWVudHMuXG5cblJlZ2FyZGluZyB0aGUgYG5vdGlmeWAgc3RydWN0IHdpdGhpbiBga3ZtX3J1bmAsIGl0IHNlZW1zIHVudG91Y2hlZCwgYW5kIGp1c3QgdXNlcyBmbGFncyB3aGljaCByZW1haW4gdGhlIHNhbWUuIFRoZSBgX192dF9oYW5kbGVfbm90aWZ5YCBmdW5jdGlvbiBpcyBhIGRpcmVjdCBwb3J0IGZyb20gYHZteC5jYCwgd2hpY2ggbWFrZXMgdGhpbmdzIG11Y2ggbW9yZSBjbGVhci5cblxuVGhlIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBzaW1pbGFybHkgbW92ZXMgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgc2V0dGluZyB0aGUgYGJ1c19sb2NrX2RldGVjdGVkYCBmbGFnLCBmcm9tIGB2bXguY2AuIFRoaXMgaXMgYW5vdGhlciBleGFtcGxlIG9mIGNvZGUgY29uc29saWRhdGlvbiwgbWFraW5nIHRoZSBjb2RlIGxlc3MgY29tcGxleCBhbmQgZWFzaWVyIHRvIGZvbGxvdywgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGdlbmVyaWMgYHZ0X2hhbmRsZV9leGl0YC5cblxuVGhlIGNoYW5nZSBpbiBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgaXMgbW9yZSBpbnRlcmVzdGluZy4gVGhlIHJldHVybiB0eXBlIGNoYW5nZWQgZnJvbSBgdTMyYCB0byBhIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gLiBUaGlzIGFwcGVhcnMgdG8gYmUgZm9yIGV4cHJlc3NpbmcgYW4gXCJpbnZhbGlkXCIgZXhpdCByZWFzb24gaW4gVERYIHdoZW4gdGhlIHZDUFUgZGlkIG5vdCBlbnRlciB0aGUgZ3Vlc3QuIFN5bnRoZXNpemluZyB0aGlzIGludmFsaWQgZXhpdCByZWFzb24gaXMgdGhlIGNydWNpYWwgcGFydC4gSXQncyBub3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrKiB0byB1c2VyIHNwYWNlLCBidXQgcmF0aGVyIGEgcG90ZW50aWFsIGxvZ2ljIGVycm9yOiB1c2luZyBzdGFsZSwgcG90ZW50aWFsbHkgZ2FyYmFnZSwgZGF0YSBmcm9tIGEgcHJldmlvdXMgZXhpdC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgcHJldmVudHMgdGhlIHVzZSBvZiBzdGFsZSBkYXRhIGJ5IHNldHRpbmcgYHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwOyB2dC1cdTAwM2VleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO2AuXG5cblRoZSBjaGVja3Mgb24gYHRkeF9nZXRfZXhpdF9pbmZvYCBhbHNvIHVzZSB0aGF0IGB0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWRgIGZvciB2YWxpZGl0eS5cblxuRmluYWxseSwgdGhlIGFkZGl0aW9ucyBpbiBgdGR4X3ZjcHVfaW5pdGAgZW5hYmxpbmcgdGhlIFZNQ1MgY29udHJvbHMgZm9yIFREWCBhcmUgdHlwaWNhbCBvZiBlbmFibGluZyBURFggc3BlY2lmaWMgZmVhdHVyZXMuIFRoZSBgdnRfaGFuZGxlX2V4aXRgIHJlZmFjdG9yaW5nIHNoYXJlcyB0aGUgbG9naWMgYmV0d2VlbiBWTVggYW5kIFREWCB3aGVuIGEgYnVzIGxvY2sgaXMgZGV0ZWN0ZWQuXG5cbkdpdmVuIGFsbCB0aGlzLCBJIHNlZSBubyBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGUgXCJzdGFsZSBkYXRhXCIgaXNzdWUgaXMgaGFuZGxlZCBieSAqc3ludGhlc2l6aW5nKiBhbiBpbnZhbGlkIGV4aXQgcmVhc29uLCBjbGVhcmluZyBvdXQgdGhlIGJpdHMsIGVmZmVjdGl2ZWx5IHByZXZlbnRpbmcgYSBzdGFsZSB2YWx1ZSBmcm9tIGJlaW5nIHJlYWQgYW5kIGFjdGVkIHVwb24uIFRodXMsIGl0J3MgYSBidWcgKmZpeCogbm90IGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gZXZpZGVuY2UgaGVyZSB0byBzdWdnZXN0IHRoYXQgS01TQU4gd291bGQgYmUgcmVxdWlyZWQuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZSBwYXRjaCdzIGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgdGhhdCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIHVuaW9uIGlzIGNsZWFyZWQgaW4gdGhlIHJpZ2h0IHBsYWNlcywgYW5kIHRoZSBwYXRjaCB3b3JrcyB0byBhdm9pZCBhbnkgcG90ZW50aWFsIHN0YWxlLWRhdGEgaGF6YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6NDYuNTE3NDc5Nzg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2NTU5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5pb24gdm14X2V4aXRfcmVhc29uIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTAtXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTp1bmlvbiB2bXhfZXhpdF9yZWFzb24ge1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTItXFx0c3RydWN0IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6NDYuNjE4MTQyMTg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTc2NDAyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTVggRXhpdCBSZWFzb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAuIEkga25vdyBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2h5IGEgdmlydHVhbCBtYWNoaW5lIGlzIGV4aXRpbmcgdG8gdGhlIGhvc3QsIHRoZSBcIlZNIGV4aXRcIiBldmVudC4gSXQncyB0aGUgbHluY2hwaW4gZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemluZyBLVk0gcGVyZm9ybWFuY2Ugb24geDg2LCBpc24ndCBpdD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoaWNoIHNwZWNpZmljIHJlYXNvbiBjb2RlcyBtYXAgdG8gd2hhdCBldmVudHMuIEkga25vdyBpdCdzIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLCBzbyBsZXQncyBuYXZpZ2F0ZSB0aGVyZS4gSSBleHBlY3QgdGhhdCBJJ2xsIGZpbmQgYSB1bmlvbiBzdHJ1Y3R1cmUgb2Ygc29tZSBzb3J0LiBNb3JlIHRoYW4gbGlrZWx5IGl0J3MgYSBiaXQgZmllbGQuIEknbSBnb2luZyB0byB3YW50IHRvIGNvbmZpcm0gaXRzIHN0cnVjdHVyZSBxdWlja2x5LCBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jaW5nIGl0IHdpdGggdGhlIEludGVsIFNETSB0byBwaW5wb2ludCBhbnkgZWRnZS1jYXNlIGJlaGF2aW9yIEkgbWlnaHQgaGF2ZSBtaXNzZWQsIG9yIHRvIGNhdGNoIHJlY2VudCB1cGRhdGVzLiBUaW1lIHRvIGp1bXAgaW4gYW5kIHJlZnJlc2ggbXkgYnJhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6NTEuNTc1Nzg1NzE1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDExOlxcdHVuaW9uIHZteF9leGl0X3JlYXNvbiB7XFxuICAxMjpcXHRcXHRzdHJ1Y3Qge1xcbiAgMTM6XFx0XFx0XFx0dTMyXFx0YmFzaWNcXHRcXHRcXHQ6IDE2O1xcbiAgMTQ6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQxNlxcdFxcdDogMTtcXG4gIDE1OlxcdFxcdFxcdHUzMlxcdHJlc2VydmVkMTdcXHRcXHQ6IDE7XFxuICAxNjpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDE4XFx0XFx0OiAxO1xcbiAgMTc6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQxOVxcdFxcdDogMTtcXG4gIDE4OlxcdFxcdFxcdHUzMlxcdHJlc2VydmVkMjBcXHRcXHQ6IDE7XFxuICAxOTpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDIxXFx0XFx0OiAxO1xcbiAgMjA6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQyMlxcdFxcdDogMTtcXG4gIDIxOlxcdFxcdFxcdHUzMlxcdHJlc2VydmVkMjNcXHRcXHQ6IDE7XFxuICAyMjpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDI0XFx0XFx0OiAxO1xcbiAgMjM6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQyNVxcdFxcdDogMTtcXG4gIDI0OlxcdFxcdFxcdHUzMlxcdGJ1c19sb2NrX2RldGVjdGVkXFx0OiAxO1xcbiAgMjU6XFx0XFx0XFx0dTMyXFx0ZW5jbGF2ZV9tb2RlXFx0XFx0OiAxO1xcbiAgMjY6XFx0XFx0XFx0dTMyXFx0c21pX3BlbmRpbmdfbXRmXFx0XFx0OiAxO1xcbiAgMjc6XFx0XFx0XFx0dTMyXFx0c21pX2Zyb21fdm14X3Jvb3RcXHQ6IDE7XFxuICAyODpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDMwXFx0XFx0OiAxO1xcbiAgMjk6XFx0XFx0XFx0dTMyXFx0ZmFpbGVkX3ZtZW50cnlcXHRcXHQ6IDE7XFxuICAzMDpcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNDo1MS41NzU5MTc0MDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM2NTgyMTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0J3MgYSAzMi1iaXQgdW5pb24sIGB2bXhfZXhpdF9yZWFzb25gLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGVzZSwgYW5kIHRoaXMgcGFydGljdWxhciBvbmUgaXMgc3RydWN0dXJlZCB3aXRoIGEgYml0ZmllbGQsIGAuYmFzaWNgLCBhbmQgYSBjb21wbGV0ZSBgdTMyYCByZXByZXNlbnRhdGlvbiwgYC5mdWxsYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uLiBXaGVuIEkgc2VlIGByZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgeyAuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTiwgfTtgLCBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCwgYWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBgLmJhc2ljYCBnZXRzIGFzc2lnbmVkIGl0cyB2YWx1ZSwgYW5kIHRoZSByZXN0IG9mIHRoZSB1bmlvbiBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQsIGFuZCBJIGRvbid0IGZvcmVzZWUgYW4gaXNzdWUgaGVyZS5cblxuVGhlbiwgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgdGR4X3ZjcHVfcnVuYCwgdGhlIGV4cGxpY2l0IHplcm9pbmcgb2YgYC5mdWxsYCAqYmVmb3JlKiBhc3NpZ25pbmcgYC5iYXNpY2AgaXMgYSB2ZXJ5IGdvb2QgcHJhY3RpY2UuIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMDtgIGNsZWFycyBhbGwgYml0cywgbWFraW5nIHN1cmUgdGhhdCBpdCdzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGVuLCBzZXR0aW5nIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO2AgbWFrZXMgaXQgZGV0ZXJtaW5pc3RpYy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGhlcmUuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbi5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhdGNoIGlzIGFib3V0IHJlZmFjdG9yaW5nIGNvZGUgdG8gc2hhcmUgbG9naWMgYmV0d2VlbiBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBhbmQgYWxzbyByZXNvbHZlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzdGFsZSBleGl0IHJlYXNvbnMgbWlnaHQgYmUgdXNlZC4gSXQncyBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgYnVnIGZpeGVzIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgdGhlIGNvZGUgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB2bXhfZXhpdF9yZWFzb25gIHVuaW9uLCBlbnN1cmluZyB0aGF0IGl0J3MgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuQXMgYW4gZXhwZXJ0LCBJJ20gY29tZm9ydGFibGUgc3RhdGluZyB0aGF0IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gSSBkb24ndCBzZWUgYW55IG5lZWQgdG8ga2VlcCBLTVNBTiBlbmFibGVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guXG5UaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEwOCwiT3V0cHV0VG9rZW5zIjoyNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNTowMC45NDE3NDExMDlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZyBjb2RlIHRvIHNoYXJlIGNvbW1vbiBsb2dpYyBmb3Igbm90aWZ5IGFuZCBidXMgbG9jayBWTS1leGl0cy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgc3ludGhlc2l6ZWQgaW52YWxpZCBleGl0IHJlYXNvbiBmb3IgVERYIHRvIHByZXZlbnQgdGhlIGNvbnN1bXB0aW9uIG9mIHN0YWxlIGV4aXQgcmVhc29ucyBmcm9tIHByZXZpb3VzIHJ1bnMuIFxcblxcbjEuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHZjcHUtXFx1MDAzZXJ1bmAgKHdoaWNoIGlzIG1hcHBlZCB0byB1c2VyIHNwYWNlKSBhcmUgbGltaXRlZCB0byBzZXR0aW5nIHNwZWNpZmljIGZpZWxkcyAoYGV4aXRfcmVhc29uYCwgYG5vdGlmeS5mbGFnc2AsIGBmbGFnc2ApIHdpdGggZGV0ZXJtaW5pc3RpYyB2YWx1ZXMsIGlkZW50aWNhbCB0byB0aGUgcHJlLWV4aXN0aW5nIFZNWCBsb2dpYy5cXG4yLiBUaGUgc3ludGhlc2l6ZWQgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVyb2VzIHRoZSB1bmlvbiAoZS5nLiwgYHZ0LVxcdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMGApIGJlZm9yZSBzZXR0aW5nIHRoZSBiYXNpYyBleGl0IHJlYXNvbiwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBiaXRzIGZyb20gYmVpbmcgdXNlZC5cXG4zLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBjb250cm9sIGZsb3csIGNvZGUgZGVkdXBsaWNhdGlvbiwgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyAoc3RhbGUgZXhpdCByZWFzb24pLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cXG5cXG5TdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nIGNvZGUgdG8gc2hhcmUgY29tbW9uIGxvZ2ljIGZvciBub3RpZnkgYW5kIGJ1cyBsb2NrIFZNLWV4aXRzLiBJdCBhbHNvIGludHJvZHVjZXMgYSBzeW50aGVzaXplZCBpbnZhbGlkIGV4aXQgcmVhc29uIGZvciBURFggdG8gcHJldmVudCB0aGUgY29uc3VtcHRpb24gb2Ygc3RhbGUgZXhpdCByZWFzb25zIGZyb20gcHJldmlvdXMgcnVucy4gXFxuXFxuMS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgdmNwdS1cXHUwMDNlcnVuYCAod2hpY2ggaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UpIGFyZSBsaW1pdGVkIHRvIHNldHRpbmcgc3BlY2lmaWMgZmllbGRzIChgZXhpdF9yZWFzb25gLCBgbm90aWZ5LmZsYWdzYCwgYGZsYWdzYCkgd2l0aCBkZXRlcm1pbmlzdGljIHZhbHVlcywgaWRlbnRpY2FsIHRvIHRoZSBwcmUtZXhpc3RpbmcgVk1YIGxvZ2ljLlxcbjIuIFRoZSBzeW50aGVzaXplZCBgdW5pb24gdm14X2V4aXRfcmVhc29uYCBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNvZGUgZXhwbGljaXRseSB6ZXJvZXMgdGhlIHVuaW9uIChlLmcuLCBgdnQtXFx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwYCkgYmVmb3JlIHNldHRpbmcgdGhlIGJhc2ljIGV4aXQgcmVhc29uLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIGJpdHMgZnJvbSBiZWluZyB1c2VkLlxcbjMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgZml4aW5nIGEgbG9naWMgYnVnIChzdGFsZSBleGl0IHJlYXNvbikuIFRoZXkgZG8gbm90IGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxcblxcblN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 09:59:16 +0000 UTC FinishedAt: 2026-08-19 10:05:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_INTEL", "KVM_INTEL_TDX", "INTEL_TDX_HOST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM_INTEL", "KVM_INTEL_TDX", "INTEL_TDX_HOST" ], "series_id": "52bf6549-c6cd-4daa-b308-8cafdaec1407" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vmx_handle_exit", "tdx_handle_exit", "vt_handle_bus_lock_vmexit" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nIGNvZGUgdG8gc2hhcmUgY29tbW9uIGxvZ2ljIGZvciBub3RpZnkgYW5kIGJ1cyBsb2NrIFZNLWV4aXRzLiBJdCBhbHNvIGludHJvZHVjZXMgYSBzeW50aGVzaXplZCBpbnZhbGlkIGV4aXQgcmVhc29uIGZvciBURFggdG8gcHJldmVudCB0aGUgY29uc3VtcHRpb24gb2Ygc3RhbGUgZXhpdCByZWFzb25zIGZyb20gcHJldmlvdXMgcnVucy4gXG5cbjEuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHZjcHUtXHUwMDNlcnVuYCAod2hpY2ggaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UpIGFyZSBsaW1pdGVkIHRvIHNldHRpbmcgc3BlY2lmaWMgZmllbGRzIChgZXhpdF9yZWFzb25gLCBgbm90aWZ5LmZsYWdzYCwgYGZsYWdzYCkgd2l0aCBkZXRlcm1pbmlzdGljIHZhbHVlcywgaWRlbnRpY2FsIHRvIHRoZSBwcmUtZXhpc3RpbmcgVk1YIGxvZ2ljLlxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMGApIGJlZm9yZSBzZXR0aW5nIHRoZSBiYXNpYyBleGl0IHJlYXNvbiwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBiaXRzIGZyb20gYmVpbmcgdXNlZC5cbjMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgZml4aW5nIGEgbG9naWMgYnVnIChzdGFsZSBleGl0IHJlYXNvbikuIFRoZXkgZG8gbm90IGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5TdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjhkYWFkMjQwOWQwNTkyZGNhOGMyZWVhYjcyMzBkZDgzYzhjZTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6MDI6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbmluZGV4IDA4MDA1Njc2NzAyYzIuLmJiZWVjMTk3YTUwN2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O21tdS5oXCYjMzQ7XG4gXG5AQCAtMTgzLDYgJiM0MzsxODQsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcbiYjNDM7e1xuJiM0MztcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuJiM0MztcbiYjNDM7XHQmIzQzOyYjNDM7dmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG4mIzQzO1xuJiM0MztcdGlmICh2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXHUwMDI2IEtWTV9YODZfTk9USUZZX1ZNRVhJVF9VU0VSIHx8XG4mIzQzO1x0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuJiM0MztcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2Vub3RpZnkuZmxhZ3MgPSBjb250ZXh0X2ludmFsaWQgP1xuJiM0MztcdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuJiM0MztpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTE1NCwxNSAmIzQzOzE1NCw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdHJldHVybiB2bXhfdmNwdV9ydW4odmNwdSwgcnVuX2ZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tXHRcdFx0ICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aClcbi17XG4tXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcbi1cdFx0cmV0dXJuIHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4tXG4tXHRyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbi19XG4tXG4gc3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpIHtcbkBAIC04NzYsNiAmIzQzOzg2Nyw0NCBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuJiM0MztpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuJiM0MztcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZ1xuJiM0MztcdCAqIHRvIC5oYW5kbGVfZXhpdCgpIGNhbGxiYWNrLlxuJiM0MztcdCAqL1xuJiM0MztcdHRvX3Z0KHZjcHUpLVx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzQzO1x0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG4mIzQzO1x0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4mIzQzO1x0XHRyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuJiM0MztcdGVsc2VcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHRyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4mIzQzO1x0ICogYSBidXMgbG9jayBpbiBndWVzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAjZGVmaW5lIFZNWF9SRVFVSVJFRF9BUElDVl9JTkhJQklUU1x0XHRcdFx0XFxcbiBcdChCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fRElTQUJMRUQpIHxcdFx0XHRcXFxuIFx0IEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHxcdFx0XHRcXFxuQEAgLTk0OSw3ICYjNDM7OTc4LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksXG4gXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXG4tXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXG4mIzQzO1x0LmhhbmRsZV9leGl0ID0gdnRfaGFuZGxlX2V4aXQsXG4gXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuIFx0LnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTkyMSwzNiAmIzQzOzkyMSw1NCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdHJldHVybiBFWElUX1JFQVNPTl9URENBTEw7XG4gfVxuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpXG4ge1xuLVx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4tXG4tXHRzd2l0Y2ggKHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuJiM0MztcdHN3aXRjaCAodnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG4gXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URDpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9OT05fQUNDRVNTSUJMRTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gLTF1O1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4mIzQzOyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT05cdFx0VTE2X01BWFxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuaW9uIHZteF9leGl0X3JlYXNvbiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuJiM0MztcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXR1cm4gdGhlIHN5bnRoZXNpemVkIGludmFsaWQgRXhpdCBSZWFzb24sIGFzIHRoZSBURFggbW9kdWxlXG4mIzQzO1x0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMgdW5kZWZpbmVkLFxuJiM0MztcdCAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSlcbiYjNDM7XHRcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XG4mIzQzO1x0XHRcdC5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLFxuJiM0MztcdFx0fTtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbiYjNDM7XHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxuIFx0XHQvKlxuIFx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG4gXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAtMXU7XG4mIzQzO1x0XHRleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4mIzQzO1x0dnQtXHUwMDNlZXhpdF9yZWFzb24gPSB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xuIFxuIFx0dnQtXHUwMDNlZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmN4O1xuIFx0dGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yZHg7XG5AQCAtOTgxLDggJiM0Mzs5OTksNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbiYjNDM7XHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCAmIzQzOzEwODgsMjEgQEAgZmFzdHBhdGhfdCB0ZHhfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0ICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kXG4gXHQgKiBURENBTExzLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS1cdTAwM2Vrdm0pLVx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHZDUFUgbmV2ZXIgZW50ZXJlZCB0aGUgZ3Vlc3QsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYVxuJiM0MztcdFx0ICogaGFuZGxlZCBleGl0IHRvIHRoZSBjYWxsZXIuICBTeW50aGVzaXplIGFuIGludmFsaWQgZXhpdFxuJiM0MztcdFx0ICogcmVhc29uIHNvIHRoZSBwcmV2aW91cyBleGl0JiMzOTtzIHN0YWxlIHZhbHVlIGlzbiYjMzk7dCBjb25zdW1lZFxuJiM0MztcdFx0ICogYSBzZWNvbmQgdGltZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBNYWtlIGl0IHN1cGVyIGNsZWFyIHRoYXQgYml0WzMxOjE2XSBpcyBjbGVhcmVkIHRvIDAgYW5kIG9ubHlcbiYjNDM7XHRcdCAqIGJhc2ljIGV4aXQgcmVhc29uIChiaXRbMTU6MF0pIGlzIHNldCB0byB0aGUgc3ludGhlc2l6ZWRcbiYjNDM7XHRcdCAqIGludmFsaWQgZXhpdCByZWFzb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwO1xuJiM0MztcdFx0dnQtXHUwMDNlZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcbiBcdFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xuJiM0MztcdH1cbiBcbiBcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXHUwMDI2IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpO1xuIFxuQEAgLTIxMjYsNiAmIzQzOzIxNTYsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRcdCAqIC0gSWYgaXQmIzM5O3Mgbm90IGFuIE1TTUksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS5cbiBcdFx0ICovXG4gXHRcdHJldHVybiAxO1xuJiM0MztcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxuJiM0MztcdFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xuJiM0MztcdFx0cmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7XG4mIzQzO1x0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbiYjNDM7XHRcdHJldHVybiB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjE0MSw3ICYjNDM7MjE3Niw3IEBAIHZvaWQgdGR4X2dldF9leGl0X2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKnJlYXNvbixcbiBcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuIFxuIFx0KnJlYXNvbiA9IHRkeC1cdTAwM2V2dC5leGl0X3JlYXNvbi5mdWxsO1xuLVx0aWYgKCpyZWFzb24gIT0gLTF1KSB7XG4mIzQzO1x0aWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSkge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgJiM0MzszMTg5LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbiYjNDM7XHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVx1MDAzZWt2bSkpIHtcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4mIzQzO1x0XHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxuJiM0MztcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbiYjNDM7XHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuJiM0MztcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pO1xuJiM0MztcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uNDkwYmFhZTU2Y2YxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDIzICYjNDM7NjI2NSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqL1xuIFxuLXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0Lypcbi1cdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuLVx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvXG4tXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cbi1cdCAqL1xuLVx0dG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSB0cnVlO1xuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbi1cdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuLVxuLVx0JiM0MzsmIzQzO3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgJiM0Mzs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sXG4gXHRcdFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xuIFxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbi1cdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4tXHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdHJldHVybiAxO1xuJiM0MztcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgZXhpdF9xdWFsKTtcbiB9XG4gXG4gc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC02Mzc1LDcgJiM0Mzs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuIFx0W0VYSVRfUkVBU09OX1ZNRlVOQ11cdFx0ICAgICAgPSBoYW5kbGVfdm14X2luc3RydWN0aW9uLFxuIFx0W0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdXHQgICAgICA9IGhhbmRsZV9wcmVlbXB0aW9uX3RpbWVyLFxuIFx0W0VYSVRfUkVBU09OX0VOQ0xTXVx0XHQgICAgICA9IGhhbmRsZV9lbmNscyxcbi1cdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSBoYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuJiM0MztcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuIFx0W0VYSVRfUkVBU09OX05PVElGWV1cdFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxuIFx0W0VYSVRfUkVBU09OX1NFQU1DQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG4gXHRbRVhJVF9SRUFTT05fVERDQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG5AQCAtNjcwMyw3ICYjNDM7NjY4MSw3IEBAIHZvaWQgZHVtcF92bWNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiAgKiBUaGUgZ3Vlc3QgaGFzIGV4aXRlZC4gIFNlZSBpZiB3ZSBjYW4gZml4IGl0IG9yIGlmIHdlIG5lZWQgdXNlcnNwYWNlXG4gICogYXNzaXN0YW5jZS5cbiAgKi9cbi1zdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuJiM0MztpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbkBAIC02ODYyLDI0ICYjNDM7Njg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbi17XG4tXHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XG4tXG4tXHQvKlxuLVx0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcbi1cdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXG4tXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XG4tXHRcdGlmIChyZXQgXHUwMDNlIDApXG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4tXG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHZvaWQgdm14X3VwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRwciwgaW50IGlycilcbiB7XG4gXHRpbnQgdHByX3RocmVzaG9sZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTF9URFgmIzM0OywKICAgICYjMzQ7SU5URUxfVERYX0hPU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bXhfaGFuZGxlX2V4aXQmIzM0OywKICAgICYjMzQ7dGR4X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3Z0X2hhbmRsZV9idXNfbG9ja192bWV4aXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgYnVzIGxvY2sgZGV0ZWN0aW9uIGFuZCBub3RpZnkgVk0gZXhpdHMuIEl0IGludHJvZHVjZXMgYSBjb21tb24gdnRfaGFuZGxlX2V4aXQgYW5kIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQgZm9yIGJvdGggVk1YIGFuZCBURFgsIGFuZCB1cGRhdGVzIHRkeF9oYW5kbGVfZXhpdCB0byBoYW5kbGUgdGhlc2UgZXhpdHMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIHBhdGhzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDowMjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCmluZGV4IDA4MDA1Njc2NzAyYzIuLmJiZWVjMTk3YTUwN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bW11LmgmIzM0OwogCkBAIC0xODMsNiAmIzQzOzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpCiYjNDM7ewomIzQzOwlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwomIzQzOwomIzQzOwkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKJiM0MzsJICAgIGNvbnRleHRfaW52YWxpZCkgewomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KJiM0MzsJCQkJCSAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKQEAgLTE1NCwxNSAmIzQzOzE1NCw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAlyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aCkKLXsKLQlpZiAoaXNfdGRfdmNwdSh2Y3B1KSkKLQkJcmV0dXJuIHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7Ci0KLQlyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKLX0KLQogc3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGlzX3RkX3ZjcHUodmNwdSkpIHsKQEAgLTg3Niw2ICYjNDM7ODY3LDQ0IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCiYjNDM7CSAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZwomIzQzOwkgKiB0byAuaGFuZGxlX2V4aXQoKSBjYWxsYmFjay4KJiM0MzsJICovCiYjNDM7CXRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKJiM0MzsJCQkgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKJiM0MzsJaWYgKGlzX3RkX3ZjcHUodmNwdSkpCiYjNDM7CQlyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQlyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwomIzQzOwkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSzsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTCQkJCVwKIAkoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8CQkJXAogCSBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8CQkJXApAQCAtOTQ5LDcgJiM0Mzs5NzgsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCiAJLnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSwKIAkudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksCi0JLmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLAomIzQzOwkuaGFuZGxlX2V4aXQgPSB2dF9oYW5kbGVfZXhpdCwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTkyMSwzNiAmIzQzOzkyMSw1NCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpCiB7Ci0Jc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7Ci0JdTMyIGV4aXRfcmVhc29uOwotCi0Jc3dpdGNoICh0ZHgtJmd0O3ZwX2VudGVyX3JldCAmYW1wOyBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHsKJiM0MzsJc3dpdGNoICh2cF9lbnRlcl9yZXQgJmFtcDsgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7CiAJY2FzZSBURFhfU1VDQ0VTUzoKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVToKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVEQ6CiAJY2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX05PTl9BQ0NFU1NJQkxFOgogCWNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC0xdTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiYjNDM7fQomIzQzOwomIzQzOy8qIFN5bnRoZXNpemVkIGludmFsaWQgRXhpdCBSZWFzb24gKi8KJiM0MzsjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OCQlVMTZfTUFYCiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiYjNDM7CXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYIG1vZHVsZQomIzQzOwkgKiBuZXZlciBhdHRlbXB0ZWQgdG8gcnVuIHRoZSB2Q1BVLCBpLmUuIHRoZSBFeGl0IFJlYXNvbiBpcyB1bmRlZmluZWQsCiYjNDM7CSAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci4KJiM0MzsJICovCiYjNDM7CWlmICghdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHRkeC0mZ3Q7dnBfZW50ZXJfcmV0KSkKJiM0MzsJCXJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7CiYjNDM7CQkJLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04sCiYjNDM7CQl9OwogCi0Jc3dpdGNoIChleGl0X3JlYXNvbikgewomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC05NjcsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAl0ZHgtJmd0O3ZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcigmYW1wO3RkeC0mZ3Q7dnAsICZhbXA7dGR4LSZndDt2cF9lbnRlcl9hcmdzKTsKIAotCXZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdnQtJmd0O2V4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKIAogCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MucmN4OwogCXRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yZHg7CkBAIC05ODEsOCAmIzQzOzk5OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTA3MSw4ICYjNDM7MTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCiAJICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kCiAJICogVERDQUxMcy4KIAkgKi8KLQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3dhaXRfZm9yX3NlcHRfemFwKSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgdkNQVSBuZXZlciBlbnRlcmVkIHRoZSBndWVzdCwgYnV0IHRoaXMgbG9va3MgbGlrZSBhCiYjNDM7CQkgKiBoYW5kbGVkIGV4aXQgdG8gdGhlIGNhbGxlci4gIFN5bnRoZXNpemUgYW4gaW52YWxpZCBleGl0CiYjNDM7CQkgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQmIzM5O3Mgc3RhbGUgdmFsdWUgaXNuJiMzOTt0IGNvbnN1bWVkCiYjNDM7CQkgKiBhIHNlY29uZCB0aW1lLgomIzQzOwkJICoKJiM0MzsJCSAqIE1ha2UgaXQgc3VwZXIgY2xlYXIgdGhhdCBiaXRbMzE6MTZdIGlzIGNsZWFyZWQgdG8gMCBhbmQgb25seQomIzQzOwkJICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZAomIzQzOwkJICogaW52YWxpZCBleGl0IHJlYXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmZ1bGwgPSAwOwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDsKJiM0MzsJfQogCiAJdHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyAmYW1wOyBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTsKIApAQCAtMjEyNiw2ICYjNDM7MjE1NiwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIAkJICogLSBJZiBpdCYjMzk7cyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgogCQkgKi8KIAkJcmV0dXJuIDE7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fTk9USUZZOgomIzQzOwkJLyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqLwomIzQzOwkJcmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6CiYjNDM7CQlyZXR1cm4gdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0yMTQxLDcgJiM0MzsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKLQlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKJiM0MzsJaWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtJmd0O3ZwX2VudGVyX3JldCkpIHsKIAkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCSppbmZvMiA9IHRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjsKIAkJKmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwpAQCAtMzE1NCw2ICYjNDM7MzE4OSwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAl0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoJmFtcDt0ZHgtJmd0O3Z0LnBpX2Rlc2MpKTsKIAl0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTsKIAomIzQzOwlpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQl0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCQkJIFNFQ09OREFSWV9FWEVDX05PVElGWV9WTV9FWElUSU5HKTsKJiM0MzsJCXRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csCiYjNDM7CQkJCXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ub3RpZnlfd2luZG93KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKQomIzQzOwkJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsCiYjNDM7CQkJCSBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pOwomIzQzOwogCXRkeC0mZ3Q7c3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCBlM2JmZTZhY2ExYTBlLi40OTBiYWFlNTZjZjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTYyNjUsMjMgJiM0Mzs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqLwogCi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCS8qCi0JICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCi0JICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvCi0JICogdm14X2hhbmRsZV9leGl0KCkuCi0JICovCi0JdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwotCWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7Ci0KLQkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwogCiAJLyoKIAkgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyOTEsMTUgJiM0Mzs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCiAJCQkgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CiAKLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKLQkgICAgY29udGV4dF9pbnZhbGlkKSB7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KLQkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02Mzc1LDcgJiM0Mzs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0gewogCVtFWElUX1JFQVNPTl9WTUZVTkNdCQkgICAgICA9IGhhbmRsZV92bXhfaW5zdHJ1Y3Rpb24sCiAJW0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdCSAgICAgID0gaGFuZGxlX3ByZWVtcHRpb25fdGltZXIsCiAJW0VYSVRfUkVBU09OX0VOQ0xTXQkJICAgICAgPSBoYW5kbGVfZW5jbHMsCi0JW0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IGhhbmRsZV9idXNfbG9ja192bWV4aXQsCiYjNDM7CVtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LAogCVtFWElUX1JFQVNPTl9OT1RJRlldCQkgICAgICA9IGhhbmRsZV9ub3RpZnksCiAJW0VYSVRfUkVBU09OX1NFQU1DQUxMXQkJICAgICAgPSBoYW5kbGVfdGR4X2luc3RydWN0aW9uLAogCVtFWElUX1JFQVNPTl9URENBTExdCQkgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sCkBAIC02NzAzLDcgJiM0Mzs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICogVGhlIGd1ZXN0IGhhcyBleGl0ZWQuICBTZWUgaWYgd2UgY2FuIGZpeCBpdCBvciBpZiB3ZSBuZWVkIHVzZXJzcGFjZQogICogYXNzaXN0YW5jZS4KICAqLwotc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKJiM0MztpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CkBAIC02ODYyLDI0ICYjNDM7Njg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCi17Ci0JaW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpOwotCi0JLyoKLQkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwotCSAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuCi0JICovCi0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKLQkJaWYgKHJldCAmZ3Q7IDApCi0JCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwotCi0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiB2b2lkIHZteF91cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0cHIsIGludCBpcnIpCiB7CiAJaW50IHRwcl90aHJlc2hvbGQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBLVk0gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IHR3ZWFrcyBLVk0mIzM5O3MgVk1YIGFuZCBURFggY29kZSwgc3BlY2lmaWNhbGx5IGhvdyBWTSBleGl0cyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwsIHNpbmNlIHRoYXQmIzM5O3MgYSBrZXkgcGFydCBvZiBlbnN1cmluZyBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb21lIG5ldyBmdW5jdGlvbnM6IGBfX3Z0X2hhbmRsZV9ub3RpZnlgIChzdGF0aWMgaW5saW5lKSwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBsaWtlIGB0ZHhfaGFuZGxlX2V4aXRgLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAsIGFuZCBgdGR4X3ZjcHVfaW5pdGAuIEl0IGFsc28gdG91Y2hlcyBgdnRfaGFuZGxlX2V4aXRgIGFuZCBgdm14X2hhbmRsZV9leGl0YC4KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IFREWCDigJMgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCBzbyBJIG5lZWQgdG8gY29uc2lkZXIgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gV2Uga25vdyBLVk0gaXRzZWxmIGdldHMgYSBsb3Qgb2YgbG92ZSBmcm9tIHN5emthbGxlci4gVGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcmVuJiMzOTt0IHdvcnRoIGZ1enppbmcsIGJ1dCBURFggaXMgYSBiaXQgZGlmZmVyZW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzcGVjaWZpYyBURFggY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlLCBldmVuIGlmIGZ1bGwgVERYIGVtdWxhdGlvbiBpc24mIzM5O3QgZmVhc2libGUuIEkga25vdyBRRU1VIGhhcyBzb21lIFREWCBzdXBwb3J0LCBidXQgaXQmIzM5O3MgcmVsaWFudCBvbiBLVk0gYW5kIGhhcmR3YXJlLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpUaGVuLCB0aGVyZSYjMzk7cyBgdnRfaGFuZGxlX2V4aXRgLCB3aGljaCBpcyB0aGUgY29tbW9uIGV4aXQgaGFuZGxlciBmb3IgYm90aCBWTVggYW5kIFREWC4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggbW92ZXMgYnVzIGxvY2sgZGV0ZWN0aW9uIGZyb20gYHZteF9oYW5kbGVfZXhpdGAgdG8gYHZ0X2hhbmRsZV9leGl0YC4gQmVjYXVzZSBpdCBhZmZlY3RzIGJvdGggVk1YIGFuZCBURFgsIGV2ZW4gaW4gUUVNVSwgdGhpcyBwYXRjaCBpcyBtb3N0IGxpa2VseSB3b3J0aCBmdXp6aW5nLiBWTVggaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvcyBsaWtlIFFFTVUgaW5zaWRlIEdDRS4gU2luY2UgYnVzIGxvY2sgZGV0ZWN0aW9uIGlzIG5vdyByb3V0ZWQgdGhyb3VnaCBgdnRfaGFuZGxlX2V4aXRgLCB0aGlzIGFyZWEgcmVxdWlyZXMgY2xvc2Ugc2NydXRpbnkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBXZSBoYXZlIGB2dF9oYW5kbGVfZXhpdGAgKHN0YXRpYyksIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCAobm9uLXN0YXRpYyksIGB2bXhfaGFuZGxlX2V4aXRgIChub24tc3RhdGljKSwgYHRkeF9oYW5kbGVfZXhpdGAgKG5vbi1zdGF0aWMpLCBhbmQgYF9fdnRfaGFuZGxlX25vdGlmeWAgKHN0YXRpYyBpbmxpbmUpLiBJJiMzOTtsbCB1c2UgY29kZSBzZWFyY2ggdG8gdmVyaWZ5IHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgYW5kIG5lZWQgZGVlcGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTIwNT1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6MjA2OmludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTIwNy1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NTQ9c3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjktXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzA6aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODcxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTIwNjE9aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTYyLVx0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjE2MzpcdFx0cmV0dXJuIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIxNjQtXHRkZWZhdWx0OlxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjMwNT1zdGF0aWMgaW50ICgqa3ZtX3ZteF9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MzU1LVx0W0VYSVRfUkVBU09OX0VOQ0xTXVx0XHQgICAgICA9IGhhbmRsZV9lbmNscyxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjM1NjpcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MzU3LVx0W0VYSVRfUkVBU09OX05PVElGWV1cdFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBFeGl0IEhhbmRsZXJzOiBgdnRfaGFuZGxlX2V4aXRgIHZzLiBgdm14X2hhbmRsZV9leGl0YCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGVzZSBleGl0IGhhbmRsZXJzLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgY29yZSBkaWZmZXJlbmNlIC0gSW50ZWwgVlQteCB2ZXJzdXMgQU1ELVYsIG9yIHBlcmhhcHMgZXZlbiBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyBsaWtlIGEgcGFydGljdWxhciBndWVzdCBPUyBiZWhhdmlvciBvciBoeXBlcnZpc29yIGNvbmZpZ3VyYXRpb24uIENoZWNraW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgKGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgKSBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB3aGVuIHRoZSBndWVzdCB0cmllcyB0byBkbyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBpbnRlcnZlbnRpb24gZnJvbSB0aGUgaHlwZXJ2aXNvci4gCgpJJiMzOTttIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2libGUgZXhpdCByZWFzb25zIEkgZXhwZWN0IHRvIHNlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwcml2aWxlZ2UgbGV2ZWwgdHJhbnNpdGlvbnMsIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucywgb3IgcGVyaGFwcyBjb250cm9sIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnM/IEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBsb2dpYyB3aXRoaW4gZWFjaCBoYW5kbGVyIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGVtIGFuZCBob3cgdGhlIGh5cGVydmlzb3IgcmVzcG9uZHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgYXJlYXMgcHJvbmUgdG8gZXJyb3JzLCBhbmQgYW55IHZ1bG5lcmFiaWxpdGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4aXQgaGFuZGxpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwYXRoLCBhbmQgYW55IHdlYWtuZXNzIGhlcmUgY291bGQgYmUgZXhwbG9pdGVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlc2UgaGFuZGxlcnMgYXJlIHdoZXJlIHRoZSBoeXBlcnZpc29yJiMzOTtzIHNlY3VyaXR5IHBvbGljaWVzIGFyZSBlbmZvcmNlZC4gVGhleSYjMzk7cmUgZGVmaW5pdGVseSB0aGUgZ2F0ZWtlZXBlcnMgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z0X2hhbmRsZV9leGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg3MD1pbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODgwLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODgxOnN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODgyLVx0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9OTE3PXN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtOTgwLVx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTgxOlx0LmhhbmRsZV9leGl0ID0gdnRfaGFuZGxlX2V4aXQsXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy05ODItXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipTdGF0aWMgdnMuIE5vbi1TdGF0aWMgRXhpdCBIYW5kbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZXhpdCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGB2dF9oYW5kbGVfZXhpdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWxlIGB2bXhfaGFuZGxlX2V4aXRgIGlzIG5vdC4gVGhpcyBkaWZmZXJlbmNlIGlzIGZ1bmRhbWVudGFsIGFuZCBoYXMgY2xlYXIgaW1wbGljYXRpb25zIGZvciB0aGVpciBzY29wZSBhbmQgdXNhZ2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4KCmB2dF9oYW5kbGVfZXhpdGAgYmVpbmcgYHN0YXRpY2AgbWVhbnMgaXQmIzM5O3MgbG9jYWwgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGhpZGRlbiBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW07IGl0IGNhbiYjMzk7dCBiZSBkaXJlY3RseSBjYWxsZWQgb3IgYWNjZXNzZWQgZnJvbSBleHRlcm5hbCBtb2R1bGVzLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHZ0X2hhbmRsZV9leGl0YCBpcyBzcGVjaWZpYyB0byB0aGUgdmlydHVhbC04MDg2IHRhc2sgb3IgYSBwYXJ0aWN1bGFyIHZpcnR1YWwgbWFjaGluZSBtYW5hZ2VtZW50IGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IG1vZHVsZSwgZGVzaWduZWQgZm9yIHZlcnkgZm9jdXNlZCwgbG93LWxldmVsIHRhc2tzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBjb250ZXh0LCBidXQgdGhhdCYjMzk7cyBteSBpbml0aWFsIHRha2UuCgpgdm14X2hhbmRsZV9leGl0YCwgb24gdGhlIG90aGVyIGhhbmQsIGJlaW5nIG5vbi1zdGF0aWMsIGluZGljYXRlcyB0aGF0IGl0JiMzOTtzIG1lYW50IHRvIGJlIHZpc2libGUgYW5kIHBvdGVudGlhbGx5IHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSXQgY291bGQgYmUgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBnZW5lcmFsIFZNWCB2aXJ0dWFsaXphdGlvbiBsYXllciwgb3IgYSBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlIGludGVyZmFjZSBmb3IgaGFuZGxpbmcgZXhpdHMgaW4gdGhlIFZNWCBlbnZpcm9ubWVudC4gSXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIG1vZHVsZXMgY2FsbGluZyBpbnRvIGl0IGZvciBleGl0IHByb2Nlc3NpbmcsIHN1Z2dlc3RpbmcgYSBtb3JlIHB1YmxpYyBvciBnZW5lcmFsaXplZCBwdXJwb3NlLiBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHdoZW4gSSBzdGFydCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdoYXQgcGFydCBvZiB0aGUgc3lzdGVtIGlzIHRoZSBvd25lciBvZiB3aGljaCByZXNwb25zaWJpbGl0eSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgoKVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBTZWVpbmcgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgd2lsbCBnaXZlIG1lIGEgdmVyeSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHNwZWNpZmljIHJvbGVzIGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgdGhlIHVzZSBvZiBgc3RhdGljYCBmb3Igb25lIGFuZCBub3QgdGhlIG90aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZteF9oYW5kbGVfZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODE9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODkwLSNlbmRpZlxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODkxOlx0XHRyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODkyLVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTkxNz1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzEtXHQuY2hlY2tfaW50ZXJjZXB0ID0gdm14X2NoZWNrX2ludGVyY2VwdCxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEwMzI6XHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdm14X2hhbmRsZV9leGl0X2lycW9mZixcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzMtXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDI5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ5NC1cdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjU0OTU6XHQgKiBTZWUgdGhlIGNvbW1lbnRzIGluIHZteF9oYW5kbGVfZXhpdC5cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ5Ni1cdCAqL1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjQ3OT12b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02NjgzLSAqL1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2Njg0OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY2ODUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzEzOD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTUzLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTU0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxNTUte1xuLS1cbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI4PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoyOTppbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKTtcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oOjMwOnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzEtaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0PTE1OTI9Tm90ZXM6XG4tLVxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTItICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NjI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjY2MmU5IHZteF92Y3B1X3J1biYjNDM7MHgzYjkgKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYzBmNjE5YTAgX192bXhfY28uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjEzOiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODcyOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5Y2ZiMiB2Y3B1X2VudGVyX2d1ZXN0JiM0MzsweDc1MiAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY1ZjU3MCB2bXhfLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxNC0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg4MTogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWQwMjggdmNwdV9lbnRlcl9ndWVzdCYjNDM7MHg3YzggKFtrZXJuZWwua2FsbHN5bXNdKSA9XHUwMDNlIGZmZmZmZmZmYjIzNGY5MDAgX19zci4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTU6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDlkMDZmIHZjcHVfZW50ZXJfZ3Vlc3QmIzQzOzB4ODBmIChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjcyZTMwIHZteF8uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE2OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3MmUzZCB2bXhfaGFuZGxlX2V4aXQmIzQzOzB4ZCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMGY3MjdjMCBfX3ZteF9oLi4uXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJiMTUgX192bXhfaGFuZGxlX2V4aXQmIzQzOzB4MzU1IChba2VybmVsLmthbGxzeW1zXSkgPVx1MDAzZSBmZmZmZmZmZmMwZjYwYWUwIHZteC4uLlxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTg6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyOTk0IF9fdm14X2hhbmRsZV9leGl0JiM0MzsweDFkNCAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNzA5MCBrdm0uLi5cbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjE5LSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzOTAzOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTBiNzBmMSBrdm1fZW11bGF0ZV9jcHVpZCYjNDM7MHg2MSAoW2tlcm5lbC5rYWxsc3ltc10pID1cdTAwM2UgZmZmZmZmZmZjMTBiNmUxMCBrdm1fLi4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIFZNIEV4aXQgSGFuZGxlcnMqKgoKQWxyaWdodCwgc28gSSBzZWUgdGhyZWUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGVyZSB0aGF0IGFyZSBhbGwgZGVzaWduZWQgdG8gaGFuZGxlIHNwZWNpZmljIHR5cGVzIG9mIFZNWCAoVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMpIGV4aXRzLiBGaXJzdCwgdGhlcmUmIzM5O3MgYHZteF9oYW5kbGVfZXhpdGAsIHdoaWNoLCBhcyB0aGUgbmFtZSBpbXBsaWVzLCBpcyB0aGUgZ2VuZXJhbCBoYW5kbGVyIGZvciBWTVggZXhpdHMuIFRoZW4sIHRoZXJlJiMzOTtzIGB0ZHhfaGFuZGxlX2V4aXRgIGZvciBURFggZXhpdHMgLSB3aGljaCBpcyBpbnRlcmVzdGluZywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIHNlcGFyYXRlIGZvciBURFguIEZpbmFsbHkgdGhlcmUmIzM5O3MgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCB3aGljaCBpcyBkZXNpZ25lZCBmb3IgYSBidXMgbG9jayB2bWV4aXQsIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHRvIGRlc2lnbiBteSBzeXN0ZW0uCgpMZXQmIzM5O3MgY2hlY2sgYHRkeF9oYW5kbGVfZXhpdGAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L21haW4uYz04ODE9c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODg3LVx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4ODg6XHRcdHJldCA9IHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04ODktXHRlbHNlXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05NDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NjYtXHRcdC8qXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjk2NzpcdFx0ICogRGVmZXIgS1ZNX0JVR19PTigpIHVudGlsIHRkeF9oYW5kbGVfZXhpdCgpIGJlY2F1c2UgdGhpcyBpcyBpblxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy05NjgtXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTExNjI9c3RhdGljIGludCB0ZHhfaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTE2Ny1cdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjExNjg6XHQgKiB0ZHhfaGFuZGxlX2V4aXQoKSB3aXRoIFREWF9OT05fUkVDT1ZFUkFCTEUgc2V0IGlmIGEgI01DIG9jY3VycyBvblxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTY5LVx0ICogVk0tRW50cnkuICBOTUlzIGFyZSBoYW5kbGVkIGJ5IHRkeF92Y3B1X2VudGVyX2V4aXQoKS5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTIwNDc9aW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjA2MC1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjA2MTppbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjA2Mi17XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTQzPXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxNDQ6aW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaC0xNDUtXHRcdGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MDAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVk0gRXhpdHM6IEEgVGFyZ2V0ZWQgUmV2aWV3KioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBWTSBleGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlc2UgZnVuY3Rpb25zOiBgdm14X2hhbmRsZV9leGl0YCwgYHRkeF9oYW5kbGVfZXhpdGAsIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCk5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFREWCwgSSBiZXQgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBgQ09ORklHX0tWTV9JTlRFTF9URFhgIChvciBzb21ldGhpbmcgY29tcGFyYWJsZSkgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGFuZCBlbnN1cmUgdGhlIHByb3BlciBidWlsZCBmbGFncyBhcmUgc2V0IGZvciB0aGUgcmVsZXZhbnQgZmVhdHVyZXMuIFRoZSBjb2RlIGl0c2VsZiwgb2YgY291cnNlLCBpcyBuZXN0bGVkIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9gLCBzbyBJJiMzOTtsbCBiZSBzcGVuZGluZyBtb3N0IG9mIG15IHRpbWUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fSU5URUxfVERYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgVERYIFN1cHBvcnQgaW4gdGhlIEtWTS94ODYgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEtWTSBzdXBwb3J0IGZvciBJbnRlbCYjMzk7cyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaXMgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUsIHNvIGl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdGhhdCBJJiMzOTtkIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgS1ZNX0lOVEVMX1REWGAgdGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcywgaWYgYW55LCBhcmUgbmVlZGVkIHRvIGVuYWJsZSBgS1ZNX0lOVEVMX1REWGAuIEl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBkZXBlbmQgb24gc29tZSBvZiB0aGUgQ1BVIGZlYXR1cmVzIGFuZCBvdGhlciBsb3ctbGV2ZWwgS1ZNIHNldHRpbmdzLiBJIHdhbnQgdG8gc2VlIHdoaWNoIG90aGVycyBhcmUgY29ubmVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHRjb25maWcgS1ZNX0lOVEVMX1REWFxuIDEzNTpcdFx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XCYjMzQ7XG4gMTM2Olx0XHRkZWZhdWx0IHlcbiAxMzc6XHRcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcbiAxMzg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEzOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczNQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgVERYIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgdGhlIHZpcnR1YWxpemVkIGNvbXBvbmVudCBkZXBlbmRzIG9uIHRoZSBob3N0IHN1cHBvcnQsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZGV0YWlscyBzdHJhaWdodC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBJTlRFTF9URFhfSE9TVGAgbm93IGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElOVEVMX1REWF9IT1NUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTg0ND1jb25maWcgWDg2X1VTRVJfU0hBRE9XX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0xODYzLVxuYXJjaC94ODYvS2NvbmZpZzoxODY0OmNvbmZpZyBJTlRFTF9URFhfSE9TVFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVx0Ym9vbCBcJiMzNDtJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBob3N0IHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYGFyY2gveDg2L0tjb25maWdgIGZvciBgSU5URUxfVERYX0hPU1RgIGRlcGVuZGVuY2llczoKCioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgVERYIEhvc3QgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBzdXJyb3VuZGluZyBJbnRlbCYjMzk7cyBURFggSG9zdCBzdXBwb3J0IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZS4gVGltZSB0byBkZWx2ZSBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBnYXRlLCBkZXBlbmQgb24sIG9yIGJlIHJlcXVpcmVkICpieSogYElOVEVMX1REWF9IT1NUYC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBGaXJzdCwgSSB3YW50IHRvIGVuc3VyZSBteSBzZXR1cCBwcm9wZXJseSBlbmFibGVzIGV2ZXJ5dGhpbmcgbmVlZGVkLiBTZWNvbmQsIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgaW4gdHJvdWJsZXNob290aW5nIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzLCBvciBpZiBzb21ldGhpbmcgaXMgZGlzYWJsZWQgd2hlbiBpdCBzaG91bGRuJiMzOTt0IGJlLiBUaGlyZCwgSSBzaG91bGQgYmUgYWJsZSB0byBwcmVkaWN0IHdoYXQgY2hhbmdlcyBtYXkgb2NjdXIgaW4gZnV0dXJlIHJlbGVhc2VzIGJ5IHVuZGVyc3RhbmRpbmcgd2hhdCBvdGhlciBmZWF0dXJlcyB0b3VjaCB0aGUgc2FtZSBwYXJ0cyBvZiB0aGUgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLiBJJiMzOTtsbCBsb29rIGZvciBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBgcmVxdWlyZXNgLCBvciBldmVuIGltcGxpZWQgcmVsYXRpb25zaGlwcyB0aHJvdWdoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjQ6XHRjb25maWcgSU5URUxfVERYX0hPU1RcbjE4NjU6XHRcdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgaG9zdCBzdXBwb3J0XCYjMzQ7XG4xODY2Olx0XHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUxcbjE4Njc6XHRcdGRlcGVuZHMgb24gWDg2XzY0XG4xODY4Olx0XHRkZXBlbmRzIG9uIEtWTV9JTlRFTFxuMTg2OTpcdFx0ZGVwZW5kcyBvbiBYODZfWDJBUElDXG4xODcwOlx0XHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4xODcxOlx0XHRkZXBlbmRzIG9uIENPTlRJR19BTExPQ1xuMTg3MjpcdFx0ZGVwZW5kcyBvbiBYODZfTUNFXG4xODczOlx0XHRoZWxwXG4xODc0Olx0XHQgIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHByb3RlY3RzIGd1ZXN0IFZNcyBmcm9tIG1hbGljaW91c1xuMTg3NTpcdFx0ICBob3N0IGFuZCBjZXJ0YWluIHBoeXNpY2FsIGF0dGFja3MuICBUaGlzIG9wdGlvbiBlbmFibGVzIG5lY2Vzc2FyeSBURFhcbjE4NzY6XHRcdCAgc3VwcG9ydCBpbiB0aGUgaG9zdCBrZXJuZWwgdG8gcnVuIGNvbmZpZGVudGlhbCBWTXMuXG4xODc3Olx0XG4xODc4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xODc5Olx0XG4xODgwOlx0Y29uZmlnIEVGSVxuMTg4MTpcdFx0Ym9vbCBcJiMzNDtFRkkgcnVudGltZSBzZXJ2aWNlIHN1cHBvcnRcJiMzNDtcbjE4ODI6XHRcdGRlcGVuZHMgb24gQUNQSVxuMTg4MzpcdFx0c2VsZWN0IFVDUzJfU1RSSU5HXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjE4CgkJCQkJCQlvdXRwdXQ6IDE2OQoJCQkJCQkJdGhvdWdodHM6IDgwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBWTVgvVERYIEV4aXQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHdlJiMzOTtyZSBlbmFibGluZyBgS1ZNX0lOVEVMX1REWGAsIGBJTlRFTF9URFhfSE9TVGAsIGFuZCBgS1ZNX0lOVEVMYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBpbml0aWFsbHksIGJ1dCB0aGVuIEkgcmVhbGl6ZWQgaXQmIzM5O3MgdG91Y2hpbmcgYHZteF9oYW5kbGVfZXhpdGAgYW5kIGB2dF9oYW5kbGVfZXhpdGAsIHdoaWNoIGFyZSBjb3JlIFZNWCBjb21wb25lbnRzIOKAkyB0aGF0JiMzOTtzIHdoZW4gSSBrbmV3IGBLVk1fSU5URUxgIHdhcyBjcml0aWNhbCBoZXJlLgoKVG8gY29uZmlybSB0aGlzLCBJIGNoZWNrZWQgd2hpY2ggZmlsZXMgd2VyZSBiZWluZyBtb2RpZmllZDogYGFyY2gveDg2L2t2bS92bXgvbWFpbi5jYCwgYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBUaGUgY2hhbmdlcyBpbiBgdm14LmNgIGFuZCBgbWFpbi5jYCBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX0tWTV9JTlRFTGAgd2hpbGUgdGhvc2UgaW4gYHRkeC5jYCBhcmUgZ2F0ZWQgYnkgYENPTkZJR19LVk1fSU5URUxfVERYYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuCgpJIHRvb2sgYSBjbG9zZXIgbG9vayBhdCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAsIHdoaWNoIGlzIGRlZmluZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AsIGFuZCB0aGF0JiMzOTtzIGNvbXBpbGVkIHdpdGggYEtWTV9JTlRFTGAuIFRoZW4gSSB3ZW50IGJhY2sgdG8gYHZteF9oYW5kbGVfZXhpdGAsIHdoaWNoIGxpdmVzIGluIGB2bXguY2AuIEV4YW1pbmluZyB0aGUgcGF0Y2gsIEkgZm91bmQgdGhhdCBgdm14X2hhbmRsZV9leGl0YCBoYWQgYmVlbiByZW5hbWVkIHRvIGBfX3ZteF9oYW5kbGVfZXhpdGAgYW5kIHRoZSBvbGQgYHZteF9oYW5kbGVfZXhpdGAgd2FzIHJlbW92ZWQsIHdpdGggdGhlIGJ1cyBsb2NrIGRldGVjdGlvbiBsb2dpYyBtb3ZlZCB0byBgdnRfaGFuZGxlX2V4aXRgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciB0ZXN0aW5nIGFuZCBhbmFseXNpcyBhcmUgbm93IGNsZWFyOiBgdm14X2hhbmRsZV9leGl0YCwgYHRkeF9oYW5kbGVfZXhpdGAsIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuCgpUaGUgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZTogYEtWTV9JTlRFTGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBJTlRFTF9URFhfSE9TVGAuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZGl2ZXMgaW50byB0aGUgZnVuZGFtZW50YWwgS1ZNIFZNWCBleGl0IGhhbmRsaW5nLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCByZWFjaGFibGUgZHVyaW5nIGd1ZXN0IGV4ZWN1dGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBidXMgbG9jayBkZXRlY3Rpb24gYW5kIG5vdGlmeSBWTSBleGl0cy4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGNlbnRyYWxpemVzIGV4aXQgaGFuZGxpbmcgZm9yIFZNWCBhbmQgVERYLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBidXMgbG9ja3MgYW5kIG5vdGlmaWVzLiBTcGVjaWZpY2FsbHksIGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBhcmUgaW50cm9kdWNlZCBmb3IgdGhpcyBwdXJwb3NlLiBUaGUgcGF0Y2ggdXBkYXRlcyBgdGR4X2hhbmRsZV9leGl0YCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyB0aGF0IG5lZWQgdG8gYmUgZnV6emVkIGR1ZSB0byB0aGVpciBkaXJlY3QgaW1wYWN0IG9uIGd1ZXN0IGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUxfVERYJiMzNDssCiAgICAmIzM0O0lOVEVMX1REWF9IT1NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm14X2hhbmRsZV9leGl0JiMzNDssCiAgICAmIzM0O3RkeF9oYW5kbGVfZXhpdCYjMzQ7LAogICAgJiMzNDt2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nIGNvZGUgdG8gc2hhcmUgY29tbW9uIGxvZ2ljIGZvciBub3RpZnkgYW5kIGJ1cyBsb2NrIFZNLWV4aXRzLiBJdCBhbHNvIGludHJvZHVjZXMgYSBzeW50aGVzaXplZCBpbnZhbGlkIGV4aXQgcmVhc29uIGZvciBURFggdG8gcHJldmVudCB0aGUgY29uc3VtcHRpb24gb2Ygc3RhbGUgZXhpdCByZWFzb25zIGZyb20gcHJldmlvdXMgcnVucy4gXG5cbjEuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHZjcHUtXHUwMDNlcnVuYCAod2hpY2ggaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UpIGFyZSBsaW1pdGVkIHRvIHNldHRpbmcgc3BlY2lmaWMgZmllbGRzIChgZXhpdF9yZWFzb25gLCBgbm90aWZ5LmZsYWdzYCwgYGZsYWdzYCkgd2l0aCBkZXRlcm1pbmlzdGljIHZhbHVlcywgaWRlbnRpY2FsIHRvIHRoZSBwcmUtZXhpc3RpbmcgVk1YIGxvZ2ljLlxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMGApIGJlZm9yZSBzZXR0aW5nIHRoZSBiYXNpYyBleGl0IHJlYXNvbiwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBiaXRzIGZyb20gYmVpbmcgdXNlZC5cbjMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgZml4aW5nIGEgbG9naWMgYnVnIChzdGFsZSBleGl0IHJlYXNvbikuIFRoZXkgZG8gbm90IGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5TdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDowMjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oCmluZGV4IDA4MDA1Njc2NzAyYzIuLmJiZWVjMTk3YTUwN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wb3N0ZWRfaW50ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vdm14LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7bW11LmgmIzM0OwogCkBAIC0xODMsNiAmIzQzOzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAlrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpCiYjNDM7ewomIzQzOwlib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCAmYW1wOyBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEOwomIzQzOwomIzQzOwkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKJiM0MzsJICAgIGNvbnRleHRfaW52YWxpZCkgewomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTsKJiM0MzsJCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KJiM0MzsJCQkJCSAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jIGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMKQEAgLTE1NCwxNSAmIzQzOzE1NCw2IEBAIHN0YXRpYyBmYXN0cGF0aF90IHZ0X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncykKIAlyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aCkKLXsKLQlpZiAoaXNfdGRfdmNwdSh2Y3B1KSkKLQkJcmV0dXJuIHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7Ci0KLQlyZXR1cm4gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTsKLX0KLQogc3RhdGljIGJvb2wgdnRfdW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaWYgKGlzX3RkX3ZjcHUodmNwdSkpIHsKQEAgLTg3Niw2ICYjNDM7ODY3LDQ0IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sCiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqLwogCiYjNDM7aW50IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCiYjNDM7CSAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZwomIzQzOwkgKiB0byAuaGFuZGxlX2V4aXQoKSBjYWxsYmFjay4KJiM0MzsJICovCiYjNDM7CXRvX3Z0KHZjcHUpLSZndDtleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7CiYjNDM7CXJldHVybiAxOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKJiM0MzsJCQkgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFgKJiM0MzsJaWYgKGlzX3RkX3ZjcHUodmNwdSkpCiYjNDM7CQlyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwllbHNlCiYjNDM7I2VuZGlmCiYjNDM7CQlyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwomIzQzOwkgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKJiM0MzsJCWlmIChyZXQgJmd0OyAwKSB7CiYjNDM7CQkJdmNwdS0mZ3Q7cnVuLSZndDtleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSzsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdmNwdS0mZ3Q7cnVuLSZndDtmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTCQkJCVwKIAkoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8CQkJXAogCSBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8CQkJXApAQCAtOTQ5LDcgJiM0Mzs5NzgsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0gewogCiAJLnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSwKIAkudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksCi0JLmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLAomIzQzOwkuaGFuZGxlX2V4aXQgPSB2dF9oYW5kbGVfZXhpdCwKIAkuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSB2bXhfdXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uLAogCS51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwppbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKQEAgLTkyMSwzNiAmIzQzOzkyMSw1NCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpCiB7Ci0Jc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7Ci0JdTMyIGV4aXRfcmVhc29uOwotCi0Jc3dpdGNoICh0ZHgtJmd0O3ZwX2VudGVyX3JldCAmYW1wOyBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHsKJiM0MzsJc3dpdGNoICh2cF9lbnRlcl9yZXQgJmFtcDsgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7CiAJY2FzZSBURFhfU1VDQ0VTUzoKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVToKIAljYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVEQ6CiAJY2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX05PTl9BQ0NFU1NJQkxFOgogCWNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC0xdTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiYjNDM7fQomIzQzOwomIzQzOy8qIFN5bnRoZXNpemVkIGludmFsaWQgRXhpdCBSZWFzb24gKi8KJiM0MzsjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OCQlVMTZfTUFYCiAKLQlleGl0X3JlYXNvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfcmV0OwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQomIzQzO3sKJiM0MzsJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiYjNDM7CXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYIG1vZHVsZQomIzQzOwkgKiBuZXZlciBhdHRlbXB0ZWQgdG8gcnVuIHRoZSB2Q1BVLCBpLmUuIHRoZSBFeGl0IFJlYXNvbiBpcyB1bmRlZmluZWQsCiYjNDM7CSAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci4KJiM0MzsJICovCiYjNDM7CWlmICghdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHRkeC0mZ3Q7dnBfZW50ZXJfcmV0KSkKJiM0MzsJCXJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7CiYjNDM7CQkJLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04sCiYjNDM7CQl9OwogCi0Jc3dpdGNoIChleGl0X3JlYXNvbikgewomIzQzOwlleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtJmd0O3ZwX2VudGVyX3JldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykgewogCWNhc2UgRVhJVF9SRUFTT05fVERDQUxMOgogCQlpZiAodGR2bWNhbGxfZXhpdF90eXBlKHZjcHUpKQotCQkJcmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDsKLQotCQlyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7CiYjNDM7CQlicmVhazsKIAljYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6CiAJCS8qCiAJCSAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW4KIAkJICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCQkgKi8KLQkJcmV0dXJuIC0xdTsKJiM0MzsJCWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC05NjcsNyAmIzQzOzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAl0ZHgtJmd0O3ZwX2VudGVyX3JldCA9IHRkaF92cF9lbnRlcigmYW1wO3RkeC0mZ3Q7dnAsICZhbXA7dGR4LSZndDt2cF9lbnRlcl9hcmdzKTsKIAotCXZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKJiM0MzsJdnQtJmd0O2V4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTsKIAogCXZ0LSZndDtleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtJmd0O3ZwX2VudGVyX2FyZ3MucmN4OwogCXRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC0mZ3Q7dnBfZW50ZXJfYXJncy5yZHg7CkBAIC05ODEsOCAmIzQzOzk5OSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgJmFtcDsmYW1wOwotCSAgICAgICB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZ1bGwgIT0gLTF1OwomIzQzOwlyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTsKIH0KIAogc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTA3MSw4ICYjNDM7MTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpCiAJICogYWxsb3dpbmcgdkNQVSBlbnRyeSB0byBhdm9pZCBjb250ZW50aW9uIHdpdGggdGRoX3ZwX2VudGVyKCkgYW5kCiAJICogVERDQUxMcy4KIAkgKi8KLQlpZiAodW5saWtlbHkoUkVBRF9PTkNFKHRvX2t2bV90ZHgodmNwdS0mZ3Q7a3ZtKS0mZ3Q7d2FpdF9mb3Jfc2VwdF96YXApKSkKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtJmd0O2t2bSktJmd0O3dhaXRfZm9yX3NlcHRfemFwKSkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgdkNQVSBuZXZlciBlbnRlcmVkIHRoZSBndWVzdCwgYnV0IHRoaXMgbG9va3MgbGlrZSBhCiYjNDM7CQkgKiBoYW5kbGVkIGV4aXQgdG8gdGhlIGNhbGxlci4gIFN5bnRoZXNpemUgYW4gaW52YWxpZCBleGl0CiYjNDM7CQkgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQmIzM5O3Mgc3RhbGUgdmFsdWUgaXNuJiMzOTt0IGNvbnN1bWVkCiYjNDM7CQkgKiBhIHNlY29uZCB0aW1lLgomIzQzOwkJICoKJiM0MzsJCSAqIE1ha2UgaXQgc3VwZXIgY2xlYXIgdGhhdCBiaXRbMzE6MTZdIGlzIGNsZWFyZWQgdG8gMCBhbmQgb25seQomIzQzOwkJICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZAomIzQzOwkJICogaW52YWxpZCBleGl0IHJlYXNvbi4KJiM0MzsJCSAqLwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmZ1bGwgPSAwOwomIzQzOwkJdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047CiAJCXJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDsKJiM0MzsJfQogCiAJdHJhY2Vfa3ZtX2VudHJ5KHZjcHUsIHJ1bl9mbGFncyAmYW1wOyBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTsKIApAQCAtMjEyNiw2ICYjNDM7MjE1NiwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aCkKIAkJICogLSBJZiBpdCYjMzk7cyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgogCQkgKi8KIAkJcmV0dXJuIDE7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fTk9USUZZOgomIzQzOwkJLyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqLwomIzQzOwkJcmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KSk7CiYjNDM7CWNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6CiYjNDM7CQlyZXR1cm4gdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0yMTQxLDcgJiM0MzsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLAogCXN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpOwogCiAJKnJlYXNvbiA9IHRkeC0mZ3Q7dnQuZXhpdF9yZWFzb24uZnVsbDsKLQlpZiAoKnJlYXNvbiAhPSAtMXUpIHsKJiM0MzsJaWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtJmd0O3ZwX2VudGVyX3JldCkpIHsKIAkJKmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7CiAJCSppbmZvMiA9IHRkeC0mZ3Q7ZXh0X2V4aXRfcXVhbGlmaWNhdGlvbjsKIAkJKmludHJfaW5mbyA9IHZteF9nZXRfaW50cl9pbmZvKHZjcHUpOwpAQCAtMzE1NCw2ICYjNDM7MzE4OSwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZCkKIAl0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoJmFtcDt0ZHgtJmd0O3Z0LnBpX2Rlc2MpKTsKIAl0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTsKIAomIzQzOwlpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LSZndDtrdm0pKSB7CiYjNDM7CQl0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCQkJIFNFQ09OREFSWV9FWEVDX05PVElGWV9WTV9FWElUSU5HKTsKJiM0MzsJCXRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csCiYjNDM7CQkJCXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC5ub3RpZnlfd2luZG93KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmJ1c19sb2NrX2RldGVjdGlvbl9lbmFibGVkKQomIzQzOwkJdGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsCiYjNDM7CQkJCSBTRUNPTkRBUllfRVhFQ19CVVNfTE9DS19ERVRFQ1RJT04pOwomIzQzOwogCXRkeC0mZ3Q7c3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwppbmRleCBlM2JmZTZhY2ExYTBlLi40OTBiYWFlNTZjZjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmMKQEAgLTYyNjUsMjMgJiM0Mzs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogfQogI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqLwogCi1zdGF0aWMgaW50IGhhbmRsZV9idXNfbG9ja192bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCS8qCi0JICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLCi0JICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvCi0JICogdm14X2hhbmRsZV9leGl0KCkuCi0JICovCi0JdG9fdnQodmNwdSktJmd0O2V4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpOwotCWJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsICZhbXA7IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7Ci0KLQkmIzQzOyYjNDM7dmNwdS0mZ3Q7c3RhdC5ub3RpZnlfd2luZG93X2V4aXRzOwogCiAJLyoKIAkgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSwKQEAgLTYyOTEsMTUgJiM0Mzs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJdm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCiAJCQkgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7CiAKLQlpZiAodmNwdS0mZ3Q7a3ZtLSZndDthcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgJmFtcDsgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHwKLQkgICAgY29udGV4dF9pbnZhbGlkKSB7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7Ci0JCXZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8KLQkJCQkJICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwomIzQzOwlyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02Mzc1LDcgJiM0Mzs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0gewogCVtFWElUX1JFQVNPTl9WTUZVTkNdCQkgICAgICA9IGhhbmRsZV92bXhfaW5zdHJ1Y3Rpb24sCiAJW0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdCSAgICAgID0gaGFuZGxlX3ByZWVtcHRpb25fdGltZXIsCiAJW0VYSVRfUkVBU09OX0VOQ0xTXQkJICAgICAgPSBoYW5kbGVfZW5jbHMsCi0JW0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IGhhbmRsZV9idXNfbG9ja192bWV4aXQsCiYjNDM7CVtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LAogCVtFWElUX1JFQVNPTl9OT1RJRlldCQkgICAgICA9IGhhbmRsZV9ub3RpZnksCiAJW0VYSVRfUkVBU09OX1NFQU1DQUxMXQkJICAgICAgPSBoYW5kbGVfdGR4X2luc3RydWN0aW9uLAogCVtFWElUX1JFQVNPTl9URENBTExdCQkgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sCkBAIC02NzAzLDcgJiM0Mzs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogICogVGhlIGd1ZXN0IGhhcyBleGl0ZWQuICBTZWUgaWYgd2UgY2FuIGZpeCBpdCBvciBpZiB3ZSBuZWVkIHVzZXJzcGFjZQogICogYXNzaXN0YW5jZS4KICAqLwotc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCkKJiM0MztpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7CkBAIC02ODYyLDI0ICYjNDM7Njg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCiAJcmV0dXJuIDA7CiB9CiAKLWludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpCi17Ci0JaW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpOwotCi0JLyoKLQkgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpcwotCSAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuCi0JICovCi0JaWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHsKLQkJaWYgKHJldCAmZ3Q7IDApCi0JCQl2Y3B1LSZndDtydW4tJmd0O2V4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLOwotCi0JCXZjcHUtJmd0O3J1bi0mZ3Q7ZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiB2b2lkIHZteF91cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0cHIsIGludCBpcnIpCiB7CiAJaW50IHRwcl90aHJlc2hvbGQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIEtWTSBWTVgvVERYIGV4aXQgaGFuZGxpbmcgY29kZSwgd2hpY2ggYWx3YXlzIG1ha2VzIG1lIHBheSBleHRyYSBhdHRlbnRpb24uIFJlZmFjdG9yaW5nIGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLCBhbG9uZyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fdnRfaGFuZGxlX25vdGlmeWAgYW5kIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIFREWCBleGl0IHJlYXNvbiBoYW5kbGluZy4uLiB0aGF0JiMzOTtzIGEgZGVjZW50IGFtb3VudCBvZiBjaHVybi4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gU28sIGBfX3Z0X2hhbmRsZV9ub3RpZnlgIGlzIGJlaW5nIGV4dHJhY3RlZCBmcm9tIGBoYW5kbGVfbm90aWZ5YCBpbiBgdm14LmNgIGFuZCBpcyBub3cgaW4gYGNvbW1vbi5oYC4gQW5kIGl0JiMzOTtzIHNldHRpbmcgYHZjcHUtJmd0O3J1bi0mZ3Q7ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7YCBhbmQgYHZjcHUtJmd0O3J1bi0mZ3Q7bm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID8gS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO2AuIEhhbmcgb24gYSBzZWNvbmQuLi4gYHZjcHUtJmd0O3J1bmAgaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHNoYXJlZCEgQWxhcm0gYmVsbHMgYXJlIGFscmVhZHkgcmluZ2luZyBhIGJpdC4KCldlJiMzOTtyZSB3cml0aW5nIHRvIGB2Y3B1LSZndDtydW5gLCB3aGljaCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gTm93LCB0aGlzIGB2Y3B1LSZndDtydW4tJmd0O25vdGlmeS5mbGFnc2AgYXNzaWdubWVudOKApiBXaGF0IGFib3V0ICpvdGhlciogZmllbGRzIHdpdGhpbiBgdmNwdS0mZ3Q7cnVuLSZndDtub3RpZnlgPyBBcmUgd2UgaW5pdGlhbGl6aW5nIGV2ZXJ5dGhpbmcgY29ycmVjdGx5PyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLiBQb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IFRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBLTVNBTiBsb3ZlcyB0byBmaW5kLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBzdHJ1Y3Qga3ZtX3J1bmAgYW5kIHRoZSBgbm90aWZ5YCBmaWVsZCBkZWZpbml0aW9uLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBrdm1fcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNDM9c3RydWN0IGt2bV9leGl0X3NucF9yZXFfY2VydHMge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTAtLypcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoyMTE6ICogc3RydWN0IGt2bV9ydW4gY2FuIGJlIG1vZGlmaWVkIGJ5IHVzZXJzcGFjZSBhdCBhbnkgdGltZSwgc28gS1ZNIG11c3QgYmVcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTItICogY2FyZWZ1bCB0byBhdm9pZCBUT0NUT1UgYnVncy4gSW4gb3JkZXIgdG8gcHJvdGVjdCBLVk0sIEhJTlRfVU5TQUZFX0lOX0tWTSgpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjEzOiAqIHJlbmFtZXMgZmllbGRzIGluIHN0cnVjdCBrdm1fcnVuIGZyb20gXHUwMDNjc3ltYm9sXHUwMDNlIHRvIFx1MDAzY3N5bWJvbFx1MDAzZV9fdW5zYWZlIHdoZW5cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTQtICogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBlbnN1cmluZyB0aGF0IGFueSB1c2Ugd2l0aGluIEtWTSBpcyBvYnZpb3VzIGFuZFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMjMtLyogZm9yIEtWTV9SVU4sIHJldHVybmVkIGJ5IG1tYXAodmNwdV9mZCwgb2Zmc2V0PTApICovXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjI0OnN0cnVjdCBrdm1fcnVuIHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMjUtXHQvKiBpbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODk4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3RydWN0IGt2bV9ydW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBgc3RydWN0IGt2bV9ydW5gLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBpZWNlIG9mIHRoZSBLVk0gcHV6emxlLCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCB0aGUgaG9zdCBkdXJpbmcgdGhlIFZNIGV4ZWN1dGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGxvb2sgdXAgdGhlIGRlZmluaXRpb24uIEkmIzM5O20gYWZ0ZXIgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCYjMzk7cyBzaGFyZWQgdGhyb3VnaCB0aGlzIHN0cnVjdHVyZSBhdCBhIGxvdyBsZXZlbC4gQXJlIHdlIHRhbGtpbmcgcmVnaXN0ZXJzLCBtZW1vcnkgYWNjZXNzIGluZm8sIFZNIGV4aXQgcmVhc29ucywgYW5kIHNvIGZvcnRoPyBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZSBvZiBpdHMgbWVtYmVycywgdGhlaXIgcHVycG9zZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiBtZWNoYW5pc21zLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNoYW5nZXMgaW4gbW9yZSByZWNlbnQga2VybmVsIHZlcnNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyNDpcdHN0cnVjdCBrdm1fcnVuIHtcbiAyMjU6XHRcdC8qIGluICovXG4gMjI2Olx0XHRfX3U4IHJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdztcbiAyMjc6XHRcdF9fdTggSElOVF9VTlNBRkVfSU5fS1ZNKGltbWVkaWF0ZV9leGl0KTtcbiAyMjg6XHRcdF9fdTggcGFkZGluZzFbNl07XG4gMjI5Olx0XG4gMjMwOlx0XHQvKiBvdXQgKi9cbiAyMzE6XHRcdF9fdTMyIGV4aXRfcmVhc29uO1xuIDIzMjpcdFx0X191OCByZWFkeV9mb3JfaW50ZXJydXB0X2luamVjdGlvbjtcbiAyMzM6XHRcdF9fdTggaWZfZmxhZztcbiAyMzQ6XHRcdF9fdTE2IGZsYWdzO1xuIDIzNTpcdFxuIDIzNjpcdFx0LyogaW4gKHByZV9rdm1fcnVuKSwgb3V0IChwb3N0X2t2bV9ydW4pICovXG4gMjM3Olx0XHRfX3U2NCBjcjg7XG4gMjM4Olx0XHRfX3U2NCBhcGljX2Jhc2U7XG4gMjM5Olx0XG4gMjQwOlx0I2lmZGVmIF9fS1ZNX1MzOTBcbiAyNDE6XHRcdC8qIHRoZSBwcm9jZXNzb3Igc3RhdHVzIHdvcmQgZm9yIHMzOTAgKi9cbiAyNDI6XHRcdF9fdTY0IHBzd19tYXNrOyAvKiBwc3cgdXBwZXIgaGFsZiAqL1xuIDI0MzpcdFx0X191NjQgcHN3X2FkZHI7IC8qIHBzdyBsb3dlciBoYWxmICovXG4gMjQ0Olx0I2VuZGlmXG4gMjQ1Olx0XHR1bmlvbiB7XG4gMjQ2Olx0XHRcdC8qIEtWTV9FWElUX1VOS05PV04gKi9cbiAyNDc6XHRcdFx0c3RydWN0IHtcbiAyNDg6XHRcdFx0XHRfX3U2NCBoYXJkd2FyZV9leGl0X3JlYXNvbjtcbiAyNDk6XHRcdFx0fSBodztcbiAyNTA6XHRcdFx0LyogS1ZNX0VYSVRfRkFJTF9FTlRSWSAqL1xuIDI1MTpcdFx0XHRzdHJ1Y3Qge1xuIDI1MjpcdFx0XHRcdF9fdTY0IGhhcmR3YXJlX2VudHJ5X2ZhaWx1cmVfcmVhc29uO1xuIDI1MzpcdFx0XHRcdF9fdTMyIGNwdTtcbiAyNTQ6XHRcdFx0fSBmYWlsX2VudHJ5O1xuIDI1NTpcdFx0XHQvKiBLVk1fRVhJVF9FWENFUFRJT04gKi9cbiAyNTY6XHRcdFx0c3RydWN0IHtcbiAyNTc6XHRcdFx0XHRfX3UzMiBleGNlcHRpb247XG4gMjU4Olx0XHRcdFx0X191MzIgZXJyb3JfY29kZTtcbiAyNTk6XHRcdFx0fSBleDtcbiAyNjA6XHRcdFx0LyogS1ZNX0VYSVRfSU8gKi9cbiAyNjE6XHRcdFx0c3RydWN0IHtcbiAyNjI6XHQjZGVmaW5lIEtWTV9FWElUX0lPX0lOICAwXG4gMjYzOlx0I2RlZmluZSBLVk1fRVhJVF9JT19PVVQgMVxuIDI2NDpcdFx0XHRcdF9fdTggZGlyZWN0aW9uO1xuIDI2NTpcdFx0XHRcdF9fdTggc2l6ZTsgLyogYnl0ZXMgKi9cbiAyNjY6XHRcdFx0XHRfX3UxNiBwb3J0O1xuIDI2NzpcdFx0XHRcdF9fdTMyIGNvdW50O1xuIDI2ODpcdFx0XHRcdF9fdTY0IGRhdGFfb2Zmc2V0OyAvKiByZWxhdGl2ZSB0byBrdm1fcnVuIHN0YXJ0ICovXG4gMjY5Olx0XHRcdH0gaW87XG4gMjcwOlx0XHRcdC8qIEtWTV9FWElUX0RFQlVHICovXG4gMjcxOlx0XHRcdHN0cnVjdCB7XG4gMjcyOlx0XHRcdFx0c3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggYXJjaDtcbiAyNzM6XHRcdFx0fSBkZWJ1ZztcbiAyNzQ6XHRcdFx0LyogS1ZNX0VYSVRfTU1JTyAqL1xuIDI3NTpcdFx0XHRzdHJ1Y3Qge1xuIDI3NjpcdFx0XHRcdF9fdTY0IHBoeXNfYWRkcjtcbiAyNzc6XHRcdFx0XHRfX3U4ICBkYXRhWzhdO1xuIDI3ODpcdFx0XHRcdF9fdTMyIGxlbjtcbiAyNzk6XHRcdFx0XHRfX3U4ICBpc193cml0ZTtcbiAyODA6XHRcdFx0fSBtbWlvO1xuIDI4MTpcdFx0XHQvKiBLVk1fRVhJVF9MT09OR0FSQ0hfSU9DU1IgKi9cbiAyODI6XHRcdFx0c3RydWN0IHtcbiAyODM6XHRcdFx0XHRfX3U2NCBwaHlzX2FkZHI7XG4gMjg0Olx0XHRcdFx0X191OCAgZGF0YVs4XTtcbiAyODU6XHRcdFx0XHRfX3UzMiBsZW47XG4gMjg2Olx0XHRcdFx0X191OCAgaXNfd3JpdGU7XG4gMjg3Olx0XHRcdH0gaW9jc3JfaW87XG4gMjg4Olx0XHRcdC8qIEtWTV9FWElUX0hZUEVSQ0FMTCAqL1xuIDI4OTpcdFx0XHRzdHJ1Y3Qge1xuIDI5MDpcdFx0XHRcdF9fdTY0IG5yO1xuIDI5MTpcdFx0XHRcdF9fdTY0IGFyZ3NbNl07XG4gMjkyOlx0XHRcdFx0X191NjQgcmV0O1xuIDI5MzpcdFxuIDI5NDpcdFx0XHRcdHVuaW9uIHtcbiAyOTU6XHQjaWZuZGVmIF9fS0VSTkVMX19cbiAyOTY6XHRcdFx0XHRcdF9fdTMyIGxvbmdtb2RlO1xuIDI5NzpcdCNlbmRpZlxuIDI5ODpcdFx0XHRcdFx0X191NjQgZmxhZ3M7XG4gMjk5Olx0XHRcdFx0fTtcbiAzMDA6XHRcdFx0fSBoeXBlcmNhbGw7XG4gMzAxOlx0XHRcdC8qIEtWTV9FWElUX1RQUl9BQ0NFU1MgKi9cbiAzMDI6XHRcdFx0c3RydWN0IHtcbiAzMDM6XHRcdFx0XHRfX3U2NCByaXA7XG4gMzA0Olx0XHRcdFx0X191MzIgaXNfd3JpdGU7XG4gMzA1Olx0XHRcdFx0X191MzIgcGFkO1xuIDMwNjpcdFx0XHR9IHRwcl9hY2Nlc3M7XG4gMzA3Olx0XHRcdC8qIEtWTV9FWElUX1MzOTBfU0lFSUMgKi9cbiAzMDg6XHRcdFx0c3RydWN0IHtcbiAzMDk6XHRcdFx0XHRfX3U4IGljcHRjb2RlO1xuIDMxMDpcdFx0XHRcdF9fdTE2IGlwYTtcbiAzMTE6XHRcdFx0XHRfX3UzMiBpcGI7XG4gMzEyOlx0XHRcdH0gczM5MF9zaWVpYztcbiAzMTM6XHRcdFx0LyogS1ZNX0VYSVRfUzM5MF9SRVNFVCAqL1xuIDMxNDpcdFx0XHRfX3U2NCBzMzkwX3Jlc2V0X2ZsYWdzO1xuIDMxNTpcdFx0XHQvKiBLVk1fRVhJVF9TMzkwX1VDT05UUk9MICovXG4gMzE2Olx0XHRcdHN0cnVjdCB7XG4gMzE3Olx0XHRcdFx0X191NjQgdHJhbnNfZXhjX2NvZGU7XG4gMzE4Olx0XHRcdFx0X191MzIgcGdtX2NvZGU7XG4gMzE5Olx0XHRcdH0gczM5MF91Y29udHJvbDtcbiAzMjA6XHRcdFx0LyogS1ZNX0VYSVRfRENSIChkZXByZWNhdGVkKSAqL1xuIDMyMTpcdFx0XHRzdHJ1Y3Qge1xuIDMyMjpcdFx0XHRcdF9fdTMyIGRjcm47XG4gMzIzOlx0XHRcdFx0X191MzIgZGF0YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBLVk0mIzM5O3MgYGt2bV9ydW5gIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gZGlnIGludG8gdGhlIGBrdm1fcnVuYCBzdHJ1Y3R1cmUgYSBiaXQgbW9yZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYG5vdGlmeWAgZmllbGQgaXMgdXNlZC4gV2UmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBiYXNpY3MsIGJ1dCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoYXQgcGFydGljdWxhciBlbGVtZW50LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZG8gc29tZSBtb3JlIHJlYWRpbmcgaW4gdGhlIGNvZGUhIExldCYjMzk7cyBzZWUgaG93IGBub3RpZnlgIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI0Olx0XHRcdFx0X191OCAgaXNfd3JpdGU7XG4gMzI1Olx0XHRcdH0gZGNyO1xuIDMyNjpcdFx0XHQvKiBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUiAqL1xuIDMyNzpcdFx0XHRzdHJ1Y3Qge1xuIDMyODpcdFx0XHRcdF9fdTMyIHN1YmVycm9yO1xuIDMyOTpcdFx0XHRcdC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfSU5URVJOQUxfRVJST1JfREFUQTogKi9cbiAzMzA6XHRcdFx0XHRfX3UzMiBuZGF0YTtcbiAzMzE6XHRcdFx0XHRfX3U2NCBkYXRhWzE2XTtcbiAzMzI6XHRcdFx0fSBpbnRlcm5hbDtcbiAzMzM6XHRcdFx0LypcbiAzMzQ6XHRcdFx0ICogS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTlxuIDMzNTpcdFx0XHQgKlxuIDMzNjpcdFx0XHQgKiBcJiMzNDtzdHJ1Y3QgZW11bGF0aW9uX2ZhaWx1cmVcJiMzNDsgaXMgYW4gb3ZlcmxheSBvZiBcJiMzNDtzdHJ1Y3QgaW50ZXJuYWxcJiMzNDtcbiAzMzc6XHRcdFx0ICogdGhhdCBpcyB1c2VkIGZvciB0aGUgS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTiBzdWItdHlwZSBvZlxuIDMzODpcdFx0XHQgKiBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUi4gIE5vdGUsIHVubGlrZSBvdGhlciBpbnRlcm5hbCBlcnJvclxuIDMzOTpcdFx0XHQgKiBzdWItdHlwZXMsIHRoaXMgc3RydWN0IGlzIEFCSSEgIEl0IGFsc28gbmVlZHMgdG8gYmUgYmFja3dhcmRzXG4gMzQwOlx0XHRcdCAqIGNvbXBhdGlibGUgd2l0aCBcJiMzNDtzdHJ1Y3QgaW50ZXJuYWxcJiMzNDsuICBUYWtlIHNwZWNpYWwgY2FyZSB0aGF0XG4gMzQxOlx0XHRcdCAqIFwmIzM0O25kYXRhXCYjMzQ7IGlzIGNvcnJlY3QsIHRoYXQgbmV3IGZpZWxkcyBhcmUgZW51bWVyYXRlZCBpbiBcJiMzNDtmbGFnc1wmIzM0OyxcbiAzNDI6XHRcdFx0ICogYW5kIHRoYXQgZWFjaCBmbGFnIGVudW1lcmF0ZXMgZmllbGRzIHRoYXQgYXJlIDY0LWJpdCBhbGlnbmVkXG4gMzQzOlx0XHRcdCAqIGFuZCBzaXplZCAoc28gdGhhdCBuZGF0YSYjNDM7aW50ZXJuYWwuZGF0YVtdIGlzIHZhbGlkL2FjY3VyYXRlKS5cbiAzNDQ6XHRcdFx0ICpcbiAzNDU6XHRcdFx0ICogU3BhY2UgYmV5b25kIHRoZSBkZWZpbmVkIGZpZWxkcyBtYXkgYmUgdXNlZCB0byBzdG9yZSBhcmJpdHJhcnlcbiAzNDY6XHRcdFx0ICogZGVidWcgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gdGhlIGVtdWxhdGlvbiBmYWlsdXJlLiBJdCBpc1xuIDM0NzpcdFx0XHQgKiBhY2NvdW50ZWQgZm9yIGluIFwmIzM0O25kYXRhXCYjMzQ7IGJ1dCB0aGUgZm9ybWF0IGlzIHVuc3BlY2lmaWVkIGFuZCBpc1xuIDM0ODpcdFx0XHQgKiBub3QgcmVwcmVzZW50ZWQgaW4gXCYjMzQ7ZmxhZ3NcJiMzNDsuIEFueSBzdWNoIGluZm9ybWF0aW9uIGlzICpub3QqIEFCSSFcbiAzNDk6XHRcdFx0ICovXG4gMzUwOlx0XHRcdHN0cnVjdCB7XG4gMzUxOlx0XHRcdFx0X191MzIgc3ViZXJyb3I7XG4gMzUyOlx0XHRcdFx0X191MzIgbmRhdGE7XG4gMzUzOlx0XHRcdFx0X191NjQgZmxhZ3M7XG4gMzU0Olx0XHRcdFx0dW5pb24ge1xuIDM1NTpcdFx0XHRcdFx0c3RydWN0IHtcbiAzNTY6XHRcdFx0XHRcdFx0X191OCAgaW5zbl9zaXplO1xuIDM1NzpcdFx0XHRcdFx0XHRfX3U4ICBpbnNuX2J5dGVzWzE1XTtcbiAzNTg6XHRcdFx0XHRcdH07XG4gMzU5Olx0XHRcdFx0fTtcbiAzNjA6XHRcdFx0XHQvKiBBcmJpdHJhcnkgZGVidWcgZGF0YSBtYXkgZm9sbG93LiAqL1xuIDM2MTpcdFx0XHR9IGVtdWxhdGlvbl9mYWlsdXJlO1xuIDM2MjpcdFx0XHQvKiBLVk1fRVhJVF9PU0kgKi9cbiAzNjM6XHRcdFx0c3RydWN0IHtcbiAzNjQ6XHRcdFx0XHRfX3U2NCBncHJzWzMyXTtcbiAzNjU6XHRcdFx0fSBvc2k7XG4gMzY2Olx0XHRcdC8qIEtWTV9FWElUX1BBUFJfSENBTEwgKi9cbiAzNjc6XHRcdFx0c3RydWN0IHtcbiAzNjg6XHRcdFx0XHRfX3U2NCBucjtcbiAzNjk6XHRcdFx0XHRfX3U2NCByZXQ7XG4gMzcwOlx0XHRcdFx0X191NjQgYXJnc1s5XTtcbiAzNzE6XHRcdFx0fSBwYXByX2hjYWxsO1xuIDM3MjpcdFx0XHQvKiBLVk1fRVhJVF9TMzkwX1RTQ0ggKi9cbiAzNzM6XHRcdFx0c3RydWN0IHtcbiAzNzQ6XHRcdFx0XHRfX3UxNiBzdWJjaGFubmVsX2lkO1xuIDM3NTpcdFx0XHRcdF9fdTE2IHN1YmNoYW5uZWxfbnI7XG4gMzc2Olx0XHRcdFx0X191MzIgaW9faW50X3Bhcm07XG4gMzc3Olx0XHRcdFx0X191MzIgaW9faW50X3dvcmQ7XG4gMzc4Olx0XHRcdFx0X191MzIgaXBiO1xuIDM3OTpcdFx0XHRcdF9fdTggZGVxdWV1ZWQ7XG4gMzgwOlx0XHRcdH0gczM5MF90c2NoO1xuIDM4MTpcdFx0XHQvKiBLVk1fRVhJVF9FUFIgKi9cbiAzODI6XHRcdFx0c3RydWN0IHtcbiAzODM6XHRcdFx0XHRfX3UzMiBlcHI7XG4gMzg0Olx0XHRcdH0gZXByO1xuIDM4NTpcdFx0XHQvKiBLVk1fRVhJVF9TWVNURU1fRVZFTlQgKi9cbiAzODY6XHRcdFx0c3RydWN0IHtcbiAzODc6XHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfU0hVVERPV04gICAgICAgMVxuIDM4ODpcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9SRVNFVCAgICAgICAgICAyXG4gMzg5Olx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX0NSQVNIICAgICAgICAgIDNcbiAzOTA6XHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfV0FLRVVQICAgICAgICAgNFxuIDM5MTpcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9TVVNQRU5EICAgICAgICA1XG4gMzkyOlx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1NFVl9URVJNICAgICAgIDZcbiAzOTM6XHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfVERYX0ZBVEFMICAgICAgN1xuIDM5NDpcdFx0XHRcdF9fdTMyIHR5cGU7XG4gMzk1Olx0XHRcdFx0X191MzIgbmRhdGE7XG4gMzk2Olx0XHRcdFx0dW5pb24ge1xuIDM5NzpcdCNpZm5kZWYgX19LRVJORUxfX1xuIDM5ODpcdFx0XHRcdFx0X191NjQgZmxhZ3M7XG4gMzk5Olx0I2VuZGlmXG4gNDAwOlx0XHRcdFx0XHRfX3U2NCBkYXRhWzE2XTtcbiA0MDE6XHRcdFx0XHR9O1xuIDQwMjpcdFx0XHR9IHN5c3RlbV9ldmVudDtcbiA0MDM6XHRcdFx0LyogS1ZNX0VYSVRfUzM5MF9TVFNJICovXG4gNDA0Olx0XHRcdHN0cnVjdCB7XG4gNDA1Olx0XHRcdFx0X191NjQgYWRkcjtcbiA0MDY6XHRcdFx0XHRfX3U4IGFyO1xuIDQwNzpcdFx0XHRcdF9fdTggcmVzZXJ2ZWQ7XG4gNDA4Olx0XHRcdFx0X191OCBmYztcbiA0MDk6XHRcdFx0XHRfX3U4IHNlbDE7XG4gNDEwOlx0XHRcdFx0X191MTYgc2VsMjtcbiA0MTE6XHRcdFx0fSBzMzkwX3N0c2k7XG4gNDEyOlx0XHRcdC8qIEtWTV9FWElUX0lPQVBJQ19FT0kgKi9cbiA0MTM6XHRcdFx0c3RydWN0IHtcbiA0MTQ6XHRcdFx0XHRfX3U4IHZlY3RvcjtcbiA0MTU6XHRcdFx0fSBlb2k7XG4gNDE2Olx0XHRcdC8qIEtWTV9FWElUX0hZUEVSViAqL1xuIDQxNzpcdFx0XHRzdHJ1Y3Qga3ZtX2h5cGVydl9leGl0IGh5cGVydjtcbiA0MTg6XHRcdFx0LyogS1ZNX0VYSVRfQVJNX05JU1YgLyBLVk1fRVhJVF9BUk1fTERTVDY0QiAqL1xuIDQxOTpcdFx0XHRzdHJ1Y3Qge1xuIDQyMDpcdFx0XHRcdF9fdTY0IGVzcl9pc3M7XG4gNDIxOlx0XHRcdFx0X191NjQgZmF1bHRfaXBhO1xuIDQyMjpcdFx0XHR9IGFybV9uaXN2O1xuIDQyMzpcdFx0XHQvKiBLVk1fRVhJVF9YODZfUkRNU1IgLyBLVk1fRVhJVF9YODZfV1JNU1IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNjAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKKioqCgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBhbmQgQW50aWNpcGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCAtIEkmIzM5O20gc3VwcG9zZWQgdG8gcHJvY2VzcyB0aGlzIHRleHQgYW5kIHJlcHJlc2VudCBpdCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBpbiBmaXJzdC1wZXJzb24sIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgaXQgYW5kIGZvcm11bGF0aW5nIG15IHVuZGVyc3RhbmRpbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBiZSBhIHJlbGF0aXZlbHkgcXVpY2sgYW5kIGVmZmljaWVudCB0YXNrLiBJdCYjMzk7cyBhYm91dCBkaXN0aWxsaW5nIHRoZSBjb3JlIGlkZWFzIGFuZCBpbnRlcm5hbGl6aW5nIHRoZW0uIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBvbiB0aGUgcGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgva3ZtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjQ6XHRcdFx0c3RydWN0IHtcbiA0MjU6XHRcdFx0XHRfX3U4IGVycm9yOyAvKiB1c2VyIC1cdTAwM2Uga2VybmVsICovXG4gNDI2Olx0XHRcdFx0X191OCBwYWRbN107XG4gNDI3Olx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX0lOVkFMXHQoMSBcdTAwM2NcdTAwM2MgMClcbiA0Mjg6XHQjZGVmaW5lIEtWTV9NU1JfRVhJVF9SRUFTT05fVU5LTk9XTlx0KDEgXHUwMDNjXHUwMDNjIDEpXG4gNDI5Olx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX0ZJTFRFUlx0KDEgXHUwMDNjXHUwMDNjIDIpXG4gNDMwOlx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX1ZBTElEX01BU0tcdChLVk1fTVNSX0VYSVRfUkVBU09OX0lOVkFMICAgfFx0XFxcbiA0MzE6XHRcdFx0XHRcdFx0IEtWTV9NU1JfRVhJVF9SRUFTT05fVU5LTk9XTiB8XHRcXFxuIDQzMjpcdFx0XHRcdFx0XHQgS1ZNX01TUl9FWElUX1JFQVNPTl9GSUxURVIpXG4gNDMzOlx0XHRcdFx0X191MzIgcmVhc29uOyAvKiBrZXJuZWwgLVx1MDAzZSB1c2VyICovXG4gNDM0Olx0XHRcdFx0X191MzIgaW5kZXg7IC8qIGtlcm5lbCAtXHUwMDNlIHVzZXIgKi9cbiA0MzU6XHRcdFx0XHRfX3U2NCBkYXRhOyAvKiBrZXJuZWwgXHUwMDNjLVx1MDAzZSB1c2VyICovXG4gNDM2Olx0XHRcdH0gbXNyO1xuIDQzNzpcdFx0XHQvKiBLVk1fRVhJVF9YRU4gKi9cbiA0Mzg6XHRcdFx0c3RydWN0IGt2bV94ZW5fZXhpdCB4ZW47XG4gNDM5Olx0XHRcdC8qIEtWTV9FWElUX1JJU0NWX1NCSSAqL1xuIDQ0MDpcdFx0XHRzdHJ1Y3Qge1xuIDQ0MTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZXh0ZW5zaW9uX2lkO1xuIDQ0MjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZnVuY3Rpb25faWQ7XG4gNDQzOlx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmdzWzZdO1xuIDQ0NDpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmV0WzJdO1xuIDQ0NTpcdFx0XHR9IHJpc2N2X3NiaTtcbiA0NDY6XHRcdFx0LyogS1ZNX0VYSVRfUklTQ1ZfQ1NSICovXG4gNDQ3Olx0XHRcdHN0cnVjdCB7XG4gNDQ4Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBjc3JfbnVtO1xuIDQ0OTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbmV3X3ZhbHVlO1xuIDQ1MDpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgd3JpdGVfbWFzaztcbiA0NTE6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHJldF92YWx1ZTtcbiA0NTI6XHRcdFx0fSByaXNjdl9jc3I7XG4gNDUzOlx0XHRcdC8qIEtWTV9FWElUX05PVElGWSAqL1xuIDQ1NDpcdFx0XHRzdHJ1Y3Qge1xuIDQ1NTpcdCNkZWZpbmUgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSURcdCgxIFx1MDAzY1x1MDAzYyAwKVxuIDQ1NjpcdFx0XHRcdF9fdTMyIGZsYWdzO1xuIDQ1NzpcdFx0XHR9IG5vdGlmeTtcbiA0NTg6XHRcdFx0LyogS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUICovXG4gNDU5Olx0XHRcdHN0cnVjdCB7XG4gNDYwOlx0I2RlZmluZSBLVk1fTUVNT1JZX0VYSVRfRkxBR19QUklWQVRFXHQoMVVMTCBcdTAwM2NcdTAwM2MgMylcbiA0NjE6XHRcdFx0XHRfX3U2NCBmbGFncztcbiA0NjI6XHRcdFx0XHRfX3U2NCBncGE7XG4gNDYzOlx0XHRcdFx0X191NjQgc2l6ZTtcbiA0NjQ6XHRcdFx0fSBtZW1vcnlfZmF1bHQ7XG4gNDY1Olx0XHRcdC8qIEtWTV9FWElUX1REWCAqL1xuIDQ2NjpcdFx0XHRzdHJ1Y3Qge1xuIDQ2NzpcdFx0XHRcdF9fdTY0IGZsYWdzO1xuIDQ2ODpcdFx0XHRcdF9fdTY0IG5yO1xuIDQ2OTpcdFx0XHRcdHVuaW9uIHtcbiA0NzA6XHRcdFx0XHRcdHN0cnVjdCB7XG4gNDcxOlx0XHRcdFx0XHRcdF9fdTY0IHJldDtcbiA0NzI6XHRcdFx0XHRcdFx0X191NjQgZGF0YVs1XTtcbiA0NzM6XHRcdFx0XHRcdH0gdW5rbm93bjtcbiA0NzQ6XHRcdFx0XHRcdHN0cnVjdCB7XG4gNDc1Olx0XHRcdFx0XHRcdF9fdTY0IHJldDtcbiA0NzY6XHRcdFx0XHRcdFx0X191NjQgZ3BhO1xuIDQ3NzpcdFx0XHRcdFx0XHRfX3U2NCBzaXplO1xuIDQ3ODpcdFx0XHRcdFx0fSBnZXRfcXVvdGU7XG4gNDc5Olx0XHRcdFx0XHRzdHJ1Y3Qge1xuIDQ4MDpcdFx0XHRcdFx0XHRfX3U2NCByZXQ7XG4gNDgxOlx0XHRcdFx0XHRcdF9fdTY0IGxlYWY7XG4gNDgyOlx0XHRcdFx0XHRcdF9fdTY0IHIxMSwgcjEyLCByMTMsIHIxNDtcbiA0ODM6XHRcdFx0XHRcdH0gZ2V0X3Rkdm1jYWxsX2luZm87XG4gNDg0Olx0XHRcdFx0XHRzdHJ1Y3Qge1xuIDQ4NTpcdFx0XHRcdFx0XHRfX3U2NCByZXQ7XG4gNDg2Olx0XHRcdFx0XHRcdF9fdTY0IHZlY3RvcjtcbiA0ODc6XHRcdFx0XHRcdH0gc2V0dXBfZXZlbnRfbm90aWZ5O1xuIDQ4ODpcdFx0XHRcdH07XG4gNDg5Olx0XHRcdH0gdGR4O1xuIDQ5MDpcdFx0XHQvKiBLVk1fRVhJVF9BUk1fU0VBICovXG4gNDkxOlx0XHRcdHN0cnVjdCB7XG4gNDkyOlx0I2RlZmluZSBLVk1fRVhJVF9BUk1fU0VBX0ZMQUdfR1BBX1ZBTElEXHQoMVVMTCBcdTAwM2NcdTAwM2MgMClcbiA0OTM6XHRcdFx0XHRfX3U2NCBmbGFncztcbiA0OTQ6XHRcdFx0XHRfX3U2NCBlc3I7XG4gNDk1Olx0XHRcdFx0X191NjQgZ3ZhO1xuIDQ5NjpcdFx0XHRcdF9fdTY0IGdwYTtcbiA0OTc6XHRcdFx0fSBhcm1fc2VhO1xuIDQ5ODpcdFx0XHQvKiBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTICovXG4gNDk5Olx0XHRcdHN0cnVjdCBrdm1fZXhpdF9zbnBfcmVxX2NlcnRzIHNucF9yZXFfY2VydHM7XG4gNTAwOlx0XHRcdC8qIEZpeCB0aGUgc2l6ZSBvZiB0aGUgdW5pb24uICovXG4gNTAxOlx0XHRcdGNoYXIgcGFkZGluZ1syNTZdO1xuIDUwMjpcdFx0fTtcbiA1MDM6XHRcbiA1MDQ6XHRcdC8qIDIwNDggaXMgdGhlIHNpemUgb2YgdGhlIGNoYXIgYXJyYXkgdXNlZCB0byBib3VuZC9wYWQgdGhlIHNpemVcbiA1MDU6XHRcdCAqIG9mIHRoZSB1bmlvbiB0aGF0IGhvbGRzIHN5bmMgcmVncy5cbiA1MDY6XHRcdCAqL1xuIDUwNzpcdFx0I2RlZmluZSBTWU5DX1JFR1NfU0laRV9CWVRFUyAyMDQ4XG4gNTA4Olx0XHQvKlxuIDUwOTpcdFx0ICogc2hhcmVkIHJlZ2lzdGVycyBiZXR3ZWVuIGt2bSBhbmQgdXNlcnNwYWNlLlxuIDUxMDpcdFx0ICoga3ZtX3ZhbGlkX3JlZ3Mgc3BlY2lmaWVzIHRoZSByZWdpc3RlciBjbGFzc2VzIHNldCBieSB0aGUgaG9zdFxuIDUxMTpcdFx0ICoga3ZtX2RpcnR5X3JlZ3Mgc3BlY2lmaWVkIHRoZSByZWdpc3RlciBjbGFzc2VzIGRpcnRpZWQgYnkgdXNlcnNwYWNlXG4gNTEyOlx0XHQgKiBzdHJ1Y3Qga3ZtX3N5bmNfcmVncyBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIGFzIHdlbGwgYXMgdGhlXG4gNTEzOlx0XHQgKiBiaXRzIGZvciBrdm1fdmFsaWRfcmVncyBhbmQga3ZtX2RpcnR5X3JlZ3NcbiA1MTQ6XHRcdCAqL1xuIDUxNTpcdFx0X191NjQga3ZtX3ZhbGlkX3JlZ3M7XG4gNTE2Olx0XHRfX3U2NCBrdm1fZGlydHlfcmVncztcbiA1MTc6XHRcdHVuaW9uIHtcbiA1MTg6XHRcdFx0c3RydWN0IGt2bV9zeW5jX3JlZ3MgcmVncztcbiA1MTk6XHRcdFx0Y2hhciBwYWRkaW5nW1NZTkNfUkVHU19TSVpFX0JZVEVTXTtcbiA1MjA6XHRcdH0gcztcbiA1MjE6XHR9O1xuIDUyMjpcdFxuIDUyMzpcdC8qIGZvciBLVk1fUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gLyBLVk1fVU5SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFREWC9WTVggUmVmYWN0b3JpbmcgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgbGFyZ2VseSBhYm91dCBjb2RlIHJlb3JnYW5pemF0aW9uLCB3aXRoIGEgZm9jdXMgb24gc2hhcmVkIGxvZ2ljIGJldHdlZW4gVk1YIGFuZCBURFguIEkgc2VlIHNldmVyYWwgZnVuY3Rpb25zIGJlaW5nIGV4dHJhY3RlZCBvciBtb3ZlZCBhcm91bmQ6IGBfX3Z0X2hhbmRsZV9ub3RpZnlgLCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAsIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYCwgYW5kIGB2dF9oYW5kbGVfZXhpdGAuIFRoZXNlIGFwcGVhciB0byBiZSByZWZhY3RvcmluZyBzdGVwcywgbWFraW5nIHRoZSBjb2RlIG1vcmUgbW9kdWxhciBhbmQgbWFpbnRhaW5hYmxlLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2Ygc3VwcG9ydGluZyBib3RoIFZNWCBhbmQgVERYIGVudmlyb25tZW50cy4KClJlZ2FyZGluZyB0aGUgYG5vdGlmeWAgc3RydWN0IHdpdGhpbiBga3ZtX3J1bmAsIGl0IHNlZW1zIHVudG91Y2hlZCwgYW5kIGp1c3QgdXNlcyBmbGFncyB3aGljaCByZW1haW4gdGhlIHNhbWUuIFRoZSBgX192dF9oYW5kbGVfbm90aWZ5YCBmdW5jdGlvbiBpcyBhIGRpcmVjdCBwb3J0IGZyb20gYHZteC5jYCwgd2hpY2ggbWFrZXMgdGhpbmdzIG11Y2ggbW9yZSBjbGVhci4KClRoZSBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgc2ltaWxhcmx5IG1vdmVzIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIHNldHRpbmcgdGhlIGBidXNfbG9ja19kZXRlY3RlZGAgZmxhZywgZnJvbSBgdm14LmNgLiBUaGlzIGlzIGFub3RoZXIgZXhhbXBsZSBvZiBjb2RlIGNvbnNvbGlkYXRpb24sIG1ha2luZyB0aGUgY29kZSBsZXNzIGNvbXBsZXggYW5kIGVhc2llciB0byBmb2xsb3csIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBnZW5lcmljIGB2dF9oYW5kbGVfZXhpdGAuCgpUaGUgY2hhbmdlIGluIGB0ZHhfdG9fdm14X2V4aXRfcmVhc29uYCBpcyBtb3JlIGludGVyZXN0aW5nLiBUaGUgcmV0dXJuIHR5cGUgY2hhbmdlZCBmcm9tIGB1MzJgIHRvIGEgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAuIFRoaXMgYXBwZWFycyB0byBiZSBmb3IgZXhwcmVzc2luZyBhbiAmIzM0O2ludmFsaWQmIzM0OyBleGl0IHJlYXNvbiBpbiBURFggd2hlbiB0aGUgdkNQVSBkaWQgbm90IGVudGVyIHRoZSBndWVzdC4gU3ludGhlc2l6aW5nIHRoaXMgaW52YWxpZCBleGl0IHJlYXNvbiBpcyB0aGUgY3J1Y2lhbCBwYXJ0LiBJdCYjMzk7cyBub3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrKiB0byB1c2VyIHNwYWNlLCBidXQgcmF0aGVyIGEgcG90ZW50aWFsIGxvZ2ljIGVycm9yOiB1c2luZyBzdGFsZSwgcG90ZW50aWFsbHkgZ2FyYmFnZSwgZGF0YSBmcm9tIGEgcHJldmlvdXMgZXhpdC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgcHJldmVudHMgdGhlIHVzZSBvZiBzdGFsZSBkYXRhIGJ5IHNldHRpbmcgYHZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gMDsgdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047YC4KClRoZSBjaGVja3Mgb24gYHRkeF9nZXRfZXhpdF9pbmZvYCBhbHNvIHVzZSB0aGF0IGB0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWRgIGZvciB2YWxpZGl0eS4KCkZpbmFsbHksIHRoZSBhZGRpdGlvbnMgaW4gYHRkeF92Y3B1X2luaXRgIGVuYWJsaW5nIHRoZSBWTUNTIGNvbnRyb2xzIGZvciBURFggYXJlIHR5cGljYWwgb2YgZW5hYmxpbmcgVERYIHNwZWNpZmljIGZlYXR1cmVzLiBUaGUgYHZ0X2hhbmRsZV9leGl0YCByZWZhY3RvcmluZyBzaGFyZXMgdGhlIGxvZ2ljIGJldHdlZW4gVk1YIGFuZCBURFggd2hlbiBhIGJ1cyBsb2NrIGlzIGRldGVjdGVkLgoKR2l2ZW4gYWxsIHRoaXMsIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZSAmIzM0O3N0YWxlIGRhdGEmIzM0OyBpc3N1ZSBpcyBoYW5kbGVkIGJ5ICpzeW50aGVzaXppbmcqIGFuIGludmFsaWQgZXhpdCByZWFzb24sIGNsZWFyaW5nIG91dCB0aGUgYml0cywgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhIHN0YWxlIHZhbHVlIGZyb20gYmVpbmcgcmVhZCBhbmQgYWN0ZWQgdXBvbi4gVGh1cywgaXQmIzM5O3MgYSBidWcgKmZpeCogbm90IGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIGhlcmUgdG8gc3VnZ2VzdCB0aGF0IEtNU0FOIHdvdWxkIGJlIHJlcXVpcmVkLiBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZyB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGUgcGF0Y2gmIzM5O3MgY29ycmVjdG5lc3MgYW5kIGVuc3VyZSB0aGF0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIHVuaW9uIGlzIGNsZWFyZWQgaW4gdGhlIHJpZ2h0IHBsYWNlcywgYW5kIHRoZSBwYXRjaCB3b3JrcyB0byBhdm9pZCBhbnkgcG90ZW50aWFsIHN0YWxlLWRhdGEgaGF6YXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5pb24gdm14X2V4aXRfcmVhc29uIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTAtXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjExOnVuaW9uIHZteF9leGl0X3JlYXNvbiB7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTEyLVx0c3RydWN0IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NDMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFZNWCBFeGl0IFJlYXNvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgdW5pb24gdm14X2V4aXRfcmVhc29uYC4gSSBrbm93IGl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2h5IGEgdmlydHVhbCBtYWNoaW5lIGlzIGV4aXRpbmcgdG8gdGhlIGhvc3QsIHRoZSAmIzM0O1ZNIGV4aXQmIzM0OyBldmVudC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBkZWJ1Z2dpbmcgYW5kIG9wdGltaXppbmcgS1ZNIHBlcmZvcm1hbmNlIG9uIHg4NiwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hpY2ggc3BlY2lmaWMgcmVhc29uIGNvZGVzIG1hcCB0byB3aGF0IGV2ZW50cy4gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLCBzbyBsZXQmIzM5O3MgbmF2aWdhdGUgdGhlcmUuIEkgZXhwZWN0IHRoYXQgSSYjMzk7bGwgZmluZCBhIHVuaW9uIHN0cnVjdHVyZSBvZiBzb21lIHNvcnQuIE1vcmUgdGhhbiBsaWtlbHkgaXQmIzM5O3MgYSBiaXQgZmllbGQuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBjb25maXJtIGl0cyBzdHJ1Y3R1cmUgcXVpY2tseSwgcGVyaGFwcyBjcm9zcy1yZWZlcmVuY2luZyBpdCB3aXRoIHRoZSBJbnRlbCBTRE0gdG8gcGlucG9pbnQgYW55IGVkZ2UtY2FzZSBiZWhhdmlvciBJIG1pZ2h0IGhhdmUgbWlzc2VkLCBvciB0byBjYXRjaCByZWNlbnQgdXBkYXRlcy4gVGltZSB0byBqdW1wIGluIGFuZCByZWZyZXNoIG15IGJyYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDExOlx0dW5pb24gdm14X2V4aXRfcmVhc29uIHtcbiAgMTI6XHRcdHN0cnVjdCB7XG4gIDEzOlx0XHRcdHUzMlx0YmFzaWNcdFx0XHQ6IDE2O1xuICAxNDpcdFx0XHR1MzJcdHJlc2VydmVkMTZcdFx0OiAxO1xuICAxNTpcdFx0XHR1MzJcdHJlc2VydmVkMTdcdFx0OiAxO1xuICAxNjpcdFx0XHR1MzJcdHJlc2VydmVkMThcdFx0OiAxO1xuICAxNzpcdFx0XHR1MzJcdHJlc2VydmVkMTlcdFx0OiAxO1xuICAxODpcdFx0XHR1MzJcdHJlc2VydmVkMjBcdFx0OiAxO1xuICAxOTpcdFx0XHR1MzJcdHJlc2VydmVkMjFcdFx0OiAxO1xuICAyMDpcdFx0XHR1MzJcdHJlc2VydmVkMjJcdFx0OiAxO1xuICAyMTpcdFx0XHR1MzJcdHJlc2VydmVkMjNcdFx0OiAxO1xuICAyMjpcdFx0XHR1MzJcdHJlc2VydmVkMjRcdFx0OiAxO1xuICAyMzpcdFx0XHR1MzJcdHJlc2VydmVkMjVcdFx0OiAxO1xuICAyNDpcdFx0XHR1MzJcdGJ1c19sb2NrX2RldGVjdGVkXHQ6IDE7XG4gIDI1Olx0XHRcdHUzMlx0ZW5jbGF2ZV9tb2RlXHRcdDogMTtcbiAgMjY6XHRcdFx0dTMyXHRzbWlfcGVuZGluZ19tdGZcdFx0OiAxO1xuICAyNzpcdFx0XHR1MzJcdHNtaV9mcm9tX3ZteF9yb290XHQ6IDE7XG4gIDI4Olx0XHRcdHUzMlx0cmVzZXJ2ZWQzMFx0XHQ6IDE7XG4gIDI5Olx0XHRcdHUzMlx0ZmFpbGVkX3ZtZW50cnlcdFx0OiAxO1xuICAzMDpcdFx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMDgKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBhIDMyLWJpdCB1bmlvbiwgYHZteF9leGl0X3JlYXNvbmAuIEkmIzM5O20gZmFtaWxpYXIgd2l0aCB0aGVzZSwgYW5kIHRoaXMgcGFydGljdWxhciBvbmUgaXMgc3RydWN0dXJlZCB3aXRoIGEgYml0ZmllbGQsIGAuYmFzaWNgLCBhbmQgYSBjb21wbGV0ZSBgdTMyYCByZXByZXNlbnRhdGlvbiwgYC5mdWxsYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uLiBXaGVuIEkgc2VlIGByZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgeyAuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTiwgfTtgLCBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCwgYWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBgLmJhc2ljYCBnZXRzIGFzc2lnbmVkIGl0cyB2YWx1ZSwgYW5kIHRoZSByZXN0IG9mIHRoZSB1bmlvbiBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQsIGFuZCBJIGRvbiYjMzk7dCBmb3Jlc2VlIGFuIGlzc3VlIGhlcmUuCgpUaGVuLCBsb29raW5nIGF0IHRoZSBjb2RlIGluIGB0ZHhfdmNwdV9ydW5gLCB0aGUgZXhwbGljaXQgemVyb2luZyBvZiBgLmZ1bGxgICpiZWZvcmUqIGFzc2lnbmluZyBgLmJhc2ljYCBpcyBhIHZlcnkgZ29vZCBwcmFjdGljZS4gYHZ0LSZndDtleGl0X3JlYXNvbi5mdWxsID0gMDtgIGNsZWFycyBhbGwgYml0cywgbWFraW5nIHN1cmUgdGhhdCBpdCYjMzk7cyBmdWxseSBpbml0aWFsaXplZC4gVGhlbiwgc2V0dGluZyBgdnQtJmd0O2V4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047YCBtYWtlcyBpdCBkZXRlcm1pbmlzdGljLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaGVyZS4gVGhpcyBpcyBhIHZlcnkgY2xlYW4gYW5kIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggaXMgYWJvdXQgcmVmYWN0b3JpbmcgY29kZSB0byBzaGFyZSBsb2dpYyBiZXR3ZWVuIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcsIGFuZCBhbHNvIHJlc29sdmVzIGEgbG9naWMgYnVnIHdoZXJlIHN0YWxlIGV4aXQgcmVhc29ucyBtaWdodCBiZSB1c2VkLiBJdCYjMzk7cyBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgYnVnIGZpeGVzIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgdGhlIGNvZGUgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB2bXhfZXhpdF9yZWFzb25gIHVuaW9uLCBlbnN1cmluZyB0aGF0IGl0JiMzOTtzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCgpBcyBhbiBleHBlcnQsIEkmIzM5O20gY29tZm9ydGFibGUgc3RhdGluZyB0aGF0IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIHRvIGtlZXAgS01TQU4gZW5hYmxlZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLgpUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcgY29kZSB0byBzaGFyZSBjb21tb24gbG9naWMgZm9yIG5vdGlmeSBhbmQgYnVzIGxvY2sgVk0tZXhpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBhIHN5bnRoZXNpemVkIGludmFsaWQgZXhpdCByZWFzb24gZm9yIFREWCB0byBwcmV2ZW50IHRoZSBjb25zdW1wdGlvbiBvZiBzdGFsZSBleGl0IHJlYXNvbnMgZnJvbSBwcmV2aW91cyBydW5zLiBcblxuMS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgdmNwdS1cdTAwM2VydW5gICh3aGljaCBpcyBtYXBwZWQgdG8gdXNlciBzcGFjZSkgYXJlIGxpbWl0ZWQgdG8gc2V0dGluZyBzcGVjaWZpYyBmaWVsZHMgKGBleGl0X3JlYXNvbmAsIGBub3RpZnkuZmxhZ3NgLCBgZmxhZ3NgKSB3aXRoIGRldGVybWluaXN0aWMgdmFsdWVzLCBpZGVudGljYWwgdG8gdGhlIHByZS1leGlzdGluZyBWTVggbG9naWMuXG4yLiBUaGUgc3ludGhlc2l6ZWQgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVyb2VzIHRoZSB1bmlvbiAoZS5nLiwgYHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwYCkgYmVmb3JlIHNldHRpbmcgdGhlIGJhc2ljIGV4aXQgcmVhc29uLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIGJpdHMgZnJvbSBiZWluZyB1c2VkLlxuMy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgY29udHJvbCBmbG93LCBjb2RlIGRlZHVwbGljYXRpb24sIGFuZCBmaXhpbmcgYSBsb2dpYyBidWcgKHN0YWxlIGV4aXQgcmVhc29uKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXG5cblN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZyBjb2RlIHRvIHNoYXJlIGNvbW1vbiBsb2dpYyBmb3Igbm90aWZ5IGFuZCBidXMgbG9jayBWTS1leGl0cy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgc3ludGhlc2l6ZWQgaW52YWxpZCBleGl0IHJlYXNvbiBmb3IgVERYIHRvIHByZXZlbnQgdGhlIGNvbnN1bXB0aW9uIG9mIHN0YWxlIGV4aXQgcmVhc29ucyBmcm9tIHByZXZpb3VzIHJ1bnMuIFxuXG4xLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIHRvIGB2Y3B1LVx1MDAzZXJ1bmAgKHdoaWNoIGlzIG1hcHBlZCB0byB1c2VyIHNwYWNlKSBhcmUgbGltaXRlZCB0byBzZXR0aW5nIHNwZWNpZmljIGZpZWxkcyAoYGV4aXRfcmVhc29uYCwgYG5vdGlmeS5mbGFnc2AsIGBmbGFnc2ApIHdpdGggZGV0ZXJtaW5pc3RpYyB2YWx1ZXMsIGlkZW50aWNhbCB0byB0aGUgcHJlLWV4aXN0aW5nIFZNWCBsb2dpYy5cbjIuIFRoZSBzeW50aGVzaXplZCBgdW5pb24gdm14X2V4aXRfcmVhc29uYCBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNvZGUgZXhwbGljaXRseSB6ZXJvZXMgdGhlIHVuaW9uIChlLmcuLCBgdnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDBgKSBiZWZvcmUgc2V0dGluZyB0aGUgYmFzaWMgZXhpdCByZWFzb24sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYml0cyBmcm9tIGJlaW5nIHVzZWQuXG4zLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBjb250cm9sIGZsb3csIGNvZGUgZGVkdXBsaWNhdGlvbiwgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyAoc3RhbGUgZXhpdCByZWFzb24pLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuU3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMjozOS4xMjQ5NTg5NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4MTY4MTM0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidGR4X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcgY29kZSB0byBzaGFyZSBjb21tb24gbG9naWMgZm9yIG5vdGlmeSBhbmQgYnVzIGxvY2sgVk0tZXhpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBhIHN5bnRoZXNpemVkIGludmFsaWQgZXhpdCByZWFzb24gZm9yIFREWCB0byBwcmV2ZW50IHRoZSBjb25zdW1wdGlvbiBvZiBzdGFsZSBleGl0IHJlYXNvbnMgZnJvbSBwcmV2aW91cyBydW5zLiBcXG5cXG4xLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIHRvIGB2Y3B1LVxcdTAwM2VydW5gICh3aGljaCBpcyBtYXBwZWQgdG8gdXNlciBzcGFjZSkgYXJlIGxpbWl0ZWQgdG8gc2V0dGluZyBzcGVjaWZpYyBmaWVsZHMgKGBleGl0X3JlYXNvbmAsIGBub3RpZnkuZmxhZ3NgLCBgZmxhZ3NgKSB3aXRoIGRldGVybWluaXN0aWMgdmFsdWVzLCBpZGVudGljYWwgdG8gdGhlIHByZS1leGlzdGluZyBWTVggbG9naWMuXFxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDBgKSBiZWZvcmUgc2V0dGluZyB0aGUgYmFzaWMgZXhpdCByZWFzb24sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYml0cyBmcm9tIGJlaW5nIHVzZWQuXFxuMy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgY29udHJvbCBmbG93LCBjb2RlIGRlZHVwbGljYXRpb24sIGFuZCBmaXhpbmcgYSBsb2dpYyBidWcgKHN0YWxlIGV4aXQgcmVhc29uKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBJdCBpbnRyb2R1Y2VzIGEgY29tbW9uIHZ0X2hhbmRsZV9leGl0IGFuZCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0IGZvciBib3RoIFZNWCBhbmQgVERYLCBhbmQgdXBkYXRlcyB0ZHhfaGFuZGxlX2V4aXQgdG8gaGFuZGxlIHRoZXNlIGV4aXRzLiBUaGVzZSBhcmUgY29yZSB2aXJ0dWFsaXphdGlvbiBwYXRocyByZWFjaGFibGUgZnJvbSBndWVzdCBleGVjdXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAyOjM5LjEyNDk2NDg4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzU5NDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6MDI6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaCBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG5pbmRleCAwODAwNTY3NjcwMmMyLi5iYmVlYzE5N2E1MDdhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXFxuQEAgLTQsNiArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3ZteC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIm1tdS5oXFxcIlxcbiBcXG5AQCAtMTgzLDYgKzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gXFx0a3ZtX3ZjcHVfdHJpZ2dlcl9wb3N0ZWRfaW50ZXJydXB0KHZjcHUsIFBPU1RFRF9JTlRSX1ZFQ1RPUik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fdnRfaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpXFxuK3tcXG4rXFx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xcbitcXG4rXFx0Kyt2Y3B1LVxcdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XFxuK1xcbitcXHRpZiAodmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLm5vdGlmeV92bWV4aXRfZmxhZ3MgXFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxcbitcXHQgICAgY29udGV4dF9pbnZhbGlkKSB7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XFxuK1xcdFxcdHZjcHUtXFx1MDAzZXJ1bi1cXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cXG4rXFx0XFx0XFx0XFx0XFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4gbm9pbnN0ciB2b2lkIHZteF9oYW5kbGVfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbiAjZW5kaWYgLyogX19LVk1fWDg2X1ZNWF9DT01NT05fSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXFxuQEAgLTE1NCwxNSArMTU0LDYgQEAgc3RhdGljIGZhc3RwYXRoX3QgdnRfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxcbiBcXHRyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi1cXHRcXHRcXHQgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKVxcbi17XFxuLVxcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxcbi1cXHRcXHRyZXR1cm4gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG4tXFxuLVxcdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xcbi19XFxuLVxcbiBzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4ge1xcbiBcXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xcbkBAIC04NzYsNiArODY3LDQ0IEBAIHN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG4gXFxuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBIYXJkd2FyZSBtYXkgb3IgbWF5IG5vdCBzZXQgdGhlIEJVU19MT0NLX0RFVEVDVEVEIGZsYWcgb24gQlVTX0xPQ0tcXG4rXFx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nXFxuK1xcdCAqIHRvIC5oYW5kbGVfZXhpdCgpIGNhbGxiYWNrLlxcbitcXHQgKi9cXG4rXFx0dG9fdnQodmNwdSktXFx1MDAzZWV4aXRfcmVhc29uLmJ1c19sb2NrX2RldGVjdGVkID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbitcXHRcXHRcXHQgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbisjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcXG4rXFx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXFxuK1xcdFxcdHJldCA9IHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuK1xcdGVsc2VcXG4rI2VuZGlmXFxuK1xcdFxcdHJldCA9IHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpc1xcbitcXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcXG4rXFx0fVxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAjZGVmaW5lIFZNWF9SRVFVSVJFRF9BUElDVl9JTkhJQklUU1xcdFxcdFxcdFxcdFxcXFxcXG4gXFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFxcdFxcdFxcdFxcXFxcXG4gXFx0IEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9BQlNFTlQpIHxcXHRcXHRcXHRcXFxcXFxuQEAgLTk0OSw3ICs5NzgsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdnRfeDg2X29wcyBfX2luaXRkYXRhID0ge1xcbiBcXG4gXFx0LnZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24gPSB2dF9vcF90ZHhfb25seSh2Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uKSxcXG4gXFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxcbi1cXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXFxuK1xcdC5oYW5kbGVfZXhpdCA9IHZ0X2hhbmRsZV9leGl0LFxcbiBcXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxcbiBcXHQudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbixcXG4gXFx0LnVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQgPSB2dF9vcCh1bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG5pbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuQEAgLTkyMSwzNiArOTIxLDU0IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh1NjQgdnBfZW50ZXJfcmV0KVxcbiB7XFxuLVxcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xcbi1cXHR1MzIgZXhpdF9yZWFzb247XFxuLVxcbi1cXHRzd2l0Y2ggKHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0IFxcdTAwMjYgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7XFxuK1xcdHN3aXRjaCAodnBfZW50ZXJfcmV0IFxcdTAwMjYgVERYX1NFQU1DQUxMX1NUQVRVU19NQVNLKSB7XFxuIFxcdGNhc2UgVERYX1NVQ0NFU1M6XFxuIFxcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9WQ1BVOlxcbiBcXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVEQ6XFxuIFxcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9OT05fQUNDRVNTSUJMRTpcXG4gXFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gLTF1O1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4rfVxcbitcXG4rLyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqL1xcbisjZGVmaW5lIFREWF9JTlZBTElEX0VYSVRfUkVBU09OXFx0XFx0VTE2X01BWFxcbiBcXG4tXFx0ZXhpdF9yZWFzb24gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuK1xcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWCBtb2R1bGVcXG4rXFx0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMgdW5kZWZpbmVkLFxcbitcXHQgKiBidXQgdGhpcyBpcyBOT1QgYSBmYWlsZWQgVk0tRW50ZXIuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXFx1MDAzZXZwX2VudGVyX3JldCkpXFxuK1xcdFxcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XFxuK1xcdFxcdFxcdC5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OLFxcbitcXHRcXHR9O1xcbiBcXG4tXFx0c3dpdGNoIChleGl0X3JlYXNvbikge1xcbitcXHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXFx1MDAzZXZwX2VudGVyX3JldDtcXG4rXFxuK1xcdHN3aXRjaCAoZXhpdF9yZWFzb24uYmFzaWMpIHtcXG4gXFx0Y2FzZSBFWElUX1JFQVNPTl9URENBTEw6XFxuIFxcdFxcdGlmICh0ZHZtY2FsbF9leGl0X3R5cGUodmNwdSkpXFxuLVxcdFxcdFxcdHJldHVybiBFWElUX1JFQVNPTl9WTUNBTEw7XFxuLVxcbi1cXHRcXHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0XFx0XFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0ZXhpdF9yZWFzb24uYmFzaWMgPSB0ZGNhbGxfdG9fdm14X2V4aXRfcmVhc29uKHZjcHUpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXFxuIFxcdFxcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHJldHVybiAtMXU7XFxuK1xcdFxcdGV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC05NjcsNyArOTg1LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFxcdTAwMjZ0ZHgtXFx1MDAzZXZwLCBcXHUwMDI2dGR4LVxcdTAwM2V2cF9lbnRlcl9hcmdzKTtcXG4gXFxuLVxcdHZ0LVxcdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4rXFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcXG4gXFxuIFxcdHZ0LVxcdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3MucmN4O1xcbiBcXHR0ZHgtXFx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXFx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xcbkBAIC05ODEsOCArOTk5LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIHtcXG4tXFx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XFxuK1xcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5O1xcbiB9XFxuIFxcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTEwNzEsOCArMTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXFxuIFxcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxcbiBcXHQgKiBURENBTExzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXFx1MDAzZWt2bSktXFx1MDAzZXdhaXRfZm9yX3NlcHRfemFwKSkpXFxuK1xcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVxcdTAwM2Vrdm0pLVxcdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSB2Q1BVIG5ldmVyIGVudGVyZWQgdGhlIGd1ZXN0LCBidXQgdGhpcyBsb29rcyBsaWtlIGFcXG4rXFx0XFx0ICogaGFuZGxlZCBleGl0IHRvIHRoZSBjYWxsZXIuICBTeW50aGVzaXplIGFuIGludmFsaWQgZXhpdFxcbitcXHRcXHQgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQncyBzdGFsZSB2YWx1ZSBpc24ndCBjb25zdW1lZFxcbitcXHRcXHQgKiBhIHNlY29uZCB0aW1lLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBNYWtlIGl0IHN1cGVyIGNsZWFyIHRoYXQgYml0WzMxOjE2XSBpcyBjbGVhcmVkIHRvIDAgYW5kIG9ubHlcXG4rXFx0XFx0ICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZFxcbitcXHRcXHQgKiBpbnZhbGlkIGV4aXQgcmVhc29uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dnQtXFx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwO1xcbitcXHRcXHR2dC1cXHUwMDNlZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcXG4gXFx0XFx0cmV0dXJuIEVYSVRfRkFTVFBBVEhfRVhJVF9IQU5ETEVEO1xcbitcXHR9XFxuIFxcbiBcXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFxcdTAwMjYgS1ZNX1JVTl9GT1JDRV9JTU1FRElBVEVfRVhJVCk7XFxuIFxcbkBAIC0yMTI2LDYgKzIxNTYsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXFxuIFxcdFxcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxcbitcXHRcXHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXFxuK1xcdFxcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSkpO1xcbitcXHRjYXNlIEVYSVRfUkVBU09OX0JVU19MT0NLOlxcbitcXHRcXHRyZXR1cm4gdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCh2Y3B1KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtMjE0MSw3ICsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxcbiBcXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcXG4gXFxuIFxcdCpyZWFzb24gPSB0ZHgtXFx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XFxuLVxcdGlmICgqcmVhc29uICE9IC0xdSkge1xcbitcXHRpZiAodGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHRkeC1cXHUwMDNldnBfZW50ZXJfcmV0KSkge1xcbiBcXHRcXHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcXG4gXFx0XFx0KmluZm8yID0gdGR4LVxcdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xcbiBcXHRcXHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XFxuQEAgLTMxNTQsNiArMzE4OSwxNyBAQCBzdGF0aWMgaW50IHRkeF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3RkeF9jbWQgKmNtZClcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFxcdTAwMjZ0ZHgtXFx1MDAzZXZ0LnBpX2Rlc2MpKTtcXG4gXFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFBJTl9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIFBJTl9CQVNFRF9QT1NURURfSU5UUik7XFxuIFxcbitcXHRpZiAoa3ZtX25vdGlmeV92bWV4aXRfZW5hYmxlZCh2Y3B1LVxcdTAwM2Vrdm0pKSB7XFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfTk9USUZZX1ZNX0VYSVRJTkcpO1xcbitcXHRcXHR0ZF92bWNzX3dyaXRlMzIodGR4LCBOT1RJRllfV0lORE9XLFxcbitcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXFxuK1xcdFxcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHRcXHRcXHQgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTtcXG4rXFxuIFxcdHRkeC1cXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTNiZmU2YWNhMWEwZS4uNDkwYmFhZTU2Y2YxNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC02MjY1LDIzICs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfWDg2X1NHWF9LVk0gKi9cXG4gXFxuLXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLXtcXG4tXFx0LypcXG4tXFx0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXFxuLVxcdCAqIFZNLUV4aXRzLiBVbmNvbmRpdGlvbmFsbHkgc2V0IHRoZSBmbGFnIGhlcmUgYW5kIGxlYXZlIHRoZSBoYW5kbGluZyB0b1xcbi1cXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cXG4tXFx0ICovXFxuLVxcdHRvX3Z0KHZjcHUpLVxcdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XFxuLVxcdHJldHVybiAxO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XFxuLVxcdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFxcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcXG4tXFxuLVxcdCsrdmNwdS1cXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTm90aWZ5IFZNIGV4aXQgaGFwcGVuZWQgd2hpbGUgZXhlY3V0aW5nIGlyZXQgZnJvbSBOTUksXFxuQEAgLTYyOTEsMTUgKzYyNzcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcXG4gXFx0XFx0XFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xcbiBcXG4tXFx0aWYgKHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFxcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcXG4tXFx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTk9USUZZO1xcbi1cXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XFxuLVxcdFxcdFxcdFxcdFxcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDE7XFxuK1xcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgZXhpdF9xdWFsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bXhfZ2V0X21zcl9pbW1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtNjM3NSw3ICs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbiBcXHRbRVhJVF9SRUFTT05fVk1GVU5DXVxcdFxcdCAgICAgID0gaGFuZGxlX3ZteF9pbnN0cnVjdGlvbixcXG4gXFx0W0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdXFx0ICAgICAgPSBoYW5kbGVfcHJlZW1wdGlvbl90aW1lcixcXG4gXFx0W0VYSVRfUkVBU09OX0VOQ0xTXVxcdFxcdCAgICAgID0gaGFuZGxlX2VuY2xzLFxcbi1cXHRbRVhJVF9SRUFTT05fQlVTX0xPQ0tdICAgICAgICAgICAgICAgID0gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCxcXG4rXFx0W0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQsXFxuIFxcdFtFWElUX1JFQVNPTl9OT1RJRlldXFx0XFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxcbiBcXHRbRVhJVF9SRUFTT05fU0VBTUNBTExdXFx0XFx0ICAgICAgPSBoYW5kbGVfdGR4X2luc3RydWN0aW9uLFxcbiBcXHRbRVhJVF9SRUFTT05fVERDQUxMXVxcdFxcdCAgICAgID0gaGFuZGxlX3RkeF9pbnN0cnVjdGlvbixcXG5AQCAtNjcwMyw3ICs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKiBUaGUgZ3Vlc3QgaGFzIGV4aXRlZC4gIFNlZSBpZiB3ZSBjYW4gZml4IGl0IG9yIGlmIHdlIG5lZWQgdXNlcnNwYWNlXFxuICAqIGFzc2lzdGFuY2UuXFxuICAqL1xcbi1zdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbitpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxcbiB7XFxuIFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiBcXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb24gPSB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpO1xcbkBAIC02ODYyLDI0ICs2ODQwLDYgQEAgc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuLXtcXG4tXFx0aW50IHJldCA9IF9fdm14X2hhbmRsZV9leGl0KHZjcHUsIGV4aXRfZmFzdHBhdGgpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcXG4tXFx0ICogYSBidXMgbG9jayBpbiBndWVzdC5cXG4tXFx0ICovXFxuLVxcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbi1cXHRcXHRcXHR2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZWV4aXRfcmVhc29uID0gS1ZNX0VYSVRfWDg2X0JVU19MT0NLO1xcbi1cXG4tXFx0XFx0dmNwdS1cXHUwMDNlcnVuLVxcdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4gdm9pZCB2bXhfdXBkYXRlX2NyOF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHByLCBpbnQgaXJyKVxcbiB7XFxuIFxcdGludCB0cHJfdGhyZXNob2xkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMjo0MC41Nzk2MjMxODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NTQ0MDU2OTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ0ZHhfaGFuZGxlX2V4aXRcIixcbiAgICBcInZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBidXMgbG9jayBkZXRlY3Rpb24gYW5kIG5vdGlmeSBWTSBleGl0cy4gSXQgaW50cm9kdWNlcyBhIGNvbW1vbiB2dF9oYW5kbGVfZXhpdCBhbmQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCBmb3IgYm90aCBWTVggYW5kIFREWCwgYW5kIHVwZGF0ZXMgdGR4X2hhbmRsZV9leGl0IHRvIGhhbmRsZSB0aGVzZSBleGl0cy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gcGF0aHMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZjhkYWFkMjQwOWQwNTkyZGNhOGMyZWVhYjcyMzBkZDgzYzhjZTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6MDI6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuaW5kZXggMDgwMDU2NzY3MDJjMi4uYmJlZWMxOTdhNTA3YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcG9zdGVkX2ludHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS92bXguaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwibW11LmhcIlxuIFxuQEAgLTE4Myw2ICsxODQsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gXHRrdm1fdmNwdV90cmlnZ2VyX3Bvc3RlZF9pbnRlcnJ1cHQodmNwdSwgUE9TVEVEX0lOVFJfVkVDVE9SKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgX192dF9oYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBleGl0X3F1YWwpXG4re1xuK1x0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4rXG4rXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbitcdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4rXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4rXHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHJldHVybiAxO1xuK31cbitcbiBub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbitpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuICNlbmRpZiAvKiBfX0tWTV9YODZfVk1YX0NPTU1PTl9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmMgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuaW5kZXggMGZmMzIzMGZkOTVlOC4uMTBkZjk2NjdkMGMwNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L21haW4uY1xuQEAgLTE1NCwxNSArMTU0LDYgQEAgc3RhdGljIGZhc3RwYXRoX3QgdnRfdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcnVuX2ZsYWdzKVxuIFx0cmV0dXJuIHZteF92Y3B1X3J1bih2Y3B1LCBydW5fZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi1cdFx0XHQgIGVudW0gZXhpdF9mYXN0cGF0aF9jb21wbGV0aW9uIGZhc3RwYXRoKVxuLXtcbi1cdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuLVx0XHRyZXR1cm4gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcbi1cbi1cdHJldHVybiB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCB2dF91bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSkge1xuQEAgLTg3Niw2ICs4NjcsNDQgQEAgc3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbiAjZGVmaW5lIHZ0X29wX3RkeF9vbmx5KG5hbWUpIE5VTExcbiAjZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cbiBcbitpbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0LypcbitcdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuK1x0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nXG4rXHQgKiB0byAuaGFuZGxlX2V4aXQoKSBjYWxsYmFjay5cbitcdCAqL1xuK1x0dG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4re1xuK1x0aW50IHJldDtcbitcbisjaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcbitcdGlmIChpc190ZF92Y3B1KHZjcHUpKVxuK1x0XHRyZXQgPSB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuK1x0ZWxzZVxuKyNlbmRpZlxuK1x0XHRyZXQgPSB2bXhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuK1xuK1x0LypcbitcdCAqIEV4aXQgdG8gdXNlciBzcGFjZSB3aGVuIGJ1cyBsb2NrIGRldGVjdGVkIHRvIGluZm9ybSB0aGF0IHRoZXJlIGlzXG4rXHQgKiBhIGJ1cyBsb2NrIGluIGd1ZXN0LlxuK1x0ICovXG4rXHRpZiAodm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5idXNfbG9ja19kZXRlY3RlZCkge1xuK1x0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VmbGFncyB8PSBLVk1fUlVOX1g4Nl9CVVNfTE9DSztcbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuICNkZWZpbmUgVk1YX1JFUVVJUkVEX0FQSUNWX0lOSElCSVRTXHRcdFx0XHRcXFxuIFx0KEJJVChBUElDVl9JTkhJQklUX1JFQVNPTl9ESVNBQkxFRCkgfFx0XHRcdFxcXG4gXHQgQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0FCU0VOVCkgfFx0XHRcdFxcXG5AQCAtOTQ5LDcgKzk3OCw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB2dF94ODZfb3BzIF9faW5pdGRhdGEgPSB7XG4gXG4gXHQudmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiA9IHZ0X29wX3RkeF9vbmx5KHZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24pLFxuIFx0LnZjcHVfcnVuID0gdnRfb3AodmNwdV9ydW4pLFxuLVx0LmhhbmRsZV9leGl0ID0gdnRfb3AoaGFuZGxlX2V4aXQpLFxuK1x0LmhhbmRsZV9leGl0ID0gdnRfaGFuZGxlX2V4aXQsXG4gXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxuIFx0LnVwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF91cGRhdGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCA9IHZ0X29wKHVuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQpLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5pbmRleCBiMjcyYzIwNTg2YTc0Li4zNjRhMjMyMmE5ZjVhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xuQEAgLTkyMSwzNiArOTIxLDU0IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0cmV0dXJuIEVYSVRfUkVBU09OX1REQ0FMTDtcbiB9XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh1NjQgdnBfZW50ZXJfcmV0KVxuIHtcbi1cdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuLVx0dTMyIGV4aXRfcmVhc29uO1xuLVxuLVx0c3dpdGNoICh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbitcdHN3aXRjaCAodnBfZW50ZXJfcmV0IFx1MDAyNiBURFhfU0VBTUNBTExfU1RBVFVTX01BU0spIHtcbiBcdGNhc2UgVERYX1NVQ0NFU1M6XG4gXHRjYXNlIFREWF9OT05fUkVDT1ZFUkFCTEVfVkNQVTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URDpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9OT05fQUNDRVNTSUJMRTpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9URF9XUk9OR19BUElDX01PREU6XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybiAtMXU7XG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbit9XG4rXG4rLyogU3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiAqL1xuKyNkZWZpbmUgVERYX0lOVkFMSURfRVhJVF9SRUFTT05cdFx0VTE2X01BWFxuIFxuLVx0ZXhpdF9yZWFzb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5pb24gdm14X2V4aXRfcmVhc29uIHRkeF90b192bXhfZXhpdF9yZWFzb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuK3tcbitcdHN0cnVjdCB2Y3B1X3RkeCAqdGR4ID0gdG9fdGR4KHZjcHUpO1xuK1x0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uO1xuK1xuK1x0LypcbitcdCAqIFJldHVybiB0aGUgc3ludGhlc2l6ZWQgaW52YWxpZCBFeGl0IFJlYXNvbiwgYXMgdGhlIFREWCBtb2R1bGVcbitcdCAqIG5ldmVyIGF0dGVtcHRlZCB0byBydW4gdGhlIHZDUFUsIGkuZS4gdGhlIEV4aXQgUmVhc29uIGlzIHVuZGVmaW5lZCxcbitcdCAqIGJ1dCB0aGlzIGlzIE5PVCBhIGZhaWxlZCBWTS1FbnRlci5cbitcdCAqL1xuK1x0aWYgKCF0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWQodGR4LVx1MDAzZXZwX2VudGVyX3JldCkpXG4rXHRcdHJldHVybiAodW5pb24gdm14X2V4aXRfcmVhc29uKSB7XG4rXHRcdFx0LmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT04sXG4rXHRcdH07XG4gXG4tXHRzd2l0Y2ggKGV4aXRfcmVhc29uKSB7XG4rXHRleGl0X3JlYXNvbi5mdWxsID0gKHUzMil0ZHgtXHUwMDNldnBfZW50ZXJfcmV0O1xuK1xuK1x0c3dpdGNoIChleGl0X3JlYXNvbi5iYXNpYykge1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9URENBTEw6XG4gXHRcdGlmICh0ZHZtY2FsbF9leGl0X3R5cGUodmNwdSkpXG4tXHRcdFx0cmV0dXJuIEVYSVRfUkVBU09OX1ZNQ0FMTDtcbi1cbi1cdFx0cmV0dXJuIHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHRcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBFWElUX1JFQVNPTl9WTUNBTEw7XG4rXHRcdGVsc2VcbitcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IHRkY2FsbF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHOlxuIFx0XHQvKlxuIFx0XHQgKiBEZWZlciBLVk1fQlVHX09OKCkgdW50aWwgdGR4X2hhbmRsZV9leGl0KCkgYmVjYXVzZSB0aGlzIGlzIGluXG4gXHRcdCAqIG5vbi1pbnN0cnVtZW50YWJsZSBjb2RlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC5cbiBcdFx0ICovXG4tXHRcdHJldHVybiAtMXU7XG4rXHRcdGV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtOTY3LDcgKzk4NSw3IEBAIHN0YXRpYyBub2luc3RyIHZvaWQgdGR4X3ZjcHVfZW50ZXJfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHR0ZHgtXHUwMDNldnBfZW50ZXJfcmV0ID0gdGRoX3ZwX2VudGVyKFx1MDAyNnRkeC1cdTAwM2V2cCwgXHUwMDI2dGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MpO1xuIFxuLVx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4rXHR2dC1cdTAwM2VleGl0X3JlYXNvbiA9IHRkeF90b192bXhfZXhpdF9yZWFzb24odmNwdSk7XG4gXG4gXHR2dC1cdTAwM2VleGl0X3F1YWxpZmljYXRpb24gPSB0ZHgtXHUwMDNldnBfZW50ZXJfYXJncy5yY3g7XG4gXHR0ZHgtXHUwMDNlZXh0X2V4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJkeDtcbkBAIC05ODEsOCArOTk5LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBzdGF0aWMgYm9vbCB0ZHhfZmFpbGVkX3ZtZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbi1cdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZnVsbCAhPSAtMXU7XG4rXHRyZXR1cm4gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mYWlsZWRfdm1lbnRyeTtcbiB9XG4gXG4gc3RhdGljIGZhc3RwYXRoX3QgdGR4X2V4aXRfaGFuZGxlcnNfZmFzdHBhdGgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEwNzEsOCArMTA4OCwyMSBAQCBmYXN0cGF0aF90IHRkeF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHQgKiBhbGxvd2luZyB2Q1BVIGVudHJ5IHRvIGF2b2lkIGNvbnRlbnRpb24gd2l0aCB0ZGhfdnBfZW50ZXIoKSBhbmRcbiBcdCAqIFREQ0FMTHMuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSlcbitcdGlmICh1bmxpa2VseShSRUFEX09OQ0UodG9fa3ZtX3RkeCh2Y3B1LVx1MDAzZWt2bSktXHUwMDNld2FpdF9mb3Jfc2VwdF96YXApKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgdkNQVSBuZXZlciBlbnRlcmVkIHRoZSBndWVzdCwgYnV0IHRoaXMgbG9va3MgbGlrZSBhXG4rXHRcdCAqIGhhbmRsZWQgZXhpdCB0byB0aGUgY2FsbGVyLiAgU3ludGhlc2l6ZSBhbiBpbnZhbGlkIGV4aXRcbitcdFx0ICogcmVhc29uIHNvIHRoZSBwcmV2aW91cyBleGl0J3Mgc3RhbGUgdmFsdWUgaXNuJ3QgY29uc3VtZWRcbitcdFx0ICogYSBzZWNvbmQgdGltZS5cbitcdFx0ICpcbitcdFx0ICogTWFrZSBpdCBzdXBlciBjbGVhciB0aGF0IGJpdFszMToxNl0gaXMgY2xlYXJlZCB0byAwIGFuZCBvbmx5XG4rXHRcdCAqIGJhc2ljIGV4aXQgcmVhc29uIChiaXRbMTU6MF0pIGlzIHNldCB0byB0aGUgc3ludGhlc2l6ZWRcbitcdFx0ICogaW52YWxpZCBleGl0IHJlYXNvbi5cbitcdFx0ICovXG4rXHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwO1xuK1x0XHR2dC1cdTAwM2VleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO1xuIFx0XHRyZXR1cm4gRVhJVF9GQVNUUEFUSF9FWElUX0hBTkRMRUQ7XG4rXHR9XG4gXG4gXHR0cmFjZV9rdm1fZW50cnkodmNwdSwgcnVuX2ZsYWdzIFx1MDAyNiBLVk1fUlVOX0ZPUkNFX0lNTUVESUFURV9FWElUKTtcbiBcbkBAIC0yMTI2LDYgKzIxNTYsMTEgQEAgaW50IHRkeF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZmFzdHBhdGgpXG4gXHRcdCAqIC0gSWYgaXQncyBub3QgYW4gTVNNSSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIDE7XG4rXHRjYXNlIEVYSVRfUkVBU09OX05PVElGWTpcbitcdFx0LyogTk1JIGJsb2NraW5nIHN0YXRlIGlzIGhhbmRsZWQgYnkgVERYIG1vZHVsZSAqL1xuK1x0XHRyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpKTtcbitcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XG4rXHRcdHJldHVybiB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMjE0MSw3ICsyMTc2LDcgQEAgdm9pZCB0ZHhfZ2V0X2V4aXRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqcmVhc29uLFxuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXG4gXHQqcmVhc29uID0gdGR4LVx1MDAzZXZ0LmV4aXRfcmVhc29uLmZ1bGw7XG4tXHRpZiAoKnJlYXNvbiAhPSAtMXUpIHtcbitcdGlmICh0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWQodGR4LVx1MDAzZXZwX2VudGVyX3JldCkpIHtcbiBcdFx0KmluZm8xID0gdm14X2dldF9leGl0X3F1YWwodmNwdSk7XG4gXHRcdCppbmZvMiA9IHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uO1xuIFx0XHQqaW50cl9pbmZvID0gdm14X2dldF9pbnRyX2luZm8odmNwdSk7XG5AQCAtMzE1NCw2ICszMTg5LDE3IEBAIHN0YXRpYyBpbnQgdGR4X3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdGR4X2NtZCAqY21kKVxuIFx0dGRfdm1jc193cml0ZTY0KHRkeCwgUE9TVEVEX0lOVFJfREVTQ19BRERSLCBfX3BhKFx1MDAyNnRkeC1cdTAwM2V2dC5waV9kZXNjKSk7XG4gXHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgUElOX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgUElOX0JBU0VEX1BPU1RFRF9JTlRSKTtcbiBcbitcdGlmIChrdm1fbm90aWZ5X3ZtZXhpdF9lbmFibGVkKHZjcHUtXHUwMDNla3ZtKSkge1xuK1x0XHR0ZF92bWNzX3NldGJpdDMyKHRkeCwgU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbitcdFx0XHRcdCBTRUNPTkRBUllfRVhFQ19OT1RJRllfVk1fRVhJVElORyk7XG4rXHRcdHRkX3ZtY3Nfd3JpdGUzMih0ZHgsIE5PVElGWV9XSU5ET1csXG4rXHRcdFx0XHR2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLm5vdGlmeV93aW5kb3cpO1xuK1x0fVxuK1xuK1x0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guYnVzX2xvY2tfZGV0ZWN0aW9uX2VuYWJsZWQpXG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX0JVU19MT0NLX0RFVEVDVElPTik7XG4rXG4gXHR0ZHgtXHUwMDNlc3RhdGUgPSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVEO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLjQ5MGJhYWU1NmNmMTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtNjI2NSwyMyArNjI2NSw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2VuY2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19YODZfU0dYX0tWTSAqL1xuIFxuLXN0YXRpYyBpbnQgaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4te1xuLVx0Lypcbi1cdCAqIEhhcmR3YXJlIG1heSBvciBtYXkgbm90IHNldCB0aGUgQlVTX0xPQ0tfREVURUNURUQgZmxhZyBvbiBCVVNfTE9DS1xuLVx0ICogVk0tRXhpdHMuIFVuY29uZGl0aW9uYWxseSBzZXQgdGhlIGZsYWcgaGVyZSBhbmQgbGVhdmUgdGhlIGhhbmRsaW5nIHRvXG4tXHQgKiB2bXhfaGFuZGxlX2V4aXQoKS5cbi1cdCAqL1xuLVx0dG9fdnQodmNwdSktXHUwMDNlZXhpdF9yZWFzb24uYnVzX2xvY2tfZGV0ZWN0ZWQgPSB0cnVlO1xuLVx0cmV0dXJuIDE7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaGFuZGxlX25vdGlmeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBleGl0X3F1YWwgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbi1cdGJvb2wgY29udGV4dF9pbnZhbGlkID0gZXhpdF9xdWFsIFx1MDAyNiBOT1RJRllfVk1fQ09OVEVYVF9JTlZBTElEO1xuLVxuLVx0Kyt2Y3B1LVx1MDAzZXN0YXQubm90aWZ5X3dpbmRvd19leGl0cztcbiBcbiBcdC8qXG4gXHQgKiBOb3RpZnkgVk0gZXhpdCBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgaXJldCBmcm9tIE5NSSxcbkBAIC02MjkxLDE1ICs2Mjc3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0dm1jc19zZXRfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sXG4gXHRcdFx0ICAgICAgR1VFU1RfSU5UUl9TVEFURV9OTUkpO1xuIFxuLVx0aWYgKHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3ZtZXhpdF9mbGFncyBcdTAwMjYgS1ZNX1g4Nl9OT1RJRllfVk1FWElUX1VTRVIgfHxcbi1cdCAgICBjb250ZXh0X2ludmFsaWQpIHtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7XG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/XG4tXHRcdFx0XHRcdCAgS1ZNX05PVElGWV9DT05URVhUX0lOVkFMSUQgOiAwO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdHJldHVybiAxO1xuK1x0cmV0dXJuIF9fdnRfaGFuZGxlX25vdGlmeSh2Y3B1LCBleGl0X3F1YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZteF9nZXRfbXNyX2ltbV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTYzNzUsNyArNjM1Myw3IEBAIHN0YXRpYyBpbnQgKCprdm1fdm14X2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcbiBcdFtFWElUX1JFQVNPTl9WTUZVTkNdXHRcdCAgICAgID0gaGFuZGxlX3ZteF9pbnN0cnVjdGlvbixcbiBcdFtFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSXVx0ICAgICAgPSBoYW5kbGVfcHJlZW1wdGlvbl90aW1lcixcbiBcdFtFWElUX1JFQVNPTl9FTkNMU11cdFx0ICAgICAgPSBoYW5kbGVfZW5jbHMsXG4tXHRbRVhJVF9SRUFTT05fQlVTX0xPQ0tdICAgICAgICAgICAgICAgID0gaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCxcbitcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuIFx0W0VYSVRfUkVBU09OX05PVElGWV1cdFx0ICAgICAgPSBoYW5kbGVfbm90aWZ5LFxuIFx0W0VYSVRfUkVBU09OX1NFQU1DQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG4gXHRbRVhJVF9SRUFTT05fVERDQUxMXVx0XHQgICAgICA9IGhhbmRsZV90ZHhfaW5zdHJ1Y3Rpb24sXG5AQCAtNjcwMyw3ICs2NjgxLDcgQEAgdm9pZCBkdW1wX3ZtY3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIFRoZSBndWVzdCBoYXMgZXhpdGVkLiAgU2VlIGlmIHdlIGNhbiBmaXggaXQgb3IgaWYgd2UgbmVlZCB1c2Vyc3BhY2VcbiAgKiBhc3Npc3RhbmNlLlxuICAqL1xuLXN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4raW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiB7XG4gXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcbiBcdHVuaW9uIHZteF9leGl0X3JlYXNvbiBleGl0X3JlYXNvbiA9IHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSk7XG5AQCAtNjg2MiwyNCArNjg0MCw2IEBAIHN0YXRpYyBpbnQgX192bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbi17XG4tXHRpbnQgcmV0ID0gX192bXhfaGFuZGxlX2V4aXQodmNwdSwgZXhpdF9mYXN0cGF0aCk7XG4tXG4tXHQvKlxuLVx0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcbi1cdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXG4tXHQgKi9cbi1cdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XG4tXHRcdGlmIChyZXQgXHUwMDNlIDApXG4tXHRcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9YODZfQlVTX0xPQ0s7XG4tXG4tXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHZvaWQgdm14X3VwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHRwciwgaW50IGlycilcbiB7XG4gXHRpbnQgdHByX3RocmVzaG9sZDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAyOjQwLjU3OTYyNTgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDcwOTU2MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgS1ZNIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgdHdlYWtzIEtWTSdzIFZNWCBhbmQgVERYIGNvZGUsIHNwZWNpZmljYWxseSBob3cgVk0gZXhpdHMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBzaW5jZSB0aGF0J3MgYSBrZXkgcGFydCBvZiBlbnN1cmluZyBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb21lIG5ldyBmdW5jdGlvbnM6IGBfX3Z0X2hhbmRsZV9ub3RpZnlgIChzdGF0aWMgaW5saW5lKSwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCBhbmQgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBsaWtlIGB0ZHhfaGFuZGxlX2V4aXRgLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAsIGFuZCBgdGR4X3ZjcHVfaW5pdGAuIEl0IGFsc28gdG91Y2hlcyBgdnRfaGFuZGxlX2V4aXRgIGFuZCBgdm14X2hhbmRsZV9leGl0YC5cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgVERYIOKAkyBpdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgc28gSSBuZWVkIHRvIGNvbnNpZGVyIGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4gV2Uga25vdyBLVk0gaXRzZWxmIGdldHMgYSBsb3Qgb2YgbG92ZSBmcm9tIHN5emthbGxlci4gVGhlIHByb21wdCBpbmRpY2F0ZXMgdGhhdCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcmVuJ3Qgd29ydGggZnV6emluZywgYnV0IFREWCBpcyBhIGJpdCBkaWZmZXJlbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHNwZWNpZmljIFREWCBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUsIGV2ZW4gaWYgZnVsbCBURFggZW11bGF0aW9uIGlzbid0IGZlYXNpYmxlLiBJIGtub3cgUUVNVSBoYXMgc29tZSBURFggc3VwcG9ydCwgYnV0IGl0J3MgcmVsaWFudCBvbiBLVk0gYW5kIGhhcmR3YXJlLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cblRoZW4sIHRoZXJlJ3MgYHZ0X2hhbmRsZV9leGl0YCwgd2hpY2ggaXMgdGhlIGNvbW1vbiBleGl0IGhhbmRsZXIgZm9yIGJvdGggVk1YIGFuZCBURFguIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIHBhdGNoIG1vdmVzIGJ1cyBsb2NrIGRldGVjdGlvbiBmcm9tIGB2bXhfaGFuZGxlX2V4aXRgIHRvIGB2dF9oYW5kbGVfZXhpdGAuIEJlY2F1c2UgaXQgYWZmZWN0cyBib3RoIFZNWCBhbmQgVERYLCBldmVuIGluIFFFTVUsIHRoaXMgcGF0Y2ggaXMgbW9zdCBsaWtlbHkgd29ydGggZnV6emluZy4gVk1YIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MgbGlrZSBRRU1VIGluc2lkZSBHQ0UuIFNpbmNlIGJ1cyBsb2NrIGRldGVjdGlvbiBpcyBub3cgcm91dGVkIHRocm91Z2ggYHZ0X2hhbmRsZV9leGl0YCwgdGhpcyBhcmVhIHJlcXVpcmVzIGNsb3NlIHNjcnV0aW55LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFdlIGhhdmUgYHZ0X2hhbmRsZV9leGl0YCAoc3RhdGljKSwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgIChub24tc3RhdGljKSwgYHZteF9oYW5kbGVfZXhpdGAgKG5vbi1zdGF0aWMpLCBgdGR4X2hhbmRsZV9leGl0YCAobm9uLXN0YXRpYyksIGFuZCBgX192dF9oYW5kbGVfbm90aWZ5YCAoc3RhdGljIGlubGluZSkuIEknbGwgdXNlIGNvZGUgc2VhcmNoIHRvIHZlcmlmeSB3aGljaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlbGV2YW50IGFuZCBuZWVkIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTIzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDI6NTAuNjUwNTg0NTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjIzOTIzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTIwNT1ub2luc3RyIHZvaWQgdm14X2hhbmRsZV9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oOjIwNjppbnQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMjA3LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODU0PXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NjktXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODcwOmludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0yMDYxPWludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGZhc3RwYXRoKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMTYyLVxcdGNhc2UgRVhJVF9SRUFTT05fQlVTX0xPQ0s6XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoyMTYzOlxcdFxcdHJldHVybiB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMjE2NC1cXHRkZWZhdWx0Olxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MzA1PXN0YXRpYyBpbnQgKCprdm1fdm14X2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM1NS1cXHRbRVhJVF9SRUFTT05fRU5DTFNdXFx0XFx0ICAgICAgPSBoYW5kbGVfZW5jbHMsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2MzU2OlxcdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjM1Ny1cXHRbRVhJVF9SRUFTT05fTk9USUZZXVxcdFxcdCAgICAgID0gaGFuZGxlX25vdGlmeSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDI6NTIuOTcyOTgzMzUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNzQzNzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRXhpdCBIYW5kbGVyczogYHZ0X2hhbmRsZV9leGl0YCB2cy4gYHZteF9oYW5kbGVfZXhpdGAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZXNlIGV4aXQgaGFuZGxlcnMuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBjb3JlIGRpZmZlcmVuY2UgLSBJbnRlbCBWVC14IHZlcnN1cyBBTUQtViwgb3IgcGVyaGFwcyBldmVuIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYSBwYXJ0aWN1bGFyIGd1ZXN0IE9TIGJlaGF2aW9yIG9yIGh5cGVydmlzb3IgY29uZmlndXJhdGlvbi4gQ2hlY2tpbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucyAoYHZ0X2hhbmRsZV9leGl0YCBhbmQgYHZteF9oYW5kbGVfZXhpdGApIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHdoZW4gdGhlIGd1ZXN0IHRyaWVzIHRvIGRvIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGludGVydmVudGlvbiBmcm9tIHRoZSBoeXBlcnZpc29yLiBcblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG9zc2libGUgZXhpdCByZWFzb25zIEkgZXhwZWN0IHRvIHNlZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBwcml2aWxlZ2UgbGV2ZWwgdHJhbnNpdGlvbnMsIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucywgb3IgcGVyaGFwcyBjb250cm9sIHJlZ2lzdGVyIG1vZGlmaWNhdGlvbnM/IEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvZ2ljIHdpdGhpbiBlYWNoIGhhbmRsZXIgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZW0gYW5kIGhvdyB0aGUgaHlwZXJ2aXNvciByZXNwb25kcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFyZWFzIHByb25lIHRvIGVycm9ycywgYW5kIGFueSB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGl0IGhhbmRsaW5nIHByb2Nlc3MuIEl0J3MgYSBjcml0aWNhbCBwYXRoLCBhbmQgYW55IHdlYWtuZXNzIGhlcmUgY291bGQgYmUgZXhwbG9pdGVkLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGVzZSBoYW5kbGVycyBhcmUgd2hlcmUgdGhlIGh5cGVydmlzb3IncyBzZWN1cml0eSBwb2xpY2llcyBhcmUgZW5mb3JjZWQuIFRoZXkncmUgZGVmaW5pdGVseSB0aGUgZ2F0ZWtlZXBlcnMgYmV0d2VlbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDI6NTcuMDkwNDI0NjY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjc1MTcxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnRfaGFuZGxlX2V4aXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODcwPWludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg4MC1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4ODE6c3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODgyLVxcdFxcdFxcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MTc9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk4MC1cXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6OTgxOlxcdC5oYW5kbGVfZXhpdCA9IHZ0X2hhbmRsZV9leGl0LFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTk4Mi1cXHQuc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiA9IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMjo1OS40NTc5NDgxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjQ4NTM0NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKlN0YXRpYyB2cy4gTm9uLVN0YXRpYyBFeGl0IEhhbmRsZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZXhpdCBoYW5kbGVycywgc3BlY2lmaWNhbGx5IGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLiBJdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYHZ0X2hhbmRsZV9leGl0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpbGUgYHZteF9oYW5kbGVfZXhpdGAgaXMgbm90LiBUaGlzIGRpZmZlcmVuY2UgaXMgZnVuZGFtZW50YWwgYW5kIGhhcyBjbGVhciBpbXBsaWNhdGlvbnMgZm9yIHRoZWlyIHNjb3BlIGFuZCB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLlxuXG5gdnRfaGFuZGxlX2V4aXRgIGJlaW5nIGBzdGF0aWNgIG1lYW5zIGl0J3MgbG9jYWwgdG8gdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBFc3NlbnRpYWxseSwgaXQncyBoaWRkZW4gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtOyBpdCBjYW4ndCBiZSBkaXJlY3RseSBjYWxsZWQgb3IgYWNjZXNzZWQgZnJvbSBleHRlcm5hbCBtb2R1bGVzLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHZ0X2hhbmRsZV9leGl0YCBpcyBzcGVjaWZpYyB0byB0aGUgdmlydHVhbC04MDg2IHRhc2sgb3IgYSBwYXJ0aWN1bGFyIHZpcnR1YWwgbWFjaGluZSBtYW5hZ2VtZW50IGltcGxlbWVudGF0aW9uLiBJdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIHRoYXQgbW9kdWxlLCBkZXNpZ25lZCBmb3IgdmVyeSBmb2N1c2VkLCBsb3ctbGV2ZWwgdGFza3MuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gY29uZmlybSB0aGUgc3BlY2lmaWMgY29udGV4dCwgYnV0IHRoYXQncyBteSBpbml0aWFsIHRha2UuXG5cbmB2bXhfaGFuZGxlX2V4aXRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgYmVpbmcgbm9uLXN0YXRpYywgaW5kaWNhdGVzIHRoYXQgaXQncyBtZWFudCB0byBiZSB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEl0IGNvdWxkIGJlIHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgZ2VuZXJhbCBWTVggdmlydHVhbGl6YXRpb24gbGF5ZXIsIG9yIGEgbW9yZSB3aWRlbHkgYWNjZXNzaWJsZSBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIGV4aXRzIGluIHRoZSBWTVggZW52aXJvbm1lbnQuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBvdGhlciBtb2R1bGVzIGNhbGxpbmcgaW50byBpdCBmb3IgZXhpdCBwcm9jZXNzaW5nLCBzdWdnZXN0aW5nIGEgbW9yZSBwdWJsaWMgb3IgZ2VuZXJhbGl6ZWQgcHVycG9zZS4gVGhpcyB3aWxsIGJlIGltcG9ydGFudCB3aGVuIEkgc3RhcnQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSB3aGF0IHBhcnQgb2YgdGhlIHN5c3RlbSBpcyB0aGUgb3duZXIgb2Ygd2hpY2ggcmVzcG9uc2liaWxpdHkgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnVzZWQqLiBTZWVpbmcgaG93IGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgd2lsbCBnaXZlIG1lIGEgdmVyeSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHNwZWNpZmljIHJvbGVzIGFuZCB0aGUgZGVzaWduIGRlY2lzaW9ucyBiZWhpbmQgdGhlIHVzZSBvZiBgc3RhdGljYCBmb3Igb25lIGFuZCBub3QgdGhlIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDM6MDkuMTA2NDg2MDUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjM0NzQ2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X2hhbmRsZV9leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MT1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg5MC0jZW5kaWZcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4OTE6XFx0XFx0cmV0ID0gdm14X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04OTItXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz05MTc9c3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEwMzEtXFx0LmNoZWNrX2ludGVyY2VwdCA9IHZteF9jaGVja19pbnRlcmNlcHQsXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTAzMjpcXHQuaGFuZGxlX2V4aXRfaXJxb2ZmID0gdm14X2hhbmRsZV9leGl0X2lycW9mZixcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xMDMzLVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01NDI5PXN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01NDk0LVxcdCAqIE1NSU8sIGl0IGlzIGJldHRlciB0byByZXBvcnQgYW4gaW50ZXJuYWwgZXJyb3IuXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo1NDk1OlxcdCAqIFNlZSB0aGUgY29tbWVudHMgaW4gdm14X2hhbmRsZV9leGl0LlxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTQ5Ni1cXHQgKi9cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjQ3OT12b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY2ODMtICovXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo2Njg0OmludCB2bXhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBmYXN0cGF0aF90IGV4aXRfZmFzdHBhdGgpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02Njg1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NzEzOD1zdGF0aWMgdm9pZCBoYW5kbGVfZXh0ZXJuYWxfaW50ZXJydXB0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTcxNTMtXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo3MTU0OnZvaWQgdm14X2hhbmRsZV9leGl0X2lycW9mZihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy03MTU1LXtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oPTI4PXZvaWQgdm14X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6Mjk6aW50IHZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aCk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MzA6dm9pZCB2bXhfaGFuZGxlX2V4aXRfaXJxb2ZmKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMzEtaW50IHZteF9za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuLS1cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ9MTU5Mj1Ob3RlczpcXG4tLVxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dC0xNjEyLSAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODYyOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY2NjJlOSB2bXhfdmNwdV9ydW4rMHgzYjkgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjYxOWEwIF9fdm14X2NvLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTM6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4NzI6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMDljZmIyIHZjcHVfZW50ZXJfZ3Vlc3QrMHg3NTIgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjVmNTcwIHZteF8uLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQtMTYxNC0gICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg4MTogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzEwOWQwMjggdmNwdV9lbnRlcl9ndWVzdCsweDdjOCAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYjIzNGY5MDAgX19zci4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE1OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzODk3OiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMTA5ZDA2ZiB2Y3B1X2VudGVyX2d1ZXN0KzB4ODBmIChba2VybmVsLmthbGxzeW1zXSkgPVxcdTAwM2UgZmZmZmZmZmZjMGY3MmUzMCB2bXhfLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0OjE2MTY6ICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM4OTc6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMwZjcyZTNkIHZteF9oYW5kbGVfZXhpdCsweGQgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjcyN2MwIF9fdm14X2guLi5cXG50b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1pbnRlbC1wdC50eHQ6MTYxNzogICAgICAgQ1BVIDMvS1ZNIDEzMzc2LzEzMzg0IFswMDJdICA3OTE5LjQwODgwMzg5NzogICAgICBicmFuY2hlczogIGZmZmZmZmZmYzBmNzJiMTUgX192bXhfaGFuZGxlX2V4aXQrMHgzNTUgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMwZjYwYWUwIHZteC4uLlxcbnRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWludGVsLXB0LnR4dDoxNjE4OiAgICAgICBDUFUgMy9LVk0gMTMzNzYvMTMzODQgWzAwMl0gIDc5MTkuNDA4ODAzOTAzOiAgICAgIGJyYW5jaGVzOiAgZmZmZmZmZmZjMGY3Mjk5NCBfX3ZteF9oYW5kbGVfZXhpdCsweDFkNCAoW2tlcm5lbC5rYWxsc3ltc10pID1cXHUwMDNlIGZmZmZmZmZmYzEwYjcwOTAga3ZtLi4uXFxudG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtaW50ZWwtcHQudHh0LTE2MTktICAgICAgIENQVSAzL0tWTSAxMzM3Ni8xMzM4NCBbMDAyXSAgNzkxOS40MDg4MDM5MDM6ICAgICAgYnJhbmNoZXM6ICBmZmZmZmZmZmMxMGI3MGYxIGt2bV9lbXVsYXRlX2NwdWlkKzB4NjEgKFtrZXJuZWwua2FsbHN5bXNdKSA9XFx1MDAzZSBmZmZmZmZmZmMxMGI2ZTEwIGt2bV8uLi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDM6MTEuNDI5OTY1NDUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM5NTAwOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTSBFeGl0IEhhbmRsZXJzKipcblxuQWxyaWdodCwgc28gSSBzZWUgdGhyZWUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGVyZSB0aGF0IGFyZSBhbGwgZGVzaWduZWQgdG8gaGFuZGxlIHNwZWNpZmljIHR5cGVzIG9mIFZNWCAoVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMpIGV4aXRzLiBGaXJzdCwgdGhlcmUncyBgdm14X2hhbmRsZV9leGl0YCwgd2hpY2gsIGFzIHRoZSBuYW1lIGltcGxpZXMsIGlzIHRoZSBnZW5lcmFsIGhhbmRsZXIgZm9yIFZNWCBleGl0cy4gVGhlbiwgdGhlcmUncyBgdGR4X2hhbmRsZV9leGl0YCBmb3IgVERYIGV4aXRzIC0gd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0J3Mgc2VwYXJhdGUgZm9yIFREWC4gRmluYWxseSB0aGVyZSdzIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgd2hpY2ggaXMgZGVzaWduZWQgZm9yIGEgYnVzIGxvY2sgdm1leGl0LCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSB0byBkZXNpZ24gbXkgc3lzdGVtLlxuXG5MZXQncyBjaGVjayBgdGR4X2hhbmRsZV9leGl0YCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzoxNi44MjQ5Nzc3MDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTUwMjQyMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2hhbmRsZV9leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbWFpbi5jPTg4MT1zdGF0aWMgaW50IHZ0X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTg4Ny1cXHRpZiAoaXNfdGRfdmNwdSh2Y3B1KSlcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4ODg6XFx0XFx0cmV0ID0gdGR4X2hhbmRsZV9leGl0KHZjcHUsIGZhc3RwYXRoKTtcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04ODktXFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz05NDE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk2Ni1cXHRcXHQvKlxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6OTY3OlxcdFxcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTk2OC1cXHRcXHQgKiBub24taW5zdHJ1bWVudGFibGUgY29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTExNjI9c3RhdGljIGludCB0ZHhfaGFuZGxlX2V4Y2VwdGlvbl9ubWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTY3LVxcdCAqIE1hY2hpbmUgY2hlY2tzIGFyZSBoYW5kbGVkIGJ5IGhhbmRsZV9leGNlcHRpb25faXJxb2ZmKCksIG9yIGJ5XFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxMTY4OlxcdCAqIHRkeF9oYW5kbGVfZXhpdCgpIHdpdGggVERYX05PTl9SRUNPVkVSQUJMRSBzZXQgaWYgYSAjTUMgb2NjdXJzIG9uXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xMTY5LVxcdCAqIFZNLUVudHJ5LiAgTk1JcyBhcmUgaGFuZGxlZCBieSB0ZHhfdmNwdV9lbnRlcl9leGl0KCkuXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTIwNDc9aW50IHRkeF9jb21wbGV0ZV9lbXVsYXRlZF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZXJyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0yMDYwLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM6MjA2MTppbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTIwNjIte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTQzPXZvaWQgdGR4X3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTQ0OmludCB0ZHhfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTE0NS1cXHRcXHRlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAzOjE4Ljk0MDAxMDQwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzg2MDQ1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFZNIEV4aXRzOiBBIFRhcmdldGVkIFJldmlldyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBWTSBleGl0cyBhcmUgaGFuZGxlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlc2UgZnVuY3Rpb25zOiBgdm14X2hhbmRsZV9leGl0YCwgYHRkeF9oYW5kbGVfZXhpdGAsIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGUgY29kZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBURFgsIEkgYmV0IHRoZXJlJ3MgYSBzcGVjaWZpYyBgQ09ORklHX0tWTV9JTlRFTF9URFhgIChvciBzb21ldGhpbmcgY29tcGFyYWJsZSkgZmxhZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYW5kIGVuc3VyZSB0aGUgcHJvcGVyIGJ1aWxkIGZsYWdzIGFyZSBzZXQgZm9yIHRoZSByZWxldmFudCBmZWF0dXJlcy4gVGhlIGNvZGUgaXRzZWxmLCBvZiBjb3Vyc2UsIGlzIG5lc3RsZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L2AsIHNvIEknbGwgYmUgc3BlbmRpbmcgbW9zdCBvZiBteSB0aW1lIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzoyNC4zMjYwNTg3MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDE0ODY3MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9JTlRFTF9URFhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTIyPWNvbmZpZyBYODZfU0dYX0tWTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzoyNi41Mjc1NTE5OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0NjI2NDA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBURFggU3VwcG9ydCBpbiB0aGUgS1ZNL3g4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLVk0gc3VwcG9ydCBmb3IgSW50ZWwncyBURFggKFRydXN0IERvbWFpbiBFeHRlbnNpb25zKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHN0YXJ0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBpcyB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsaXZlLCBzbyBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRoYXQgSSdkIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgS1ZNX0lOVEVMX1REWGAgdGhlcmUuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLCBpZiBhbnksIGFyZSBuZWVkZWQgdG8gZW5hYmxlIGBLVk1fSU5URUxfVERYYC4gSXQncyBsaWtlbHkgZ29pbmcgdG8gZGVwZW5kIG9uIHNvbWUgb2YgdGhlIENQVSBmZWF0dXJlcyBhbmQgb3RoZXIgbG93LWxldmVsIEtWTSBzZXR0aW5ncy4gSSB3YW50IHRvIHNlZSB3aGljaCBvdGhlcnMgYXJlIGNvbm5lY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNjAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzozMS44NzM4MjA4OTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1ODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzQ6XFx0Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4gMTM1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuIDEzNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTM3OlxcdFxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG4gMTM4OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxMzk6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNDA6XFx0XFx0aGVscFxcbiAxNDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcXG4gMTQyOlxcdFxcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGNvbmZpZyBLVk1fQU1EXFxuIDE0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAxNDg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXFxuIDE0OTpcXHRcXHRoZWxwXFxuIDE1MDpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxcbiAxNTE6XFx0XFx0ICAoU1ZNKSBleHRlbnNpb25zLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzozMS44NzU5ODUxMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU2MTYzNDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBURFggRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGBLVk1fSU5URUxfVERYYCBpcyBjb250aW5nZW50IG9uIGBJTlRFTF9URFhfSE9TVGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgdGhlIHZpcnR1YWxpemVkIGNvbXBvbmVudCBkZXBlbmRzIG9uIHRoZSBob3N0IHN1cHBvcnQsIGJ1dCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBkZXRhaWxzIHN0cmFpZ2h0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgSU5URUxfVERYX0hPU1RgIG5vdyBhbmQgc2VlIHdoYXQgdGhhdCdzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjAzOjM3LjQzNzYyMTc5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NjI5NDA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5URUxfVERYX0hPU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0xODQ0PWNvbmZpZyBYODZfVVNFUl9TSEFET1dfU1RBQ0tcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTg2My1cXG5hcmNoL3g4Ni9LY29uZmlnOjE4NjQ6Y29uZmlnIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYvS2NvbmZpZy0xODY1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDM6MzkuODkzOTIxNjA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNTA2ODkxOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGBhcmNoL3g4Ni9LY29uZmlnYCBmb3IgYElOVEVMX1REWF9IT1NUYCBkZXBlbmRlbmNpZXM6XG5cbioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgVERYIEhvc3QgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHN1cnJvdW5kaW5nIEludGVsJ3MgVERYIEhvc3Qgc3VwcG9ydCB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGVsdmUgaW50byBgYXJjaC94ODYvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBnYXRlLCBkZXBlbmQgb24sIG9yIGJlIHJlcXVpcmVkICpieSogYElOVEVMX1REWF9IT1NUYC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3Igc2V2ZXJhbCByZWFzb25zLiBGaXJzdCwgSSB3YW50IHRvIGVuc3VyZSBteSBzZXR1cCBwcm9wZXJseSBlbmFibGVzIGV2ZXJ5dGhpbmcgbmVlZGVkLiBTZWNvbmQsIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgaW4gdHJvdWJsZXNob290aW5nIGlmIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzLCBvciBpZiBzb21ldGhpbmcgaXMgZGlzYWJsZWQgd2hlbiBpdCBzaG91bGRuJ3QgYmUuIFRoaXJkLCBJIHNob3VsZCBiZSBhYmxlIHRvIHByZWRpY3Qgd2hhdCBjaGFuZ2VzIG1heSBvY2N1ciBpbiBmdXR1cmUgcmVsZWFzZXMgYnkgdW5kZXJzdGFuZGluZyB3aGF0IG90aGVyIGZlYXR1cmVzIHRvdWNoIHRoZSBzYW1lIHBhcnRzIG9mIHRoZSBoYXJkd2FyZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLiBJJ2xsIGxvb2sgZm9yIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGByZXF1aXJlc2AsIG9yIGV2ZW4gaW1wbGllZCByZWxhdGlvbnNoaXBzIHRocm91Z2ggb3RoZXIgcmVsYXRlZCBmZWF0dXJlcy4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzo1My40MDA4MTY0MDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2NDpcXHRjb25maWcgSU5URUxfVERYX0hPU1RcXG4xODY1OlxcdFxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIGhvc3Qgc3VwcG9ydFxcXCJcXG4xODY2OlxcdFxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTFxcbjE4Njc6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4xODY4OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0lOVEVMXFxuMTg2OTpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9YMkFQSUNcXG4xODcwOlxcdFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4xODcxOlxcdFxcdGRlcGVuZHMgb24gQ09OVElHX0FMTE9DXFxuMTg3MjpcXHRcXHRkZXBlbmRzIG9uIFg4Nl9NQ0VcXG4xODczOlxcdFxcdGhlbHBcXG4xODc0OlxcdFxcdCAgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgcHJvdGVjdHMgZ3Vlc3QgVk1zIGZyb20gbWFsaWNpb3VzXFxuMTg3NTpcXHRcXHQgIGhvc3QgYW5kIGNlcnRhaW4gcGh5c2ljYWwgYXR0YWNrcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbmVjZXNzYXJ5IFREWFxcbjE4NzY6XFx0XFx0ICBzdXBwb3J0IGluIHRoZSBob3N0IGtlcm5lbCB0byBydW4gY29uZmlkZW50aWFsIFZNcy5cXG4xODc3OlxcdFxcbjE4Nzg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjE4Nzk6XFx0XFxuMTg4MDpcXHRjb25maWcgRUZJXFxuMTg4MTpcXHRcXHRib29sIFxcXCJFRkkgcnVudGltZSBzZXJ2aWNlIHN1cHBvcnRcXFwiXFxuMTg4MjpcXHRcXHRkZXBlbmRzIG9uIEFDUElcXG4xODgzOlxcdFxcdHNlbGVjdCBVQ1MyX1NUUklOR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowMzo1My40MDEwMzg0ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NTkxOTk4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gVk1YL1REWCBFeGl0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgd2UncmUgZW5hYmxpbmcgYEtWTV9JTlRFTF9URFhgLCBgSU5URUxfVERYX0hPU1RgLCBhbmQgYEtWTV9JTlRFTGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggaW5pdGlhbGx5LCBidXQgdGhlbiBJIHJlYWxpemVkIGl0J3MgdG91Y2hpbmcgYHZteF9oYW5kbGVfZXhpdGAgYW5kIGB2dF9oYW5kbGVfZXhpdGAsIHdoaWNoIGFyZSBjb3JlIFZNWCBjb21wb25lbnRzIOKAkyB0aGF0J3Mgd2hlbiBJIGtuZXcgYEtWTV9JTlRFTGAgd2FzIGNyaXRpY2FsIGhlcmUuXG5cblRvIGNvbmZpcm0gdGhpcywgSSBjaGVja2VkIHdoaWNoIGZpbGVzIHdlcmUgYmVpbmcgbW9kaWZpZWQ6IGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AsIGBhcmNoL3g4Ni9rdm0vdm14L3RkeC5jYCwgYW5kIGBhcmNoL3g4Ni9rdm0vdm14L3ZteC5jYC4gVGhlIGNoYW5nZXMgaW4gYHZteC5jYCBhbmQgYG1haW4uY2AgYXJlIGd1YXJkZWQgYnkgYENPTkZJR19LVk1fSU5URUxgIHdoaWxlIHRob3NlIGluIGB0ZHguY2AgYXJlIGdhdGVkIGJ5IGBDT05GSUdfS1ZNX0lOVEVMX1REWGAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoZSByZXF1aXJlZCBjb25maWdzLlxuXG5JIHRvb2sgYSBjbG9zZXIgbG9vayBhdCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAsIHdoaWNoIGlzIGRlZmluZWQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L21haW4uY2AsIGFuZCB0aGF0J3MgY29tcGlsZWQgd2l0aCBgS1ZNX0lOVEVMYC4gVGhlbiBJIHdlbnQgYmFjayB0byBgdm14X2hhbmRsZV9leGl0YCwgd2hpY2ggbGl2ZXMgaW4gYHZteC5jYC4gRXhhbWluaW5nIHRoZSBwYXRjaCwgSSBmb3VuZCB0aGF0IGB2bXhfaGFuZGxlX2V4aXRgIGhhZCBiZWVuIHJlbmFtZWQgdG8gYF9fdm14X2hhbmRsZV9leGl0YCBhbmQgdGhlIG9sZCBgdm14X2hhbmRsZV9leGl0YCB3YXMgcmVtb3ZlZCwgd2l0aCB0aGUgYnVzIGxvY2sgZGV0ZWN0aW9uIGxvZ2ljIG1vdmVkIHRvIGB2dF9oYW5kbGVfZXhpdGAuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMgYXJlIG5vdyBjbGVhcjogYHZteF9oYW5kbGVfZXhpdGAsIGB0ZHhfaGFuZGxlX2V4aXRgLCBhbmQgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLlxuXG5UaGUgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZTogYEtWTV9JTlRFTGAsIGBLVk1fSU5URUxfVERYYCwgYW5kIGBJTlRFTF9URFhfSE9TVGAuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCBkaXZlcyBpbnRvIHRoZSBmdW5kYW1lbnRhbCBLVk0gVk1YIGV4aXQgaGFuZGxpbmcsIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCdzIHdvcnRoIGZ1enppbmcuIEl0J3MgYSBjcml0aWNhbCBwYXRoIHJlYWNoYWJsZSBkdXJpbmcgZ3Vlc3QgZXhlY3V0aW9uLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGJ1cyBsb2NrIGRldGVjdGlvbiBhbmQgbm90aWZ5IFZNIGV4aXRzLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBjZW50cmFsaXplcyBleGl0IGhhbmRsaW5nIGZvciBWTVggYW5kIFREWCwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gYnVzIGxvY2tzIGFuZCBub3RpZmllcy4gU3BlY2lmaWNhbGx5LCBgdnRfaGFuZGxlX2V4aXRgIGFuZCBgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdGAgYXJlIGludHJvZHVjZWQgZm9yIHRoaXMgcHVycG9zZS4gVGhlIHBhdGNoIHVwZGF0ZXMgYHRkeF9oYW5kbGVfZXhpdGAgdG8gYWNjb21tb2RhdGUgdGhlc2UgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gcGF0aHMgdGhhdCBuZWVkIHRvIGJlIGZ1enplZCBkdWUgdG8gdGhlaXIgZGlyZWN0IGltcGFjdCBvbiBndWVzdCBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjE4LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjA1Ljg2MDI0MTU3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTk0NjM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fSU5URUxfVERYXCIsXG4gICAgXCJJTlRFTF9URFhfSE9TVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZteF9oYW5kbGVfZXhpdFwiLFxuICAgIFwidGR4X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgYnVzIGxvY2sgZGV0ZWN0aW9uIGFuZCBub3RpZnkgVk0gZXhpdHMuIEl0IGludHJvZHVjZXMgYSBjb21tb24gdnRfaGFuZGxlX2V4aXQgYW5kIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQgZm9yIGJvdGggVk1YIGFuZCBURFgsIGFuZCB1cGRhdGVzIHRkeF9oYW5kbGVfZXhpdCB0byBoYW5kbGUgdGhlc2UgZXhpdHMuIFRoZXNlIGFyZSBjb3JlIHZpcnR1YWxpemF0aW9uIHBhdGhzIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IGV4ZWN1dGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9JTlRFTF9URFhcIixcbiAgICBcIklOVEVMX1REWF9IT1NUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm14X2hhbmRsZV9leGl0XCIsXG4gICAgXCJ0ZHhfaGFuZGxlX2V4aXRcIixcbiAgICBcInZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZvciBidXMgbG9jayBkZXRlY3Rpb24gYW5kIG5vdGlmeSBWTSBleGl0cy4gSXQgaW50cm9kdWNlcyBhIGNvbW1vbiB2dF9oYW5kbGVfZXhpdCBhbmQgdnRfaGFuZGxlX2J1c19sb2NrX3ZtZXhpdCBmb3IgYm90aCBWTVggYW5kIFREWCwgYW5kIHVwZGF0ZXMgdGR4X2hhbmRsZV9leGl0IHRvIGhhbmRsZSB0aGVzZSBleGl0cy4gVGhlc2UgYXJlIGNvcmUgdmlydHVhbGl6YXRpb24gcGF0aHMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgZXhlY3V0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNDowNi4wMjAxOTg1NzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTIxNTYzMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MDYuMDIxMDc2MzgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU0OTIwNjgxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgS1ZNIFZNWCBhbmQgVERYIGV4aXQgaGFuZGxpbmcgY29kZSB0byBzaGFyZSBjb21tb24gbG9naWMgZm9yIG5vdGlmeSBhbmQgYnVzIGxvY2sgVk0tZXhpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBhIHN5bnRoZXNpemVkIGludmFsaWQgZXhpdCByZWFzb24gZm9yIFREWCB0byBwcmV2ZW50IHRoZSBjb25zdW1wdGlvbiBvZiBzdGFsZSBleGl0IHJlYXNvbnMgZnJvbSBwcmV2aW91cyBydW5zLiBcXG5cXG4xLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIHRvIGB2Y3B1LVxcdTAwM2VydW5gICh3aGljaCBpcyBtYXBwZWQgdG8gdXNlciBzcGFjZSkgYXJlIGxpbWl0ZWQgdG8gc2V0dGluZyBzcGVjaWZpYyBmaWVsZHMgKGBleGl0X3JlYXNvbmAsIGBub3RpZnkuZmxhZ3NgLCBgZmxhZ3NgKSB3aXRoIGRldGVybWluaXN0aWMgdmFsdWVzLCBpZGVudGljYWwgdG8gdGhlIHByZS1leGlzdGluZyBWTVggbG9naWMuXFxuMi4gVGhlIHN5bnRoZXNpemVkIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgdW5pb24gKGUuZy4sIGB2dC1cXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDBgKSBiZWZvcmUgc2V0dGluZyB0aGUgYmFzaWMgZXhpdCByZWFzb24sIHByZXZlbnRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgYml0cyBmcm9tIGJlaW5nIHVzZWQuXFxuMy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgY29udHJvbCBmbG93LCBjb2RlIGRlZHVwbGljYXRpb24sIGFuZCBmaXhpbmcgYSBsb2dpYyBidWcgKHN0YWxlIGV4aXQgcmVhc29uKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuXFxuXFxuU3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBmdWxseSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZmOGRhYWQyNDA5ZDA1OTJkY2E4YzJlZWFiNzIzMGRkODNjOGNlMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDowMjozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvY29tbW9uLmggYi9hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXG5pbmRleCAwODAwNTY3NjcwMmMyLi5iYmVlYzE5N2E1MDdhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2hvc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wb3N0ZWRfaW50ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3ZteC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJtbXUuaFwiXG4gXG5AQCAtMTgzLDYgKzE4NCwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdGt2bV92Y3B1X3RyaWdnZXJfcG9zdGVkX2ludGVycnVwdCh2Y3B1LCBQT1NURURfSU5UUl9WRUNUT1IpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBfX3Z0X2hhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbClcbit7XG4rXHRib29sIGNvbnRleHRfaW52YWxpZCA9IGV4aXRfcXVhbCBcdTAwMjYgTk9USUZZX1ZNX0NPTlRFWFRfSU5WQUxJRDtcbitcbitcdCsrdmNwdS1cdTAwM2VzdGF0Lm5vdGlmeV93aW5kb3dfZXhpdHM7XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuK1x0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuK1x0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbitcdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbitcdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIG5vaW5zdHIgdm9pZCB2bXhfaGFuZGxlX25taShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4gI2VuZGlmIC8qIF9fS1ZNX1g4Nl9WTVhfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L21haW4uYyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5pbmRleCAwZmYzMjMwZmQ5NWU4Li4xMGRmOTY2N2QwYzA2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9tYWluLmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvbWFpbi5jXG5AQCAtMTU0LDE1ICsxNTQsNiBAQCBzdGF0aWMgZmFzdHBhdGhfdCB2dF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBydW5fZmxhZ3MpXG4gXHRyZXR1cm4gdm14X3ZjcHVfcnVuKHZjcHUsIHJ1bl9mbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdnRfaGFuZGxlX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLVx0XHRcdCAgZW51bSBleGl0X2Zhc3RwYXRoX2NvbXBsZXRpb24gZmFzdHBhdGgpXG4te1xuLVx0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4tXHRcdHJldHVybiB0ZHhfaGFuZGxlX2V4aXQodmNwdSwgZmFzdHBhdGgpO1xuLVxuLVx0cmV0dXJuIHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIHZ0X3VuaGFuZGxlYWJsZV9lbXVsYXRpb25fcmVxdWlyZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmIChpc190ZF92Y3B1KHZjcHUpKSB7XG5AQCAtODc2LDYgKzg2Nyw0NCBAQCBzdGF0aWMgaW50IHZ0X2dtZW1fbWF4X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLFxuICNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuICNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuIFxuK2ludCB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbit7XG4rXHQvKlxuK1x0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXG4rXHQgKiBWTS1FeGl0cy4gVW5jb25kaXRpb25hbGx5IHNldCB0aGUgZmxhZyBoZXJlIGFuZCBsZWF2ZSB0aGUgaGFuZGxpbmdcbitcdCAqIHRvIC5oYW5kbGVfZXhpdCgpIGNhbGxiYWNrLlxuK1x0ICovXG4rXHR0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4rc3RhdGljIGludCB2dF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4rXHRcdFx0ICBlbnVtIGV4aXRfZmFzdHBhdGhfY29tcGxldGlvbiBmYXN0cGF0aClcbit7XG4rXHRpbnQgcmV0O1xuK1xuKyNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuK1x0aWYgKGlzX3RkX3ZjcHUodmNwdSkpXG4rXHRcdHJldCA9IHRkeF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4rXHRlbHNlXG4rI2VuZGlmXG4rXHRcdHJldCA9IHZteF9oYW5kbGVfZXhpdCh2Y3B1LCBmYXN0cGF0aCk7XG4rXG4rXHQvKlxuK1x0ICogRXhpdCB0byB1c2VyIHNwYWNlIHdoZW4gYnVzIGxvY2sgZGV0ZWN0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlcmUgaXNcbitcdCAqIGEgYnVzIGxvY2sgaW4gZ3Vlc3QuXG4rXHQgKi9cbitcdGlmICh2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmJ1c19sb2NrX2RldGVjdGVkKSB7XG4rXHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbitcdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHR9XG4rXG4rXHRcdHZjcHUtXHUwMDNlcnVuLVx1MDAzZWZsYWdzIHw9IEtWTV9SVU5fWDg2X0JVU19MT0NLO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gI2RlZmluZSBWTVhfUkVRVUlSRURfQVBJQ1ZfSU5ISUJJVFNcdFx0XHRcdFxcXG4gXHQoQklUKEFQSUNWX0lOSElCSVRfUkVBU09OX0RJU0FCTEVEKSB8XHRcdFx0XFxcbiBcdCBCSVQoQVBJQ1ZfSU5ISUJJVF9SRUFTT05fQUJTRU5UKSB8XHRcdFx0XFxcbkBAIC05NDksNyArOTc4LDcgQEAgc3RydWN0IGt2bV94ODZfb3BzIHZ0X3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbiBcbiBcdC52Y3B1X25lZWRzX2luaXRpYWxpemF0aW9uID0gdnRfb3BfdGR4X29ubHkodmNwdV9uZWVkc19pbml0aWFsaXphdGlvbiksXG4gXHQudmNwdV9ydW4gPSB2dF9vcCh2Y3B1X3J1biksXG4tXHQuaGFuZGxlX2V4aXQgPSB2dF9vcChoYW5kbGVfZXhpdCksXG4rXHQuaGFuZGxlX2V4aXQgPSB2dF9oYW5kbGVfZXhpdCxcbiBcdC5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3NraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24sXG4gXHQudXBkYXRlX2VtdWxhdGVkX2luc3RydWN0aW9uID0gdm14X3VwZGF0ZV9lbXVsYXRlZF9pbnN0cnVjdGlvbixcbiBcdC51bmhhbmRsZWFibGVfZW11bGF0aW9uX3JlcXVpcmVkID0gdnRfb3AodW5oYW5kbGVhYmxlX2VtdWxhdGlvbl9yZXF1aXJlZCksXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IGIyNzJjMjA1ODZhNzQuLjM2NGEyMzIyYTlmNWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtOTIxLDM2ICs5MjEsNTQgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRyZXR1cm4gRVhJVF9SRUFTT05fVERDQUxMO1xuIH1cbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiB0ZHhfdG9fdm14X2V4aXRfcmVhc29uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdGR4X2lzX2V4aXRfcmVhc29uX3ZhbGlkKHU2NCB2cF9lbnRlcl9yZXQpXG4ge1xuLVx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4tXHR1MzIgZXhpdF9yZWFzb247XG4tXG4tXHRzd2l0Y2ggKHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuK1x0c3dpdGNoICh2cF9lbnRlcl9yZXQgXHUwMDI2IFREWF9TRUFNQ0FMTF9TVEFUVVNfTUFTSykge1xuIFx0Y2FzZSBURFhfU1VDQ0VTUzpcbiBcdGNhc2UgVERYX05PTl9SRUNPVkVSQUJMRV9WQ1BVOlxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REOlxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX05PTl9BQ0NFU1NJQkxFOlxuIFx0Y2FzZSBURFhfTk9OX1JFQ09WRVJBQkxFX1REX1dST05HX0FQSUNfTU9ERTpcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiB0cnVlO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuK31cbitcbisvKiBTeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uICovXG4rI2RlZmluZSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTlx0XHRVMTZfTUFYXG4gXG4tXHRleGl0X3JlYXNvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bmlvbiB2bXhfZXhpdF9yZWFzb24gdGR4X3RvX3ZteF9leGl0X3JlYXNvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4re1xuK1x0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4rXHR1bmlvbiB2bXhfZXhpdF9yZWFzb24gZXhpdF9yZWFzb247XG4rXG4rXHQvKlxuK1x0ICogUmV0dXJuIHRoZSBzeW50aGVzaXplZCBpbnZhbGlkIEV4aXQgUmVhc29uLCBhcyB0aGUgVERYIG1vZHVsZVxuK1x0ICogbmV2ZXIgYXR0ZW1wdGVkIHRvIHJ1biB0aGUgdkNQVSwgaS5lLiB0aGUgRXhpdCBSZWFzb24gaXMgdW5kZWZpbmVkLFxuK1x0ICogYnV0IHRoaXMgaXMgTk9UIGEgZmFpbGVkIFZNLUVudGVyLlxuK1x0ICovXG4rXHRpZiAoIXRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSlcbitcdFx0cmV0dXJuICh1bmlvbiB2bXhfZXhpdF9yZWFzb24pIHtcbitcdFx0XHQuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTixcbitcdFx0fTtcbiBcbi1cdHN3aXRjaCAoZXhpdF9yZWFzb24pIHtcbitcdGV4aXRfcmVhc29uLmZ1bGwgPSAodTMyKXRkeC1cdTAwM2V2cF9lbnRlcl9yZXQ7XG4rXG4rXHRzd2l0Y2ggKGV4aXRfcmVhc29uLmJhc2ljKSB7XG4gXHRjYXNlIEVYSVRfUkVBU09OX1REQ0FMTDpcbiBcdFx0aWYgKHRkdm1jYWxsX2V4aXRfdHlwZSh2Y3B1KSlcbi1cdFx0XHRyZXR1cm4gRVhJVF9SRUFTT05fVk1DQUxMO1xuLVxuLVx0XHRyZXR1cm4gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0XHRleGl0X3JlYXNvbi5iYXNpYyA9IEVYSVRfUkVBU09OX1ZNQ0FMTDtcbitcdFx0ZWxzZVxuK1x0XHRcdGV4aXRfcmVhc29uLmJhc2ljID0gdGRjYWxsX3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdFx0YnJlYWs7XG4gXHRjYXNlIEVYSVRfUkVBU09OX0VQVF9NSVNDT05GSUc6XG4gXHRcdC8qXG4gXHRcdCAqIERlZmVyIEtWTV9CVUdfT04oKSB1bnRpbCB0ZHhfaGFuZGxlX2V4aXQoKSBiZWNhdXNlIHRoaXMgaXMgaW5cbiBcdFx0ICogbm9uLWluc3RydW1lbnRhYmxlIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlxuIFx0XHQgKi9cbi1cdFx0cmV0dXJuIC0xdTtcbitcdFx0ZXhpdF9yZWFzb24uYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTjtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC05NjcsNyArOTg1LDcgQEAgc3RhdGljIG5vaW5zdHIgdm9pZCB0ZHhfdmNwdV9lbnRlcl9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdHRkeC1cdTAwM2V2cF9lbnRlcl9yZXQgPSB0ZGhfdnBfZW50ZXIoXHUwMDI2dGR4LVx1MDAzZXZwLCBcdTAwMjZ0ZHgtXHUwMDNldnBfZW50ZXJfYXJncyk7XG4gXG4tXHR2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbitcdHZ0LVx1MDAzZWV4aXRfcmVhc29uID0gdGR4X3RvX3ZteF9leGl0X3JlYXNvbih2Y3B1KTtcbiBcbiBcdHZ0LVx1MDAzZWV4aXRfcXVhbGlmaWNhdGlvbiA9IHRkeC1cdTAwM2V2cF9lbnRlcl9hcmdzLnJjeDtcbiBcdHRkeC1cdTAwM2VleHRfZXhpdF9xdWFsaWZpY2F0aW9uID0gdGR4LVx1MDAzZXZwX2VudGVyX2FyZ3MucmR4O1xuQEAgLTk4MSw4ICs5OTksNyBAQCBzdGF0aWMgbm9pbnN0ciB2b2lkIHRkeF92Y3B1X2VudGVyX2V4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHN0YXRpYyBib29sIHRkeF9mYWlsZWRfdm1lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuLVx0cmV0dXJuIHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuZmFpbGVkX3ZtZW50cnkgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KS5mdWxsICE9IC0xdTtcbitcdHJldHVybiB2bXhfZ2V0X2V4aXRfcmVhc29uKHZjcHUpLmZhaWxlZF92bWVudHJ5O1xuIH1cbiBcbiBzdGF0aWMgZmFzdHBhdGhfdCB0ZHhfZXhpdF9oYW5kbGVyc19mYXN0cGF0aChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtMTA3MSw4ICsxMDg4LDIxIEBAIGZhc3RwYXRoX3QgdGR4X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHJ1bl9mbGFncylcbiBcdCAqIGFsbG93aW5nIHZDUFUgZW50cnkgdG8gYXZvaWQgY29udGVudGlvbiB3aXRoIHRkaF92cF9lbnRlcigpIGFuZFxuIFx0ICogVERDQUxMcy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKVxuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRSh0b19rdm1fdGR4KHZjcHUtXHUwMDNla3ZtKS1cdTAwM2V3YWl0X2Zvcl9zZXB0X3phcCkpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB2Q1BVIG5ldmVyIGVudGVyZWQgdGhlIGd1ZXN0LCBidXQgdGhpcyBsb29rcyBsaWtlIGFcbitcdFx0ICogaGFuZGxlZCBleGl0IHRvIHRoZSBjYWxsZXIuICBTeW50aGVzaXplIGFuIGludmFsaWQgZXhpdFxuK1x0XHQgKiByZWFzb24gc28gdGhlIHByZXZpb3VzIGV4aXQncyBzdGFsZSB2YWx1ZSBpc24ndCBjb25zdW1lZFxuK1x0XHQgKiBhIHNlY29uZCB0aW1lLlxuK1x0XHQgKlxuK1x0XHQgKiBNYWtlIGl0IHN1cGVyIGNsZWFyIHRoYXQgYml0WzMxOjE2XSBpcyBjbGVhcmVkIHRvIDAgYW5kIG9ubHlcbitcdFx0ICogYmFzaWMgZXhpdCByZWFzb24gKGJpdFsxNTowXSkgaXMgc2V0IHRvIHRoZSBzeW50aGVzaXplZFxuK1x0XHQgKiBpbnZhbGlkIGV4aXQgcmVhc29uLlxuK1x0XHQgKi9cbitcdFx0dnQtXHUwMDNlZXhpdF9yZWFzb24uZnVsbCA9IDA7XG4rXHRcdHZ0LVx1MDAzZWV4aXRfcmVhc29uLmJhc2ljID0gVERYX0lOVkFMSURfRVhJVF9SRUFTT047XG4gXHRcdHJldHVybiBFWElUX0ZBU1RQQVRIX0VYSVRfSEFORExFRDtcbitcdH1cbiBcbiBcdHRyYWNlX2t2bV9lbnRyeSh2Y3B1LCBydW5fZmxhZ3MgXHUwMDI2IEtWTV9SVU5fRk9SQ0VfSU1NRURJQVRFX0VYSVQpO1xuIFxuQEAgLTIxMjYsNiArMjE1NiwxMSBAQCBpbnQgdGR4X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBmYXN0cGF0aClcbiBcdFx0ICogLSBJZiBpdCdzIG5vdCBhbiBNU01JLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm4gMTtcbitcdGNhc2UgRVhJVF9SRUFTT05fTk9USUZZOlxuK1x0XHQvKiBOTUkgYmxvY2tpbmcgc3RhdGUgaXMgaGFuZGxlZCBieSBURFggbW9kdWxlICovXG4rXHRcdHJldHVybiBfX3Z0X2hhbmRsZV9ub3RpZnkodmNwdSwgdm14X2dldF9leGl0X3F1YWwodmNwdSkpO1xuK1x0Y2FzZSBFWElUX1JFQVNPTl9CVVNfTE9DSzpcbitcdFx0cmV0dXJuIHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQodmNwdSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC0yMTQxLDcgKzIxNzYsNyBAQCB2b2lkIHRkeF9nZXRfZXhpdF9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICpyZWFzb24sXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcbiBcdCpyZWFzb24gPSB0ZHgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbDtcbi1cdGlmICgqcmVhc29uICE9IC0xdSkge1xuK1x0aWYgKHRkeF9pc19leGl0X3JlYXNvbl92YWxpZCh0ZHgtXHUwMDNldnBfZW50ZXJfcmV0KSkge1xuIFx0XHQqaW5mbzEgPSB2bXhfZ2V0X2V4aXRfcXVhbCh2Y3B1KTtcbiBcdFx0KmluZm8yID0gdGR4LVx1MDAzZWV4dF9leGl0X3F1YWxpZmljYXRpb247XG4gXHRcdCppbnRyX2luZm8gPSB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KTtcbkBAIC0zMTU0LDYgKzMxODksMTcgQEAgc3RhdGljIGludCB0ZHhfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV90ZHhfY21kICpjbWQpXG4gXHR0ZF92bWNzX3dyaXRlNjQodGR4LCBQT1NURURfSU5UUl9ERVNDX0FERFIsIF9fcGEoXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX2Rlc2MpKTtcbiBcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBQSU5fQkFTRURfVk1fRVhFQ19DT05UUk9MLCBQSU5fQkFTRURfUE9TVEVEX0lOVFIpO1xuIFxuK1x0aWYgKGt2bV9ub3RpZnlfdm1leGl0X2VuYWJsZWQodmNwdS1cdTAwM2Vrdm0pKSB7XG4rXHRcdHRkX3ZtY3Nfc2V0Yml0MzIodGR4LCBTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxuK1x0XHRcdFx0IFNFQ09OREFSWV9FWEVDX05PVElGWV9WTV9FWElUSU5HKTtcbitcdFx0dGRfdm1jc193cml0ZTMyKHRkeCwgTk9USUZZX1dJTkRPVyxcbitcdFx0XHRcdHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gubm90aWZ5X3dpbmRvdyk7XG4rXHR9XG4rXG4rXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5idXNfbG9ja19kZXRlY3Rpb25fZW5hYmxlZClcbitcdFx0dGRfdm1jc19zZXRiaXQzMih0ZHgsIFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXG4rXHRcdFx0XHQgU0VDT05EQVJZX0VYRUNfQlVTX0xPQ0tfREVURUNUSU9OKTtcbitcbiBcdHRkeC1cdTAwM2VzdGF0ZSA9IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQ7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uNDkwYmFhZTU2Y2YxNCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC02MjY1LDIzICs2MjY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZW5jbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1g4Nl9TR1hfS1ZNICovXG4gXG4tc3RhdGljIGludCBoYW5kbGVfYnVzX2xvY2tfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi17XG4tXHQvKlxuLVx0ICogSGFyZHdhcmUgbWF5IG9yIG1heSBub3Qgc2V0IHRoZSBCVVNfTE9DS19ERVRFQ1RFRCBmbGFnIG9uIEJVU19MT0NLXG4tXHQgKiBWTS1FeGl0cy4gVW5jb25kaXRpb25hbGx5IHNldCB0aGUgZmxhZyBoZXJlIGFuZCBsZWF2ZSB0aGUgaGFuZGxpbmcgdG9cbi1cdCAqIHZteF9oYW5kbGVfZXhpdCgpLlxuLVx0ICovXG4tXHR0b192dCh2Y3B1KS1cdTAwM2VleGl0X3JlYXNvbi5idXNfbG9ja19kZXRlY3RlZCA9IHRydWU7XG4tXHRyZXR1cm4gMTtcbi19XG4tXG4gc3RhdGljIGludCBoYW5kbGVfbm90aWZ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGV4aXRfcXVhbCA9IHZteF9nZXRfZXhpdF9xdWFsKHZjcHUpO1xuLVx0Ym9vbCBjb250ZXh0X2ludmFsaWQgPSBleGl0X3F1YWwgXHUwMDI2IE5PVElGWV9WTV9DT05URVhUX0lOVkFMSUQ7XG4tXG4tXHQrK3ZjcHUtXHUwMDNlc3RhdC5ub3RpZnlfd2luZG93X2V4aXRzO1xuIFxuIFx0LypcbiBcdCAqIE5vdGlmeSBWTSBleGl0IGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBpcmV0IGZyb20gTk1JLFxuQEAgLTYyOTEsMTUgKzYyNzcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9ub3RpZnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHR2bWNzX3NldF9iaXRzKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyxcbiBcdFx0XHQgICAgICBHVUVTVF9JTlRSX1NUQVRFX05NSSk7XG4gXG4tXHRpZiAodmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5ub3RpZnlfdm1leGl0X2ZsYWdzIFx1MDAyNiBLVk1fWDg2X05PVElGWV9WTUVYSVRfVVNFUiB8fFxuLVx0ICAgIGNvbnRleHRfaW52YWxpZCkge1xuLVx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX05PVElGWTtcbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5LmZsYWdzID0gY29udGV4dF9pbnZhbGlkID9cbi1cdFx0XHRcdFx0ICBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRCA6IDA7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDE7XG4rXHRyZXR1cm4gX192dF9oYW5kbGVfbm90aWZ5KHZjcHUsIGV4aXRfcXVhbCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm14X2dldF9tc3JfaW1tX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5AQCAtNjM3NSw3ICs2MzUzLDcgQEAgc3RhdGljIGludCAoKmt2bV92bXhfZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuIFx0W0VYSVRfUkVBU09OX1ZNRlVOQ11cdFx0ICAgICAgPSBoYW5kbGVfdm14X2luc3RydWN0aW9uLFxuIFx0W0VYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVJdXHQgICAgICA9IGhhbmRsZV9wcmVlbXB0aW9uX3RpbWVyLFxuIFx0W0VYSVRfUkVBU09OX0VOQ0xTXVx0XHQgICAgICA9IGhhbmRsZV9lbmNscyxcbi1cdFtFWElUX1JFQVNPTl9CVVNfTE9DS10gICAgICAgICAgICAgICAgPSBoYW5kbGVfYnVzX2xvY2tfdm1leGl0LFxuK1x0W0VYSVRfUkVBU09OX0JVU19MT0NLXSAgICAgICAgICAgICAgICA9IHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXQsXG4gXHRbRVhJVF9SRUFTT05fTk9USUZZXVx0XHQgICAgICA9IGhhbmRsZV9ub3RpZnksXG4gXHRbRVhJVF9SRUFTT05fU0VBTUNBTExdXHRcdCAgICAgID0gaGFuZGxlX3RkeF9pbnN0cnVjdGlvbixcbiBcdFtFWElUX1JFQVNPTl9URENBTExdXHRcdCAgICAgID0gaGFuZGxlX3RkeF9pbnN0cnVjdGlvbixcbkBAIC02NzAzLDcgKzY2ODEsNyBAQCB2b2lkIGR1bXBfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogVGhlIGd1ZXN0IGhhcyBleGl0ZWQuICBTZWUgaWYgd2UgY2FuIGZpeCBpdCBvciBpZiB3ZSBuZWVkIHVzZXJzcGFjZVxuICAqIGFzc2lzdGFuY2UuXG4gICovXG4tc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbitpbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuIHtcbiBcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIFx0dW5pb24gdm14X2V4aXRfcmVhc29uIGV4aXRfcmVhc29uID0gdm14X2dldF9leGl0X3JlYXNvbih2Y3B1KTtcbkBAIC02ODYyLDI0ICs2ODQwLDYgQEAgc3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1pbnQgdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuLXtcbi1cdGludCByZXQgPSBfX3ZteF9oYW5kbGVfZXhpdCh2Y3B1LCBleGl0X2Zhc3RwYXRoKTtcbi1cbi1cdC8qXG4tXHQgKiBFeGl0IHRvIHVzZXIgc3BhY2Ugd2hlbiBidXMgbG9jayBkZXRlY3RlZCB0byBpbmZvcm0gdGhhdCB0aGVyZSBpc1xuLVx0ICogYSBidXMgbG9jayBpbiBndWVzdC5cbi1cdCAqL1xuLVx0aWYgKHZteF9nZXRfZXhpdF9yZWFzb24odmNwdSkuYnVzX2xvY2tfZGV0ZWN0ZWQpIHtcbi1cdFx0aWYgKHJldCBcdTAwM2UgMClcbi1cdFx0XHR2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1g4Nl9CVVNfTE9DSztcbi1cbi1cdFx0dmNwdS1cdTAwM2VydW4tXHUwMDNlZmxhZ3MgfD0gS1ZNX1JVTl9YODZfQlVTX0xPQ0s7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gdm9pZCB2bXhfdXBkYXRlX2NyOF9pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdHByLCBpbnQgaXJyKVxuIHtcbiBcdGludCB0cHJfdGhyZXNob2xkO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MDYuMDIxMDc5MTEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTQ4NTIxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEl0J3MgdG91Y2hpbmcgdGhlIEtWTSBWTVgvVERYIGV4aXQgaGFuZGxpbmcgY29kZSwgd2hpY2ggYWx3YXlzIG1ha2VzIG1lIHBheSBleHRyYSBhdHRlbnRpb24uIFJlZmFjdG9yaW5nIGB2dF9oYW5kbGVfZXhpdGAgYW5kIGB2bXhfaGFuZGxlX2V4aXRgLCBhbG9uZyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fdnRfaGFuZGxlX25vdGlmeWAgYW5kIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCwgYW5kIHRoZSBtb2RpZmljYXRpb25zIHRvIFREWCBleGl0IHJlYXNvbiBoYW5kbGluZy4uLiB0aGF0J3MgYSBkZWNlbnQgYW1vdW50IG9mIGNodXJuLlxuXG5MZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcy4gU28sIGBfX3Z0X2hhbmRsZV9ub3RpZnlgIGlzIGJlaW5nIGV4dHJhY3RlZCBmcm9tIGBoYW5kbGVfbm90aWZ5YCBpbiBgdm14LmNgIGFuZCBpcyBub3cgaW4gYGNvbW1vbi5oYC4gQW5kIGl0J3Mgc2V0dGluZyBgdmNwdS1cdTAwM2VydW4tXHUwMDNlZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9OT1RJRlk7YCBhbmQgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFncyA9IGNvbnRleHRfaW52YWxpZCA/IEtWTV9OT1RJRllfQ09OVEVYVF9JTlZBTElEIDogMDtgLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGB2Y3B1LVx1MDAzZXJ1bmAgaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UuIEl0J3Mgc2hhcmVkISBBbGFybSBiZWxscyBhcmUgYWxyZWFkeSByaW5naW5nIGEgYml0LlxuXG5XZSdyZSB3cml0aW5nIHRvIGB2Y3B1LVx1MDAzZXJ1bmAsIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLiBOb3csIHRoaXMgYHZjcHUtXHUwMDNlcnVuLVx1MDAzZW5vdGlmeS5mbGFnc2AgYXNzaWdubWVudOKApiBXaGF0IGFib3V0ICpvdGhlciogZmllbGRzIHdpdGhpbiBgdmNwdS1cdTAwM2VydW4tXHUwMDNlbm90aWZ5YD8gQXJlIHdlIGluaXRpYWxpemluZyBldmVyeXRoaW5nIGNvcnJlY3RseT8gVGhhdCdzIHRoZSByZWFsIHF1ZXN0aW9uLiBQb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IFRoYXQncyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIEtNU0FOIGxvdmVzIHRvIGZpbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHN0cnVjdCBrdm1fcnVuYCBhbmQgdGhlIGBub3RpZnlgIGZpZWxkIGRlZmluaXRpb24sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjEyLjAzNTkzNDg2NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzI4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBrdm1fcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTQzPXN0cnVjdCBrdm1fZXhpdF9zbnBfcmVxX2NlcnRzIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMTAtLypcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjExOiAqIHN0cnVjdCBrdm1fcnVuIGNhbiBiZSBtb2RpZmllZCBieSB1c2Vyc3BhY2UgYXQgYW55IHRpbWUsIHNvIEtWTSBtdXN0IGJlXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTIxMi0gKiBjYXJlZnVsIHRvIGF2b2lkIFRPQ1RPVSBidWdzLiBJbiBvcmRlciB0byBwcm90ZWN0IEtWTSwgSElOVF9VTlNBRkVfSU5fS1ZNKClcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MjEzOiAqIHJlbmFtZXMgZmllbGRzIGluIHN0cnVjdCBrdm1fcnVuIGZyb20gXFx1MDAzY3N5bWJvbFxcdTAwM2UgdG8gXFx1MDAzY3N5bWJvbFxcdTAwM2VfX3Vuc2FmZSB3aGVuXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTIxNC0gKiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGVuc3VyaW5nIHRoYXQgYW55IHVzZSB3aXRoaW4gS1ZNIGlzIG9idmlvdXMgYW5kXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMjIzLS8qIGZvciBLVk1fUlVOLCByZXR1cm5lZCBieSBtbWFwKHZjcHVfZmQsIG9mZnNldD0wKSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoyMjQ6c3RydWN0IGt2bV9ydW4ge1xcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0yMjUtXFx0LyogaW4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MTIuMTQwNjY3ODkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTA1MTI3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBrdm1fcnVuYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgYSByZWZyZXNoZXIgb24gdGhlIGBzdHJ1Y3Qga3ZtX3J1bmAuIEl0J3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgS1ZNIHB1enpsZSwgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgZHVyaW5nIHRoZSBWTSBleGVjdXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgdXAgdGhlIGRlZmluaXRpb24uIEknbSBhZnRlciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgZXhhY3RseSB3aGF0J3Mgc2hhcmVkIHRocm91Z2ggdGhpcyBzdHJ1Y3R1cmUgYXQgYSBsb3cgbGV2ZWwuIEFyZSB3ZSB0YWxraW5nIHJlZ2lzdGVycywgbWVtb3J5IGFjY2VzcyBpbmZvLCBWTSBleGl0IHJlYXNvbnMsIGFuZCBzbyBmb3J0aD8gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgaXRzIG1lbWJlcnMsIHRoZWlyIHB1cnBvc2UsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gbWVjaGFuaXNtcy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNoYW5nZXMgaW4gbW9yZSByZWNlbnQga2VybmVsIHZlcnNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MTUuMjkxMTg2MTU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjI0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyNDpcXHRzdHJ1Y3Qga3ZtX3J1biB7XFxuIDIyNTpcXHRcXHQvKiBpbiAqL1xcbiAyMjY6XFx0XFx0X191OCByZXF1ZXN0X2ludGVycnVwdF93aW5kb3c7XFxuIDIyNzpcXHRcXHRfX3U4IEhJTlRfVU5TQUZFX0lOX0tWTShpbW1lZGlhdGVfZXhpdCk7XFxuIDIyODpcXHRcXHRfX3U4IHBhZGRpbmcxWzZdO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHQvKiBvdXQgKi9cXG4gMjMxOlxcdFxcdF9fdTMyIGV4aXRfcmVhc29uO1xcbiAyMzI6XFx0XFx0X191OCByZWFkeV9mb3JfaW50ZXJydXB0X2luamVjdGlvbjtcXG4gMjMzOlxcdFxcdF9fdTggaWZfZmxhZztcXG4gMjM0OlxcdFxcdF9fdTE2IGZsYWdzO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHQvKiBpbiAocHJlX2t2bV9ydW4pLCBvdXQgKHBvc3Rfa3ZtX3J1bikgKi9cXG4gMjM3OlxcdFxcdF9fdTY0IGNyODtcXG4gMjM4OlxcdFxcdF9fdTY0IGFwaWNfYmFzZTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0I2lmZGVmIF9fS1ZNX1MzOTBcXG4gMjQxOlxcdFxcdC8qIHRoZSBwcm9jZXNzb3Igc3RhdHVzIHdvcmQgZm9yIHMzOTAgKi9cXG4gMjQyOlxcdFxcdF9fdTY0IHBzd19tYXNrOyAvKiBwc3cgdXBwZXIgaGFsZiAqL1xcbiAyNDM6XFx0XFx0X191NjQgcHN3X2FkZHI7IC8qIHBzdyBsb3dlciBoYWxmICovXFxuIDI0NDpcXHQjZW5kaWZcXG4gMjQ1OlxcdFxcdHVuaW9uIHtcXG4gMjQ2OlxcdFxcdFxcdC8qIEtWTV9FWElUX1VOS05PV04gKi9cXG4gMjQ3OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDI0ODpcXHRcXHRcXHRcXHRfX3U2NCBoYXJkd2FyZV9leGl0X3JlYXNvbjtcXG4gMjQ5OlxcdFxcdFxcdH0gaHc7XFxuIDI1MDpcXHRcXHRcXHQvKiBLVk1fRVhJVF9GQUlMX0VOVFJZICovXFxuIDI1MTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNTI6XFx0XFx0XFx0XFx0X191NjQgaGFyZHdhcmVfZW50cnlfZmFpbHVyZV9yZWFzb247XFxuIDI1MzpcXHRcXHRcXHRcXHRfX3UzMiBjcHU7XFxuIDI1NDpcXHRcXHRcXHR9IGZhaWxfZW50cnk7XFxuIDI1NTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9FWENFUFRJT04gKi9cXG4gMjU2OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDI1NzpcXHRcXHRcXHRcXHRfX3UzMiBleGNlcHRpb247XFxuIDI1ODpcXHRcXHRcXHRcXHRfX3UzMiBlcnJvcl9jb2RlO1xcbiAyNTk6XFx0XFx0XFx0fSBleDtcXG4gMjYwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0lPICovXFxuIDI2MTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNjI6XFx0I2RlZmluZSBLVk1fRVhJVF9JT19JTiAgMFxcbiAyNjM6XFx0I2RlZmluZSBLVk1fRVhJVF9JT19PVVQgMVxcbiAyNjQ6XFx0XFx0XFx0XFx0X191OCBkaXJlY3Rpb247XFxuIDI2NTpcXHRcXHRcXHRcXHRfX3U4IHNpemU7IC8qIGJ5dGVzICovXFxuIDI2NjpcXHRcXHRcXHRcXHRfX3UxNiBwb3J0O1xcbiAyNjc6XFx0XFx0XFx0XFx0X191MzIgY291bnQ7XFxuIDI2ODpcXHRcXHRcXHRcXHRfX3U2NCBkYXRhX29mZnNldDsgLyogcmVsYXRpdmUgdG8ga3ZtX3J1biBzdGFydCAqL1xcbiAyNjk6XFx0XFx0XFx0fSBpbztcXG4gMjcwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0RFQlVHICovXFxuIDI3MTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNzI6XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggYXJjaDtcXG4gMjczOlxcdFxcdFxcdH0gZGVidWc7XFxuIDI3NDpcXHRcXHRcXHQvKiBLVk1fRVhJVF9NTUlPICovXFxuIDI3NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyNzY6XFx0XFx0XFx0XFx0X191NjQgcGh5c19hZGRyO1xcbiAyNzc6XFx0XFx0XFx0XFx0X191OCAgZGF0YVs4XTtcXG4gMjc4OlxcdFxcdFxcdFxcdF9fdTMyIGxlbjtcXG4gMjc5OlxcdFxcdFxcdFxcdF9fdTggIGlzX3dyaXRlO1xcbiAyODA6XFx0XFx0XFx0fSBtbWlvO1xcbiAyODE6XFx0XFx0XFx0LyogS1ZNX0VYSVRfTE9PTkdBUkNIX0lPQ1NSICovXFxuIDI4MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAyODM6XFx0XFx0XFx0XFx0X191NjQgcGh5c19hZGRyO1xcbiAyODQ6XFx0XFx0XFx0XFx0X191OCAgZGF0YVs4XTtcXG4gMjg1OlxcdFxcdFxcdFxcdF9fdTMyIGxlbjtcXG4gMjg2OlxcdFxcdFxcdFxcdF9fdTggIGlzX3dyaXRlO1xcbiAyODc6XFx0XFx0XFx0fSBpb2Nzcl9pbztcXG4gMjg4OlxcdFxcdFxcdC8qIEtWTV9FWElUX0hZUEVSQ0FMTCAqL1xcbiAyODk6XFx0XFx0XFx0c3RydWN0IHtcXG4gMjkwOlxcdFxcdFxcdFxcdF9fdTY0IG5yO1xcbiAyOTE6XFx0XFx0XFx0XFx0X191NjQgYXJnc1s2XTtcXG4gMjkyOlxcdFxcdFxcdFxcdF9fdTY0IHJldDtcXG4gMjkzOlxcdFxcbiAyOTQ6XFx0XFx0XFx0XFx0dW5pb24ge1xcbiAyOTU6XFx0I2lmbmRlZiBfX0tFUk5FTF9fXFxuIDI5NjpcXHRcXHRcXHRcXHRcXHRfX3UzMiBsb25nbW9kZTtcXG4gMjk3OlxcdCNlbmRpZlxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0X191NjQgZmxhZ3M7XFxuIDI5OTpcXHRcXHRcXHRcXHR9O1xcbiAzMDA6XFx0XFx0XFx0fSBoeXBlcmNhbGw7XFxuIDMwMTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9UUFJfQUNDRVNTICovXFxuIDMwMjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMDM6XFx0XFx0XFx0XFx0X191NjQgcmlwO1xcbiAzMDQ6XFx0XFx0XFx0XFx0X191MzIgaXNfd3JpdGU7XFxuIDMwNTpcXHRcXHRcXHRcXHRfX3UzMiBwYWQ7XFxuIDMwNjpcXHRcXHRcXHR9IHRwcl9hY2Nlc3M7XFxuIDMwNzpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TMzkwX1NJRUlDICovXFxuIDMwODpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMDk6XFx0XFx0XFx0XFx0X191OCBpY3B0Y29kZTtcXG4gMzEwOlxcdFxcdFxcdFxcdF9fdTE2IGlwYTtcXG4gMzExOlxcdFxcdFxcdFxcdF9fdTMyIGlwYjtcXG4gMzEyOlxcdFxcdFxcdH0gczM5MF9zaWVpYztcXG4gMzEzOlxcdFxcdFxcdC8qIEtWTV9FWElUX1MzOTBfUkVTRVQgKi9cXG4gMzE0OlxcdFxcdFxcdF9fdTY0IHMzOTBfcmVzZXRfZmxhZ3M7XFxuIDMxNTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TMzkwX1VDT05UUk9MICovXFxuIDMxNjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMTc6XFx0XFx0XFx0XFx0X191NjQgdHJhbnNfZXhjX2NvZGU7XFxuIDMxODpcXHRcXHRcXHRcXHRfX3UzMiBwZ21fY29kZTtcXG4gMzE5OlxcdFxcdFxcdH0gczM5MF91Y29udHJvbDtcXG4gMzIwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0RDUiAoZGVwcmVjYXRlZCkgKi9cXG4gMzIxOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDMyMjpcXHRcXHRcXHRcXHRfX3UzMiBkY3JuO1xcbiAzMjM6XFx0XFx0XFx0XFx0X191MzIgZGF0YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MTUuMjkxNDA3MTU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTMwNDYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBLVk0ncyBga3ZtX3J1bmAgU3RydWN0dXJlKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZGlnIGludG8gdGhlIGBrdm1fcnVuYCBzdHJ1Y3R1cmUgYSBiaXQgbW9yZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgbm90aWZ5YCBmaWVsZCBpcyB1c2VkLiBXZSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGF0IHBhcnRpY3VsYXIgZWxlbWVudC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRvIHNvbWUgbW9yZSByZWFkaW5nIGluIHRoZSBjb2RlISBMZXQncyBzZWUgaG93IGBub3RpZnlgIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjE4LjI4NDQ1NjY3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjQ6XFx0XFx0XFx0XFx0X191OCAgaXNfd3JpdGU7XFxuIDMyNTpcXHRcXHRcXHR9IGRjcjtcXG4gMzI2OlxcdFxcdFxcdC8qIEtWTV9FWElUX0lOVEVSTkFMX0VSUk9SICovXFxuIDMyNzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzMjg6XFx0XFx0XFx0XFx0X191MzIgc3ViZXJyb3I7XFxuIDMyOTpcXHRcXHRcXHRcXHQvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0lOVEVSTkFMX0VSUk9SX0RBVEE6ICovXFxuIDMzMDpcXHRcXHRcXHRcXHRfX3UzMiBuZGF0YTtcXG4gMzMxOlxcdFxcdFxcdFxcdF9fdTY0IGRhdGFbMTZdO1xcbiAzMzI6XFx0XFx0XFx0fSBpbnRlcm5hbDtcXG4gMzMzOlxcdFxcdFxcdC8qXFxuIDMzNDpcXHRcXHRcXHQgKiBLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OXFxuIDMzNTpcXHRcXHRcXHQgKlxcbiAzMzY6XFx0XFx0XFx0ICogXFxcInN0cnVjdCBlbXVsYXRpb25fZmFpbHVyZVxcXCIgaXMgYW4gb3ZlcmxheSBvZiBcXFwic3RydWN0IGludGVybmFsXFxcIlxcbiAzMzc6XFx0XFx0XFx0ICogdGhhdCBpcyB1c2VkIGZvciB0aGUgS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTiBzdWItdHlwZSBvZlxcbiAzMzg6XFx0XFx0XFx0ICogS1ZNX0VYSVRfSU5URVJOQUxfRVJST1IuICBOb3RlLCB1bmxpa2Ugb3RoZXIgaW50ZXJuYWwgZXJyb3JcXG4gMzM5OlxcdFxcdFxcdCAqIHN1Yi10eXBlcywgdGhpcyBzdHJ1Y3QgaXMgQUJJISAgSXQgYWxzbyBuZWVkcyB0byBiZSBiYWNrd2FyZHNcXG4gMzQwOlxcdFxcdFxcdCAqIGNvbXBhdGlibGUgd2l0aCBcXFwic3RydWN0IGludGVybmFsXFxcIi4gIFRha2Ugc3BlY2lhbCBjYXJlIHRoYXRcXG4gMzQxOlxcdFxcdFxcdCAqIFxcXCJuZGF0YVxcXCIgaXMgY29ycmVjdCwgdGhhdCBuZXcgZmllbGRzIGFyZSBlbnVtZXJhdGVkIGluIFxcXCJmbGFnc1xcXCIsXFxuIDM0MjpcXHRcXHRcXHQgKiBhbmQgdGhhdCBlYWNoIGZsYWcgZW51bWVyYXRlcyBmaWVsZHMgdGhhdCBhcmUgNjQtYml0IGFsaWduZWRcXG4gMzQzOlxcdFxcdFxcdCAqIGFuZCBzaXplZCAoc28gdGhhdCBuZGF0YStpbnRlcm5hbC5kYXRhW10gaXMgdmFsaWQvYWNjdXJhdGUpLlxcbiAzNDQ6XFx0XFx0XFx0ICpcXG4gMzQ1OlxcdFxcdFxcdCAqIFNwYWNlIGJleW9uZCB0aGUgZGVmaW5lZCBmaWVsZHMgbWF5IGJlIHVzZWQgdG8gc3RvcmUgYXJiaXRyYXJ5XFxuIDM0NjpcXHRcXHRcXHQgKiBkZWJ1ZyBpbmZvcm1hdGlvbiByZWxhdGluZyB0byB0aGUgZW11bGF0aW9uIGZhaWx1cmUuIEl0IGlzXFxuIDM0NzpcXHRcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGluIFxcXCJuZGF0YVxcXCIgYnV0IHRoZSBmb3JtYXQgaXMgdW5zcGVjaWZpZWQgYW5kIGlzXFxuIDM0ODpcXHRcXHRcXHQgKiBub3QgcmVwcmVzZW50ZWQgaW4gXFxcImZsYWdzXFxcIi4gQW55IHN1Y2ggaW5mb3JtYXRpb24gaXMgKm5vdCogQUJJIVxcbiAzNDk6XFx0XFx0XFx0ICovXFxuIDM1MDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzNTE6XFx0XFx0XFx0XFx0X191MzIgc3ViZXJyb3I7XFxuIDM1MjpcXHRcXHRcXHRcXHRfX3UzMiBuZGF0YTtcXG4gMzUzOlxcdFxcdFxcdFxcdF9fdTY0IGZsYWdzO1xcbiAzNTQ6XFx0XFx0XFx0XFx0dW5pb24ge1xcbiAzNTU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHtcXG4gMzU2OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTggIGluc25fc2l6ZTtcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTggIGluc25fYnl0ZXNbMTVdO1xcbiAzNTg6XFx0XFx0XFx0XFx0XFx0fTtcXG4gMzU5OlxcdFxcdFxcdFxcdH07XFxuIDM2MDpcXHRcXHRcXHRcXHQvKiBBcmJpdHJhcnkgZGVidWcgZGF0YSBtYXkgZm9sbG93LiAqL1xcbiAzNjE6XFx0XFx0XFx0fSBlbXVsYXRpb25fZmFpbHVyZTtcXG4gMzYyOlxcdFxcdFxcdC8qIEtWTV9FWElUX09TSSAqL1xcbiAzNjM6XFx0XFx0XFx0c3RydWN0IHtcXG4gMzY0OlxcdFxcdFxcdFxcdF9fdTY0IGdwcnNbMzJdO1xcbiAzNjU6XFx0XFx0XFx0fSBvc2k7XFxuIDM2NjpcXHRcXHRcXHQvKiBLVk1fRVhJVF9QQVBSX0hDQUxMICovXFxuIDM2NzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzNjg6XFx0XFx0XFx0XFx0X191NjQgbnI7XFxuIDM2OTpcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDM3MDpcXHRcXHRcXHRcXHRfX3U2NCBhcmdzWzldO1xcbiAzNzE6XFx0XFx0XFx0fSBwYXByX2hjYWxsO1xcbiAzNzI6XFx0XFx0XFx0LyogS1ZNX0VYSVRfUzM5MF9UU0NIICovXFxuIDM3MzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzNzQ6XFx0XFx0XFx0XFx0X191MTYgc3ViY2hhbm5lbF9pZDtcXG4gMzc1OlxcdFxcdFxcdFxcdF9fdTE2IHN1YmNoYW5uZWxfbnI7XFxuIDM3NjpcXHRcXHRcXHRcXHRfX3UzMiBpb19pbnRfcGFybTtcXG4gMzc3OlxcdFxcdFxcdFxcdF9fdTMyIGlvX2ludF93b3JkO1xcbiAzNzg6XFx0XFx0XFx0XFx0X191MzIgaXBiO1xcbiAzNzk6XFx0XFx0XFx0XFx0X191OCBkZXF1ZXVlZDtcXG4gMzgwOlxcdFxcdFxcdH0gczM5MF90c2NoO1xcbiAzODE6XFx0XFx0XFx0LyogS1ZNX0VYSVRfRVBSICovXFxuIDM4MjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAzODM6XFx0XFx0XFx0XFx0X191MzIgZXByO1xcbiAzODQ6XFx0XFx0XFx0fSBlcHI7XFxuIDM4NTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TWVNURU1fRVZFTlQgKi9cXG4gMzg2OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDM4NzpcXHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfU0hVVERPV04gICAgICAgMVxcbiAzODg6XFx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1JFU0VUICAgICAgICAgIDJcXG4gMzg5OlxcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9DUkFTSCAgICAgICAgICAzXFxuIDM5MDpcXHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfV0FLRVVQICAgICAgICAgNFxcbiAzOTE6XFx0I2RlZmluZSBLVk1fU1lTVEVNX0VWRU5UX1NVU1BFTkQgICAgICAgIDVcXG4gMzkyOlxcdCNkZWZpbmUgS1ZNX1NZU1RFTV9FVkVOVF9TRVZfVEVSTSAgICAgICA2XFxuIDM5MzpcXHQjZGVmaW5lIEtWTV9TWVNURU1fRVZFTlRfVERYX0ZBVEFMICAgICAgN1xcbiAzOTQ6XFx0XFx0XFx0XFx0X191MzIgdHlwZTtcXG4gMzk1OlxcdFxcdFxcdFxcdF9fdTMyIG5kYXRhO1xcbiAzOTY6XFx0XFx0XFx0XFx0dW5pb24ge1xcbiAzOTc6XFx0I2lmbmRlZiBfX0tFUk5FTF9fXFxuIDM5ODpcXHRcXHRcXHRcXHRcXHRfX3U2NCBmbGFncztcXG4gMzk5OlxcdCNlbmRpZlxcbiA0MDA6XFx0XFx0XFx0XFx0XFx0X191NjQgZGF0YVsxNl07XFxuIDQwMTpcXHRcXHRcXHRcXHR9O1xcbiA0MDI6XFx0XFx0XFx0fSBzeXN0ZW1fZXZlbnQ7XFxuIDQwMzpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TMzkwX1NUU0kgKi9cXG4gNDA0OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQwNTpcXHRcXHRcXHRcXHRfX3U2NCBhZGRyO1xcbiA0MDY6XFx0XFx0XFx0XFx0X191OCBhcjtcXG4gNDA3OlxcdFxcdFxcdFxcdF9fdTggcmVzZXJ2ZWQ7XFxuIDQwODpcXHRcXHRcXHRcXHRfX3U4IGZjO1xcbiA0MDk6XFx0XFx0XFx0XFx0X191OCBzZWwxO1xcbiA0MTA6XFx0XFx0XFx0XFx0X191MTYgc2VsMjtcXG4gNDExOlxcdFxcdFxcdH0gczM5MF9zdHNpO1xcbiA0MTI6XFx0XFx0XFx0LyogS1ZNX0VYSVRfSU9BUElDX0VPSSAqL1xcbiA0MTM6XFx0XFx0XFx0c3RydWN0IHtcXG4gNDE0OlxcdFxcdFxcdFxcdF9fdTggdmVjdG9yO1xcbiA0MTU6XFx0XFx0XFx0fSBlb2k7XFxuIDQxNjpcXHRcXHRcXHQvKiBLVk1fRVhJVF9IWVBFUlYgKi9cXG4gNDE3OlxcdFxcdFxcdHN0cnVjdCBrdm1faHlwZXJ2X2V4aXQgaHlwZXJ2O1xcbiA0MTg6XFx0XFx0XFx0LyogS1ZNX0VYSVRfQVJNX05JU1YgLyBLVk1fRVhJVF9BUk1fTERTVDY0QiAqL1xcbiA0MTk6XFx0XFx0XFx0c3RydWN0IHtcXG4gNDIwOlxcdFxcdFxcdFxcdF9fdTY0IGVzcl9pc3M7XFxuIDQyMTpcXHRcXHRcXHRcXHRfX3U2NCBmYXVsdF9pcGE7XFxuIDQyMjpcXHRcXHRcXHR9IGFybV9uaXN2O1xcbiA0MjM6XFx0XFx0XFx0LyogS1ZNX0VYSVRfWDg2X1JETVNSIC8gS1ZNX0VYSVRfWDg2X1dSTVNSICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjA0OjE4LjI4NDcwODkwNFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE2ODEyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIGdldCB0byBpdC5cblxuKioqXG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBBbnRpY2lwYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCAtIEknbSBzdXBwb3NlZCB0byBwcm9jZXNzIHRoaXMgdGV4dCBhbmQgcmVwcmVzZW50IGl0IGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGluIGZpcnN0LXBlcnNvbiwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGl0IGFuZCBmb3JtdWxhdGluZyBteSB1bmRlcnN0YW5kaW5nLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgYmUgYSByZWxhdGl2ZWx5IHF1aWNrIGFuZCBlZmZpY2llbnQgdGFzay4gSXQncyBhYm91dCBkaXN0aWxsaW5nIHRoZSBjb3JlIGlkZWFzIGFuZCBpbnRlcm5hbGl6aW5nIHRoZW0uIE5vdywgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LiBMZXQncyBzZWUgd2hhdCdzIG9uIHRoZSBwYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI2MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNDoyMy4yMDE1MjQzMTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI0OlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQyNTpcXHRcXHRcXHRcXHRfX3U4IGVycm9yOyAvKiB1c2VyIC1cXHUwMDNlIGtlcm5lbCAqL1xcbiA0MjY6XFx0XFx0XFx0XFx0X191OCBwYWRbN107XFxuIDQyNzpcXHQjZGVmaW5lIEtWTV9NU1JfRVhJVF9SRUFTT05fSU5WQUxcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiA0Mjg6XFx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX1VOS05PV05cXHQoMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiA0Mjk6XFx0I2RlZmluZSBLVk1fTVNSX0VYSVRfUkVBU09OX0ZJTFRFUlxcdCgxIFxcdTAwM2NcXHUwMDNjIDIpXFxuIDQzMDpcXHQjZGVmaW5lIEtWTV9NU1JfRVhJVF9SRUFTT05fVkFMSURfTUFTS1xcdChLVk1fTVNSX0VYSVRfUkVBU09OX0lOVkFMICAgfFxcdFxcXFxcXG4gNDMxOlxcdFxcdFxcdFxcdFxcdFxcdCBLVk1fTVNSX0VYSVRfUkVBU09OX1VOS05PV04gfFxcdFxcXFxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdCBLVk1fTVNSX0VYSVRfUkVBU09OX0ZJTFRFUilcXG4gNDMzOlxcdFxcdFxcdFxcdF9fdTMyIHJlYXNvbjsgLyoga2VybmVsIC1cXHUwMDNlIHVzZXIgKi9cXG4gNDM0OlxcdFxcdFxcdFxcdF9fdTMyIGluZGV4OyAvKiBrZXJuZWwgLVxcdTAwM2UgdXNlciAqL1xcbiA0MzU6XFx0XFx0XFx0XFx0X191NjQgZGF0YTsgLyoga2VybmVsIFxcdTAwM2MtXFx1MDAzZSB1c2VyICovXFxuIDQzNjpcXHRcXHRcXHR9IG1zcjtcXG4gNDM3OlxcdFxcdFxcdC8qIEtWTV9FWElUX1hFTiAqL1xcbiA0Mzg6XFx0XFx0XFx0c3RydWN0IGt2bV94ZW5fZXhpdCB4ZW47XFxuIDQzOTpcXHRcXHRcXHQvKiBLVk1fRVhJVF9SSVNDVl9TQkkgKi9cXG4gNDQwOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ0MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGV4dGVuc2lvbl9pZDtcXG4gNDQyOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZnVuY3Rpb25faWQ7XFxuIDQ0MzpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZ3NbNl07XFxuIDQ0NDpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJldFsyXTtcXG4gNDQ1OlxcdFxcdFxcdH0gcmlzY3Zfc2JpO1xcbiA0NDY6XFx0XFx0XFx0LyogS1ZNX0VYSVRfUklTQ1ZfQ1NSICovXFxuIDQ0NzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0NDg6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjc3JfbnVtO1xcbiA0NDk6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfdmFsdWU7XFxuIDQ1MDpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHdyaXRlX21hc2s7XFxuIDQ1MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJldF92YWx1ZTtcXG4gNDUyOlxcdFxcdFxcdH0gcmlzY3ZfY3NyO1xcbiA0NTM6XFx0XFx0XFx0LyogS1ZNX0VYSVRfTk9USUZZICovXFxuIDQ1NDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0NTU6XFx0I2RlZmluZSBLVk1fTk9USUZZX0NPTlRFWFRfSU5WQUxJRFxcdCgxIFxcdTAwM2NcXHUwMDNjIDApXFxuIDQ1NjpcXHRcXHRcXHRcXHRfX3UzMiBmbGFncztcXG4gNDU3OlxcdFxcdFxcdH0gbm90aWZ5O1xcbiA0NTg6XFx0XFx0XFx0LyogS1ZNX0VYSVRfTUVNT1JZX0ZBVUxUICovXFxuIDQ1OTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0NjA6XFx0I2RlZmluZSBLVk1fTUVNT1JZX0VYSVRfRkxBR19QUklWQVRFXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMylcXG4gNDYxOlxcdFxcdFxcdFxcdF9fdTY0IGZsYWdzO1xcbiA0NjI6XFx0XFx0XFx0XFx0X191NjQgZ3BhO1xcbiA0NjM6XFx0XFx0XFx0XFx0X191NjQgc2l6ZTtcXG4gNDY0OlxcdFxcdFxcdH0gbWVtb3J5X2ZhdWx0O1xcbiA0NjU6XFx0XFx0XFx0LyogS1ZNX0VYSVRfVERYICovXFxuIDQ2NjpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiA0Njc6XFx0XFx0XFx0XFx0X191NjQgZmxhZ3M7XFxuIDQ2ODpcXHRcXHRcXHRcXHRfX3U2NCBucjtcXG4gNDY5OlxcdFxcdFxcdFxcdHVuaW9uIHtcXG4gNDcwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ3MTpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDQ3MjpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCBkYXRhWzVdO1xcbiA0NzM6XFx0XFx0XFx0XFx0XFx0fSB1bmtub3duO1xcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHtcXG4gNDc1OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTY0IHJldDtcXG4gNDc2OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTY0IGdwYTtcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdFxcdF9fdTY0IHNpemU7XFxuIDQ3ODpcXHRcXHRcXHRcXHRcXHR9IGdldF9xdW90ZTtcXG4gNDc5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ4MDpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDQ4MTpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCBsZWFmO1xcbiA0ODI6XFx0XFx0XFx0XFx0XFx0XFx0X191NjQgcjExLCByMTIsIHIxMywgcjE0O1xcbiA0ODM6XFx0XFx0XFx0XFx0XFx0fSBnZXRfdGR2bWNhbGxfaW5mbztcXG4gNDg0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ4NTpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCByZXQ7XFxuIDQ4NjpcXHRcXHRcXHRcXHRcXHRcXHRfX3U2NCB2ZWN0b3I7XFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHR9IHNldHVwX2V2ZW50X25vdGlmeTtcXG4gNDg4OlxcdFxcdFxcdFxcdH07XFxuIDQ4OTpcXHRcXHRcXHR9IHRkeDtcXG4gNDkwOlxcdFxcdFxcdC8qIEtWTV9FWElUX0FSTV9TRUEgKi9cXG4gNDkxOlxcdFxcdFxcdHN0cnVjdCB7XFxuIDQ5MjpcXHQjZGVmaW5lIEtWTV9FWElUX0FSTV9TRUFfRkxBR19HUEFfVkFMSURcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAwKVxcbiA0OTM6XFx0XFx0XFx0XFx0X191NjQgZmxhZ3M7XFxuIDQ5NDpcXHRcXHRcXHRcXHRfX3U2NCBlc3I7XFxuIDQ5NTpcXHRcXHRcXHRcXHRfX3U2NCBndmE7XFxuIDQ5NjpcXHRcXHRcXHRcXHRfX3U2NCBncGE7XFxuIDQ5NzpcXHRcXHRcXHR9IGFybV9zZWE7XFxuIDQ5ODpcXHRcXHRcXHQvKiBLVk1fRVhJVF9TTlBfUkVRX0NFUlRTICovXFxuIDQ5OTpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2V4aXRfc25wX3JlcV9jZXJ0cyBzbnBfcmVxX2NlcnRzO1xcbiA1MDA6XFx0XFx0XFx0LyogRml4IHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gKi9cXG4gNTAxOlxcdFxcdFxcdGNoYXIgcGFkZGluZ1syNTZdO1xcbiA1MDI6XFx0XFx0fTtcXG4gNTAzOlxcdFxcbiA1MDQ6XFx0XFx0LyogMjA0OCBpcyB0aGUgc2l6ZSBvZiB0aGUgY2hhciBhcnJheSB1c2VkIHRvIGJvdW5kL3BhZCB0aGUgc2l6ZVxcbiA1MDU6XFx0XFx0ICogb2YgdGhlIHVuaW9uIHRoYXQgaG9sZHMgc3luYyByZWdzLlxcbiA1MDY6XFx0XFx0ICovXFxuIDUwNzpcXHRcXHQjZGVmaW5lIFNZTkNfUkVHU19TSVpFX0JZVEVTIDIwNDhcXG4gNTA4OlxcdFxcdC8qXFxuIDUwOTpcXHRcXHQgKiBzaGFyZWQgcmVnaXN0ZXJzIGJldHdlZW4ga3ZtIGFuZCB1c2Vyc3BhY2UuXFxuIDUxMDpcXHRcXHQgKiBrdm1fdmFsaWRfcmVncyBzcGVjaWZpZXMgdGhlIHJlZ2lzdGVyIGNsYXNzZXMgc2V0IGJ5IHRoZSBob3N0XFxuIDUxMTpcXHRcXHQgKiBrdm1fZGlydHlfcmVncyBzcGVjaWZpZWQgdGhlIHJlZ2lzdGVyIGNsYXNzZXMgZGlydGllZCBieSB1c2Vyc3BhY2VcXG4gNTEyOlxcdFxcdCAqIHN0cnVjdCBrdm1fc3luY19yZWdzIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYywgYXMgd2VsbCBhcyB0aGVcXG4gNTEzOlxcdFxcdCAqIGJpdHMgZm9yIGt2bV92YWxpZF9yZWdzIGFuZCBrdm1fZGlydHlfcmVnc1xcbiA1MTQ6XFx0XFx0ICovXFxuIDUxNTpcXHRcXHRfX3U2NCBrdm1fdmFsaWRfcmVncztcXG4gNTE2OlxcdFxcdF9fdTY0IGt2bV9kaXJ0eV9yZWdzO1xcbiA1MTc6XFx0XFx0dW5pb24ge1xcbiA1MTg6XFx0XFx0XFx0c3RydWN0IGt2bV9zeW5jX3JlZ3MgcmVncztcXG4gNTE5OlxcdFxcdFxcdGNoYXIgcGFkZGluZ1tTWU5DX1JFR1NfU0laRV9CWVRFU107XFxuIDUyMDpcXHRcXHR9IHM7XFxuIDUyMTpcXHR9O1xcbiA1MjI6XFx0XFxuIDUyMzpcXHQvKiBmb3IgS1ZNX1JFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIC8gS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6MjMuMjAxNzgyMzcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMzE1Njk0MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBURFgvVk1YIFJlZmFjdG9yaW5nIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGxhcmdlbHkgYWJvdXQgY29kZSByZW9yZ2FuaXphdGlvbiwgd2l0aCBhIGZvY3VzIG9uIHNoYXJlZCBsb2dpYyBiZXR3ZWVuIFZNWCBhbmQgVERYLiBJIHNlZSBzZXZlcmFsIGZ1bmN0aW9ucyBiZWluZyBleHRyYWN0ZWQgb3IgbW92ZWQgYXJvdW5kOiBgX192dF9oYW5kbGVfbm90aWZ5YCwgYHZ0X2hhbmRsZV9idXNfbG9ja192bWV4aXRgLCBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAsIGFuZCBgdnRfaGFuZGxlX2V4aXRgLiBUaGVzZSBhcHBlYXIgdG8gYmUgcmVmYWN0b3Jpbmcgc3RlcHMsIG1ha2luZyB0aGUgY29kZSBtb3JlIG1vZHVsYXIgYW5kIG1haW50YWluYWJsZSwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHN1cHBvcnRpbmcgYm90aCBWTVggYW5kIFREWCBlbnZpcm9ubWVudHMuXG5cblJlZ2FyZGluZyB0aGUgYG5vdGlmeWAgc3RydWN0IHdpdGhpbiBga3ZtX3J1bmAsIGl0IHNlZW1zIHVudG91Y2hlZCwgYW5kIGp1c3QgdXNlcyBmbGFncyB3aGljaCByZW1haW4gdGhlIHNhbWUuIFRoZSBgX192dF9oYW5kbGVfbm90aWZ5YCBmdW5jdGlvbiBpcyBhIGRpcmVjdCBwb3J0IGZyb20gYHZteC5jYCwgd2hpY2ggbWFrZXMgdGhpbmdzIG11Y2ggbW9yZSBjbGVhci5cblxuVGhlIGB2dF9oYW5kbGVfYnVzX2xvY2tfdm1leGl0YCBzaW1pbGFybHkgbW92ZXMgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgc2V0dGluZyB0aGUgYGJ1c19sb2NrX2RldGVjdGVkYCBmbGFnLCBmcm9tIGB2bXguY2AuIFRoaXMgaXMgYW5vdGhlciBleGFtcGxlIG9mIGNvZGUgY29uc29saWRhdGlvbiwgbWFraW5nIHRoZSBjb2RlIGxlc3MgY29tcGxleCBhbmQgZWFzaWVyIHRvIGZvbGxvdywgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGdlbmVyaWMgYHZ0X2hhbmRsZV9leGl0YC5cblxuVGhlIGNoYW5nZSBpbiBgdGR4X3RvX3ZteF9leGl0X3JlYXNvbmAgaXMgbW9yZSBpbnRlcmVzdGluZy4gVGhlIHJldHVybiB0eXBlIGNoYW5nZWQgZnJvbSBgdTMyYCB0byBhIGB1bmlvbiB2bXhfZXhpdF9yZWFzb25gLiBUaGlzIGFwcGVhcnMgdG8gYmUgZm9yIGV4cHJlc3NpbmcgYW4gXCJpbnZhbGlkXCIgZXhpdCByZWFzb24gaW4gVERYIHdoZW4gdGhlIHZDUFUgZGlkIG5vdCBlbnRlciB0aGUgZ3Vlc3QuIFN5bnRoZXNpemluZyB0aGlzIGludmFsaWQgZXhpdCByZWFzb24gaXMgdGhlIGNydWNpYWwgcGFydC4gSXQncyBub3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpsZWFrKiB0byB1c2VyIHNwYWNlLCBidXQgcmF0aGVyIGEgcG90ZW50aWFsIGxvZ2ljIGVycm9yOiB1c2luZyBzdGFsZSwgcG90ZW50aWFsbHkgZ2FyYmFnZSwgZGF0YSBmcm9tIGEgcHJldmlvdXMgZXhpdC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgcHJldmVudHMgdGhlIHVzZSBvZiBzdGFsZSBkYXRhIGJ5IHNldHRpbmcgYHZ0LVx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwOyB2dC1cdTAwM2VleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO2AuXG5cblRoZSBjaGVja3Mgb24gYHRkeF9nZXRfZXhpdF9pbmZvYCBhbHNvIHVzZSB0aGF0IGB0ZHhfaXNfZXhpdF9yZWFzb25fdmFsaWRgIGZvciB2YWxpZGl0eS5cblxuRmluYWxseSwgdGhlIGFkZGl0aW9ucyBpbiBgdGR4X3ZjcHVfaW5pdGAgZW5hYmxpbmcgdGhlIFZNQ1MgY29udHJvbHMgZm9yIFREWCBhcmUgdHlwaWNhbCBvZiBlbmFibGluZyBURFggc3BlY2lmaWMgZmVhdHVyZXMuIFRoZSBgdnRfaGFuZGxlX2V4aXRgIHJlZmFjdG9yaW5nIHNoYXJlcyB0aGUgbG9naWMgYmV0d2VlbiBWTVggYW5kIFREWCB3aGVuIGEgYnVzIGxvY2sgaXMgZGV0ZWN0ZWQuXG5cbkdpdmVuIGFsbCB0aGlzLCBJIHNlZSBubyBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGUgXCJzdGFsZSBkYXRhXCIgaXNzdWUgaXMgaGFuZGxlZCBieSAqc3ludGhlc2l6aW5nKiBhbiBpbnZhbGlkIGV4aXQgcmVhc29uLCBjbGVhcmluZyBvdXQgdGhlIGJpdHMsIGVmZmVjdGl2ZWx5IHByZXZlbnRpbmcgYSBzdGFsZSB2YWx1ZSBmcm9tIGJlaW5nIHJlYWQgYW5kIGFjdGVkIHVwb24uIFRodXMsIGl0J3MgYSBidWcgKmZpeCogbm90IGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gZXZpZGVuY2UgaGVyZSB0byBzdWdnZXN0IHRoYXQgS01TQU4gd291bGQgYmUgcmVxdWlyZWQuIEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoZSBwYXRjaCdzIGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgdGhhdCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy4gVGhlIHVuaW9uIGlzIGNsZWFyZWQgaW4gdGhlIHJpZ2h0IHBsYWNlcywgYW5kIHRoZSBwYXRjaCB3b3JrcyB0byBhdm9pZCBhbnkgcG90ZW50aWFsIHN0YWxlLWRhdGEgaGF6YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6NDYuNTE3NDc5Nzg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA2NTU5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5pb24gdm14X2V4aXRfcmVhc29uIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS92bXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTAtXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTp1bmlvbiB2bXhfZXhpdF9yZWFzb24ge1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTItXFx0c3RydWN0IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6NDYuNjE4MTQyMTg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTc2NDAyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTVggRXhpdCBSZWFzb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAuIEkga25vdyBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2h5IGEgdmlydHVhbCBtYWNoaW5lIGlzIGV4aXRpbmcgdG8gdGhlIGhvc3QsIHRoZSBcIlZNIGV4aXRcIiBldmVudC4gSXQncyB0aGUgbHluY2hwaW4gZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemluZyBLVk0gcGVyZm9ybWFuY2Ugb24geDg2LCBpc24ndCBpdD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHdoaWNoIHNwZWNpZmljIHJlYXNvbiBjb2RlcyBtYXAgdG8gd2hhdCBldmVudHMuIEkga25vdyBpdCdzIGRlZmluZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvY29tbW9uLmhgLCBzbyBsZXQncyBuYXZpZ2F0ZSB0aGVyZS4gSSBleHBlY3QgdGhhdCBJJ2xsIGZpbmQgYSB1bmlvbiBzdHJ1Y3R1cmUgb2Ygc29tZSBzb3J0LiBNb3JlIHRoYW4gbGlrZWx5IGl0J3MgYSBiaXQgZmllbGQuIEknbSBnb2luZyB0byB3YW50IHRvIGNvbmZpcm0gaXRzIHN0cnVjdHVyZSBxdWlja2x5LCBwZXJoYXBzIGNyb3NzLXJlZmVyZW5jaW5nIGl0IHdpdGggdGhlIEludGVsIFNETSB0byBwaW5wb2ludCBhbnkgZWRnZS1jYXNlIGJlaGF2aW9yIEkgbWlnaHQgaGF2ZSBtaXNzZWQsIG9yIHRvIGNhdGNoIHJlY2VudCB1cGRhdGVzLiBUaW1lIHRvIGp1bXAgaW4gYW5kIHJlZnJlc2ggbXkgYnJhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6MDQ6NTEuNTc1Nzg1NzE1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDExOlxcdHVuaW9uIHZteF9leGl0X3JlYXNvbiB7XFxuICAxMjpcXHRcXHRzdHJ1Y3Qge1xcbiAgMTM6XFx0XFx0XFx0dTMyXFx0YmFzaWNcXHRcXHRcXHQ6IDE2O1xcbiAgMTQ6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQxNlxcdFxcdDogMTtcXG4gIDE1OlxcdFxcdFxcdHUzMlxcdHJlc2VydmVkMTdcXHRcXHQ6IDE7XFxuICAxNjpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDE4XFx0XFx0OiAxO1xcbiAgMTc6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQxOVxcdFxcdDogMTtcXG4gIDE4OlxcdFxcdFxcdHUzMlxcdHJlc2VydmVkMjBcXHRcXHQ6IDE7XFxuICAxOTpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDIxXFx0XFx0OiAxO1xcbiAgMjA6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQyMlxcdFxcdDogMTtcXG4gIDIxOlxcdFxcdFxcdHUzMlxcdHJlc2VydmVkMjNcXHRcXHQ6IDE7XFxuICAyMjpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDI0XFx0XFx0OiAxO1xcbiAgMjM6XFx0XFx0XFx0dTMyXFx0cmVzZXJ2ZWQyNVxcdFxcdDogMTtcXG4gIDI0OlxcdFxcdFxcdHUzMlxcdGJ1c19sb2NrX2RldGVjdGVkXFx0OiAxO1xcbiAgMjU6XFx0XFx0XFx0dTMyXFx0ZW5jbGF2ZV9tb2RlXFx0XFx0OiAxO1xcbiAgMjY6XFx0XFx0XFx0dTMyXFx0c21pX3BlbmRpbmdfbXRmXFx0XFx0OiAxO1xcbiAgMjc6XFx0XFx0XFx0dTMyXFx0c21pX2Zyb21fdm14X3Jvb3RcXHQ6IDE7XFxuICAyODpcXHRcXHRcXHR1MzJcXHRyZXNlcnZlZDMwXFx0XFx0OiAxO1xcbiAgMjk6XFx0XFx0XFx0dTMyXFx0ZmFpbGVkX3ZtZW50cnlcXHRcXHQ6IDE7XFxuICAzMDpcXHRcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNDo1MS41NzU5MTc0MDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM2NTgyMTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0J3MgYSAzMi1iaXQgdW5pb24sIGB2bXhfZXhpdF9yZWFzb25gLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGVzZSwgYW5kIHRoaXMgcGFydGljdWxhciBvbmUgaXMgc3RydWN0dXJlZCB3aXRoIGEgYml0ZmllbGQsIGAuYmFzaWNgLCBhbmQgYSBjb21wbGV0ZSBgdTMyYCByZXByZXNlbnRhdGlvbiwgYC5mdWxsYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhlIGluaXRpYWxpemF0aW9uLiBXaGVuIEkgc2VlIGByZXR1cm4gKHVuaW9uIHZteF9leGl0X3JlYXNvbikgeyAuYmFzaWMgPSBURFhfSU5WQUxJRF9FWElUX1JFQVNPTiwgfTtgLCBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCwgYWNjb3JkaW5nIHRvIHRoZSBDIHN0YW5kYXJkLCBgLmJhc2ljYCBnZXRzIGFzc2lnbmVkIGl0cyB2YWx1ZSwgYW5kIHRoZSByZXN0IG9mIHRoZSB1bmlvbiBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQsIGFuZCBJIGRvbid0IGZvcmVzZWUgYW4gaXNzdWUgaGVyZS5cblxuVGhlbiwgbG9va2luZyBhdCB0aGUgY29kZSBpbiBgdGR4X3ZjcHVfcnVuYCwgdGhlIGV4cGxpY2l0IHplcm9pbmcgb2YgYC5mdWxsYCAqYmVmb3JlKiBhc3NpZ25pbmcgYC5iYXNpY2AgaXMgYSB2ZXJ5IGdvb2QgcHJhY3RpY2UuIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMDtgIGNsZWFycyBhbGwgYml0cywgbWFraW5nIHN1cmUgdGhhdCBpdCdzIGZ1bGx5IGluaXRpYWxpemVkLiBUaGVuLCBzZXR0aW5nIGB2dC1cdTAwM2VleGl0X3JlYXNvbi5iYXNpYyA9IFREWF9JTlZBTElEX0VYSVRfUkVBU09OO2AgbWFrZXMgaXQgZGV0ZXJtaW5pc3RpYy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGhlcmUuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIGFuZCBleHBsaWNpdCBpbml0aWFsaXphdGlvbi5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhdGNoIGlzIGFib3V0IHJlZmFjdG9yaW5nIGNvZGUgdG8gc2hhcmUgbG9naWMgYmV0d2VlbiBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nLCBhbmQgYWxzbyByZXNvbHZlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBzdGFsZSBleGl0IHJlYXNvbnMgbWlnaHQgYmUgdXNlZC4gSXQncyBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgYnVnIGZpeGVzIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3ZlciwgdGhlIGNvZGUgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGB2bXhfZXhpdF9yZWFzb25gIHVuaW9uLCBlbnN1cmluZyB0aGF0IGl0J3MgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cblxuQXMgYW4gZXhwZXJ0LCBJJ20gY29tZm9ydGFibGUgc3RhdGluZyB0aGF0IHN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3QgdGhlc2UgY2hhbmdlcy4gSSBkb24ndCBzZWUgYW55IG5lZWQgdG8ga2VlcCBLTVNBTiBlbmFibGVkIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2guXG5UaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEwOCwiT3V0cHV0VG9rZW5zIjoyNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDowNTowMC45NDE3NDExMDlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBLVk0gVk1YIGFuZCBURFggZXhpdCBoYW5kbGluZyBjb2RlIHRvIHNoYXJlIGNvbW1vbiBsb2dpYyBmb3Igbm90aWZ5IGFuZCBidXMgbG9jayBWTS1leGl0cy4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgc3ludGhlc2l6ZWQgaW52YWxpZCBleGl0IHJlYXNvbiBmb3IgVERYIHRvIHByZXZlbnQgdGhlIGNvbnN1bXB0aW9uIG9mIHN0YWxlIGV4aXQgcmVhc29ucyBmcm9tIHByZXZpb3VzIHJ1bnMuIFxcblxcbjEuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHZjcHUtXFx1MDAzZXJ1bmAgKHdoaWNoIGlzIG1hcHBlZCB0byB1c2VyIHNwYWNlKSBhcmUgbGltaXRlZCB0byBzZXR0aW5nIHNwZWNpZmljIGZpZWxkcyAoYGV4aXRfcmVhc29uYCwgYG5vdGlmeS5mbGFnc2AsIGBmbGFnc2ApIHdpdGggZGV0ZXJtaW5pc3RpYyB2YWx1ZXMsIGlkZW50aWNhbCB0byB0aGUgcHJlLWV4aXN0aW5nIFZNWCBsb2dpYy5cXG4yLiBUaGUgc3ludGhlc2l6ZWQgYHVuaW9uIHZteF9leGl0X3JlYXNvbmAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIFRoZSBjb2RlIGV4cGxpY2l0bHkgemVyb2VzIHRoZSB1bmlvbiAoZS5nLiwgYHZ0LVxcdTAwM2VleGl0X3JlYXNvbi5mdWxsID0gMGApIGJlZm9yZSBzZXR0aW5nIHRoZSBiYXNpYyBleGl0IHJlYXNvbiwgcHJldmVudGluZyBhbnkgdW5pbml0aWFsaXplZCBiaXRzIGZyb20gYmVpbmcgdXNlZC5cXG4zLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBjb250cm9sIGZsb3csIGNvZGUgZGVkdXBsaWNhdGlvbiwgYW5kIGZpeGluZyBhIGxvZ2ljIGJ1ZyAoc3RhbGUgZXhpdCByZWFzb24pLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cXG5cXG5TdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIGZ1bGx5IHN1ZmZpY2llbnQgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEtWTSBWTVggYW5kIFREWCBleGl0IGhhbmRsaW5nIGNvZGUgdG8gc2hhcmUgY29tbW9uIGxvZ2ljIGZvciBub3RpZnkgYW5kIGJ1cyBsb2NrIFZNLWV4aXRzLiBJdCBhbHNvIGludHJvZHVjZXMgYSBzeW50aGVzaXplZCBpbnZhbGlkIGV4aXQgcmVhc29uIGZvciBURFggdG8gcHJldmVudCB0aGUgY29uc3VtcHRpb24gb2Ygc3RhbGUgZXhpdCByZWFzb25zIGZyb20gcHJldmlvdXMgcnVucy4gXFxuXFxuMS4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgdmNwdS1cXHUwMDNlcnVuYCAod2hpY2ggaXMgbWFwcGVkIHRvIHVzZXIgc3BhY2UpIGFyZSBsaW1pdGVkIHRvIHNldHRpbmcgc3BlY2lmaWMgZmllbGRzIChgZXhpdF9yZWFzb25gLCBgbm90aWZ5LmZsYWdzYCwgYGZsYWdzYCkgd2l0aCBkZXRlcm1pbmlzdGljIHZhbHVlcywgaWRlbnRpY2FsIHRvIHRoZSBwcmUtZXhpc3RpbmcgVk1YIGxvZ2ljLlxcbjIuIFRoZSBzeW50aGVzaXplZCBgdW5pb24gdm14X2V4aXRfcmVhc29uYCBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhlIGNvZGUgZXhwbGljaXRseSB6ZXJvZXMgdGhlIHVuaW9uIChlLmcuLCBgdnQtXFx1MDAzZWV4aXRfcmVhc29uLmZ1bGwgPSAwYCkgYmVmb3JlIHNldHRpbmcgdGhlIGJhc2ljIGV4aXQgcmVhc29uLCBwcmV2ZW50aW5nIGFueSB1bmluaXRpYWxpemVkIGJpdHMgZnJvbSBiZWluZyB1c2VkLlxcbjMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIGNvbnRyb2wgZmxvdywgY29kZSBkZWR1cGxpY2F0aW9uLCBhbmQgZml4aW5nIGEgbG9naWMgYnVnIChzdGFsZSBleGl0IHJlYXNvbikuIFRoZXkgZG8gbm90IGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxcblxcblN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgZnVsbHkgc3VmZmljaWVudCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[1] Phase: Succeeded StartedAt: 2026-08-19 10:05:12 +0000 UTC FinishedAt: 2026-08-19 10:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 10:05:12 +0000 UTC FinishedAt: 2026-08-19 10:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2] Phase: Succeeded StartedAt: 2026-08-19 10:05:12 +0000 UTC FinishedAt: 2026-08-19 13:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 10:05:12 +0000 UTC FinishedAt: 2026-08-19 13:45:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 10:05:12 +0000 UTC FinishedAt: 2026-08-19 10:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 10:05:12 +0000 UTC FinishedAt: 2026-08-19 10:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlh24c/series-workflowlh24c-convert-artifact-2364183674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 10:05:38 +0000 UTC FinishedAt: 2026-08-19 10:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 10:05:38 +0000 UTC FinishedAt: 2026-08-19 10:22:19 +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:*fdc8da94-0c33-4726-81ce-6f92683e4156,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-workflowlh24c/series-workflowlh24c-convert-artifact-2364183674/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": "13b0a76c-eeb6-4f6b-87d2-5a7199bf9830", "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-workflowlh24c/series-workflowlh24c-build-action-403989800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 10:05:38 +0000 UTC FinishedAt: 2026-08-19 10:22:09 +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:*fdc8da94-0c33-4726-81ce-6f92683e4156,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-workflowlh24c/series-workflowlh24c-convert-artifact-2364183674/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": "13b0a76c-eeb6-4f6b-87d2-5a7199bf9830", "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-workflowlh24c/series-workflowlh24c-build-action-403989800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 10:22:19 +0000 UTC FinishedAt: 2026-08-19 10:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 10:22:19 +0000 UTC FinishedAt: 2026-08-19 10:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 10:22:19 +0000 UTC FinishedAt: 2026-08-19 10:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 10:22:19 +0000 UTC FinishedAt: 2026-08-19 10:22:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlh24c/series-workflowlh24c-convert-artifact-254283221/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 10:22:29 +0000 UTC FinishedAt: 2026-08-19 10:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 10:22:29 +0000 UTC FinishedAt: 2026-08-19 10:24:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13b0a76c-eeb6-4f6b-87d2-5a7199bf9830,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-workflowlh24c/series-workflowlh24c-build-action-403989800/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-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 10:24:32 +0000 UTC FinishedAt: 2026-08-19 10:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 10:24:32 +0000 UTC FinishedAt: 2026-08-19 10:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 10:24:32 +0000 UTC FinishedAt: 2026-08-19 10:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 10:24:32 +0000 UTC FinishedAt: 2026-08-19 10:41:18 +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:*fdc8da94-0c33-4726-81ce-6f92683e4156,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-workflowlh24c/series-workflowlh24c-convert-artifact-254283221/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": "8ce37700-c4a3-481f-b4ec-834a57846fe6", "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-workflowlh24c/series-workflowlh24c-build-action-1830367073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 10:24:32 +0000 UTC FinishedAt: 2026-08-19 10:41:08 +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:*fdc8da94-0c33-4726-81ce-6f92683e4156,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-workflowlh24c/series-workflowlh24c-convert-artifact-254283221/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": "8ce37700-c4a3-481f-b4ec-834a57846fe6", "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-workflowlh24c/series-workflowlh24c-build-action-1830367073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 10:41:18 +0000 UTC FinishedAt: 2026-08-19 10:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 10:41:18 +0000 UTC FinishedAt: 2026-08-19 10:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 10:41:18 +0000 UTC FinishedAt: 2026-08-19 10:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 10:41:18 +0000 UTC FinishedAt: 2026-08-19 10:43:21 +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:*8ce37700-c4a3-481f-b4ec-834a57846fe6,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-workflowlh24c/series-workflowlh24c-build-action-1830367073/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-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 10:43:31 +0000 UTC FinishedAt: 2026-08-19 13:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 10:43:31 +0000 UTC FinishedAt: 2026-08-19 13:45:11 +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":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"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:*13b0a76c-eeb6-4f6b-87d2-5a7199bf9830,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8ce37700-c4a3-481f-b4ec-834a57846fe6,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-workflowlh24c/series-workflowlh24c-build-action-403989800/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-workflowlh24c/series-workflowlh24c-build-action-1830367073/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 10:43:31 +0000 UTC FinishedAt: 2026-08-19 10:43:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 10:43:31 +0000 UTC FinishedAt: 2026-08-19 10:43:36 +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":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"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-workflowlh24c/series-workflowlh24c-convert-artifact-3200727226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 10:43:31 +0000 UTC FinishedAt: 2026-08-19 10:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 10:43:31 +0000 UTC FinishedAt: 2026-08-19 10:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 10:43:31 +0000 UTC FinishedAt: 2026-08-19 10:43:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 10:43:41 +0000 UTC FinishedAt: 2026-08-19 13:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlh24c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vmx_handle_exit","tdx_handle_exit","vt_handle_bus_lock_vmexit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM_INTEL","KVM_INTEL_TDX","INTEL_TDX_HOST"],"series_id":"52bf6549-c6cd-4daa-b308-8cafdaec1407","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 10:43:41 +0000 UTC FinishedAt: 2026-08-19 13:45:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*13b0a76c-eeb6-4f6b-87d2-5a7199bf9830,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8ce37700-c4a3-481f-b4ec-834a57846fe6,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-workflowlh24c/series-workflowlh24c-build-action-403989800/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-workflowlh24c/series-workflowlh24c-build-action-1830367073/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-workflowlh24c/series-workflowlh24c-convert-artifact-3200727226/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,}