Name: series-workflow77gbj Phase: Succeeded StartedAt: 2026-08-14 13:14:51 +0000 UTC FinishedAt: 2026-08-14 17:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[0] Phase: Succeeded StartedAt: 2026-08-14 13:14:51 +0000 UTC FinishedAt: 2026-08-14 13:41:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 13:14:51 +0000 UTC FinishedAt: 2026-08-14 13:41:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "CGROUP_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "CGROUP_BPF" ], "series_id": "a7684560-2d10-403b-8bb7-744f666fbd98" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_link_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBhdHRhY2hpbmcgYSBCUEYgZXh0ZW5zaW9uIHByb2dyYW0gKGZyZXBsYWNlKSB0byBhIHRhcmdldCBwcm9ncmFtIHdpdGggYSBtaXNtYXRjaGVkIGNncm91cCBzdG9yYWdlIHZhbHVlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGZgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zNzQzZjZjMjVlMmNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtODA2LDkgJiM0Mzs4MDYsMTEgQEAgc3RhdGljIGVudW0gYnBmX3RyYW1wX3Byb2dfdHlwZSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKVxuJiM0MztzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gdGd0X3Byb2ctXHUwMDNlYXV4O1xuJiM0MztcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgaTtcbiBcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZhdXgtXHUwMDNlZXh0X211dGV4KTtcbiBcdGlmIChhdXgtXHUwMDNlcHJvZ19hcnJheV9tZW1iZXJfY250KVxuQEAgLTgyMSw2ICYjNDM7ODIzLDIwIEBAIHN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRhdXgtXHUwMDNlaXNfZXh0ZW5kZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0mIzM5O3NcbiYjNDM7XHQgKiBjZ3JvdXAgc3RvcmFnZSBjb250ZXh0ICh2aWEgcHJvZ19pdGVtLVx1MDAzZWNncm91cF9zdG9yYWdlKSwgd2hpbGUgdGhlXG4mIzQzO1x0ICogdmVyaWZpZXIgYm91bmRzIGl0cyBhY2Nlc3NlcyBieSBpdHMgb3duIG1hcCYjMzk7cyB2YWx1ZV9zaXplLiBBXG4mIzQzO1x0ICogdmFsdWVfc2l6ZSBtaXNtYXRjaCBsZWFkcyB0byBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xuJiM0MztcdFx0c3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG4mIzQzO1x0XHRzdHJ1Y3QgYnBmX21hcCAqcHJvZ19tYXAgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJvZ19tYXAgXHUwMDI2XHUwMDI2ICghdGd0X21hcCB8fCBwcm9nX21hcC1cdTAwM2V2YWx1ZV9zaXplICE9IHRndF9tYXAtXHUwMDNldmFsdWVfc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTI2LDcgJiM0Mzs5NDIsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbiBcdFx0LyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovXG4gXHRcdGlmIChjbnQpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi1cdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nKTtcbiYjNDM7XHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBhdHRhY2hpbmcgYSBCUEYgZXh0ZW5zaW9uIHByb2dyYW0gKGZyZXBsYWNlKSB0byBhIHRhcmdldCBwcm9ncmFtIHdpdGggYSBtaXNtYXRjaGVkIGNncm91cCBzdG9yYWdlIHZhbHVlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGZgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggMWE3MjFmYzRiZWY1Ni4uMzc0M2Y2YzI1ZTJjZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTgwNiw5ICYjNDM7ODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpCiYjNDM7c3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy0mZ3Q7YXV4OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7CiAKIAlndWFyZChtdXRleCkoJmFtcDthdXgtJmd0O2V4dF9tdXRleCk7CiAJaWYgKGF1eC0mZ3Q7cHJvZ19hcnJheV9tZW1iZXJfY250KQpAQCAtODIxLDYgJiM0Mzs4MjMsMjAgQEAgc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWF1eC0mZ3Q7aXNfZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0mIzM5O3MKJiM0MzsJICogY2dyb3VwIHN0b3JhZ2UgY29udGV4dCAodmlhIHByb2dfaXRlbS0mZ3Q7Y2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGUKJiM0MzsJICogdmVyaWZpZXIgYm91bmRzIGl0cyBhY2Nlc3NlcyBieSBpdHMgb3duIG1hcCYjMzk7cyB2YWx1ZV9zaXplLiBBCiYjNDM7CSAqIHZhbHVlX3NpemUgbWlzbWF0Y2ggbGVhZHMgdG8gc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkgewomIzQzOwkJc3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtpXTsKJiM0MzsJCXN0cnVjdCBicGZfbWFwICpwcm9nX21hcCA9IHByb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2VbaV07CiYjNDM7CiYjNDM7CQlpZiAocHJvZ19tYXAgJmFtcDsmYW1wOyAoIXRndF9tYXAgfHwgcHJvZ19tYXAtJmd0O3ZhbHVlX3NpemUgIT0gdGd0X21hcC0mZ3Q7dmFsdWVfc2l6ZSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTI2LDcgJiM0Mzs5NDIsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwKIAkJLyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovCiAJCWlmIChjbnQpCiAJCQlyZXR1cm4gLUVCVVNZOwotCQllcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2cpOwomIzQzOwkJZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLSZndDtsaW5rLSZndDtwcm9nKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJCXRyLSZndDtleHRlbnNpb25fcHJvZyA9IG5vZGUtJmd0O2xpbmstJmd0O3Byb2c7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZnVuY3Rpb24sIGFuZCB0aGUgbW9zdCBub3RhYmxlIGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYHN0cnVjdCBicGZfcHJvZyAqcHJvZ2AgYXMgYW4gYXJndW1lbnQuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGZyZXBsYWNlIChleHRlbnNpb24pIHByb2dyYW1zIGFuZCBCUEYgdHJhbXBvbGluZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgdmFsaWRhdGluZyB0aGUgY2dyb3VwIHN0b3JhZ2UgdmFsdWUgc2l6ZS4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIHN0ZXAsIHJldHVybmluZyBgLUVJTlZBTGAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaC4gVGhpcyBpcyBnb29kIHRvIHNlZSBhcyBtaXNtYXRjaGVkIHN0b3JhZ2Ugc2l6ZXMgd291bGQgY2F1c2Ugc2VyaW91cyBpc3N1ZXMuCgpOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGtub2JzIHRoYXQgYXJlIHRpZWQgdG8gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzIHRoZW1zZWx2ZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvbmZpZ3VyYWJsZSBiZWhhdmlvciByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lcyBhbmQgY2dyb3VwIHN0b3JhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtlcm5lbCBCUEYgVHJhbXBvbGluZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGVuYWJsaW5nIGFuZCBzaGFwaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20gd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbXBsaWNhdGlvbnMgaGVyZTogaG93IHRoZXNlIG9wdGlvbnMgaW1wYWN0IG1lbW9yeSBhbGxvY2F0aW9uLCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydCwgc2VjdXJpdHkgYm91bmRhcmllcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBvcHRpb25zIHRoYXQgZGlyZWN0bHkgY29udHJvbCB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiB0aGUgdHJhbXBvbGluZSBpdHNlbGYg4oCTIHRoZSAmIzM0O29uL29mZiYjMzQ7IHN3aXRjaGVzLCBzbyB0byBzcGVhay4gVGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIG9wdGlvbnMgd2hpY2ggaW5mbHVlbmNlIHdoaWNoIGluc3RydWN0aW9uIHNldHMgYXJlIHN1cHBvcnRlZCwgYW5kIHdoYXQgbGV2ZWxzIG9mIEJQRiB2ZXJpZmllciByaWdvciBhcmUgYXBwbGllZC4gQW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcHJvdGVjdGlvbiBjb21lcyB0byBtaW5kIGltbWVkaWF0ZWx5LiBJIGFsc28gd2FudCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgLSBhcmUgdGhlcmUgb3B0aW9ucyB0aGF0IGNhbiB0cmFkZSBvZmYgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5PyBBcmUgdGhlcmUgb3B0aW9ucyBoZXJlIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgYnVpbGQgZmxhZ3M/CgpCZXlvbmQgdGhlIGJhc2ljIGVuYWJsZW1lbnQsIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGFueSBvcHRpb25zIHRoYXQgZ292ZXJuIGZlYXR1cmVzIGxpa2UgaW5kaXJlY3QganVtcHMsIGZ1bmN0aW9uIGNhbGxzLCBvciB0cmFtcG9saW5lIGNoYWluaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZSB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgb3B0aW9ucywgdG9vLiBPZnRlbiwgdGhlcmUgYXJlIHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgc3VyZmFjZS4gSW4gc2hvcnQsIEkmIzM5O20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgZnJvbSB0aGUgbW9zdCBmdW5kYW1lbnRhbCBlbmFibGUvZGlzYWJsZSBvcHRpb25zIHRvIHRoZSBmaW5lLWdyYWluZWQgY29udHJvbHMgdGhhdCBkZXRlcm1pbmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBCUEYgdHJhbXBvbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFtcG9saW5lLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipNeSBCUEYgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIGFueSBzZXJpb3VzIEJQRiBkZXBsb3ltZW50LiBJIG1lYW4sIHdpdGhvdXQgdGhlIEpJVCwgcGVyZm9ybWFuY2UgaXMgZ29pbmcgdG8gYmUgc2V2ZXJlbHkgbGltaXRlZCwgYW5kIHRoYXQmIzM5O3MganVzdCBhIG5vbi1zdGFydGVyIGZvciBtb3N0IHJlYWwtd29ybGQgdXNlIGNhc2VzLiBTbywgYENPTkZJR19CUEZfSklUYCBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLgoKVGhlbiwgdGhlcmUmIzM5O3MgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJJiMzOTtkIGJlIHN1cnByaXNlZCBpZiB3ZSBjb3VsZCBnZXQgYXdheSAqd2l0aG91dCogdGhhdCBvbmUgZWl0aGVyLiBJdCYjMzk7cyB0aGUgd2hvbGUgZW50cnkgcG9pbnQsIGFmdGVyIGFsbC4gR290dGEgaGF2ZSB0aGF0IHN5c2NhbGwgaW50ZXJmYWNlIGVuYWJsZWQuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBjZ3JvdXAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgdGhhdCBzdG9yYWdlIGlzIGNvbmZpZ3VyZWQuIElzIGNncm91cCBzdXBwb3J0IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGlzIHBhcnRpY3VsYXIgYnVpbGQsIG9yIGlzIGl0IGhpZGRlbiBiZWhpbmQgYW5vdGhlciBjb25maWcgb3B0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgb3IgaWYgaXQmIzM5O3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtaXguIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCB0byBlbnN1cmUgc21vb3RoIG9wZXJhdGlvbiwgSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgY2F1Z2h0IHdpdGhvdXQgdGhlIHJlcXVpcmVkIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkJQRiBMb2NhbCBTdG9yYWdlIEludmVzdGlnYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgQlBGIGxvY2FsIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgbmFtZWQgbGlrZSB0aGF0LCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gbG9jYWwgc3RvcmFnZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoaW5ncyB1bmRlciB0aGUgaG9vZC4gSSBzdXNwZWN0IHRoYXQgdGhpcyBmaWxlIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBjb2RlIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTQyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0xMj1ERUZJTkVfQlBGX1NUT1JBR0VfQ0FDSEUoY2dyb3VwX2NhY2hlKTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTEzLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTQ6c3RhdGljIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSBfX3JjdSAqKmNncm91cF9zdG9yYWdlX3B0cih2b2lkICpvd25lcilcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0zNT1zdGF0aWMgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKlxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MzY6Y2dyb3VwX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM3LXtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjM4Olx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlICpjZ3JvdXBfc3RvcmFnZTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM5LVx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqc21hcDtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQwLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6NDE6XHRjZ3JvdXBfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhjZ3JvdXAtXHUwMDNlYnBmX2NncnBfc3RvcmFnZSxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQyLVx0XHRcdFx0XHQgICAgICAgYnBmX3JjdV9sb2NrX2hlbGQoKSk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo0MzpcdGlmICghY2dyb3VwX3N0b3JhZ2UpXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy00NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNDYtXHRzbWFwID0gKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo0NzpcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9sb29rdXAoY2dyb3VwX3N0b3JhZ2UsIHNtYXAsIGNhY2hlaXRfbG9ja2l0KTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQ4LX1cbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz01MD1zdGF0aWMgdm9pZCAqYnBmX2NncnBfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNjAtXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo2MTpcdHNkYXRhID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwKGNncm91cCwgbWFwLCB0cnVlKTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTYyLVx0Y2dyb3VwX3B1dChjZ3JvdXApO1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTY2PXN0YXRpYyBsb25nIGJwZl9jZ3JwX3N0b3JhZ2VfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTgzLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6ODQ6c3RhdGljIGludCBjZ3JvdXBfc3RvcmFnZV9kZWxldGUoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODUte1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTg3LVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6ODg6XHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgZmFsc2UpO1xua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODktXHRpZiAoIXNkYXRhKVxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTk1PXN0YXRpYyBsb25nIGJwZl9jZ3JwX3N0b3JhZ2VfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTEwNC1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjEwNTpcdGVyciA9IGNncm91cF9zdG9yYWdlX2RlbGV0ZShjZ3JvdXAsIG1hcCk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMDYtXHRjZ3JvdXBfcHV0KGNncm91cCk7XG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MTEwPXN0YXRpYyBpbnQgbm90c3VwcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTQtXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzoxMTU6c3RhdGljIHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTYte1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTExOS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjEyMDpzdGF0aWMgdm9pZCBjZ3JvdXBfc3RvcmFnZV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTIxLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0xMjU9QlBGX0NBTExfNChicGZfY2dycF9zdG9yYWdlX2dldCwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgY2dyb3VwICosIGNncm91cCxcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMzYtXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzoxMzc6XHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMzgtXHRpZiAoc2RhdGEpXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MTUxPUJQRl9DQUxMXzIoYnBmX2NncnBfc3RvcmFnZV9kZWxldGUsIHN0cnVjdCBicGZfbWFwICosIG1hcCwgc3RydWN0IGNncm91cCAqLCBjZ3JvdXApXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTU2LVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTU3Olx0cmV0dXJuIGNncm91cF9zdG9yYWdlX2RlbGV0ZShjZ3JvdXAsIG1hcCk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNTgtfVxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTE2MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dycF9zdG9yYWdlX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTYyLVx0Lm1hcF9hbGxvY19jaGVjayA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE2MzpcdC5tYXBfYWxsb2MgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzoxNjQ6XHQubWFwX2ZyZWUgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfZnJlZSxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE2NS1cdC5tYXBfZ2V0X25leHRfa2V5ID0gbm90c3VwcF9nZXRfbmV4dF9rZXksXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTcxLVx0Lm1hcF9idGZfaWQgPSBcdTAwMjZicGZfbG9jYWxfc3RvcmFnZV9tYXBfYnRmX2lkWzBdLFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTcyOlx0Lm1hcF9vd25lcl9zdG9yYWdlX3B0ciA9IGNncm91cF9zdG9yYWdlX3B0cixcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE3My19O1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQyPXN0YXRpYyB2b2lkIGNncm91cF9icGZfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwICpjZ3JwKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjQ3LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNDg6c3RhdGljIHZvaWQgYnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VzW10pXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0OS17XG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1MDpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1MS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjUyOlx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjUzOlx0XHRicGZfY2dyb3VwX3N0b3JhZ2VfZnJlZShzdG9yYWdlc1tzdHlwZV0pO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQtfVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTUtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NjpzdGF0aWMgaW50IGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZXNbXSxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU3Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZXNbXSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU4LVx0XHRcdFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjYxLXtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjYyOlx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjYzOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkga2V5O1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNjQtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY4LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjk6XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3MDpcdFx0bWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzEtXHRcdGlmICghbWFwKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjczLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzQ6XHRcdHN0b3JhZ2VzW3N0eXBlXSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cCgodm9pZCAqKW1hcCwgXHUwMDI2a2V5LCBmYWxzZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NS1cdFx0aWYgKHN0b3JhZ2VzW3N0eXBlXSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjc4Olx0XHRzdG9yYWdlc1tzdHlwZV0gPSBicGZfY2dyb3VwX3N0b3JhZ2VfYWxsb2MocHJvZywgc3R5cGUpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzktXHRcdGlmIChJU19FUlIoc3RvcmFnZXNbc3R5cGVdKSkge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoyODA6XHRcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlcyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI4MS1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI4OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjkwOnN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKmRzdFtdLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyOTE6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3JjW10pXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5Mi17XG5rZXJuZWwvYnBmL2Nncm91cC5jOjI5MzpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5NC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjk1Olx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjk2LVx0XHRkc3Rbc3R5cGVdID0gc3JjW3N0eXBlXTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5OC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjk5OnN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfc3RvcmFnZXNfbGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlc1tdLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDAtXHRcdFx0XHQgICAgIHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDIte1xua2VybmVsL2JwZi9jZ3JvdXAuYzozMDM6XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDQtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjMwNTpcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jOjMwNjpcdFx0YnBmX2Nncm91cF9zdG9yYWdlX2xpbmsoc3RvcmFnZXNbc3R5cGVdLCBjZ3JwLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTMwNy19XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0zMjU9c3RhdGljIHZvaWQgY2dyb3VwX2JwZl9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTMzMC1cdHN0cnVjdCBsaXN0X2hlYWQgKnN0b3JhZ2VzID0gXHUwMDI2Y2dycC1cdTAwM2VicGYuc3RvcmFnZXM7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjMzMTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0zMzItXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0zNjMtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RvcmFnZSwgc3RtcCwgc3RvcmFnZXMsIGxpc3RfY2cpIHtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MzY0Olx0XHRicGZfY2dyb3VwX3N0b3JhZ2VfdW5saW5rKHN0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzozNjU6XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZV9mcmVlKHN0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0zNjYtXHR9XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz00NTM9c3RhdGljIGludCBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNDk1LVx0XHRcdGl0ZW0tXHUwMDNlcHJvZyA9IHByb2dfbGlzdF9wcm9nKHBsKTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDk2Olx0XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKGl0ZW0tXHUwMDNlY2dyb3VwX3N0b3JhZ2UsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQ5Ny1cdFx0XHRcdFx0XHQgICBwbC1cdTAwM2VzdG9yYWdlKTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTgwNj1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxMy1cdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTQ6XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODE1Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xua2VybmVsL2JwZi9jZ3JvdXAuYy04MTYtXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04NjEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg2MjpcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCB0eXBlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy04NjMtXHRcdFx0XHQgICAgICBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZywgY2dycCkpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04NzAtXHRcdGlmICghcGwpIHtcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODcxOlx0XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3Mi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3Ny1cdFx0XHRrZnJlZShwbCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjg3ODpcdFx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy04NzktXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg4NS1cdHBsLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjg4NjpcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy04ODctXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkwNi1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTA3Olx0YnBmX2Nncm91cF9zdG9yYWdlc19saW5rKG5ld19zdG9yYWdlLCBjZ3JwLCB0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTA4LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy05MTgtXHR9XG5rZXJuZWwvYnBmL2Nncm91cC5jOjkxOTpcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTkyMC1cdGlmICghb2xkX3Byb2cpIHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3OTA9QlBGX0NBTExfMihicGZfZ2V0X2xvY2FsX3N0b3JhZ2UsIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdTY0LCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3OTUtXHQgKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc5NjpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGUgPSBjZ3JvdXBfc3RvcmFnZV90eXBlKG1hcCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3OTc6XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk4LVx0c3RydWN0IGJwZl9jZ19ydW5fY3R4ICpjdHg7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODAyLVx0Y3R4ID0gY29udGFpbmVyX29mKGN1cnJlbnQtXHUwMDNlYnBmX2N0eCwgc3RydWN0IGJwZl9jZ19ydW5fY3R4LCBydW5fY3R4KTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgwMzpcdHN0b3JhZ2UgPSBjdHgtXHUwMDNlcHJvZ19pdGVtLVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgwNC1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDk1PXN0YXRpYyBib29sIF9fYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDk5LVx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZnAtXHUwMDNlYXV4O1xua2VybmVsL2JwZi9jb3JlLmM6MjUwMDpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgaTtcbmtlcm5lbC9icGYvY29yZS5jLTI1MDEtXHRib29sIHJldCA9IGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI1MTgtXHRcdG1hcC1cdTAwM2Vvd25lci1cdTAwM2VhdHRhY2hfZnVuY19wcm90byA9IGF1eC1cdTAwM2VhdHRhY2hfZnVuY19wcm90bztcbmtlcm5lbC9icGYvY29yZS5jOjI1MTk6XHRcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xua2VybmVsL2JwZi9jb3JlLmMtMjUyMC1cdFx0XHRtYXAtXHUwMDNlb3duZXItXHUwMDNlc3RvcmFnZV9jb29raWVbaV0gPVxua2VybmVsL2JwZi9jb3JlLmM6MjUyMTpcdFx0XHRcdGF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXSA/XG5rZXJuZWwvYnBmL2NvcmUuYzoyNTIyOlx0XHRcdFx0YXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW2ldLVx1MDAzZWNvb2tpZSA6IDA7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNTIzLVx0XHR9XG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjUzMy1cdFx0XHRyZXQgPSBmYWxzZTtcbmtlcm5lbC9icGYvY29yZS5jOjI1MzQ6XHRcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xua2VybmVsL2JwZi9jb3JlLmMtMjUzNS1cdFx0XHRpZiAoIXJldClcbmtlcm5lbC9icGYvY29yZS5jLTI1MzYtXHRcdFx0XHRicmVhaztcbmtlcm5lbC9icGYvY29yZS5jOjI1Mzc6XHRcdFx0Y29va2llID0gYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW2ldID9cbmtlcm5lbC9icGYvY29yZS5jOjI1Mzg6XHRcdFx0XHQgYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW2ldLVx1MDAzZWNvb2tpZSA6IDA7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNTM5LVx0XHRcdHJldCA9IG1hcC1cdTAwM2Vvd25lci1cdTAwM2VzdG9yYWdlX2Nvb2tpZVtpXSA9PSBjb29raWUgfHxcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMC1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxOnN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIyLVx0c3RydWN0IGJwZl9tYXAgbWFwO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mjk6c3RhdGljIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXBfdG9fc3RvcmFnZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzAte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzE6XHRyZXR1cm4gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAsIG1hcCk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMi19XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9MzQ9c3RhdGljIGJvb2wgYXR0YWNoX3R5cGVfaXNvbGF0ZWQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM2Olx0cmV0dXJuIG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzctfVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzgtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozOTpzdGF0aWMgaW50IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXlfY21wKGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MC1cdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKl9rZXkxLCBjb25zdCB2b2lkICpfa2V5Milcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00Mi1cdGlmIChhdHRhY2hfdHlwZV9pc29sYXRlZChcdTAwMjZtYXAtXHUwMDNlbWFwKSkge1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDM6XHRcdGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5ICprZXkxID0gX2tleTE7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NDpcdFx0Y29uc3Qgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgKmtleTIgPSBfa2V5Mjtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1LVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTY1LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NjY6c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo2NzpjZ3JvdXBfc3RvcmFnZV9sb29rdXAoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTY4LVx0XHQgICAgICB2b2lkICprZXksIGJvb2wgbG9ja2VkKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTc3LVx0d2hpbGUgKG5vZGUpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjc4Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNzktXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo4MDpcdFx0c3RvcmFnZSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCBub2RlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6ODI6XHRcdHN3aXRjaCAoYnBmX2Nncm91cF9zdG9yYWdlX2tleV9jbXAobWFwLCBrZXksIFx1MDAyNnN0b3JhZ2UtXHUwMDNla2V5KSkge1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtODMtXHRcdGNhc2UgLTE6XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTAxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTAyOnN0YXRpYyBpbnQgY2dyb3VwX3N0b3JhZ2VfaW5zZXJ0KHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMDM6XHRcdFx0XHQgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEwNC17XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTA4LVx0d2hpbGUgKCpuZXcpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEwOTpcdFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqdGhpcztcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMC1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjExMTpcdFx0dGhpcyA9IGNvbnRhaW5lcl9vZigqbmV3LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCBub2RlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMy1cdFx0cGFyZW50ID0gKm5ldztcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjExNDpcdFx0c3dpdGNoIChicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5X2NtcChtYXAsIFx1MDAyNnN0b3JhZ2UtXHUwMDNla2V5LCBcdTAwMjZ0aGlzLVx1MDAzZWtleSkpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExNS1cdFx0Y2FzZSAtMTpcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzEtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMzI6c3RhdGljIHZvaWQgKmNncm91cF9zdG9yYWdlX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICpfbWFwLCB2b2lkICprZXkpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzMte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM0Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM1Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEzNi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEzNzpcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEzOC1cdGlmICghc3RvcmFnZSlcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xNDMtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxNDQ6c3RhdGljIGxvbmcgY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQ1LVx0XHRcdFx0ICAgICAgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xNDYte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTQ3Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE0OC1cdHN0cnVjdCBicGZfc3RvcmFnZV9idWZmZXIgKm5ldztcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xNTYtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxNTc6XHRzdG9yYWdlID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwKChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqKW1hcCxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE1OC1cdFx0XHRcdFx0a2V5LCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTgyOmludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX2NvcHkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE4My1cdFx0XHRcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTg0LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4NTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4NjpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xODctXHRpbnQgY3B1LCBvZmYgPSAwO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE5MC1cdHJjdV9yZWFkX2xvY2soKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE5MTpcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE5Mi1cdGlmICghc3RvcmFnZSkge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxNjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNy1cdFx0XHRcdCAgICAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMTgte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjE5Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjIwOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIyMS1cdHZvaWQgKnZhbDtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMjgtXHRyY3VfcmVhZF9sb2NrKCk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyMjk6XHRzdG9yYWdlID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwKG1hcCwga2V5LCBmYWxzZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMzAtXHRpZiAoIXN0b3JhZ2UpIHtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTUtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNTY6c3RhdGljIGludCBjZ3JvdXBfc3RvcmFnZV9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI1Ny1cdFx0XHRcdCAgICAgICB2b2lkICpfbmV4dF9rZXkpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTgte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjU5Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjYwOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI2MS1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNjctXHRpZiAoa2V5KSB7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNjg6XHRcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIHRydWUpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjY5LVx0XHRpZiAoIXN0b3JhZ2UpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjc2LVx0XHRzdG9yYWdlID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZtYXAtXHUwMDNlbGlzdCxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI3NzpcdFx0XHRcdFx0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UsIGxpc3RfbWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI3OC1cdH1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yODItXHRpZiAoYXR0YWNoX3R5cGVfaXNvbGF0ZWQoXHUwMDI2bWFwLVx1MDAzZW1hcCkpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI4MzpcdFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgKm5leHQgPSBfbmV4dF9rZXk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yODQtXHRcdCpuZXh0ID0gc3RvcmFnZS1cdTAwM2VrZXk7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk1LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mjk2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk3LXtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yOTktXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMwMDpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMDEtXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzA4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzA5Olx0aWYgKGF0dHItXHUwMDNla2V5X3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMxMC1cdCAgICBhdHRyLVx1MDAzZWtleV9zaXplICE9IHNpemVvZihfX3U2NCkpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzI2LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI3Olx0bWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjgtXHRpZiAoIW1hcClcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNDAtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNDE6c3RhdGljIHZvaWQgY2dyb3VwX3N0b3JhZ2VfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKl9tYXApXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNDIte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzQzOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzQ0LVx0c3RydWN0IGxpc3RfaGVhZCAqc3RvcmFnZXMgPSBcdTAwMjZtYXAtXHUwMDNlbGlzdDtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM0NTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzQ2LVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0OS1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdG9yYWdlLCBzdG1wLCBzdG9yYWdlcywgbGlzdF9tYXApIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM1MDpcdFx0YnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdG9yYWdlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM1MTpcdFx0YnBmX2Nncm91cF9zdG9yYWdlX2ZyZWUoc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNTItXHR9XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzYxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzYyOnN0YXRpYyBsb25nIGNncm91cF9zdG9yYWdlX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM2My17XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzY2LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzY3OnN0YXRpYyBpbnQgY2dyb3VwX3N0b3JhZ2VfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNjgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM3NS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM3NjpcdFx0LyogS2V5IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5IHR5cGUsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzctXHRcdCAqIHdoaWNoIGlzOlxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mzc4Olx0XHQgKiBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSB7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzktXHRcdCAqXHRfX3U2NFx0Y2dyb3VwX2lub2RlX2lkO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM5NC1cdFx0bSA9IChzdHJ1Y3QgYnRmX21lbWJlciAqKShrZXlfdHlwZSAmIzQzOyAxKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM5NTpcdFx0c2l6ZSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSwgY2dyb3VwX2lub2RlX2lkKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM5Ni1cdFx0aWYgKCFidGZfbWVtYmVyX2lzX3JlZ19pbnQoYnRmLCBrZXlfdHlwZSwgbSwgMCwgc2l6ZSkpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDAyLVx0XHRtJiM0MzsmIzQzOztcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQwMzpcdFx0b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXksIGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQwNDpcdFx0c2l6ZSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSwgYXR0YWNoX3R5cGUpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDA1LVx0XHRpZiAoIWJ0Zl9tZW1iZXJfaXNfcmVnX2ludChidGYsIGtleV90eXBlLCBtLCBvZmZzZXQsIHNpemUpKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQxNy1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQxODpzdGF0aWMgdm9pZCBjZ3JvdXBfc3RvcmFnZV9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQxOS1cdFx0XHRcdFx0IHN0cnVjdCBzZXFfZmlsZSAqbSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyMC17XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MjE6XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDIyOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyMy1cdGludCBjcHU7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDI1LVx0cmN1X3JlYWRfbG9jaygpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDI2Olx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXBfdG9fc3RvcmFnZShtYXApLCBrZXksIGZhbHNlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyNy1cdGlmICghc3RvcmFnZSkge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQzMi1cdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MzM6XHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQzNC1cdGlmIChzdHlwZSA9PSBCUEZfQ0dST1VQX1NUT1JBR0VfU0hBUkVEKSB7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDUyLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDUzOnN0YXRpYyB1NjQgY2dyb3VwX3N0b3JhZ2VfbWFwX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NTQte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDU1LVx0LyogQ3VycmVudGx5IHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZWxlbWVudHMgYXJlIG5vdCBjb3VudGVkLiAqL1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDU2Olx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NTctfVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDU4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDU5OkJURl9JRF9MSVNUX1NJTkdMRShjZ3JvdXBfc3RvcmFnZV9tYXBfYnRmX2lkcywgc3RydWN0LFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYwOlx0XHQgICBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYxOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JvdXBfc3RvcmFnZV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYyOlx0Lm1hcF9hbGxvYyA9IGNncm91cF9zdG9yYWdlX21hcF9hbGxvYyxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2MzpcdC5tYXBfZnJlZSA9IGNncm91cF9zdG9yYWdlX21hcF9mcmVlLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDY0Olx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBjZ3JvdXBfc3RvcmFnZV9nZXRfbmV4dF9rZXksXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjU6XHQubWFwX2xvb2t1cF9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjY6XHQubWFwX3VwZGF0ZV9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Njc6XHQubWFwX2RlbGV0ZV9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Njg6XHQubWFwX2NoZWNrX2J0ZiA9IGNncm91cF9zdG9yYWdlX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2OTpcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGNncm91cF9zdG9yYWdlX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NzA6XHQubWFwX21lbV91c2FnZSA9IGNncm91cF9zdG9yYWdlX21hcF91c2FnZSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3MTpcdC5tYXBfYnRmX2lkID0gXHUwMDI2Y2dyb3VwX3N0b3JhZ2VfbWFwX2J0Zl9pZHNbMF0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzItfTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ3My1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3NDppbnQgYnBmX2Nncm91cF9zdG9yYWdlX2Fzc2lnbihzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgsIHN0cnVjdCBicGZfbWFwICpfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3NjpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGUgPSBjZ3JvdXBfc3RvcmFnZV90eXBlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc3LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDc4Olx0aWYgKGF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Nzk6XHQgICAgYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPSBfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgwLVx0XHRyZXR1cm4gLUVCVVNZO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDgyOlx0YXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSA9IF9tYXA7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00ODMtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00ODUtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0ODY6c3RhdGljIHNpemVfdCBicGZfY2dyb3VwX3N0b3JhZ2VfY2FsY3VsYXRlX3NpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyICpwYWdlcylcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ4Ny17XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDg5LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDkwOlx0aWYgKGNncm91cF9zdG9yYWdlX3R5cGUobWFwKSA9PSBCUEZfQ0dST1VQX1NUT1JBR0VfU0hBUkVEKSB7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00OTEtXHRcdHNpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2J1ZmZlcikgJiM0MzsgbWFwLVx1MDAzZXZhbHVlX3NpemU7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0OTI6XHRcdCpwYWdlcyA9IHJvdW5kX3VwKHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlKSAmIzQzOyBzaXplLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDkzLVx0XHRcdFx0ICBQQUdFX1NJWkUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwMi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUwMzpzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpicGZfY2dyb3VwX3N0b3JhZ2VfYWxsb2Moc3RydWN0IGJwZl9wcm9nICpwcm9nLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTA0Olx0XHRcdFx0XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTA1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwNi1cdGNvbnN0IGdmcF90IGdmcCA9IF9fR0ZQX1pFUk8gfCBHRlBfVVNFUjtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUwNzpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MDgtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxMS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUxMjpcdG1hcCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxMy1cdGlmICghbWFwKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxNS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUxNjpcdHNpemUgPSBicGZfY2dyb3VwX3N0b3JhZ2VfY2FsY3VsYXRlX3NpemUobWFwLCBcdTAwMjZwYWdlcyk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MTctXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MTg6XHRzdG9yYWdlID0gYnBmX21hcF9rbWFsbG9jX25vZGUobWFwLCBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSksXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MTktXHRcdFx0XHQgICAgICAgZ2ZwLCBtYXAtXHUwMDNlbnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MzQtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MzU6XHRzdG9yYWdlLVx1MDAzZW1hcCA9IChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUzNi1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NDMtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NDQ6c3RhdGljIHZvaWQgZnJlZV9zaGFyZWRfY2dyb3VwX3N0b3JhZ2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTQ1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU0NjpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UgPVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTQ3Olx0XHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCByY3UpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTQ4LVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1Mi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU1MzpzdGF0aWMgdm9pZCBmcmVlX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NTQte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTU1Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSA9XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NTY6XHRcdGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UsIHJjdSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NTctXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTYxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTYyOnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX2ZyZWUoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU2My17XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NjQ6XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTY1LVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzAtXHRtYXAgPSBcdTAwMjZzdG9yYWdlLVx1MDAzZW1hcC1cdTAwM2VtYXA7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NzE6XHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3Mi1cdGlmIChzdHlwZSA9PSBCUEZfQ0dST1VQX1NUT1JBR0VfU0hBUkVEKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTczOlx0XHRjYWxsX3JjdShcdTAwMjZzdG9yYWdlLVx1MDAzZXJjdSwgZnJlZV9zaGFyZWRfY2dyb3VwX3N0b3JhZ2VfcmN1KTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3NC1cdGVsc2Vcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU3NTpcdFx0Y2FsbF9yY3UoXHUwMDI2c3RvcmFnZS1cdTAwM2VyY3UsIGZyZWVfcGVyY3B1X2Nncm91cF9zdG9yYWdlX3JjdSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzYtfVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTc3LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTc4OnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX2xpbmsoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3OS1cdFx0XHQgICAgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCxcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01ODEte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTgyOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcDtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU4My1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01OTItXHRzcGluX2xvY2tfYmgoXHUwMDI2bWFwLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTkzOlx0V0FSTl9PTihjZ3JvdXBfc3RvcmFnZV9pbnNlcnQobWFwLCBzdG9yYWdlKSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01OTQtXHRsaXN0X2FkZChcdTAwMjZzdG9yYWdlLVx1MDAzZWxpc3RfbWFwLCBcdTAwMjZtYXAtXHUwMDNlbGlzdCk7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTk4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTk5OnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNjAwLXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjYwMTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDZ3JvdXAgQlBGIENvbmZpZ3VyYXRpb24gYW5kIE1ha2VmaWxlIEV4cGxvcmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY2dyb3VwIEJQRiBmdW5jdGlvbmFsaXR5IGFnYWluLiBOZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaWYgbWVtb3J5IHNlcnZlcywgaXQgc2hvdWxkIGJlIGBDT05GSUdfQ0dST1VQX0JQRmAuIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUga2VybmVsJiMzOTtzIGNncm91cCBCUEYgaW50ZWdyYXRpb24gaXMgYWx3YXlzIGV2b2x2aW5nLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBnbyBiYWNrIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhdCBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoaXMgZmlsZSBpcyBvZnRlbiB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBwaWVjZXMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBjZ3JvdXAgQlBGIGFyZSBkZWNsYXJlZCB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGludGVyZXN0aW5nIGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29tcGlsYXRpb24gZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBPYmplY3QgQ29tcGlsYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBsb2NhbF9zdG9yYWdlLm9gIG9yIGBicGZfY2dycF9zdG9yYWdlLm9gIG9iamVjdCBmaWxlcyBhcmUgYmVpbmcgYnVpbHQuIEdpdmVuIHRoZXNlIGFyZSBCUEYgcmVsYXRlZCwgbXkgZmlyc3Qgc3RvcCBoYXMgdG8gYmUgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUgYnVpbGQgcnVsZXMuIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBzaG93IG1lIGhvdyB0aGVzZSBhcmUgY29tcGlsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2FsX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEJQRiBTeXNjYWxsIERlcGVuZGVuY3kgZm9yIFN0b3JhZ2UgTW9kdWxlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgQlBGIG1vZHVsZXMuIEkga25vdyBgbG9jYWxfc3RvcmFnZS5vYCAqZGVmaW5pdGVseSogaXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLCB0aGF0JiMzOTtzIGNsZWFyIGZyb20gaXRzIG1ha2V1cCwgcmlnaHQ/IEJ1dCB3aGF0IGFib3V0IGBicGZfY2dycF9zdG9yYWdlLm9gPyBUaGF0JiMzOTtzIHRoZSBxdWVzdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0ICphbHNvKiBkZXBlbmRzIG9uIHRoZSBCUEYgc3lzY2FsbCBpbnRlcmZhY2UuIFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBob3cgSSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB1c2VkIHRvIGJ1aWxkIGl0IHRvIGJlIHN1cmUuIEl0IGNvdWxkIGJlIGJ1aWx0IHdpdGggdGhlIHNhbWUgZmxhZywgYSBkaWZmZXJlbnQgb25lLCBvciBldmVuIGRlcGVuZCBvbiBhbm90aGVyIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NncnBfc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYxNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQlBGIFRyYW1wb2xpbmUgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhhdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2ssIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBib3RoIGBDT05GSUdfQ0dST1VQU2AgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgZmlsZS4gVGhlcmUmIzM5O3Mgc29tZXRoaW5nIGluIHRoZXJlIEkgd2FudCB0byBjaGVjayBhZ2FpbiwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZXNlIGZlYXR1cmVzIGludGVyYWN0IG9yIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmVzIGFyZSBzZXQgdXAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNncm91cHMuIEkgcHJvYmFibHkgaGF2ZSBhIHNwZWNpZmljIHNjZW5hcmlvIG9yIHBvdGVudGlhbCBpc3N1ZSBpbiBtaW5kIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gb3IgcmV2aXNpdCwgc28gaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTQ0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQlBGIFRyYW1wb2xpbmUgTGlua2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIOKAkyB3aGljaCBzdWdnZXN0cyBzb21lIHNvcnQgb2YgdGFyZ2V0IHByb2dyYW0gcmVwbGFjZW1lbnQgY2hlY2sgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgdHJhbXBvbGluZSBsaW5raW5nIHByb2Nlc3MuIEludGVyZXN0aW5nLgoKTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdywgSSBuZWVkIHRvIHRyYWNlICpiYWNrd2FyZHMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGJlLiBGaW5kaW5nIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCByZXZlYWwgdGhlIGhpZ2hlci1sZXZlbCBsb2dpYyB0aGF0IHRyaWdnZXJzIHRoZSB0cmFtcG9saW5lIGxpbmtpbmcgYW5kLCBjb25zZXF1ZW50bHksIHRoZSB0YXJnZXQgcHJvZ3JhbSBjaGVjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NjI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcwLVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwOTI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM1Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2Mjc9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVx0XHRcdFx0XHRcdCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBCUEYgUHJvZ3JhbSBBdHRhY2htZW50IFBvaW50cyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhcmUgYWxsIGNydWNpYWwgZW50cnkgcG9pbnRzLiBUaGV5JiMzOTtyZSB0aGUgZ2F0ZXMgdGhyb3VnaCB3aGljaCBCUEYgcHJvZ3JhbXMgZ2V0IGF0dGFjaGVkLiBFc3NlbnRpYWxseSwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IGludGVyZmFjZXMgZm9yIGludGVncmF0aW5nIEJQRiBwcm9ncmFtcyBpbnRvIHZhcmlvdXMga2VybmVsIGNvbnRleHRzLiBOb3csIHNpbmNlIHRob3NlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgaW4gY2hhcmdlIG9mIHByb2dyYW0gYXR0YWNobWVudCwgSSB3YW50IHRvIGZpbmQgdGhlIGNhbGxpbmcgbG9jYXRpb25zIG9mIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBpZGVudGlmeSB0aGUgY29udGV4dHMgd2hpY2ggbWFrZSB1c2Ugb2YgaXQuIFRoYXQgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGJlaW5nIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTE1MDk9c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbms7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xNTExLSNpZmRlZiBDT05GSUdfQlBGX0pJVFxuaW5jbHVkZS9saW51eC9icGYuaDoxNTEyOmludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTEzLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MDU9dTE2IGJwZl9vdXRfc3RhY2tfYXJnX2NudChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xNjA2LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2MDc6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTYwOC1cdFx0XHRcdFx0ICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3OTUtXHRcdCAqIEFsbG93IHJlLWF0dGFjaCBmb3IgVFJBQ0lORyBhbmQgTFNNIHByb2dyYW1zLiBJZiBpdCYjMzk7c1xua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc5NjpcdFx0ICogY3VycmVudGx5IGxpbmtlZCwgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nIHdpbGwgZmFpbC5cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3OTctXHRcdCAqIEVYVCBwcm9ncmFtcyBuZWVkIHRvIHNwZWNpZnkgdGd0X3Byb2dfZmQsIHNvIHRoZXlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zODY5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzg3MDpcdGVyciA9IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIHRndF9wcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4NzEtXHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjEtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NjI6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjMtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2OC1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5Njk6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3MC1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDkyPWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM0LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTEzNTpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNnNoaW1fbGluay1cdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjI3PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc2LVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjc3Olx0XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OC1cdFx0XHRcdFx0XHQgXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBUYXJnZXRpbmcgQlBGIFRyYWNpbmcgUHJvZ3JhbSBBdHRhY2htZW50KioKCk9rYXksIHNvIG15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgLiBUaGF0IGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGF0dGFjaGluZyBCUEYgdHJhY2luZyBwcm9ncmFtcywgYW5kIHRoYXQmIzM5O3MgKmFsd2F5cyogYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZ1enppbmcuIEl0JiMzOTtzIGNsZWFybHkgcmVhY2hhYmxlLCB3aGljaCBpcyBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB0ZXN0aW5nIHRoaXMgdGhvcm91Z2hseS4KCk5vdywgSSYjMzk7bSBub3RpbmcgdGhhdCB0aGUgZnVuY3Rpb24gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgYXR0YWNoaW5nIGFuIGV4dGVuc2lvbiBwcm9ncmFtLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9FWFRgLiBUaGUgcGF0Y2ggYWRkZWQgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBwb3RlbnRpYWwgY2dyb3VwIHN0b3JhZ2Ugc2l6ZSBtaXNtYXRjaGVzLiBJZiB0aGUgc2l6ZXMgZG9uJiMzOTt0IGxpbmUgdXAsIGl0JiMzOTtzIHN1cHBvc2VkIHRvIHJldHVybiBgLUVJTlZBTGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBzaWduaWZpY2FudCwgc28gdGhhdCYjMzk7cyBhbm90aGVyIGZ1bmN0aW9uIEkgbmVlZCB0byBmdXp6LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgLUVJTlZBTGAgaXMgcmV0dXJuZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGggZGlyZWN0bHkgZnV6emluZy4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBtaWdodCBiZSBpbmxpbmVkLiBUaGlzIG1ha2VzIGRpcmVjdCBmdXp6aW5nIG1vcmUgY29tcGxpY2F0ZWQsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gZmluZCB3YXlzIHRvIHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gT24gdGhlIG90aGVyIGhhbmQsIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZS4gQWxzbywgSSB0aG91Z2h0IGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAgd2FzIG5vbi1zdGF0aWMgdG9vLCBhbmQgd291bGQgYmUgYSBnb29kIGNhbmRpZGF0ZS4gV2FpdCwgbGV0IG1lIGNoZWNrLiBBaCwgaXQmIzM5O3Mgc3RhdGljIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIHN0YXRpYyBhIGJpdCBjbG9zZXIgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGVzdGluZyB0aGlzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNjg4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzY4OTpzdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM2OTAtXHRcdFx0XHQgICBpbnQgdGd0X3Byb2dfZmQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNzYtXHRcdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzc6XHRcdHJldHVybiBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLCAwLCAwLCAwLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Mzc4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3NC1cdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODc1Olx0XHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3Ni1cdFx0XHRcdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5Ni1cdFx0ZWxzZVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NzpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5OC1cdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEZ1bmN0aW9uIFZpc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUuIEZpcnN0IG9ic2VydmF0aW9uOiBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlbiwgSSBzZWUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2Agd2hpY2ggaXMgKm5vbi1zdGF0aWMqLCB0aGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSB0byBmb2xsb3cuIEFuZCBqdXN0IHRvIGNvbmZpcm0sIGBsaW5rX2NyZWF0ZWAgaXMgc3RhdGljLiBUaGUgYHN5c19icGZgIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50IGlzIHRvbyBicm9hZCBmb3IgbXkgaW1tZWRpYXRlIG5lZWRzLgoKTm93LCBsZXQmIzM5O3MgZm9jdXMgb24gdGhpcyBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3MgZXhwb3J0ZWQgb3IganVzdCBkZWNsYXJlZCBub24tc3RhdGljLiBMb29raW5nIGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGl0JiMzOTtzIGRlZmluaXRlbHkgbm9uLXN0YXRpYy4gR29vZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnl0aGluZyB3aXRoIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIC0geWVwLCBzdGlsbCBzdGF0aWMuIEFuZCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFzIHdlbGwsIHN0aWxsIHN0YXRpYy4KCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrLiBJcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBpcyBub24tc3RhdGljPyBMb29rcyBsaWtlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGlzIGRlZmluaXRlbHkgdGhlIHByaW1lIGNhbmRpZGF0ZSBoZXJlLiBJdCBhcHBlYXJzIHRvIGJlIG15IG1vc3QgcHJvbWlzaW5nIG9wdGlvbi4gQWxzbywgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW1gIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBjYWxsIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGJ1dCB0aGUgc3RhdGljIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBgdHItJmd0O2V4dGVuc2lvbl9wcm9nYCBpcyBpbnZvbHZlZC4KCkxldCYjMzk7cyBxdWlja2x5IHJlLWV4YW1pbmUgYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBvbmUgbW9yZSB0aW1lLiBKdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NjI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcwLVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwOTI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM1Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2Mjc9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVx0XHRcdFx0XHRcdCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTYyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHByb2Zlc3Npb25hbCBwZXJzcGVjdGl2ZSwgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBxdWljayBtZW50YWwgY2hlY2suIEkgc2VlIHRoYXQgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgaXMgYmVpbmcgY2FsbGVkICp3aXRoaW4qIHRoZSBjb250ZXh0IG9mIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQmIzM5O3Mgc2lnbmlmaWNhbnQuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9uIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbGlua2luZyBwcm9jZXNzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVncml0eSBjaGVjayBvciBzZWN1cml0eSBtZWFzdXJlIHJlbGF0ZWQgdG8gcHJvZ3JhbSByZXBsYWNlbWVudC4gYGJwZl9mcmVwbGFjZWAgYW5kIHRyYW1wb2xpbmVzIHRvZ2V0aGVyIGFyZSBjb21tb25seSB1c2VkIGluIGVCUEYgdG8gaG90LXN3YXAgcHJvZ3JhbXMgb3IgbW9kaWZ5IHRoZSBleGVjdXRpb24gcGF0aC4gU28sIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIG11c3QgYmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGludGVncml0eSBjaGVja3Mgb3IgdmFsaWRhdGlvbiBzdGVwcyB0aGF0IGZ1bmN0aW9uIGlzIHBlcmZvcm1pbmcgb24gdGhlIHRhcmdldCBwcm9ncmFtIGR1cmluZyBhICYjMzQ7cmVwbGFjZSYjMzQ7IG9wZXJhdGlvbi4gSXMgaXQgdmFsaWRhdGluZyBwcm9ncmFtIHNpemUsIGluc3RydWN0aW9uIHNldCBjb21wYXRpYmlsaXR5LCBwZXJtaXR0ZWQgc3lzY2FsbHMsIG9yIHBlcmhhcHMgZXZlbiBjaGVja2luZyBmb3IgbWFsaWNpb3VzIGNvZGUgaW5qZWN0aW9uIGF0dGVtcHRzPyBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgc2FmZSBhbmQgY29udHJvbGxlZCBwcm9ncmFtIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBMaW5raW5nIFByb2Nlc3MqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgaG93IGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGZpdHMgaW50byB0aGUgcGljdHVyZS4gTXkgYWltIGlzIHRvIGdldCBhIGdyYXNwIG9uIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgdGFyZ2V0IHByb2dyYW0gY2hlY2sgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiB3aXRoaW4gYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoYXTigJlzIGdvaW5nIG9uIGF0IHRoZSBwcm9ncmFtJiMzOTtzIHN0YWdlIHdoZW4gaXQgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHdpbGwgaGVscCBpbiBmaWd1cmluZyBvdXQgdGhlIHVzZSBjYXNlcyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggdGhlIHRhcmdldCBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGVuc3VyaW5nIHRoZSB0cmFtcG9saW5lIG1lY2hhbmlzbSBiZWhhdmVzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIxOlx0c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4gOTIyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuIDkyMzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbiA5MjQ6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcbiA5MjU6XHRcdFx0XHRcdCAgICAgIHZvaWQgKmRhdGEpXG4gOTI2Olx0e1xuIDkyNzpcdFx0ZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGtpbmQ7XG4gOTI4Olx0XHRpbnQgZXJyID0gMDtcbiA5Mjk6XHRcdGludCBjbnQgPSAwLCBpO1xuIDkzMDpcdFxuIDkzMTpcdFx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG4gOTMyOlx0XHRpZiAodHItXHUwMDNlZXh0ZW5zaW9uX3Byb2cpXG4gOTMzOlx0XHRcdC8qIGNhbm5vdCBhdHRhY2ggZmVudHJ5L2ZleGl0IGlmIGV4dGVuc2lvbiBwcm9nIGlzIGF0dGFjaGVkLlxuIDkzNDpcdFx0XHQgKiBjYW5ub3Qgb3ZlcndyaXRlIGV4dGVuc2lvbiBwcm9nIGVpdGhlci5cbiA5MzU6XHRcdFx0ICovXG4gOTM2Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gOTM3Olx0XG4gOTM4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCUEZfVFJBTVBfTUFYOyBpJiM0MzsmIzQzOylcbiA5Mzk6XHRcdFx0Y250ICYjNDM7PSB0ci1cdTAwM2Vwcm9nc19jbnRbaV07XG4gOTQwOlx0XG4gOTQxOlx0XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xuIDk0MjpcdFx0XHQvKiBDYW5ub3QgYXR0YWNoIGV4dGVuc2lvbiBpZiBmZW50cnkvZmV4aXQgYXJlIGluIHVzZS4gKi9cbiA5NDM6XHRcdFx0aWYgKGNudClcbiA5NDQ6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDk0NTpcdFx0XHRlcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2csIG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nKTtcbiA5NDY6XHRcdFx0aWYgKGVycilcbiA5NDc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDk0ODpcdFx0XHR0ci1cdTAwM2VleHRlbnNpb25fcHJvZyA9IG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuIDk0OTpcdFx0XHRyZXR1cm4gYnBmX2FyY2hfdGV4dF9wb2tlKHRyLVx1MDAzZWZ1bmMuYWRkciwgQlBGX01PRF9OT1AsXG4gOTUwOlx0XHRcdFx0XHRcdCAgQlBGX01PRF9KVU1QLCBOVUxMLFxuIDk1MTpcdFx0XHRcdFx0XHQgIG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nLVx1MDAzZWJwZl9mdW5jKTtcbiA5NTI6XHRcdH1cbiA5NTM6XHRcdGVyciA9IGJwZl90cmFtcG9saW5lX2FkZF9wcm9nKHRyLCBub2RlLCBjbnQpO1xuIDk1NDpcdFx0aWYgKGVycilcbiA5NTU6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTY6XHRcdGVyciA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcbiA5NTc6XHRcdGlmIChlcnIpXG4gOTU4Olx0XHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHRyLCBub2RlKTtcbiA5NTk6XHRcdHJldHVybiBlcnI7XG4gOTYwOlx0fVxuIDk2MTpcdFxuIDk2MjpcdGludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuIDk2MzpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbiA5NjQ6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gOTY1Olx0e1xuIDk2NjpcdFx0aW50IGVycjtcbiA5Njc6XHRcbiA5Njg6XHRcdHRyYW1wb2xpbmVfbG9jayh0cik7XG4gOTY5Olx0XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbiA5NzA6XHRcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBUcmFtcG9saW5lIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIEJQRiB0cmFtcG9saW5lcyB3b3JrLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSYjMzk7cmUgcmVwbGFjaW5nIHByb2dyYW1zIOKAkyB0aGF0JiMzOTtzIHdoZW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZ2V0cyBjYWxsZWQgd2l0aCBgQlBGX1RSQU1QX1JFUExBQ0VgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBtYXBzIHRvIHRoZSBgQlBGX1BST0dfVFlQRV9FWFRgIHR5cGUuIFRoZSAmIzM0O2ZyZXBsYWNlJiMzNDsgaXMgdGhlIGtleS4gTXkgZm9jdXMgc3ltYm9sIGhlcmUgbG9va3MgdG8gYmUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayB0aGUgY29yZSBsb2dpYy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4gT2theSwgSSBzZWUgYGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoYCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgLCB3aGljaCBpcyBhbHNvIHN0YXRpYywgYnV0IGBsaW5rX2NyZWF0ZWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBzeXNfYnBmYC4gU28sIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGRvZXMgaW5kZWVkIGxvb2sgbGlrZSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgcmVmcmVzaCBteSBtZW1vcnksIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQlBGX0pJVGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGFuZCBhbHNvLCBvZiBjb3Vyc2UsIGBDT05GSUdfQ0dST1VQU2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIHRoZSByaWdodCBvbmUgZm9yIGNncm91cC1yZWxhdGVkIEJQRiBzdG9yYWdlLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODQ2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ0dST1VQX0JQRiBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpSaWdodCwgc28gd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIHRoYXQgYENHUk9VUF9CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gSSYjMzk7bSB0aGlua2luZyBlaXRoZXIgYGluaXQvS2NvbmZpZ2Ag4oCTIGJlY2F1c2UgaXQgb2Z0ZW4gaG91c2VzIGNvcmUsIGZvdW5kYXRpb25hbCBvcHRpb25zLCBvciwgbW9yZSBsaWtlbHksIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZUJQRiwgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFRoZSBicGYgc3Vic3lzdGVtIGlzLCBieSBpdHMgbmF0dXJlLCBoZWF2aWx5IHJlbGlhbnQgb24ga2NvbmZpZyBvcHRpb25zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNncm91cHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gYW5kIHBvdGVudGlhbGx5IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIHN1Yi1vcHRpb25zIGRlZmluZWQgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDQ9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTQtXG5pbml0L0tjb25maWc6MTM1NTpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBCUEYgQ29uZmlndXJhdGlvbiAmYW1wOyBKSVQgU3RhdHVzKioKCk9rYXksIHNvIHRoZSBjb250ZXh0IGlzIGBDR1JPVVBfQlBGYC4gR290IGl0LiBUaGF0JiMzOTtzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBmb3IgdGhpcyB1c2UgY2FzZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgaXMgc2V0IGNvcnJlY3RseS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIEkgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBCUEZfSklUYC4gVGhpcyBpcyBjcml0aWNhbC4gV2l0aG91dCBKSVQsIHBlcmZvcm1hbmNlIHdpbGwgYmUgc2V2ZXJlbHkgaGFtcGVyZWQsIGFuZCB0aGUgd2hvbGUgZGVwbG95bWVudCBpcyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgd29ydGggaXQuIFRpbWUgdG8gcnVuIGEgcXVpY2sgZGlhZ25vc3RpYy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz00PWNvbmZpZyBCUEZcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMTItIyBDbGFzc2ljIEJQRiBKSVQgKGNCUEYpXG5rZXJuZWwvYnBmL0tjb25maWc6MTM6Y29uZmlnIEhBVkVfQ0JQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy0xNC1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMTYtIyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxua2VybmVsL2JwZi9LY29uZmlnOjE3OmNvbmZpZyBIQVZFX0VCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctMTgtXHRib29sXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTIxLSMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG5rZXJuZWwvYnBmL0tjb25maWc6MjI6Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctNDQtXHRkZXBlbmRzIG9uIEJQRlxua2VybmVsL2JwZi9LY29uZmlnOjQ1Olx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00Ni1cdHNlbGVjdCBFWEVDTUVNXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2NTpcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXHQgIGlzIHBlcm1hbmVudGx5IHNldCB0byAxIGFuZCBzZXR0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoYXQgd2lsbFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWc6NzA6XHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9OTI9Y29uZmlnIEJQRl9MU01cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctOTYtXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG5rZXJuZWwvYnBmL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy05OC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBCUEYgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBnZXQgdGhlIG9idmlvdXMgb3V0IG9mIHRoZSB3YXkg4oCTIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBDR1JPVVBfQlBGYCBhcmUgdGhlIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gV2UmIzM5O3JlIGFzc3VtaW5nIHRob3NlIGFyZSBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZnVuY3Rpb24gaXMgZXhwb3J0ZWQuIFRoaXMgaXMgY3J1Y2lhbDsgaWYgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBteSBlbnRpcmUgbGluZSBvZiByZWFzb25pbmcgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIFRoYXQgZnVuY3Rpb24gaXMgYSBrZXkgYnVpbGRpbmcgYmxvY2sgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM4NAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBUcmFtcG9saW5lIExpbmtpbmcgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0LiBJdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlLCB1bmxpa2UgdGhlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCBhbmQgYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgZWZmb3J0cyBoZXJlLiBBbHNvLCB0aGVyZSBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgd2hpY2ggY291bGQgd2FycmFudCBhIGxvb2sgbGF0ZXIgb24sIGJ1dCBmb3Igbm93LCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyB0aGUgZm9jYWwgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBDR1JPVVBfQlBGYCBlbmFibGVkLiBgQ09ORklHX0NHUk9VUFNgIGlzIG5lZWRlZCBmb3IgYENPTkZJR19DR1JPVVBfQlBGYCwgYW5kIGBDT05GSUdfQlBGYCBpcyBuZWVkZWQgZm9yIGBDT05GSUdfQlBGX1NZU0NBTExgLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIGluIHBsYWNlLgoKUmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYSBjaGVjayBpcyBiZWluZyBhZGRlZCB0byBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCB0byBwcmV2ZW50IGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggY2dyb3VwIHN0b3JhZ2UgdHlwZXMsIGNvbXBhcmluZyBgdmFsdWVfc2l6ZWAgb2YgbWFwcyBiZXR3ZWVuIHRoZSB0YXJnZXQgYW5kIGV4dGVuc2lvbiBwcm9ncmFtcy4gSWYgdGhlcmUmIzM5O3MgYSBtaXNtYXRjaCwgaXQgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0JiMzOTtzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gbWVtb3J5IHNhZmV0eSwgYW5kIHRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKU28sIHRvIHN1bW1hcml6ZTogSSYjMzk7bSBmb2N1c2VkIG9uIHRoZSBzeW1ib2wgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGFuZCBJJiMzOTt2ZSBub3RlZCB0aGF0IHdlIG5lZWQgdGhlc2UgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCB0byBwcmV2ZW50IGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIGF0dGFjaGluZyBhIEJQRiBleHRlbnNpb24gcHJvZ3JhbSAoZnJlcGxhY2UpIHRvIGEgdGFyZ2V0IHByb2dyYW0gd2l0aCBhIG1pc21hdGNoZWQgY2dyb3VwIHN0b3JhZ2UgdmFsdWUgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZmAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9saW5rX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gZW5zdXJlIHRoYXQgdGhlIGB2YWx1ZV9zaXplYCBvZiBgY2dyb3VwX3N0b3JhZ2VgIG1hcHMgaW4gdGhlIGV4dGVuc2lvbiBwcm9ncmFtIG1hdGNoZXMgdGhlIHRhcmdldCBwcm9ncmFtLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGEgbWlzbWF0Y2ggbGVhZHMgdG8gYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3Igc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggMWE3MjFmYzRiZWY1Ni4uMzc0M2Y2YzI1ZTJjZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTgwNiw5ICYjNDM7ODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpCiYjNDM7c3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy0mZ3Q7YXV4OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7CiAKIAlndWFyZChtdXRleCkoJmFtcDthdXgtJmd0O2V4dF9tdXRleCk7CiAJaWYgKGF1eC0mZ3Q7cHJvZ19hcnJheV9tZW1iZXJfY250KQpAQCAtODIxLDYgJiM0Mzs4MjMsMjAgQEAgc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWF1eC0mZ3Q7aXNfZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0mIzM5O3MKJiM0MzsJICogY2dyb3VwIHN0b3JhZ2UgY29udGV4dCAodmlhIHByb2dfaXRlbS0mZ3Q7Y2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGUKJiM0MzsJICogdmVyaWZpZXIgYm91bmRzIGl0cyBhY2Nlc3NlcyBieSBpdHMgb3duIG1hcCYjMzk7cyB2YWx1ZV9zaXplLiBBCiYjNDM7CSAqIHZhbHVlX3NpemUgbWlzbWF0Y2ggbGVhZHMgdG8gc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkgewomIzQzOwkJc3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtpXTsKJiM0MzsJCXN0cnVjdCBicGZfbWFwICpwcm9nX21hcCA9IHByb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2VbaV07CiYjNDM7CiYjNDM7CQlpZiAocHJvZ19tYXAgJmFtcDsmYW1wOyAoIXRndF9tYXAgfHwgcHJvZ19tYXAtJmd0O3ZhbHVlX3NpemUgIT0gdGd0X21hcC0mZ3Q7dmFsdWVfc2l6ZSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTI2LDcgJiM0Mzs5NDIsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwKIAkJLyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovCiAJCWlmIChjbnQpCiAJCQlyZXR1cm4gLUVCVVNZOwotCQllcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2cpOwomIzQzOwkJZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLSZndDtsaW5rLSZndDtwcm9nKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJCXRyLSZndDtleHRlbnNpb25fcHJvZyA9IG5vZGUtJmd0O2xpbmstJmd0O3Byb2c7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYwCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0JiMzOTtzIGZvY3VzZWQgb24gYSBjcml0aWNhbCB2YWxpZGF0aW9uIGFyb3VuZCBgY2dyb3VwX3N0b3JhZ2VgIG1hcCBpbnRlcmFjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4dGVuc2lvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIGVuc3VyaW5nIHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSAqbWF0Y2hlcyogdGhlIHRhcmdldCBwcm9ncmFtJiMzOTtzIGNvcnJlc3BvbmRpbmcgbWFwIHNpemUuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgZmxhZ3MgYSAmIzM0O3ZhbHVlX3NpemUgbWlzbWF0Y2ggbGVhZHMgdG8gc2xhYiBvdXQtb2YtYm91bmRzIGFjY2VzcyYjMzQ7IOKAkyB3aGljaCBpbnN0YW50bHkgcmFpc2VzIHRoZSByZWQgZmxhZyBvZiBhIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZS4gSXQgc2VlbXMgY2xlYXIgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgKmtub3duKiBvdXQtb2YtYm91bmRzIGFjY2VzcyB2dWxuZXJhYmlsaXR5LgoKU2luY2UgdGhlIHN0YXRlZCB2dWxuZXJhYmlsaXR5IGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBhcmUgd2VsbC1hZGRyZXNzZWQgYnkgS0FTQU4sIHRoaXMgaXMgYSBjbGVhciBjYXNlLiBUaGUgYW5hbHlzaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSBtZXJlbHkgKnZhbGlkYXRlcyogdGhpcyBgdmFsdWVfc2l6ZWAgcmVsYXRpb25zaGlwLiBJIHNlZSBubyBpbmRpY2F0aW9uIG9mIGludHJvZHVjaW5nIG5ldyBhbGxvY2F0aW9ucywgcGFzc2luZyBhbnkgbmV3IHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBleHBvc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIHN0cmljdGx5IGEgKmNoZWNrKiB0byBwcmV2ZW50IHRoZSBPT0IuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgYmxvY2sgdG8gbWFrZSBzdXJlOgpgYGBjCglmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKGkpIHsKCQlzdHJ1Y3QgYnBmX21hcCAqdGd0X21hcCA9IHRndF9wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW2ldOwoJCXN0cnVjdCBicGZfbWFwICpwcm9nX21hcCA9IHByb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2VbaV07CgoJCWlmIChwcm9nX21hcCAmYW1wOyZhbXA7ICghdGd0X21hcCB8fCBwcm9nX21hcC0mZ3Q7dmFsdWVfc2l6ZSAhPSB0Z3RfbWFwLSZndDt2YWx1ZV9zaXplKSkKCQkJcmV0dXJuIC1FSU5WQUw7Cgl9CmBgYApZZWFoLCBleGFjdGx5IGFzIEkgdGhvdWdodC4gUHVyZSB2YWxpZGF0aW9uLiBObyBuZXcgbWVtb3J5IGV4cG9zdXJlIGlzIGludm9sdmVkLiBTbywgZm9yIHRoZSByZWNvcmQsIEkmIzM5O2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggdXNpbmcgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIChLQVNBTikgZm9yIHRoZSBqb2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gZW5zdXJlIHRoYXQgdGhlIGB2YWx1ZV9zaXplYCBvZiBgY2dyb3VwX3N0b3JhZ2VgIG1hcHMgaW4gdGhlIGV4dGVuc2lvbiBwcm9ncmFtIG1hdGNoZXMgdGhlIHRhcmdldCBwcm9ncmFtLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGEgbWlzbWF0Y2ggbGVhZHMgdG8gYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3Igc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjMzOjU4LjYzMDczNDMwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDI3ODk5Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gZW5zdXJlIHRoYXQgdGhlIGB2YWx1ZV9zaXplYCBvZiBgY2dyb3VwX3N0b3JhZ2VgIG1hcHMgaW4gdGhlIGV4dGVuc2lvbiBwcm9ncmFtIG1hdGNoZXMgdGhlIHRhcmdldCBwcm9ncmFtLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGEgbWlzbWF0Y2ggbGVhZHMgdG8gYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3Igc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjMzOjU4LjYzMDc0MTIzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzOTQ0NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTE1ODc1YmY1MWMwY2YxOGQxYWI1NWY5Yjg0NGZiYTY2YmE5NmZlN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuaW5kZXggMWE3MjFmYzRiZWY1Ni4uMzc0M2Y2YzI1ZTJjZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuQEAgLTgwNiw5ICs4MDYsMTEgQEAgc3RhdGljIGVudW0gYnBmX3RyYW1wX3Byb2dfdHlwZSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXFxuK3N0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gdGd0X3Byb2ctXFx1MDAzZWF1eDtcXG4rXFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBpO1xcbiBcXG4gXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZhdXgtXFx1MDAzZWV4dF9tdXRleCk7XFxuIFxcdGlmIChhdXgtXFx1MDAzZXByb2dfYXJyYXlfbWVtYmVyX2NudClcXG5AQCAtODIxLDYgKzgyMywyMCBAQCBzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0YXV4LVxcdTAwM2Vpc19leHRlbmRlZCA9IHRydWU7XFxuK1xcbitcXHQvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0nc1xcbitcXHQgKiBjZ3JvdXAgc3RvcmFnZSBjb250ZXh0ICh2aWEgcHJvZ19pdGVtLVxcdTAwM2VjZ3JvdXBfc3RvcmFnZSksIHdoaWxlIHRoZVxcbitcXHQgKiB2ZXJpZmllciBib3VuZHMgaXRzIGFjY2Vzc2VzIGJ5IGl0cyBvd24gbWFwJ3MgdmFsdWVfc2l6ZS4gQVxcbitcXHQgKiB2YWx1ZV9zaXplIG1pc21hdGNoIGxlYWRzIHRvIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXFxuK1xcdCAqL1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKGkpIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcXG4rXFx0XFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcXG4rXFxuK1xcdFxcdGlmIChwcm9nX21hcCBcXHUwMDI2XFx1MDAyNiAoIXRndF9tYXAgfHwgcHJvZ19tYXAtXFx1MDAzZXZhbHVlX3NpemUgIT0gdGd0X21hcC1cXHUwMDNldmFsdWVfc2l6ZSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtOTI2LDcgKzk0Miw3IEBAIHN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbiBcXHRcXHQvKiBDYW5ub3QgYXR0YWNoIGV4dGVuc2lvbiBpZiBmZW50cnkvZmV4aXQgYXJlIGluIHVzZS4gKi9cXG4gXFx0XFx0aWYgKGNudClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFx0XFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nKTtcXG4rXFx0XFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVxcdTAwM2VsaW5rLVxcdTAwM2Vwcm9nKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0dHItXFx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MzM6NTkuMTc1MzAxMjAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQ2ODIzMDU3OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYuLjM3NDNmNmMyNWUyY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC04MDYsOSArODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZylcbitzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cdTAwM2VhdXg7XG4rXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2YXV4LVx1MDAzZWV4dF9tdXRleCk7XG4gXHRpZiAoYXV4LVx1MDAzZXByb2dfYXJyYXlfbWVtYmVyX2NudClcbkBAIC04MjEsNiArODIzLDIwIEBAIHN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRhdXgtXHUwMDNlaXNfZXh0ZW5kZWQgPSB0cnVlO1xuK1xuK1x0LyogQXQgcnVudGltZSB0aGUgZXh0ZW5zaW9uIHByb2dyYW0gaW5oZXJpdHMgdGhlIHRhcmdldCBwcm9ncmFtJ3NcbitcdCAqIGNncm91cCBzdG9yYWdlIGNvbnRleHQgKHZpYSBwcm9nX2l0ZW0tXHUwMDNlY2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGVcbitcdCAqIHZlcmlmaWVyIGJvdW5kcyBpdHMgYWNjZXNzZXMgYnkgaXRzIG93biBtYXAncyB2YWx1ZV9zaXplLiBBXG4rXHQgKiB2YWx1ZV9zaXplIG1pc21hdGNoIGxlYWRzIHRvIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqdGd0X21hcCA9IHRndF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcbitcdFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG4rXG4rXHRcdGlmIChwcm9nX21hcCBcdTAwMjZcdTAwMjYgKCF0Z3RfbWFwIHx8IHByb2dfbWFwLVx1MDAzZXZhbHVlX3NpemUgIT0gdGd0X21hcC1cdTAwM2V2YWx1ZV9zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05MjYsNyArOTQyLDcgQEAgc3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4gXHRcdC8qIENhbm5vdCBhdHRhY2ggZXh0ZW5zaW9uIGlmIGZlbnRyeS9mZXhpdCBhcmUgaW4gdXNlLiAqL1xuIFx0XHRpZiAoY250KVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4tXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZyk7XG4rXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozMzo1OS4xNzUzMDI3NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI1Mzk3NDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEl0IHNlZW1zIHRoZXkndmUgbW9kaWZpZWQgdGhlIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGZ1bmN0aW9uLCBhbmQgdGhlIG1vc3Qgbm90YWJsZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dgIGFzIGFuIGFyZ3VtZW50LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBmcmVwbGFjZSAoZXh0ZW5zaW9uKSBwcm9ncmFtcyBhbmQgQlBGIHRyYW1wb2xpbmVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgdmFsaWRhdGluZyB0aGUgY2dyb3VwIHN0b3JhZ2UgdmFsdWUgc2l6ZS5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gc3RlcCwgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGVyZSBpcyBhIG1pc21hdGNoLiBUaGlzIGlzIGdvb2QgdG8gc2VlIGFzIG1pc21hdGNoZWQgc3RvcmFnZSBzaXplcyB3b3VsZCBjYXVzZSBzZXJpb3VzIGlzc3Vlcy5cblxuTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGFyZSB0aWVkIHRvIHRoaXMuIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzIHRoZW1zZWx2ZXMuIEknbGwgc2VhcmNoIGZvciBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCBhbmQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgY29uZmlndXJhYmxlIGJlaGF2aW9yIHJlbGF0ZWQgdG8gQlBGIHRyYW1wb2xpbmVzIGFuZCBjZ3JvdXAgc3RvcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM0OjQ1LjQyOTI4MjYyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMyNzQ2MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03ODI9c3RhdGljIGVudW0gYnBmX3RyYW1wX3Byb2dfdHlwZSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwOTpzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgxMC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTIxPXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTQ0LVxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTQ1OlxcdFxcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTQ2LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM0OjQ4LjE2MjAzNTQwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTU3NjA0MDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgS2VybmVsIEJQRiBUcmFtcG9saW5lIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGVuYWJsaW5nIGFuZCBzaGFwaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20gd2l0aGluIHRoZSBrZXJuZWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucyBoZXJlOiBob3cgdGhlc2Ugb3B0aW9ucyBpbXBhY3QgbWVtb3J5IGFsbG9jYXRpb24sIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LCBzZWN1cml0eSBib3VuZGFyaWVzLCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuRmlyc3QsIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBvcHRpb25zIHRoYXQgZGlyZWN0bHkgY29udHJvbCB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiB0aGUgdHJhbXBvbGluZSBpdHNlbGYg4oCTIHRoZSBcIm9uL29mZlwiIHN3aXRjaGVzLCBzbyB0byBzcGVhay4gVGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIG9wdGlvbnMgd2hpY2ggaW5mbHVlbmNlIHdoaWNoIGluc3RydWN0aW9uIHNldHMgYXJlIHN1cHBvcnRlZCwgYW5kIHdoYXQgbGV2ZWxzIG9mIEJQRiB2ZXJpZmllciByaWdvciBhcmUgYXBwbGllZC4gQW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcHJvdGVjdGlvbiBjb21lcyB0byBtaW5kIGltbWVkaWF0ZWx5LiBJIGFsc28gd2FudCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgLSBhcmUgdGhlcmUgb3B0aW9ucyB0aGF0IGNhbiB0cmFkZSBvZmYgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5PyBBcmUgdGhlcmUgb3B0aW9ucyBoZXJlIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgYnVpbGQgZmxhZ3M/XG5cbkJleW9uZCB0aGUgYmFzaWMgZW5hYmxlbWVudCwgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBhbnkgb3B0aW9ucyB0aGF0IGdvdmVybiBmZWF0dXJlcyBsaWtlIGluZGlyZWN0IGp1bXBzLCBmdW5jdGlvbiBjYWxscywgb3IgdHJhbXBvbGluZSBjaGFpbmluZy4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZSB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgb3B0aW9ucywgdG9vLiBPZnRlbiwgdGhlcmUgYXJlIHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBzdXJmYWNlLiBJbiBzaG9ydCwgSSdtIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGZyb20gdGhlIG1vc3QgZnVuZGFtZW50YWwgZW5hYmxlL2Rpc2FibGUgb3B0aW9ucyB0byB0aGUgZmluZS1ncmFpbmVkIGNvbnRyb2xzIHRoYXQgZGV0ZXJtaW5lIHRoZSBiZWhhdmlvciBvZiB0aGUgQlBGIHRyYW1wb2xpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozNzo0OS43MzgwNzk1NTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMzQ2OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjUwLjI4MDQzMTMzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODA3MDUxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk15IEJQRiBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBmb3IgYW55IHNlcmlvdXMgQlBGIGRlcGxveW1lbnQuIEkgbWVhbiwgd2l0aG91dCB0aGUgSklULCBwZXJmb3JtYW5jZSBpcyBnb2luZyB0byBiZSBzZXZlcmVseSBsaW1pdGVkLCBhbmQgdGhhdCdzIGp1c3QgYSBub24tc3RhcnRlciBmb3IgbW9zdCByZWFsLXdvcmxkIHVzZSBjYXNlcy4gU28sIGBDT05GSUdfQlBGX0pJVGAgaXMgZGVmaW5pdGVseSBhIG11c3QtaGF2ZS5cblxuVGhlbiwgdGhlcmUncyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIEknZCBiZSBzdXJwcmlzZWQgaWYgd2UgY291bGQgZ2V0IGF3YXkgKndpdGhvdXQqIHRoYXQgb25lIGVpdGhlci4gSXQncyB0aGUgd2hvbGUgZW50cnkgcG9pbnQsIGFmdGVyIGFsbC4gR290dGEgaGF2ZSB0aGF0IHN5c2NhbGwgaW50ZXJmYWNlIGVuYWJsZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgdGhlIGNncm91cCBzaXR1YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0aGF0IHN0b3JhZ2UgaXMgY29uZmlndXJlZC4gSXMgY2dyb3VwIHN1cHBvcnQgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoaXMgcGFydGljdWxhciBidWlsZCwgb3IgaXMgaXQgaGlkZGVuIGJlaGluZCBhbm90aGVyIGNvbmZpZyBvcHRpb24/IEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgSSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IG9yIGlmIGl0J3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtaXguIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCB0byBlbnN1cmUgc21vb3RoIG9wZXJhdGlvbiwgSSBkb24ndCB3YW50IHRvIGdldCBjYXVnaHQgd2l0aG91dCB0aGUgcmVxdWlyZWQgaW5mcmFzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozNzo1My45NjExMzk4OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzNTMzOTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9zdG9yYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjU0LjA0NjUwNTIxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njc4NTYyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipCUEYgTG9jYWwgU3RvcmFnZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgQlBGIGxvY2FsIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgbmFtZWQgbGlrZSB0aGF0LCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljIGFuZCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBsb2NhbCBzdG9yYWdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHRoaXMgZmlsZSB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHJlbGF0ZWQgY29kZSBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjU5LjcxNDM2NTExN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2MDAwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX3N0b3JhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NDIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTEyPURFRklORV9CUEZfU1RPUkFHRV9DQUNIRShjZ3JvdXBfY2FjaGUpO1xcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTEzLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE0OnN0YXRpYyBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgX19yY3UgKipjZ3JvdXBfc3RvcmFnZV9wdHIodm9pZCAqb3duZXIpXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTUte1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MzU9c3RhdGljIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzozNjpjZ3JvdXBfc3RvcmFnZV9sb29rdXAoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBib29sIGNhY2hlaXRfbG9ja2l0KVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM3LXtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzozODpcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKmNncm91cF9zdG9yYWdlO1xcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM5LVxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXA7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNDAtXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6NDE6XFx0Y2dyb3VwX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soY2dyb3VwLVxcdTAwM2VicGZfY2dycF9zdG9yYWdlLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBicGZfcmN1X2xvY2tfaGVsZCgpKTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo0MzpcXHRpZiAoIWNncm91cF9zdG9yYWdlKVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQ0LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNDYtXFx0c21hcCA9IChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjQ3OlxcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9sb29rdXAoY2dyb3VwX3N0b3JhZ2UsIHNtYXAsIGNhY2hlaXRfbG9ja2l0KTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy00OC19XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz01MD1zdGF0aWMgdm9pZCAqYnBmX2NncnBfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy02MC1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo2MTpcXHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNjItXFx0Y2dyb3VwX3B1dChjZ3JvdXApO1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9NjY9c3RhdGljIGxvbmcgYnBmX2NncnBfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy04My1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo4NDpzdGF0aWMgaW50IGNncm91cF9zdG9yYWdlX2RlbGV0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODUte1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODctXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6ODg6XFx0c2RhdGEgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAoY2dyb3VwLCBtYXAsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy04OS1cXHRpZiAoIXNkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9OTU9c3RhdGljIGxvbmcgYnBmX2NncnBfc3RvcmFnZV9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMDQtXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTA1OlxcdGVyciA9IGNncm91cF9zdG9yYWdlX2RlbGV0ZShjZ3JvdXAsIG1hcCk7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTA2LVxcdGNncm91cF9wdXQoY2dyb3VwKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTExMD1zdGF0aWMgaW50IG5vdHN1cHBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTQtXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTE1OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTExNi17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTktXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTIwOnN0YXRpYyB2b2lkIGNncm91cF9zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTIxLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTEyNT1CUEZfQ0FMTF80KGJwZl9jZ3JwX3N0b3JhZ2VfZ2V0LCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHN0cnVjdCBjZ3JvdXAgKiwgY2dyb3VwLFxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTM2LVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjEzNzpcXHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTM4LVxcdGlmIChzZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTE1MT1CUEZfQ0FMTF8yKGJwZl9jZ3JwX3N0b3JhZ2VfZGVsZXRlLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHN0cnVjdCBjZ3JvdXAgKiwgY2dyb3VwKVxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTU2LVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE1NzpcXHRyZXR1cm4gY2dyb3VwX3N0b3JhZ2VfZGVsZXRlKGNncm91cCwgbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNTgtfVxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MTYwPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JwX3N0b3JhZ2VfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE2Mi1cXHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE2MzpcXHQubWFwX2FsbG9jID0gY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE2NDpcXHQubWFwX2ZyZWUgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfZnJlZSxcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNjUtXFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBub3RzdXBwX2dldF9uZXh0X2tleSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE3MS1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfbG9jYWxfc3RvcmFnZV9tYXBfYnRmX2lkWzBdLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE3MjpcXHQubWFwX293bmVyX3N0b3JhZ2VfcHRyID0gY2dyb3VwX3N0b3JhZ2VfcHRyLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE3My19O1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNDI9c3RhdGljIHZvaWQgY2dyb3VwX2JwZl9vZmZsaW5lKHN0cnVjdCBjZ3JvdXAgKmNncnApXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0Ny1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI0ODpzdGF0aWMgdm9pZCBicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZXNbXSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0OS17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTA6XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1MjpcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjUzOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZV9mcmVlKHN0b3JhZ2VzW3N0eXBlXSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQtfVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU1LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU2OnN0YXRpYyBpbnQgYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlc1tdLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU3OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VzW10sXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTgtXFx0XFx0XFx0XFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNjEte1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjYyOlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjM6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkga2V5O1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY0LVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2OC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI2OTpcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzA6XFx0XFx0bWFwID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV07XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzEtXFx0XFx0aWYgKCFtYXApXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3My1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NDpcXHRcXHRzdG9yYWdlc1tzdHlwZV0gPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAoKHZvaWQgKiltYXAsIFxcdTAwMjZrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NS1cXHRcXHRpZiAoc3RvcmFnZXNbc3R5cGVdKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzg6XFx0XFx0c3RvcmFnZXNbc3R5cGVdID0gYnBmX2Nncm91cF9zdG9yYWdlX2FsbG9jKHByb2csIHN0eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3OS1cXHRcXHRpZiAoSVNfRVJSKHN0b3JhZ2VzW3N0eXBlXSkpIHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI4MDpcXHRcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2VzKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI4MS1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjg5LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjkwOnN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKmRzdFtdLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjkxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzcmNbXSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5Mi17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyOTM6XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5NC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI5NTpcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjk2LVxcdFxcdGRzdFtzdHlwZV0gPSBzcmNbc3R5cGVdO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yOTgtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyOTk6c3RhdGljIHZvaWQgYnBmX2Nncm91cF9zdG9yYWdlc19saW5rKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VzW10sXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDIte1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MzAzOlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDQtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzozMDU6XFx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjMwNjpcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VfbGluayhzdG9yYWdlc1tzdHlwZV0sIGNncnAsIGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTMwNy19XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTMyNT1zdGF0aWMgdm9pZCBjZ3JvdXBfYnBmX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMzAtXFx0c3RydWN0IGxpc3RfaGVhZCAqc3RvcmFnZXMgPSBcXHUwMDI2Y2dycC1cXHUwMDNlYnBmLnN0b3JhZ2VzO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MzMxOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMzMyLVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zNjMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0b3JhZ2UsIHN0bXAsIHN0b3JhZ2VzLCBsaXN0X2NnKSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzozNjQ6XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdG9yYWdlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjM2NTpcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VfZnJlZShzdG9yYWdlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTM2Ni1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQ1Mz1zdGF0aWMgaW50IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQ5NS1cXHRcXHRcXHRpdGVtLVxcdTAwM2Vwcm9nID0gcHJvZ19saXN0X3Byb2cocGwpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDk2OlxcdFxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKGl0ZW0tXFx1MDAzZWNncm91cF9zdG9yYWdlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDk3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9ODA2PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MTMtXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTQ6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTU6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE2LVxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg2MjpcXHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2My1cXHRcXHRcXHRcXHQgICAgICBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2csIGNncnApKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04NzAtXFx0XFx0aWYgKCFwbCkge1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODcxOlxcdFxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy04NzItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3Ny1cXHRcXHRcXHRrZnJlZShwbCk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4Nzg6XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3OS1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04ODUtXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4ODY6XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODg3LVxcdGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTA2LVxcdH1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjkwNzpcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIHR5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTA4LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05MTgtXFx0fVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTE5OlxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy05MjAtXFx0aWYgKCFvbGRfcHJvZykge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzkwPUJQRl9DQUxMXzIoYnBmX2dldF9sb2NhbF9zdG9yYWdlLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHU2NCwgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3OTUtXFx0ICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzk2OlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGUgPSBjZ3JvdXBfc3RvcmFnZV90eXBlKG1hcCk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzk3OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk4LVxcdHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqY3R4O1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODAyLVxcdGN0eCA9IGNvbnRhaW5lcl9vZihjdXJyZW50LVxcdTAwM2VicGZfY3R4LCBzdHJ1Y3QgYnBmX2NnX3J1bl9jdHgsIHJ1bl9jdHgpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgwMzpcXHRzdG9yYWdlID0gY3R4LVxcdTAwM2Vwcm9nX2l0ZW0tXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4MDQtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDk1PXN0YXRpYyBib29sIF9fYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI0OTktXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZnAtXFx1MDAzZWF1eDtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTAwOlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgaTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTAxLVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTE4LVxcdFxcdG1hcC1cXHUwMDNlb3duZXItXFx1MDAzZWF0dGFjaF9mdW5jX3Byb3RvID0gYXV4LVxcdTAwM2VhdHRhY2hfZnVuY19wcm90bztcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTE5OlxcdFxcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xcbmtlcm5lbC9icGYvY29yZS5jLTI1MjAtXFx0XFx0XFx0bWFwLVxcdTAwM2Vvd25lci1cXHUwMDNlc3RvcmFnZV9jb29raWVbaV0gPVxcbmtlcm5lbC9icGYvY29yZS5jOjI1MjE6XFx0XFx0XFx0XFx0YXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXSA/XFxua2VybmVsL2JwZi9jb3JlLmM6MjUyMjpcXHRcXHRcXHRcXHRhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW2ldLVxcdTAwM2Vjb29raWUgOiAwO1xcbmtlcm5lbC9icGYvY29yZS5jLTI1MjMtXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjUzMy1cXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTM0OlxcdFxcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xcbmtlcm5lbC9icGYvY29yZS5jLTI1MzUtXFx0XFx0XFx0aWYgKCFyZXQpXFxua2VybmVsL2JwZi9jb3JlLmMtMjUzNi1cXHRcXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTM3OlxcdFxcdFxcdGNvb2tpZSA9IGF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV0gP1xcbmtlcm5lbC9icGYvY29yZS5jOjI1Mzg6XFx0XFx0XFx0XFx0IGF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV0tXFx1MDAzZWNvb2tpZSA6IDA7XFxua2VybmVsL2JwZi9jb3JlLmMtMjUzOS1cXHRcXHRcXHRyZXQgPSBtYXAtXFx1MDAzZW93bmVyLVxcdTAwM2VzdG9yYWdlX2Nvb2tpZVtpXSA9PSBjb29raWUgfHxcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIwLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxOnN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMi1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yOC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyOTpzdGF0aWMgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcF90b19zdG9yYWdlKHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzAte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMxOlxcdHJldHVybiBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCwgbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMi19XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0zND1zdGF0aWMgYm9vbCBhdHRhY2hfdHlwZV9pc29sYXRlZChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM1LXtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNjpcXHRyZXR1cm4gbWFwLVxcdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM3LX1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zOC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozOTpzdGF0aWMgaW50IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXlfY21wKGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDAtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqX2tleTEsIGNvbnN0IHZvaWQgKl9rZXkyKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDItXFx0aWYgKGF0dGFjaF90eXBlX2lzb2xhdGVkKFxcdTAwMjZtYXAtXFx1MDAzZW1hcCkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MzpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSAqa2V5MSA9IF9rZXkxO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ0OlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5ICprZXkyID0gX2tleTI7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDUtXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy02NS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo2NjpzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo2NzpjZ3JvdXBfc3RvcmFnZV9sb29rdXAoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy02OC1cXHRcXHQgICAgICB2b2lkICprZXksIGJvb2wgbG9ja2VkKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNzctXFx0d2hpbGUgKG5vZGUpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo3ODpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTc5LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjgwOlxcdFxcdHN0b3JhZ2UgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSwgbm9kZSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtODEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6ODI6XFx0XFx0c3dpdGNoIChicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5X2NtcChtYXAsIGtleSwgXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZWtleSkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy04My1cXHRcXHRjYXNlIC0xOlxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTAxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEwMjpzdGF0aWMgaW50IGNncm91cF9zdG9yYWdlX2luc2VydChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEwMzpcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMDQte1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTA4LVxcdHdoaWxlICgqbmV3KSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTA5OlxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnRoaXM7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTEwLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjExMTpcXHRcXHR0aGlzID0gY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UsIG5vZGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMTMtXFx0XFx0cGFyZW50ID0gKm5ldztcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMTQ6XFx0XFx0c3dpdGNoIChicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5X2NtcChtYXAsIFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VrZXksIFxcdTAwMjZ0aGlzLVxcdTAwM2VrZXkpKSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTE1LVxcdFxcdGNhc2UgLTE6XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTMyOnN0YXRpYyB2b2lkICpjZ3JvdXBfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqX21hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEzMy17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM0OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMzU6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzYtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM3OlxcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzgtXFx0aWYgKCFzdG9yYWdlKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQzLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE0NDpzdGF0aWMgbG9uZyBjZ3JvdXBfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQ1LVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE0Ni17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTQ3OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQ4LVxcdHN0cnVjdCBicGZfc3RvcmFnZV9idWZmZXIgKm5ldztcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE1Ni1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxNTc6XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cCgoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKiltYXAsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTU4LVxcdFxcdFxcdFxcdFxcdGtleSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4MjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV9jb3B5KHN0cnVjdCBicGZfbWFwICpfbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgzLVxcdFxcdFxcdFxcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE4NC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTg1OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxODY6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xODctXFx0aW50IGNwdSwgb2ZmID0gMDtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE5MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTkxOlxcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xOTItXFx0aWYgKCFzdG9yYWdlKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMTUtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjE2OmludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqX21hcCwgdm9pZCAqa2V5LFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNy1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxOC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjE5OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyMjA6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMjEtXFx0dm9pZCAqdmFsO1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjI4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyMjk6XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXAsIGtleSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIzMC1cXHRpZiAoIXN0b3JhZ2UpIHtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI1NS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNTY6c3RhdGljIGludCBjZ3JvdXBfc3RvcmFnZV9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTctXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKl9uZXh0X2tleSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTgte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI1OTpcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqbWFwID0gbWFwX3RvX3N0b3JhZ2UoX21hcCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjYwOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjYxLVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjY3LVxcdGlmIChrZXkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNjg6XFx0XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXAsIGtleSwgdHJ1ZSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjY5LVxcdFxcdGlmICghc3RvcmFnZSlcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI3Ni1cXHRcXHRzdG9yYWdlID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bWFwLVxcdTAwM2VsaXN0LFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI3NzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSwgbGlzdF9tYXApO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI3OC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yODItXFx0aWYgKGF0dGFjaF90eXBlX2lzb2xhdGVkKFxcdTAwMjZtYXAtXFx1MDAzZW1hcCkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyODM6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgKm5leHQgPSBfbmV4dF9rZXk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjg0LVxcdFxcdCpuZXh0ID0gc3RvcmFnZS1cXHUwMDNla2V5O1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI5NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNncm91cF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yOTcte1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk5LVxcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMwMDpcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqbWFwO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMwMS1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMwOC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozMDk6XFx0aWYgKGF0dHItXFx1MDAzZWtleV9zaXplICE9IHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMTAtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICE9IHNpemVvZihfX3U2NCkpXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjYtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI3OlxcdG1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXApLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMyOC1cXHRpZiAoIW1hcClcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0MC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNDE6c3RhdGljIHZvaWQgY2dyb3VwX3N0b3JhZ2VfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKl9tYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzQyLXtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNDM6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0NC1cXHRzdHJ1Y3QgbGlzdF9oZWFkICpzdG9yYWdlcyA9IFxcdTAwMjZtYXAtXFx1MDAzZWxpc3Q7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzQ1OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0Ni1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0OS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RvcmFnZSwgc3RtcCwgc3RvcmFnZXMsIGxpc3RfbWFwKSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzUwOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZV91bmxpbmsoc3RvcmFnZSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzUxOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZV9mcmVlKHN0b3JhZ2UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM1Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNjEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzYyOnN0YXRpYyBsb25nIGNncm91cF9zdG9yYWdlX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNjMte1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzY2LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM2NzpzdGF0aWMgaW50IGNncm91cF9zdG9yYWdlX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM2OC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzc1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM3NjpcXHRcXHQvKiBLZXkgaXMgZXhwZWN0ZWQgdG8gYmUgb2Ygc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgdHlwZSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzctXFx0XFx0ICogd2hpY2ggaXM6XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mzc4OlxcdFxcdCAqIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5IHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzktXFx0XFx0ICpcXHRfX3U2NFxcdGNncm91cF9pbm9kZV9pZDtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM5NC1cXHRcXHRtID0gKHN0cnVjdCBidGZfbWVtYmVyICopKGtleV90eXBlICsgMSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mzk1OlxcdFxcdHNpemUgPSBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXksIGNncm91cF9pbm9kZV9pZCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzk2LVxcdFxcdGlmICghYnRmX21lbWJlcl9pc19yZWdfaW50KGJ0Ziwga2V5X3R5cGUsIG0sIDAsIHNpemUpKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDAyLVxcdFxcdG0rKztcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MDM6XFx0XFx0b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXksIGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MDQ6XFx0XFx0c2l6ZSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSwgYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQwNS1cXHRcXHRpZiAoIWJ0Zl9tZW1iZXJfaXNfcmVnX2ludChidGYsIGtleV90eXBlLCBtLCBvZmZzZXQsIHNpemUpKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDE3LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQxODpzdGF0aWMgdm9pZCBjZ3JvdXBfc3RvcmFnZV9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MTktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzZXFfZmlsZSAqbSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MjAte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQyMTpcXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQyMjpcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyMy1cXHRpbnQgY3B1O1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDI1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MjY6XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXBfdG9fc3RvcmFnZShtYXApLCBrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MjctXFx0aWYgKCFzdG9yYWdlKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MzItXFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX2tleV90eXBlX2lkLCBrZXksIG0pO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQzMzpcXHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MzQtXFx0aWYgKHN0eXBlID09IEJQRl9DR1JPVVBfU1RPUkFHRV9TSEFSRUQpIHtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1Mi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NTM6c3RhdGljIHU2NCBjZ3JvdXBfc3RvcmFnZV9tYXBfdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NTQte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1NS1cXHQvKiBDdXJyZW50bHkgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBlbGVtZW50cyBhcmUgbm90IGNvdW50ZWQuICovXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDU2OlxcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXApO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1Ny19XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDU4LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ1OTpCVEZfSURfTElTVF9TSU5HTEUoY2dyb3VwX3N0b3JhZ2VfbWFwX2J0Zl9pZHMsIHN0cnVjdCxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjA6XFx0XFx0ICAgYnBmX2Nncm91cF9zdG9yYWdlX21hcClcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjE6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncm91cF9zdG9yYWdlX21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYyOlxcdC5tYXBfYWxsb2MgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYzOlxcdC5tYXBfZnJlZSA9IGNncm91cF9zdG9yYWdlX21hcF9mcmVlLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2NDpcXHQubWFwX2dldF9uZXh0X2tleSA9IGNncm91cF9zdG9yYWdlX2dldF9uZXh0X2tleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjU6XFx0Lm1hcF9sb29rdXBfZWxlbSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cF9lbGVtLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2NjpcXHQubWFwX3VwZGF0ZV9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0sXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDY3OlxcdC5tYXBfZGVsZXRlX2VsZW0gPSBjZ3JvdXBfc3RvcmFnZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Njg6XFx0Lm1hcF9jaGVja19idGYgPSBjZ3JvdXBfc3RvcmFnZV9jaGVja19idGYsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDY5OlxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGNncm91cF9zdG9yYWdlX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDcwOlxcdC5tYXBfbWVtX3VzYWdlID0gY2dyb3VwX3N0b3JhZ2VfbWFwX3VzYWdlLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3MTpcXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZjZ3JvdXBfc3RvcmFnZV9tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzItfTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzMtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDc0OmludCBicGZfY2dyb3VwX3N0b3JhZ2VfYXNzaWduKHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCwgc3RydWN0IGJwZl9tYXAgKl9tYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc1LXtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NzY6XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUoX21hcCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc3LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3ODpcXHRpZiAoYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Nzk6XFx0ICAgIGF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9IF9tYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgwLVxcdFxcdHJldHVybiAtRUJVU1k7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ4MjpcXHRhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSA9IF9tYXA7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgzLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDg1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ4NjpzdGF0aWMgc2l6ZV90IGJwZl9jZ3JvdXBfc3RvcmFnZV9jYWxjdWxhdGVfc2l6ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgKnBhZ2VzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00ODktXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDkwOlxcdGlmIChjZ3JvdXBfc3RvcmFnZV90eXBlKG1hcCkgPT0gQlBGX0NHUk9VUF9TVE9SQUdFX1NIQVJFRCkge1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ5MS1cXHRcXHRzaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9idWZmZXIpICsgbWFwLVxcdTAwM2V2YWx1ZV9zaXplO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ5MjpcXHRcXHQqcGFnZXMgPSByb3VuZF91cChzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSkgKyBzaXplLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ5My1cXHRcXHRcXHRcXHQgIFBBR0VfU0laRSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwMi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MDM6c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqYnBmX2Nncm91cF9zdG9yYWdlX2FsbG9jKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MDQ6XFx0XFx0XFx0XFx0XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MDUte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwNi1cXHRjb25zdCBnZnBfdCBnZnAgPSBfX0dGUF9aRVJPIHwgR0ZQX1VTRVI7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTA3OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTA4LVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MTEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTEyOlxcdG1hcCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxMy1cXHRpZiAoIW1hcClcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxNS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MTY6XFx0c2l6ZSA9IGJwZl9jZ3JvdXBfc3RvcmFnZV9jYWxjdWxhdGVfc2l6ZShtYXAsIFxcdTAwMjZwYWdlcyk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTE3LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUxODpcXHRzdG9yYWdlID0gYnBmX21hcF9rbWFsbG9jX25vZGUobWFwLCBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTE5LVxcdFxcdFxcdFxcdCAgICAgICBnZnAsIG1hcC1cXHUwMDNlbnVtYV9ub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUzNC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MzU6XFx0c3RvcmFnZS1cXHUwMDNlbWFwID0gKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUzNi1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU0My1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NDQ6c3RhdGljIHZvaWQgZnJlZV9zaGFyZWRfY2dyb3VwX3N0b3JhZ2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU0NS17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTQ2OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UgPVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU0NzpcXHRcXHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCByY3UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU0OC1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1Mi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NTM6c3RhdGljIHZvaWQgZnJlZV9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1NC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTU1OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UgPVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU1NjpcXHRcXHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCByY3UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1Ny1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU2MS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NjI6dm9pZCBicGZfY2dyb3VwX3N0b3JhZ2VfZnJlZShzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU2My17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTY0OlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTY1LVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzAtXFx0bWFwID0gXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZW1hcC1cXHUwMDNlbWFwO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU3MTpcXHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzItXFx0aWYgKHN0eXBlID09IEJQRl9DR1JPVVBfU1RPUkFHRV9TSEFSRUQpXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTczOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VyY3UsIGZyZWVfc2hhcmVkX2Nncm91cF9zdG9yYWdlX3JjdSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTc0LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NzU6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZXJjdSwgZnJlZV9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfcmN1KTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzYtfVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3Ny1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1Nzg6dm9pZCBicGZfY2dyb3VwX3N0b3JhZ2VfbGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCxcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU4MS17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTgyOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTgzLVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTkyLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bWFwLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1OTM6XFx0V0FSTl9PTihjZ3JvdXBfc3RvcmFnZV9pbnNlcnQobWFwLCBzdG9yYWdlKSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTk0LVxcdGxpc3RfYWRkKFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VsaXN0X21hcCwgXFx1MDAyNm1hcC1cXHUwMDNlbGlzdCk7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01OTgtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTk5OnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTYwMC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NjAxOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjU5Ljc4OTk3MzE4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDc4MTE0Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDZ3JvdXAgQlBGIENvbmZpZ3VyYXRpb24gYW5kIE1ha2VmaWxlIEV4cGxvcmF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGNncm91cCBCUEYgZnVuY3Rpb25hbGl0eSBhZ2Fpbi4gTmVlZCB0byBiZSBzdXJlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGlmIG1lbW9yeSBzZXJ2ZXMsIGl0IHNob3VsZCBiZSBgQ09ORklHX0NHUk9VUF9CUEZgLiBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGF0LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGtlcm5lbCdzIGNncm91cCBCUEYgaW50ZWdyYXRpb24gaXMgYWx3YXlzIGV2b2x2aW5nLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXQncyBwcm9iYWJseSBiZXN0IHRvIGdvIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhpcyBmaWxlIGlzIG9mdGVuIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIHBpZWNlcyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEuIEl0J3MgbGlrZWx5IHRoYXQgZGVwZW5kZW5jaWVzIGFuZCBjb21waWxhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gY2dyb3VwIEJQRiBhcmUgZGVjbGFyZWQgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIG5hbWUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5ldyBvciBpbnRlcmVzdGluZyBjaGFuZ2VzIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgbmV3IGNvbXBpbGF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTc5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6Mzg6MDMuODY4MDkxNDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NzIxNTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9zdG9yYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM4OjAzLjk3NDg3NDk3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTcxMzY1MzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgT2JqZWN0IENvbXBpbGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGxvY2FsX3N0b3JhZ2Uub2Agb3IgYGJwZl9jZ3JwX3N0b3JhZ2Uub2Agb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBidWlsdC4gR2l2ZW4gdGhlc2UgYXJlIEJQRiByZWxhdGVkLCBteSBmaXJzdCBzdG9wIGhhcyB0byBiZSB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGJ1aWxkIHJ1bGVzLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBob3cgdGhlc2UgYXJlIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg2OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjI1LjY4ODUzMTMxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MDc4NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX3N0b3JhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozOToyNi4xOTI2MjU5NzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NDUyNzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQlBGIFN5c2NhbGwgRGVwZW5kZW5jeSBmb3IgU3RvcmFnZSBNb2R1bGVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBCUEYgbW9kdWxlcy4gSSBrbm93IGBsb2NhbF9zdG9yYWdlLm9gICpkZWZpbml0ZWx5KiBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHRoYXQncyBjbGVhciBmcm9tIGl0cyBtYWtldXAsIHJpZ2h0PyBCdXQgd2hhdCBhYm91dCBgYnBmX2NncnBfc3RvcmFnZS5vYD8gVGhhdCdzIHRoZSBxdWVzdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0ICphbHNvKiBkZXBlbmRzIG9uIHRoZSBCUEYgc3lzY2FsbCBpbnRlcmZhY2UuIFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBob3cgSSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIHVzZWQgdG8gYnVpbGQgaXQgdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgYnVpbHQgd2l0aCB0aGUgc2FtZSBmbGFnLCBhIGRpZmZlcmVudCBvbmUsIG9yIGV2ZW4gZGVwZW5kIG9uIGFub3RoZXIgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjMwLjQ2NzE1Njc1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1NDE4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NncnBfc3RvcmFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjMwLjUyMTcwNTExNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIwNzY1MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQlBGIFRyYW1wb2xpbmUgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IGZvciB0aGlzIHBhcnRpY3VsYXIgdGFzaywgSSdtIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX0NHUk9VUFNgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmaWxlLiBUaGVyZSdzIHNvbWV0aGluZyBpbiB0aGVyZSBJIHdhbnQgdG8gY2hlY2sgYWdhaW4sIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdCBvciBob3cgdGhlIEJQRiB0cmFtcG9saW5lcyBhcmUgc2V0IHVwIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBJIHByb2JhYmx5IGhhdmUgYSBzcGVjaWZpYyBzY2VuYXJpbyBvciBwb3RlbnRpYWwgaXNzdWUgaW4gbWluZCB0aGF0IEkgbmVlZCB0byBjb25maXJtIG9yIHJldmlzaXQsIHNvIGl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjE2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6Mzk6MzQuMjQyNDgxNzI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE3NTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzgyPXN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwOC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4MDk6c3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0NC1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcXHRcXHRlcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2csIG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0Ni1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozOTozNC4zMDM2NjQ4NDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5NjA3MDk3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEJQRiBUcmFtcG9saW5lIExpbmtpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCDigJMgd2hpY2ggc3VnZ2VzdHMgc29tZSBzb3J0IG9mIHRhcmdldCBwcm9ncmFtIHJlcGxhY2VtZW50IGNoZWNrIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbGlua2luZyBwcm9jZXNzLiBJbnRlcmVzdGluZy5cblxuTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdywgSSBuZWVkIHRvIHRyYWNlICpiYWNrd2FyZHMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuIEZpbmRpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgaGlnaGVyLWxldmVsIGxvZ2ljIHRoYXQgdHJpZ2dlcnMgdGhlIHRyYW1wb2xpbmUgbGlua2luZyBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIHRhcmdldCBwcm9ncmFtIGNoZWNrLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjQ1LjI2NDM3ODk5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4ODE4MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTYyPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY5OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzAtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA5Mj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzU6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjI3PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXFx0XFx0ZGF0YS1cXHUwMDNlZW50cnkgPSBcXHUwMDI2bW5vZGUtXFx1MDAzZWVudHJ5O1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozOTo0NS4zMjMyNjc3NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0ODgwOTQwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFByb2dyYW0gQXR0YWNobWVudCBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhcmUgYWxsIGNydWNpYWwgZW50cnkgcG9pbnRzLiBUaGV5J3JlIHRoZSBnYXRlcyB0aHJvdWdoIHdoaWNoIEJQRiBwcm9ncmFtcyBnZXQgYXR0YWNoZWQuIEVzc2VudGlhbGx5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgaW50ZXJmYWNlcyBmb3IgaW50ZWdyYXRpbmcgQlBGIHByb2dyYW1zIGludG8gdmFyaW91cyBrZXJuZWwgY29udGV4dHMuIE5vdywgc2luY2UgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBpbiBjaGFyZ2Ugb2YgcHJvZ3JhbSBhdHRhY2htZW50LCBJIHdhbnQgdG8gZmluZCB0aGUgY2FsbGluZyBsb2NhdGlvbnMgb2YgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGlkZW50aWZ5IHRoZSBjb250ZXh0cyB3aGljaCBtYWtlIHVzZSBvZiBpdC4gVGhhdCB3aWxsIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IEJQRiBwcm9ncmFtcyBhcmUgYmVpbmcgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDoyOS44MTEzNjYyNzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Nzk4MjE3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MTUwOT1zdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaztcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTUxMS0jaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE1MTI6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTYwNT11MTYgYnBmX291dF9zdGFja19hcmdfY250KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjA2LSNlbHNlXFxuaW5jbHVkZS9saW51eC9icGYuaDoxNjA3OnN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjA4LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5NS1cXHRcXHQgKiBBbGxvdyByZS1hdHRhY2ggZm9yIFRSQUNJTkcgYW5kIExTTSBwcm9ncmFtcy4gSWYgaXQnc1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3OTY6XFx0XFx0ICogY3VycmVudGx5IGxpbmtlZCwgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nIHdpbGwgZmFpbC5cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzk3LVxcdFxcdCAqIEVYVCBwcm9ncmFtcyBuZWVkIHRvIHNwZWNpZnkgdGd0X3Byb2dfZmQsIHNvIHRoZXlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4NjktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzg3MDpcXHRlcnIgPSBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNmxpbmstXFx1MDAzZWxpbmsubm9kZSwgdHIsIHRndF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zODcxLVxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkwMj1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyMTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2MS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NjI6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2OC1cXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcwLVxcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwOTI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM1OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZzaGltX2xpbmstXFx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyNz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc2LVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjc3OlxcdFxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OC1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6MzIuNTkxMTk1NDI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzgzOTEzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogVGFyZ2V0aW5nIEJQRiBUcmFjaW5nIFByb2dyYW0gQXR0YWNobWVudCoqXG5cbk9rYXksIHNvIG15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgLiBUaGF0IGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGF0dGFjaGluZyBCUEYgdHJhY2luZyBwcm9ncmFtcywgYW5kIHRoYXQncyAqYWx3YXlzKiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZnV6emluZy4gSXQncyBjbGVhcmx5IHJlYWNoYWJsZSwgd2hpY2ggaXMga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB0ZXN0aW5nIHRoaXMgdGhvcm91Z2hseS5cblxuTm93LCBJJ20gbm90aW5nIHRoYXQgdGhlIGZ1bmN0aW9uIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGdldHMgY2FsbGVkIHdoZW4gd2UncmUgYXR0YWNoaW5nIGFuIGV4dGVuc2lvbiBwcm9ncmFtLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9FWFRgLiBUaGUgcGF0Y2ggYWRkZWQgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBwb3RlbnRpYWwgY2dyb3VwIHN0b3JhZ2Ugc2l6ZSBtaXNtYXRjaGVzLiBJZiB0aGUgc2l6ZXMgZG9uJ3QgbGluZSB1cCwgaXQncyBzdXBwb3NlZCB0byByZXR1cm4gYC1FSU5WQUxgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQsIHNvIHRoYXQncyBhbm90aGVyIGZ1bmN0aW9uIEkgbmVlZCB0byBmdXp6LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgLUVJTlZBTGAgaXMgcmV0dXJuZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIHdvcnRoIGRpcmVjdGx5IGZ1enppbmcuIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBkaXJlY3QgZnV6emluZyBtb3JlIGNvbXBsaWNhdGVkLCBidXQgSSBzdGlsbCBuZWVkIHRvIGZpbmQgd2F5cyB0byB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIE9uIHRoZSBvdGhlciBoYW5kLCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuIEFsc28sIEkgdGhvdWdodCBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgIHdhcyBub24tc3RhdGljIHRvbywgYW5kIHdvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUuIFdhaXQsIGxldCBtZSBjaGVjay4gQWgsIGl0J3Mgc3RhdGljIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIHN0YXRpYyBhIGJpdCBjbG9zZXIgdG8gbWFrZSBzdXJlIEknbSB0ZXN0aW5nIHRoaXMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIzOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDozOS4wNjk1ODk4NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3MjEwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MzY4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNjg4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM2ODk6c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzY5MC1cXHRcXHRcXHRcXHQgICBpbnQgdGd0X3Byb2dfZmQsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Mzc2LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0Mzc3OlxcdFxcdHJldHVybiBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLCAwLCAwLCAwLCBhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3NC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4NzU6XFx0XFx0cmV0ID0gYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gocHJvZyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODc2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTYtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTc6XFx0XFx0XFx0cmV0ID0gYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gocHJvZyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6MzkuMTMzMzE3MTM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjU4ODI4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEZ1bmN0aW9uIFZpc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBCUEYgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlLiBGaXJzdCBvYnNlcnZhdGlvbjogYGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZW4sIEkgc2VlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIHdoaWNoIGlzICpub24tc3RhdGljKiwgdGhhdCdzIGFuIGludGVyZXN0aW5nIG9uZSB0byBmb2xsb3cuIEFuZCBqdXN0IHRvIGNvbmZpcm0sIGBsaW5rX2NyZWF0ZWAgaXMgc3RhdGljLiBUaGUgYHN5c19icGZgIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50IGlzIHRvbyBicm9hZCBmb3IgbXkgaW1tZWRpYXRlIG5lZWRzLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoaXMgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZnVuY3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIGl0J3MgZXhwb3J0ZWQgb3IganVzdCBkZWNsYXJlZCBub24tc3RhdGljLiBMb29raW5nIGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLiBHb29kLiBMZXQncyBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBhbnl0aGluZyB3aXRoIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIC0geWVwLCBzdGlsbCBzdGF0aWMuIEFuZCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFzIHdlbGwsIHN0aWxsIHN0YXRpYy5cblxuT2theSwgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjay4gSXMgdGhlcmUgYW55dGhpbmcgKmVsc2UqIHRoYXQgaXMgbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltZSBjYW5kaWRhdGUgaGVyZS4gSXQgYXBwZWFycyB0byBiZSBteSBtb3N0IHByb21pc2luZyBvcHRpb24uIEFsc28sIGBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgY2FsbCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBidXQgdGhlIHN0YXRpYyBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgYHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nYCBpcyBpbnZvbHZlZC5cblxuTGV0J3MgcXVpY2tseSByZS1leGFtaW5lIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2Agb25lIG1vcmUgdGltZS4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDo0NS41OTkyMDM2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM4NDQxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTYyPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY5OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzAtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA5Mj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzU6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjI3PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXFx0XFx0ZGF0YS1cXHUwMDNlZW50cnkgPSBcXHUwMDI2bW5vZGUtXFx1MDAzZWVudHJ5O1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDo0NS42OTMwNTQxMThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwMTk2NDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwgcGVyc3BlY3RpdmUsIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIGEgcXVpY2sgbWVudGFsIGNoZWNrLiBJIHNlZSB0aGF0IGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIGJlaW5nIGNhbGxlZCAqd2l0aGluKiB0aGUgY29udGV4dCBvZiBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0J3Mgc2lnbmlmaWNhbnQuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9uIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbGlua2luZyBwcm9jZXNzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVncml0eSBjaGVjayBvciBzZWN1cml0eSBtZWFzdXJlIHJlbGF0ZWQgdG8gcHJvZ3JhbSByZXBsYWNlbWVudC4gYGJwZl9mcmVwbGFjZWAgYW5kIHRyYW1wb2xpbmVzIHRvZ2V0aGVyIGFyZSBjb21tb25seSB1c2VkIGluIGVCUEYgdG8gaG90LXN3YXAgcHJvZ3JhbXMgb3IgbW9kaWZ5IHRoZSBleGVjdXRpb24gcGF0aC4gU28sIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIG11c3QgYmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGludGVncml0eSBjaGVja3Mgb3IgdmFsaWRhdGlvbiBzdGVwcyB0aGF0IGZ1bmN0aW9uIGlzIHBlcmZvcm1pbmcgb24gdGhlIHRhcmdldCBwcm9ncmFtIGR1cmluZyBhIFwicmVwbGFjZVwiIG9wZXJhdGlvbi4gSXMgaXQgdmFsaWRhdGluZyBwcm9ncmFtIHNpemUsIGluc3RydWN0aW9uIHNldCBjb21wYXRpYmlsaXR5LCBwZXJtaXR0ZWQgc3lzY2FsbHMsIG9yIHBlcmhhcHMgZXZlbiBjaGVja2luZyBmb3IgbWFsaWNpb3VzIGNvZGUgaW5qZWN0aW9uIGF0dGVtcHRzPyBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyBzYWZlIGFuZCBjb250cm9sbGVkIHByb2dyYW0gdXBkYXRlcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU2MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQwOjUwLjU5NTAyMTkzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY1MDA3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MDgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODEwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MjE9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NDU6XFx0XFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVxcdTAwM2VsaW5rLVxcdTAwM2Vwcm9nKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6NTAuNjkxNTI3NTIyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTcxODI4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgTGlua2luZyBQcm9jZXNzKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBob3cgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBNeSBhaW0gaXMgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSB0YXJnZXQgcHJvZ3JhbSBjaGVjayBpbiB0aGlzIGNvbnRleHQuIEknbSB0aGlua2luZyBJJ2xsIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiB3aXRoaW4gYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoYXTigJlzIGdvaW5nIG9uIGF0IHRoZSBwcm9ncmFtJ3Mgc3RhZ2Ugd2hlbiBpdCBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgd2lsbCBoZWxwIGluIGZpZ3VyaW5nIG91dCB0aGUgdXNlIGNhc2VzIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgdGFyZ2V0IHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0J3MgYSBrZXkgcGFydCBvZiBlbnN1cmluZyB0aGUgdHJhbXBvbGluZSBtZWNoYW5pc20gYmVoYXZlcyBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6NTUuNDg4NzE0MDEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjE6XFx0c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuIDkyMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbiA5MjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcXG4gOTI0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcXG4gOTI1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRhdGEpXFxuIDkyNjpcXHR7XFxuIDkyNzpcXHRcXHRlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUga2luZDtcXG4gOTI4OlxcdFxcdGludCBlcnIgPSAwO1xcbiA5Mjk6XFx0XFx0aW50IGNudCA9IDAsIGk7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxuIDkzMjpcXHRcXHRpZiAodHItXFx1MDAzZWV4dGVuc2lvbl9wcm9nKVxcbiA5MzM6XFx0XFx0XFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXFxuIDkzNDpcXHRcXHRcXHQgKiBjYW5ub3Qgb3ZlcndyaXRlIGV4dGVuc2lvbiBwcm9nIGVpdGhlci5cXG4gOTM1OlxcdFxcdFxcdCAqL1xcbiA5MzY6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gOTM3OlxcdFxcbiA5Mzg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkrKylcXG4gOTM5OlxcdFxcdFxcdGNudCArPSB0ci1cXHUwMDNlcHJvZ3NfY250W2ldO1xcbiA5NDA6XFx0XFxuIDk0MTpcXHRcXHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xcbiA5NDI6XFx0XFx0XFx0LyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovXFxuIDk0MzpcXHRcXHRcXHRpZiAoY250KVxcbiA5NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gOTQ1OlxcdFxcdFxcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxuIDk0NjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA5NDc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gOTQ4OlxcdFxcdFxcdHRyLVxcdTAwM2VleHRlbnNpb25fcHJvZyA9IG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2c7XFxuIDk0OTpcXHRcXHRcXHRyZXR1cm4gYnBmX2FyY2hfdGV4dF9wb2tlKHRyLVxcdTAwM2VmdW5jLmFkZHIsIEJQRl9NT0RfTk9QLFxcbiA5NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBCUEZfTU9EX0pVTVAsIE5VTEwsXFxuIDk1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWJwZl9mdW5jKTtcXG4gOTUyOlxcdFxcdH1cXG4gOTUzOlxcdFxcdGVyciA9IGJwZl90cmFtcG9saW5lX2FkZF9wcm9nKHRyLCBub2RlLCBjbnQpO1xcbiA5NTQ6XFx0XFx0aWYgKGVycilcXG4gOTU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NjpcXHRcXHRlcnIgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIHRydWUgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sIG9wcywgZGF0YSk7XFxuIDk1NzpcXHRcXHRpZiAoZXJyKVxcbiA5NTg6XFx0XFx0XFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2codHIsIG5vZGUpO1xcbiA5NTk6XFx0XFx0cmV0dXJuIGVycjtcXG4gOTYwOlxcdH1cXG4gOTYxOlxcdFxcbiA5NjI6XFx0aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuIDk2MzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuIDk2NDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXFxuIDk2NTpcXHR7XFxuIDk2NjpcXHRcXHRpbnQgZXJyO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbiA5Njk6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbiA5NzA6XFx0XFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDo1NS40ODg4OTAzMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg3NzM5MzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZXNlIEJQRiB0cmFtcG9saW5lcyB3b3JrLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSdyZSByZXBsYWNpbmcgcHJvZ3JhbXMg4oCTIHRoYXQncyB3aGVuIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGdldHMgY2FsbGVkIHdpdGggYEJQRl9UUkFNUF9SRVBMQUNFYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgbWFwcyB0byB0aGUgYEJQRl9QUk9HX1RZUEVfRVhUYCB0eXBlLiBUaGUgXCJmcmVwbGFjZVwiIGlzIHRoZSBrZXkuIE15IGZvY3VzIHN5bWJvbCBoZXJlIGxvb2tzIHRvIGJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0J3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayB0aGUgY29yZSBsb2dpYy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMuIE9rYXksIEkgc2VlIGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAsIGJ1dCB0aGF0J3Mgc3RhdGljLiBJdCdzIGNhbGxlZCBmcm9tIGBsaW5rX2NyZWF0ZWAsIHdoaWNoIGlzIGFsc28gc3RhdGljLCBidXQgYGxpbmtfY3JlYXRlYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYHN5c19icGZgLiBTbywgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZG9lcyBpbmRlZWQgbG9vayBsaWtlIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHJlZnJlc2ggbXkgbWVtb3J5LCBsZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBXZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQlBGX0pJVGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGFuZCBhbHNvLCBvZiBjb3Vyc2UsIGBDT05GSUdfQ0dST1VQU2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIHRoZSByaWdodCBvbmUgZm9yIGNncm91cC1yZWxhdGVkIEJQRiBzdG9yYWdlLiBUaGF0J3MgYSBjcnVjaWFsIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI1MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjAxLjM2NjI4NzcyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNDM5MDI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfc3RvcmFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjAxLjQ3OTczMzg0OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDM5MjM1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDR1JPVVBfQlBGIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIHNvIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIHRoYXQgYENHUk9VUF9CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBvcHRpb24gd2lsbCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkuIEknbSB0aGlua2luZyBlaXRoZXIgYGluaXQvS2NvbmZpZ2Ag4oCTIGJlY2F1c2UgaXQgb2Z0ZW4gaG91c2VzIGNvcmUsIGZvdW5kYXRpb25hbCBvcHRpb25zLCBvciwgbW9yZSBsaWtlbHksIGlmIGl0J3MgcmVsYXRlZCB0byBlQlBGLCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gVGhlIGJwZiBzdWJzeXN0ZW0gaXMsIGJ5IGl0cyBuYXR1cmUsIGhlYXZpbHkgcmVsaWFudCBvbiBrY29uZmlnIG9wdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY2dyb3Vwcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBzdWItb3B0aW9ucyBkZWZpbmVkIHRoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg0NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjA1LjkxODk3MzgxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwMjYwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDQ9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1NC1cXG5pbml0L0tjb25maWc6MTM1NTpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzU2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MDUuOTkxMDA4NzA3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjI2ODY3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBCUEYgQ29uZmlndXJhdGlvbiBcdTAwMjYgSklUIFN0YXR1cyoqXG5cbk9rYXksIHNvIHRoZSBjb250ZXh0IGlzIGBDR1JPVVBfQlBGYC4gR290IGl0LiBUaGF0J3MgdGhlIGtleSBjb25maWcgb3B0aW9uIGZvciB0aGlzIHVzZSBjYXNlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBpcyBzZXQgY29ycmVjdGx5LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgYEJQRl9KSVRgLiBUaGlzIGlzIGNyaXRpY2FsLiBXaXRob3V0IEpJVCwgcGVyZm9ybWFuY2Ugd2lsbCBiZSBzZXZlcmVseSBoYW1wZXJlZCwgYW5kIHRoZSB3aG9sZSBkZXBsb3ltZW50IGlzIHByb2JhYmx5IG5vdCBnb2luZyB0byBiZSB3b3J0aCBpdC4gVGltZSB0byBydW4gYSBxdWljayBkaWFnbm9zdGljLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MDkuODEzNjk4NTg1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMzMTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9ND1jb25maWcgQlBGXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMTItIyBDbGFzc2ljIEJQRiBKSVQgKGNCUEYpXFxua2VybmVsL2JwZi9LY29uZmlnOjEzOmNvbmZpZyBIQVZFX0NCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTE0LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0xNi0jIEV4dGVuZGVkIEJQRiBKSVQgKGVCUEYpXFxua2VybmVsL2JwZi9LY29uZmlnOjE3OmNvbmZpZyBIQVZFX0VCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTE4LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0yMS0jIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0Llxcbmtlcm5lbC9icGYvS2NvbmZpZzoyMjpjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cXHRib29sXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy00NC1cXHRkZXBlbmRzIG9uIEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZzo0NTpcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00Ni1cXHRzZWxlY3QgRVhFQ01FTVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZzo3MDpcXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkyPWNvbmZpZyBCUEZfTFNNXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctOTYtXFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctOTgtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MTowOS44ODkwMzYzNjNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5ODY1MDM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQlBGIFZlcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBqdXN0IGdldCB0aGUgb2J2aW91cyBvdXQgb2YgdGhlIHdheSDigJMgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgIGFyZSB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIFdlJ3JlIGFzc3VtaW5nIHRob3NlIGFyZSBlbmFibGVkLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIE5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8sIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljLiBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLiBUaGlzIGlzIGNydWNpYWw7IGlmIGl0J3Mgbm90IGV4cG9ydGVkLCBteSBlbnRpcmUgbGluZSBvZiByZWFzb25pbmcgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIFRoYXQgZnVuY3Rpb24gaXMgYSBrZXkgYnVpbGRpbmcgYmxvY2sgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0J3MgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MToxNS43ODc2ODk5MTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NzM3Nzg3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjE1Ljg3NzQzNTgxOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAwMjk4OTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgTGlua2luZyBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0LiBJdCdzIG5vdCBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUsIHVubGlrZSB0aGUgb3RoZXIgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGFuZCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBJJ20gZ29pbmcgdG8gY2VudGVyIG15IGVmZm9ydHMgaGVyZS4gQWxzbywgdGhlcmUgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIHdoaWNoIGNvdWxkIHdhcnJhbnQgYSBsb29rIGxhdGVyIG9uLCBidXQgZm9yIG5vdywgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgaXMgdGhlIGZvY2FsIHBvaW50LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgIGVuYWJsZWQuIGBDT05GSUdfQ0dST1VQU2AgaXMgbmVlZGVkIGZvciBgQ09ORklHX0NHUk9VUF9CUEZgLCBhbmQgYENPTkZJR19CUEZgIGlzIG5lZWRlZCBmb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgaW4gcGxhY2UuXG5cblJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLCBpdCBsb29rcyBsaWtlIGEgY2hlY2sgaXMgYmVpbmcgYWRkZWQgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIGNncm91cCBzdG9yYWdlIHR5cGVzLCBjb21wYXJpbmcgYHZhbHVlX3NpemVgIG9mIG1hcHMgYmV0d2VlbiB0aGUgdGFyZ2V0IGFuZCBleHRlbnNpb24gcHJvZ3JhbXMuIElmIHRoZXJlJ3MgYSBtaXNtYXRjaCwgaXQgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0J3MgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgc2FmZXR5LCBhbmQgdGhlcmVmb3JlLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyB3b3J0aCBmdXp6aW5nLlxuXG5TbywgdG8gc3VtbWFyaXplOiBJJ20gZm9jdXNlZCBvbiB0aGUgc3ltYm9sIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBhbmQgSSd2ZSBub3RlZCB0aGF0IHdlIG5lZWQgdGhlc2UgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSdtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mzg0LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MToyNS44ODA0Mjc2MDlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc5Mjg5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkNHUk9VUF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBhdHRhY2hpbmcgYSBCUEYgZXh0ZW5zaW9uIHByb2dyYW0gKGZyZXBsYWNlKSB0byBhIHRhcmdldCBwcm9ncmFtIHdpdGggYSBtaXNtYXRjaGVkIGNncm91cCBzdG9yYWdlIHZhbHVlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGZgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MjUuOTk4MzYyOTI1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTExMzQ4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MjUuOTk4ODU0NDI1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY5MTA4NTEzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYuLjM3NDNmNmMyNWUyY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC04MDYsOSArODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZylcbitzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cdTAwM2VhdXg7XG4rXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2YXV4LVx1MDAzZWV4dF9tdXRleCk7XG4gXHRpZiAoYXV4LVx1MDAzZXByb2dfYXJyYXlfbWVtYmVyX2NudClcbkBAIC04MjEsNiArODIzLDIwIEBAIHN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRhdXgtXHUwMDNlaXNfZXh0ZW5kZWQgPSB0cnVlO1xuK1xuK1x0LyogQXQgcnVudGltZSB0aGUgZXh0ZW5zaW9uIHByb2dyYW0gaW5oZXJpdHMgdGhlIHRhcmdldCBwcm9ncmFtJ3NcbitcdCAqIGNncm91cCBzdG9yYWdlIGNvbnRleHQgKHZpYSBwcm9nX2l0ZW0tXHUwMDNlY2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGVcbitcdCAqIHZlcmlmaWVyIGJvdW5kcyBpdHMgYWNjZXNzZXMgYnkgaXRzIG93biBtYXAncyB2YWx1ZV9zaXplLiBBXG4rXHQgKiB2YWx1ZV9zaXplIG1pc21hdGNoIGxlYWRzIHRvIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqdGd0X21hcCA9IHRndF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcbitcdFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG4rXG4rXHRcdGlmIChwcm9nX21hcCBcdTAwMjZcdTAwMjYgKCF0Z3RfbWFwIHx8IHByb2dfbWFwLVx1MDAzZXZhbHVlX3NpemUgIT0gdGd0X21hcC1cdTAwM2V2YWx1ZV9zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05MjYsNyArOTQyLDcgQEAgc3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4gXHRcdC8qIENhbm5vdCBhdHRhY2ggZXh0ZW5zaW9uIGlmIGZlbnRyeS9mZXhpdCBhcmUgaW4gdXNlLiAqL1xuIFx0XHRpZiAoY250KVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4tXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZyk7XG4rXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MToyNS45OTg4NTUzMTVaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkxMDgxODUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2Agd2l0aGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGZvY3VzZWQgb24gYSBjcml0aWNhbCB2YWxpZGF0aW9uIGFyb3VuZCBgY2dyb3VwX3N0b3JhZ2VgIG1hcCBpbnRlcmFjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4dGVuc2lvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIGVuc3VyaW5nIHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSAqbWF0Y2hlcyogdGhlIHRhcmdldCBwcm9ncmFtJ3MgY29ycmVzcG9uZGluZyBtYXAgc2l6ZS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBmbGFncyBhIFwidmFsdWVfc2l6ZSBtaXNtYXRjaCBsZWFkcyB0byBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzXCIg4oCTIHdoaWNoIGluc3RhbnRseSByYWlzZXMgdGhlIHJlZCBmbGFnIG9mIGEgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLiBJdCBzZWVtcyBjbGVhciB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSAqa25vd24qIG91dC1vZi1ib3VuZHMgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuXG5cblNpbmNlIHRoZSBzdGF0ZWQgdnVsbmVyYWJpbGl0eSBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggYXJlIHdlbGwtYWRkcmVzc2VkIGJ5IEtBU0FOLCB0aGlzIGlzIGEgY2xlYXIgY2FzZS4gVGhlIGFuYWx5c2lzIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgbWVyZWx5ICp2YWxpZGF0ZXMqIHRoaXMgYHZhbHVlX3NpemVgIHJlbGF0aW9uc2hpcC4gSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIHBhc3NpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgb3IgZXhwb3NpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHN0cmljdGx5IGEgKmNoZWNrKiB0byBwcmV2ZW50IHRoZSBPT0IuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIGJsb2NrIHRvIG1ha2Ugc3VyZTpcbmBgYGNcblx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShpKSB7XG5cdFx0c3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG5cdFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG5cblx0XHRpZiAocHJvZ19tYXAgXHUwMDI2XHUwMDI2ICghdGd0X21hcCB8fCBwcm9nX21hcC1cdTAwM2V2YWx1ZV9zaXplICE9IHRndF9tYXAtXHUwMDNldmFsdWVfc2l6ZSkpXG5cdFx0XHRyZXR1cm4gLUVJTlZBTDtcblx0fVxuYGBgXG5ZZWFoLCBleGFjdGx5IGFzIEkgdGhvdWdodC4gUHVyZSB2YWxpZGF0aW9uLiBObyBuZXcgbWVtb3J5IGV4cG9zdXJlIGlzIGludm9sdmVkLiBTbywgZm9yIHRoZSByZWNvcmQsIEknbGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgKEtBU0FOKSBmb3IgdGhlIGpvYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MCwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MTozMi45MDk2Nzg2NjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 13:14:51 +0000 UTC FinishedAt: 2026-08-14 13:41:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "CGROUP_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "CGROUP_BPF" ], "series_id": "a7684560-2d10-403b-8bb7-744f666fbd98" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_link_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBhdHRhY2hpbmcgYSBCUEYgZXh0ZW5zaW9uIHByb2dyYW0gKGZyZXBsYWNlKSB0byBhIHRhcmdldCBwcm9ncmFtIHdpdGggYSBtaXNtYXRjaGVkIGNncm91cCBzdG9yYWdlIHZhbHVlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGZgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5pbmRleCAxYTcyMWZjNGJlZjU2Li4zNzQzZjZjMjVlMmNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG5AQCAtODA2LDkgJiM0Mzs4MDYsMTEgQEAgc3RhdGljIGVudW0gYnBmX3RyYW1wX3Byb2dfdHlwZSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKVxuJiM0MztzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gdGd0X3Byb2ctXHUwMDNlYXV4O1xuJiM0MztcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgaTtcbiBcbiBcdGd1YXJkKG11dGV4KShcdTAwMjZhdXgtXHUwMDNlZXh0X211dGV4KTtcbiBcdGlmIChhdXgtXHUwMDNlcHJvZ19hcnJheV9tZW1iZXJfY250KVxuQEAgLTgyMSw2ICYjNDM7ODIzLDIwIEBAIHN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRhdXgtXHUwMDNlaXNfZXh0ZW5kZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHQvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0mIzM5O3NcbiYjNDM7XHQgKiBjZ3JvdXAgc3RvcmFnZSBjb250ZXh0ICh2aWEgcHJvZ19pdGVtLVx1MDAzZWNncm91cF9zdG9yYWdlKSwgd2hpbGUgdGhlXG4mIzQzO1x0ICogdmVyaWZpZXIgYm91bmRzIGl0cyBhY2Nlc3NlcyBieSBpdHMgb3duIG1hcCYjMzk7cyB2YWx1ZV9zaXplLiBBXG4mIzQzO1x0ICogdmFsdWVfc2l6ZSBtaXNtYXRjaCBsZWFkcyB0byBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xuJiM0MztcdFx0c3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG4mIzQzO1x0XHRzdHJ1Y3QgYnBmX21hcCAqcHJvZ19tYXAgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJvZ19tYXAgXHUwMDI2XHUwMDI2ICghdGd0X21hcCB8fCBwcm9nX21hcC1cdTAwM2V2YWx1ZV9zaXplICE9IHRndF9tYXAtXHUwMDNldmFsdWVfc2l6ZSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtOTI2LDcgJiM0Mzs5NDIsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbiBcdFx0LyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovXG4gXHRcdGlmIChjbnQpXG4gXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi1cdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nKTtcbiYjNDM7XHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBhdHRhY2hpbmcgYSBCUEYgZXh0ZW5zaW9uIHByb2dyYW0gKGZyZXBsYWNlKSB0byBhIHRhcmdldCBwcm9ncmFtIHdpdGggYSBtaXNtYXRjaGVkIGNncm91cCBzdG9yYWdlIHZhbHVlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGZgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggMWE3MjFmYzRiZWY1Ni4uMzc0M2Y2YzI1ZTJjZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTgwNiw5ICYjNDM7ODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpCiYjNDM7c3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy0mZ3Q7YXV4OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7CiAKIAlndWFyZChtdXRleCkoJmFtcDthdXgtJmd0O2V4dF9tdXRleCk7CiAJaWYgKGF1eC0mZ3Q7cHJvZ19hcnJheV9tZW1iZXJfY250KQpAQCAtODIxLDYgJiM0Mzs4MjMsMjAgQEAgc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWF1eC0mZ3Q7aXNfZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0mIzM5O3MKJiM0MzsJICogY2dyb3VwIHN0b3JhZ2UgY29udGV4dCAodmlhIHByb2dfaXRlbS0mZ3Q7Y2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGUKJiM0MzsJICogdmVyaWZpZXIgYm91bmRzIGl0cyBhY2Nlc3NlcyBieSBpdHMgb3duIG1hcCYjMzk7cyB2YWx1ZV9zaXplLiBBCiYjNDM7CSAqIHZhbHVlX3NpemUgbWlzbWF0Y2ggbGVhZHMgdG8gc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkgewomIzQzOwkJc3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtpXTsKJiM0MzsJCXN0cnVjdCBicGZfbWFwICpwcm9nX21hcCA9IHByb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2VbaV07CiYjNDM7CiYjNDM7CQlpZiAocHJvZ19tYXAgJmFtcDsmYW1wOyAoIXRndF9tYXAgfHwgcHJvZ19tYXAtJmd0O3ZhbHVlX3NpemUgIT0gdGd0X21hcC0mZ3Q7dmFsdWVfc2l6ZSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTI2LDcgJiM0Mzs5NDIsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwKIAkJLyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovCiAJCWlmIChjbnQpCiAJCQlyZXR1cm4gLUVCVVNZOwotCQllcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2cpOwomIzQzOwkJZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLSZndDtsaW5rLSZndDtwcm9nKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJCXRyLSZndDtleHRlbnNpb25fcHJvZyA9IG5vZGUtJmd0O2xpbmstJmd0O3Byb2c7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBtb2RpZmllZCB0aGUgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZnVuY3Rpb24sIGFuZCB0aGUgbW9zdCBub3RhYmxlIGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYHN0cnVjdCBicGZfcHJvZyAqcHJvZ2AgYXMgYW4gYXJndW1lbnQuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIGZyZXBsYWNlIChleHRlbnNpb24pIHByb2dyYW1zIGFuZCBCUEYgdHJhbXBvbGluZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgdmFsaWRhdGluZyB0aGUgY2dyb3VwIHN0b3JhZ2UgdmFsdWUgc2l6ZS4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIHN0ZXAsIHJldHVybmluZyBgLUVJTlZBTGAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaC4gVGhpcyBpcyBnb29kIHRvIHNlZSBhcyBtaXNtYXRjaGVkIHN0b3JhZ2Ugc2l6ZXMgd291bGQgY2F1c2Ugc2VyaW91cyBpc3N1ZXMuCgpOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGtub2JzIHRoYXQgYXJlIHRpZWQgdG8gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzIHRoZW1zZWx2ZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvbmZpZ3VyYWJsZSBiZWhhdmlvciByZWxhdGVkIHRvIEJQRiB0cmFtcG9saW5lcyBhbmQgY2dyb3VwIHN0b3JhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtlcm5lbCBCUEYgVHJhbXBvbGluZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGVuYWJsaW5nIGFuZCBzaGFwaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20gd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbXBsaWNhdGlvbnMgaGVyZTogaG93IHRoZXNlIG9wdGlvbnMgaW1wYWN0IG1lbW9yeSBhbGxvY2F0aW9uLCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydCwgc2VjdXJpdHkgYm91bmRhcmllcywgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBvcHRpb25zIHRoYXQgZGlyZWN0bHkgY29udHJvbCB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiB0aGUgdHJhbXBvbGluZSBpdHNlbGYg4oCTIHRoZSAmIzM0O29uL29mZiYjMzQ7IHN3aXRjaGVzLCBzbyB0byBzcGVhay4gVGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIG9wdGlvbnMgd2hpY2ggaW5mbHVlbmNlIHdoaWNoIGluc3RydWN0aW9uIHNldHMgYXJlIHN1cHBvcnRlZCwgYW5kIHdoYXQgbGV2ZWxzIG9mIEJQRiB2ZXJpZmllciByaWdvciBhcmUgYXBwbGllZC4gQW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcHJvdGVjdGlvbiBjb21lcyB0byBtaW5kIGltbWVkaWF0ZWx5LiBJIGFsc28gd2FudCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgLSBhcmUgdGhlcmUgb3B0aW9ucyB0aGF0IGNhbiB0cmFkZSBvZmYgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5PyBBcmUgdGhlcmUgb3B0aW9ucyBoZXJlIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgYnVpbGQgZmxhZ3M/CgpCZXlvbmQgdGhlIGJhc2ljIGVuYWJsZW1lbnQsIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGFueSBvcHRpb25zIHRoYXQgZ292ZXJuIGZlYXR1cmVzIGxpa2UgaW5kaXJlY3QganVtcHMsIGZ1bmN0aW9uIGNhbGxzLCBvciB0cmFtcG9saW5lIGNoYWluaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZSB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgb3B0aW9ucywgdG9vLiBPZnRlbiwgdGhlcmUgYXJlIHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgc3VyZmFjZS4gSW4gc2hvcnQsIEkmIzM5O20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgZnJvbSB0aGUgbW9zdCBmdW5kYW1lbnRhbCBlbmFibGUvZGlzYWJsZSBvcHRpb25zIHRvIHRoZSBmaW5lLWdyYWluZWQgY29udHJvbHMgdGhhdCBkZXRlcm1pbmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBCUEYgdHJhbXBvbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFtcG9saW5lLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZGlzYXNtLm8gbXByb2cub1xua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipNeSBCUEYgQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19CUEZfSklUYCBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIGFueSBzZXJpb3VzIEJQRiBkZXBsb3ltZW50LiBJIG1lYW4sIHdpdGhvdXQgdGhlIEpJVCwgcGVyZm9ybWFuY2UgaXMgZ29pbmcgdG8gYmUgc2V2ZXJlbHkgbGltaXRlZCwgYW5kIHRoYXQmIzM5O3MganVzdCBhIG5vbi1zdGFydGVyIGZvciBtb3N0IHJlYWwtd29ybGQgdXNlIGNhc2VzLiBTbywgYENPTkZJR19CUEZfSklUYCBpcyBkZWZpbml0ZWx5IGEgbXVzdC1oYXZlLgoKVGhlbiwgdGhlcmUmIzM5O3MgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJJiMzOTtkIGJlIHN1cnByaXNlZCBpZiB3ZSBjb3VsZCBnZXQgYXdheSAqd2l0aG91dCogdGhhdCBvbmUgZWl0aGVyLiBJdCYjMzk7cyB0aGUgd2hvbGUgZW50cnkgcG9pbnQsIGFmdGVyIGFsbC4gR290dGEgaGF2ZSB0aGF0IHN5c2NhbGwgaW50ZXJmYWNlIGVuYWJsZWQuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBjZ3JvdXAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgdGhhdCBzdG9yYWdlIGlzIGNvbmZpZ3VyZWQuIElzIGNncm91cCBzdXBwb3J0IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGlzIHBhcnRpY3VsYXIgYnVpbGQsIG9yIGlzIGl0IGhpZGRlbiBiZWhpbmQgYW5vdGhlciBjb25maWcgb3B0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgb3IgaWYgaXQmIzM5O3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtaXguIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCB0byBlbnN1cmUgc21vb3RoIG9wZXJhdGlvbiwgSSBkb24mIzM5O3Qgd2FudCB0byBnZXQgY2F1Z2h0IHdpdGhvdXQgdGhlIHJlcXVpcmVkIGluZnJhc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkJQRiBMb2NhbCBTdG9yYWdlIEludmVzdGlnYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgQlBGIGxvY2FsIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgbmFtZWQgbGlrZSB0aGF0LCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gbG9jYWwgc3RvcmFnZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoaW5ncyB1bmRlciB0aGUgaG9vZC4gSSBzdXNwZWN0IHRoYXQgdGhpcyBmaWxlIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcmVsYXRlZCBjb2RlIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTQyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0xMj1ERUZJTkVfQlBGX1NUT1JBR0VfQ0FDSEUoY2dyb3VwX2NhY2hlKTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTEzLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTQ6c3RhdGljIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZSBfX3JjdSAqKmNncm91cF9zdG9yYWdlX3B0cih2b2lkICpvd25lcilcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE1LXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0zNT1zdGF0aWMgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2RhdGEgKlxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MzY6Y2dyb3VwX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM3LXtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjM4Olx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlICpjZ3JvdXBfc3RvcmFnZTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM5LVx0c3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX21hcCAqc21hcDtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQwLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6NDE6XHRjZ3JvdXBfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhjZ3JvdXAtXHUwMDNlYnBmX2NncnBfc3RvcmFnZSxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQyLVx0XHRcdFx0XHQgICAgICAgYnBmX3JjdV9sb2NrX2hlbGQoKSk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo0MzpcdGlmICghY2dyb3VwX3N0b3JhZ2UpXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy00NC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNDYtXHRzbWFwID0gKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKiltYXA7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo0NzpcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9sb29rdXAoY2dyb3VwX3N0b3JhZ2UsIHNtYXAsIGNhY2hlaXRfbG9ja2l0KTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQ4LX1cbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz01MD1zdGF0aWMgdm9pZCAqYnBmX2NncnBfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNjAtXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo2MTpcdHNkYXRhID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwKGNncm91cCwgbWFwLCB0cnVlKTtcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTYyLVx0Y2dyb3VwX3B1dChjZ3JvdXApO1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTY2PXN0YXRpYyBsb25nIGJwZl9jZ3JwX3N0b3JhZ2VfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTgzLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6ODQ6c3RhdGljIGludCBjZ3JvdXBfc3RvcmFnZV9kZWxldGUoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODUte1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTg3LVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6ODg6XHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgZmFsc2UpO1xua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODktXHRpZiAoIXNkYXRhKVxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTk1PXN0YXRpYyBsb25nIGJwZl9jZ3JwX3N0b3JhZ2VfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTEwNC1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjEwNTpcdGVyciA9IGNncm91cF9zdG9yYWdlX2RlbGV0ZShjZ3JvdXAsIG1hcCk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMDYtXHRjZ3JvdXBfcHV0KGNncm91cCk7XG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MTEwPXN0YXRpYyBpbnQgbm90c3VwcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTQtXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzoxMTU6c3RhdGljIHN0cnVjdCBicGZfbWFwICpjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTYte1xuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTExOS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjEyMDpzdGF0aWMgdm9pZCBjZ3JvdXBfc3RvcmFnZV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTIxLXtcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz0xMjU9QlBGX0NBTExfNChicGZfY2dycF9zdG9yYWdlX2dldCwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3QgY2dyb3VwICosIGNncm91cCxcbi0tXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMzYtXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzoxMzc6XHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMzgtXHRpZiAoc2RhdGEpXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MTUxPUJQRl9DQUxMXzIoYnBmX2NncnBfc3RvcmFnZV9kZWxldGUsIHN0cnVjdCBicGZfbWFwICosIG1hcCwgc3RydWN0IGNncm91cCAqLCBjZ3JvdXApXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTU2LVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTU3Olx0cmV0dXJuIGNncm91cF9zdG9yYWdlX2RlbGV0ZShjZ3JvdXAsIG1hcCk7XG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNTgtfVxuLS1cbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTE2MD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgY2dycF9zdG9yYWdlX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTYyLVx0Lm1hcF9hbGxvY19jaGVjayA9IGJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE2MzpcdC5tYXBfYWxsb2MgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzoxNjQ6XHQubWFwX2ZyZWUgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfZnJlZSxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE2NS1cdC5tYXBfZ2V0X25leHRfa2V5ID0gbm90c3VwcF9nZXRfbmV4dF9rZXksXG4tLVxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTcxLVx0Lm1hcF9idGZfaWQgPSBcdTAwMjZicGZfbG9jYWxfc3RvcmFnZV9tYXBfYnRmX2lkWzBdLFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTcyOlx0Lm1hcF9vd25lcl9zdG9yYWdlX3B0ciA9IGNncm91cF9zdG9yYWdlX3B0cixcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE3My19O1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MjQyPXN0YXRpYyB2b2lkIGNncm91cF9icGZfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwICpjZ3JwKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjQ3LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNDg6c3RhdGljIHZvaWQgYnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VzW10pXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0OS17XG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1MDpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1MS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjUyOlx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjUzOlx0XHRicGZfY2dyb3VwX3N0b3JhZ2VfZnJlZShzdG9yYWdlc1tzdHlwZV0pO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQtfVxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTUtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1NjpzdGF0aWMgaW50IGJwZl9jZ3JvdXBfc3RvcmFnZXNfYWxsb2Moc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZXNbXSxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU3Olx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpuZXdfc3RvcmFnZXNbXSxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU4LVx0XHRcdFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjYxLXtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjYyOlx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjYzOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkga2V5O1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNjQtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY4LVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjk6XHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3MDpcdFx0bWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzEtXHRcdGlmICghbWFwKVxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtMjczLVxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzQ6XHRcdHN0b3JhZ2VzW3N0eXBlXSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cCgodm9pZCAqKW1hcCwgXHUwMDI2a2V5LCBmYWxzZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NS1cdFx0aWYgKHN0b3JhZ2VzW3N0eXBlXSlcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjc4Olx0XHRzdG9yYWdlc1tzdHlwZV0gPSBicGZfY2dyb3VwX3N0b3JhZ2VfYWxsb2MocHJvZywgc3R5cGUpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzktXHRcdGlmIChJU19FUlIoc3RvcmFnZXNbc3R5cGVdKSkge1xua2VybmVsL2JwZi9jZ3JvdXAuYzoyODA6XHRcdFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlcyk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI4MS1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI4OS1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MjkwOnN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKmRzdFtdLFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyOTE6XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3JjW10pXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5Mi17XG5rZXJuZWwvYnBmL2Nncm91cC5jOjI5MzpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5NC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjk1Olx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSlcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjk2LVx0XHRkc3Rbc3R5cGVdID0gc3JjW3N0eXBlXTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5OC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6Mjk5OnN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfc3RvcmFnZXNfbGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlc1tdLFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDAtXHRcdFx0XHQgICAgIHN0cnVjdCBjZ3JvdXAgKmNncnAsXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDIte1xua2VybmVsL2JwZi9jZ3JvdXAuYzozMDM6XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDQtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjMwNTpcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoc3R5cGUpXG5rZXJuZWwvYnBmL2Nncm91cC5jOjMwNjpcdFx0YnBmX2Nncm91cF9zdG9yYWdlX2xpbmsoc3RvcmFnZXNbc3R5cGVdLCBjZ3JwLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTMwNy19XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz0zMjU9c3RhdGljIHZvaWQgY2dyb3VwX2JwZl9yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTMzMC1cdHN0cnVjdCBsaXN0X2hlYWQgKnN0b3JhZ2VzID0gXHUwMDI2Y2dycC1cdTAwM2VicGYuc3RvcmFnZXM7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjMzMTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0zMzItXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0zNjMtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RvcmFnZSwgc3RtcCwgc3RvcmFnZXMsIGxpc3RfY2cpIHtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MzY0Olx0XHRicGZfY2dyb3VwX3N0b3JhZ2VfdW5saW5rKHN0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYzozNjU6XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZV9mcmVlKHN0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0zNjYtXHR9XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYz00NTM9c3RhdGljIGludCBjb21wdXRlX2VmZmVjdGl2ZV9wcm9ncyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmMtNDk1LVx0XHRcdGl0ZW0tXHUwMDNlcHJvZyA9IHByb2dfbGlzdF9wcm9nKHBsKTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDk2Olx0XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKGl0ZW0tXHUwMDNlY2dyb3VwX3N0b3JhZ2UsXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQ5Ny1cdFx0XHRcdFx0XHQgICBwbC1cdTAwM2VzdG9yYWdlKTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTgwNj1zdGF0aWMgaW50IF9fY2dyb3VwX2JwZl9hdHRhY2goc3RydWN0IGNncm91cCAqY2dycCxcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTgxMy1cdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMO1xua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTQ6XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlW01BWF9CUEZfQ0dST1VQX1NUT1JBR0VfVFlQRV0gPSB7fTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODE1Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xua2VybmVsL2JwZi9jZ3JvdXAuYy04MTYtXHRzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nID0gcHJvZyA/IDogbGluay1cdTAwM2VsaW5rLnByb2c7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04NjEtXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg2MjpcdGlmIChicGZfY2dyb3VwX3N0b3JhZ2VzX2FsbG9jKHN0b3JhZ2UsIG5ld19zdG9yYWdlLCB0eXBlLFxua2VybmVsL2JwZi9jZ3JvdXAuYy04NjMtXHRcdFx0XHQgICAgICBwcm9nID8gOiBsaW5rLVx1MDAzZWxpbmsucHJvZywgY2dycCkpXG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy04NzAtXHRcdGlmICghcGwpIHtcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODcxOlx0XHRcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3Mi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3Ny1cdFx0XHRrZnJlZShwbCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjg3ODpcdFx0XHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy04NzktXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg4NS1cdHBsLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjg4NjpcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHBsLVx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xua2VybmVsL2JwZi9jZ3JvdXAuYy04ODctXHRjZ3JwLVx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTkwNi1cdH1cbmtlcm5lbC9icGYvY2dyb3VwLmM6OTA3Olx0YnBmX2Nncm91cF9zdG9yYWdlc19saW5rKG5ld19zdG9yYWdlLCBjZ3JwLCB0eXBlKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTA4LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy05MTgtXHR9XG5rZXJuZWwvYnBmL2Nncm91cC5jOjkxOTpcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2Nncm91cC5jLTkyMC1cdGlmICghb2xkX3Byb2cpIHtcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jPTE3OTA9QlBGX0NBTExfMihicGZfZ2V0X2xvY2FsX3N0b3JhZ2UsIHN0cnVjdCBicGZfbWFwICosIG1hcCwgdTY0LCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3OTUtXHQgKi9cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc5NjpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGUgPSBjZ3JvdXBfc3RvcmFnZV90eXBlKG1hcCk7XG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3OTc6XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk4LVx0c3RydWN0IGJwZl9jZ19ydW5fY3R4ICpjdHg7XG4tLVxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODAyLVx0Y3R4ID0gY29udGFpbmVyX29mKGN1cnJlbnQtXHUwMDNlYnBmX2N0eCwgc3RydWN0IGJwZl9jZ19ydW5fY3R4LCBydW5fY3R4KTtcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgwMzpcdHN0b3JhZ2UgPSBjdHgtXHUwMDNlcHJvZ19pdGVtLVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTgwNC1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDk1PXN0YXRpYyBib29sIF9fYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNDk5LVx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZnAtXHUwMDNlYXV4O1xua2VybmVsL2JwZi9jb3JlLmM6MjUwMDpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgaTtcbmtlcm5lbC9icGYvY29yZS5jLTI1MDEtXHRib29sIHJldCA9IGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI1MTgtXHRcdG1hcC1cdTAwM2Vvd25lci1cdTAwM2VhdHRhY2hfZnVuY19wcm90byA9IGF1eC1cdTAwM2VhdHRhY2hfZnVuY19wcm90bztcbmtlcm5lbC9icGYvY29yZS5jOjI1MTk6XHRcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xua2VybmVsL2JwZi9jb3JlLmMtMjUyMC1cdFx0XHRtYXAtXHUwMDNlb3duZXItXHUwMDNlc3RvcmFnZV9jb29raWVbaV0gPVxua2VybmVsL2JwZi9jb3JlLmM6MjUyMTpcdFx0XHRcdGF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXSA/XG5rZXJuZWwvYnBmL2NvcmUuYzoyNTIyOlx0XHRcdFx0YXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW2ldLVx1MDAzZWNvb2tpZSA6IDA7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNTIzLVx0XHR9XG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjUzMy1cdFx0XHRyZXQgPSBmYWxzZTtcbmtlcm5lbC9icGYvY29yZS5jOjI1MzQ6XHRcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xua2VybmVsL2JwZi9jb3JlLmMtMjUzNS1cdFx0XHRpZiAoIXJldClcbmtlcm5lbC9icGYvY29yZS5jLTI1MzYtXHRcdFx0XHRicmVhaztcbmtlcm5lbC9icGYvY29yZS5jOjI1Mzc6XHRcdFx0Y29va2llID0gYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW2ldID9cbmtlcm5lbC9icGYvY29yZS5jOjI1Mzg6XHRcdFx0XHQgYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW2ldLVx1MDAzZWNvb2tpZSA6IDA7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNTM5LVx0XHRcdHJldCA9IG1hcC1cdTAwM2Vvd25lci1cdTAwM2VzdG9yYWdlX2Nvb2tpZVtpXSA9PSBjb29raWUgfHxcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMC1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxOnN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIyLVx0c3RydWN0IGJwZl9tYXAgbWFwO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mjk6c3RhdGljIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXBfdG9fc3RvcmFnZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzAte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzE6XHRyZXR1cm4gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAsIG1hcCk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMi19XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM9MzQ9c3RhdGljIGJvb2wgYXR0YWNoX3R5cGVfaXNvbGF0ZWQoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM2Olx0cmV0dXJuIG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzctfVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzgtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozOTpzdGF0aWMgaW50IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXlfY21wKGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MC1cdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKl9rZXkxLCBjb25zdCB2b2lkICpfa2V5Milcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00Mi1cdGlmIChhdHRhY2hfdHlwZV9pc29sYXRlZChcdTAwMjZtYXAtXHUwMDNlbWFwKSkge1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDM6XHRcdGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5ICprZXkxID0gX2tleTE7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NDpcdFx0Y29uc3Qgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgKmtleTIgPSBfa2V5Mjtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1LVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTY1LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NjY6c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo2NzpjZ3JvdXBfc3RvcmFnZV9sb29rdXAoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTY4LVx0XHQgICAgICB2b2lkICprZXksIGJvb2wgbG9ja2VkKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTc3LVx0d2hpbGUgKG5vZGUpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjc4Olx0XHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNzktXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo4MDpcdFx0c3RvcmFnZSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCBub2RlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6ODI6XHRcdHN3aXRjaCAoYnBmX2Nncm91cF9zdG9yYWdlX2tleV9jbXAobWFwLCBrZXksIFx1MDAyNnN0b3JhZ2UtXHUwMDNla2V5KSkge1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtODMtXHRcdGNhc2UgLTE6XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTAxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTAyOnN0YXRpYyBpbnQgY2dyb3VwX3N0b3JhZ2VfaW5zZXJ0KHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMDM6XHRcdFx0XHQgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEwNC17XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTA4LVx0d2hpbGUgKCpuZXcpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEwOTpcdFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqdGhpcztcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMC1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjExMTpcdFx0dGhpcyA9IGNvbnRhaW5lcl9vZigqbmV3LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCBub2RlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMy1cdFx0cGFyZW50ID0gKm5ldztcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjExNDpcdFx0c3dpdGNoIChicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5X2NtcChtYXAsIFx1MDAyNnN0b3JhZ2UtXHUwMDNla2V5LCBcdTAwMjZ0aGlzLVx1MDAzZWtleSkpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExNS1cdFx0Y2FzZSAtMTpcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzEtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMzI6c3RhdGljIHZvaWQgKmNncm91cF9zdG9yYWdlX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICpfbWFwLCB2b2lkICprZXkpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzMte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM0Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM1Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEzNi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEzNzpcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEzOC1cdGlmICghc3RvcmFnZSlcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xNDMtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxNDQ6c3RhdGljIGxvbmcgY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQ1LVx0XHRcdFx0ICAgICAgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xNDYte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTQ3Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE0OC1cdHN0cnVjdCBicGZfc3RvcmFnZV9idWZmZXIgKm5ldztcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xNTYtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxNTc6XHRzdG9yYWdlID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwKChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqKW1hcCxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE1OC1cdFx0XHRcdFx0a2V5LCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTgyOmludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX2NvcHkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE4My1cdFx0XHRcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTg0LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4NTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4NjpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xODctXHRpbnQgY3B1LCBvZmYgPSAwO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE5MC1cdHJjdV9yZWFkX2xvY2soKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE5MTpcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE5Mi1cdGlmICghc3RvcmFnZSkge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxNjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNy1cdFx0XHRcdCAgICAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMTgte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjE5Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjIwOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIyMS1cdHZvaWQgKnZhbDtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMjgtXHRyY3VfcmVhZF9sb2NrKCk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyMjk6XHRzdG9yYWdlID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwKG1hcCwga2V5LCBmYWxzZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMzAtXHRpZiAoIXN0b3JhZ2UpIHtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTUtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNTY6c3RhdGljIGludCBjZ3JvdXBfc3RvcmFnZV9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI1Ny1cdFx0XHRcdCAgICAgICB2b2lkICpfbmV4dF9rZXkpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTgte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjU5Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjYwOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI2MS1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNjctXHRpZiAoa2V5KSB7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNjg6XHRcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIHRydWUpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjY5LVx0XHRpZiAoIXN0b3JhZ2UpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjc2LVx0XHRzdG9yYWdlID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZtYXAtXHUwMDNlbGlzdCxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI3NzpcdFx0XHRcdFx0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UsIGxpc3RfbWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI3OC1cdH1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yODItXHRpZiAoYXR0YWNoX3R5cGVfaXNvbGF0ZWQoXHUwMDI2bWFwLVx1MDAzZW1hcCkpIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI4MzpcdFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgKm5leHQgPSBfbmV4dF9rZXk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yODQtXHRcdCpuZXh0ID0gc3RvcmFnZS1cdTAwM2VrZXk7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk1LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mjk2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk3LXtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yOTktXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMwMDpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMDEtXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzA4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzA5Olx0aWYgKGF0dHItXHUwMDNla2V5X3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMxMC1cdCAgICBhdHRyLVx1MDAzZWtleV9zaXplICE9IHNpemVvZihfX3U2NCkpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzI2LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI3Olx0bWFwID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjgtXHRpZiAoIW1hcClcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNDAtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNDE6c3RhdGljIHZvaWQgY2dyb3VwX3N0b3JhZ2VfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKl9tYXApXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNDIte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzQzOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzQ0LVx0c3RydWN0IGxpc3RfaGVhZCAqc3RvcmFnZXMgPSBcdTAwMjZtYXAtXHUwMDNlbGlzdDtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM0NTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzQ2LVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0OS1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdG9yYWdlLCBzdG1wLCBzdG9yYWdlcywgbGlzdF9tYXApIHtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM1MDpcdFx0YnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdG9yYWdlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM1MTpcdFx0YnBmX2Nncm91cF9zdG9yYWdlX2ZyZWUoc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNTItXHR9XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzYxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzYyOnN0YXRpYyBsb25nIGNncm91cF9zdG9yYWdlX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM2My17XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzY2LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzY3OnN0YXRpYyBpbnQgY2dyb3VwX3N0b3JhZ2VfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNjgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM3NS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM3NjpcdFx0LyogS2V5IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5IHR5cGUsXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzctXHRcdCAqIHdoaWNoIGlzOlxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mzc4Olx0XHQgKiBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSB7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzktXHRcdCAqXHRfX3U2NFx0Y2dyb3VwX2lub2RlX2lkO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM5NC1cdFx0bSA9IChzdHJ1Y3QgYnRmX21lbWJlciAqKShrZXlfdHlwZSAmIzQzOyAxKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM5NTpcdFx0c2l6ZSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSwgY2dyb3VwX2lub2RlX2lkKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM5Ni1cdFx0aWYgKCFidGZfbWVtYmVyX2lzX3JlZ19pbnQoYnRmLCBrZXlfdHlwZSwgbSwgMCwgc2l6ZSkpXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDAyLVx0XHRtJiM0MzsmIzQzOztcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQwMzpcdFx0b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXksIGF0dGFjaF90eXBlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQwNDpcdFx0c2l6ZSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSwgYXR0YWNoX3R5cGUpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDA1LVx0XHRpZiAoIWJ0Zl9tZW1iZXJfaXNfcmVnX2ludChidGYsIGtleV90eXBlLCBtLCBvZmZzZXQsIHNpemUpKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQxNy1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQxODpzdGF0aWMgdm9pZCBjZ3JvdXBfc3RvcmFnZV9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQxOS1cdFx0XHRcdFx0IHN0cnVjdCBzZXFfZmlsZSAqbSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyMC17XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MjE6XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDIyOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyMy1cdGludCBjcHU7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDI1LVx0cmN1X3JlYWRfbG9jaygpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDI2Olx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXBfdG9fc3RvcmFnZShtYXApLCBrZXksIGZhbHNlKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyNy1cdGlmICghc3RvcmFnZSkge1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQzMi1cdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MzM6XHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQzNC1cdGlmIChzdHlwZSA9PSBCUEZfQ0dST1VQX1NUT1JBR0VfU0hBUkVEKSB7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDUyLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDUzOnN0YXRpYyB1NjQgY2dyb3VwX3N0b3JhZ2VfbWFwX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NTQte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDU1LVx0LyogQ3VycmVudGx5IHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZWxlbWVudHMgYXJlIG5vdCBjb3VudGVkLiAqL1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDU2Olx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NTctfVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDU4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDU5OkJURl9JRF9MSVNUX1NJTkdMRShjZ3JvdXBfc3RvcmFnZV9tYXBfYnRmX2lkcywgc3RydWN0LFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYwOlx0XHQgICBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYxOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JvdXBfc3RvcmFnZV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYyOlx0Lm1hcF9hbGxvYyA9IGNncm91cF9zdG9yYWdlX21hcF9hbGxvYyxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2MzpcdC5tYXBfZnJlZSA9IGNncm91cF9zdG9yYWdlX21hcF9mcmVlLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDY0Olx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBjZ3JvdXBfc3RvcmFnZV9nZXRfbmV4dF9rZXksXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjU6XHQubWFwX2xvb2t1cF9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjY6XHQubWFwX3VwZGF0ZV9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Njc6XHQubWFwX2RlbGV0ZV9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Njg6XHQubWFwX2NoZWNrX2J0ZiA9IGNncm91cF9zdG9yYWdlX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2OTpcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGNncm91cF9zdG9yYWdlX3NlcV9zaG93X2VsZW0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NzA6XHQubWFwX21lbV91c2FnZSA9IGNncm91cF9zdG9yYWdlX21hcF91c2FnZSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3MTpcdC5tYXBfYnRmX2lkID0gXHUwMDI2Y2dyb3VwX3N0b3JhZ2VfbWFwX2J0Zl9pZHNbMF0sXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzItfTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ3My1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3NDppbnQgYnBmX2Nncm91cF9zdG9yYWdlX2Fzc2lnbihzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgsIHN0cnVjdCBicGZfbWFwICpfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3NjpcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGUgPSBjZ3JvdXBfc3RvcmFnZV90eXBlKF9tYXApO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc3LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDc4Olx0aWYgKGF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Nzk6XHQgICAgYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSAhPSBfbWFwKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgwLVx0XHRyZXR1cm4gLUVCVVNZO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDgyOlx0YXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSA9IF9tYXA7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00ODMtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00ODUtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0ODY6c3RhdGljIHNpemVfdCBicGZfY2dyb3VwX3N0b3JhZ2VfY2FsY3VsYXRlX3NpemUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyICpwYWdlcylcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ4Ny17XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDg5LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDkwOlx0aWYgKGNncm91cF9zdG9yYWdlX3R5cGUobWFwKSA9PSBCUEZfQ0dST1VQX1NUT1JBR0VfU0hBUkVEKSB7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00OTEtXHRcdHNpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9zdG9yYWdlX2J1ZmZlcikgJiM0MzsgbWFwLVx1MDAzZXZhbHVlX3NpemU7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0OTI6XHRcdCpwYWdlcyA9IHJvdW5kX3VwKHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlKSAmIzQzOyBzaXplLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDkzLVx0XHRcdFx0ICBQQUdFX1NJWkUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwMi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUwMzpzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpicGZfY2dyb3VwX3N0b3JhZ2VfYWxsb2Moc3RydWN0IGJwZl9wcm9nICpwcm9nLFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTA0Olx0XHRcdFx0XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTA1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwNi1cdGNvbnN0IGdmcF90IGdmcCA9IF9fR0ZQX1pFUk8gfCBHRlBfVVNFUjtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUwNzpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MDgtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxMS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUxMjpcdG1hcCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxMy1cdGlmICghbWFwKVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxNS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUxNjpcdHNpemUgPSBicGZfY2dyb3VwX3N0b3JhZ2VfY2FsY3VsYXRlX3NpemUobWFwLCBcdTAwMjZwYWdlcyk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MTctXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MTg6XHRzdG9yYWdlID0gYnBmX21hcF9rbWFsbG9jX25vZGUobWFwLCBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSksXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MTktXHRcdFx0XHQgICAgICAgZ2ZwLCBtYXAtXHUwMDNlbnVtYV9ub2RlKTtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MzQtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MzU6XHRzdG9yYWdlLVx1MDAzZW1hcCA9IChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqKW1hcDtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUzNi1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NDMtXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NDQ6c3RhdGljIHZvaWQgZnJlZV9zaGFyZWRfY2dyb3VwX3N0b3JhZ2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTQ1LXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU0NjpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UgPVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTQ3Olx0XHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCByY3UpO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTQ4LVxuLS1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1Mi1cbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU1MzpzdGF0aWMgdm9pZCBmcmVlX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NTQte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTU1Olx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSA9XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NTY6XHRcdGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UsIHJjdSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NTctXG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTYxLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTYyOnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX2ZyZWUoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSlcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU2My17XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NjQ6XHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTY1LVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzAtXHRtYXAgPSBcdTAwMjZzdG9yYWdlLVx1MDAzZW1hcC1cdTAwM2VtYXA7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NzE6XHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3Mi1cdGlmIChzdHlwZSA9PSBCUEZfQ0dST1VQX1NUT1JBR0VfU0hBUkVEKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTczOlx0XHRjYWxsX3JjdShcdTAwMjZzdG9yYWdlLVx1MDAzZXJjdSwgZnJlZV9zaGFyZWRfY2dyb3VwX3N0b3JhZ2VfcmN1KTtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3NC1cdGVsc2Vcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU3NTpcdFx0Y2FsbF9yY3UoXHUwMDI2c3RvcmFnZS1cdTAwM2VyY3UsIGZyZWVfcGVyY3B1X2Nncm91cF9zdG9yYWdlX3JjdSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzYtfVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTc3LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTc4OnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX2xpbmsoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3OS1cdFx0XHQgICAgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCxcbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01ODEte1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTgyOlx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcDtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU4My1cbi0tXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01OTItXHRzcGluX2xvY2tfYmgoXHUwMDI2bWFwLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTkzOlx0V0FSTl9PTihjZ3JvdXBfc3RvcmFnZV9pbnNlcnQobWFwLCBzdG9yYWdlKSk7XG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01OTQtXHRsaXN0X2FkZChcdTAwMjZzdG9yYWdlLVx1MDAzZWxpc3RfbWFwLCBcdTAwMjZtYXAtXHUwMDNlbGlzdCk7XG4tLVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTk4LVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTk5OnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlKVxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNjAwLXtcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjYwMTpcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDZ3JvdXAgQlBGIENvbmZpZ3VyYXRpb24gYW5kIE1ha2VmaWxlIEV4cGxvcmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY2dyb3VwIEJQRiBmdW5jdGlvbmFsaXR5IGFnYWluLiBOZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaWYgbWVtb3J5IHNlcnZlcywgaXQgc2hvdWxkIGJlIGBDT05GSUdfQ0dST1VQX0JQRmAuIEJlc3QgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUga2VybmVsJiMzOTtzIGNncm91cCBCUEYgaW50ZWdyYXRpb24gaXMgYWx3YXlzIGV2b2x2aW5nLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBnbyBiYWNrIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhdCBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoaXMgZmlsZSBpcyBvZnRlbiB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoZSBwaWVjZXMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBjZ3JvdXAgQlBGIGFyZSBkZWNsYXJlZCB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGludGVyZXN0aW5nIGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZC4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29tcGlsYXRpb24gZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NjgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBPYmplY3QgQ29tcGlsYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBsb2NhbF9zdG9yYWdlLm9gIG9yIGBicGZfY2dycF9zdG9yYWdlLm9gIG9iamVjdCBmaWxlcyBhcmUgYmVpbmcgYnVpbHQuIEdpdmVuIHRoZXNlIGFyZSBCUEYgcmVsYXRlZCwgbXkgZmlyc3Qgc3RvcCBoYXMgdG8gYmUgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUgYnVpbGQgcnVsZXMuIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBzaG93IG1lIGhvdyB0aGVzZSBhcmUgY29tcGlsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2FsX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIEJQRiBTeXNjYWxsIERlcGVuZGVuY3kgZm9yIFN0b3JhZ2UgTW9kdWxlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgQlBGIG1vZHVsZXMuIEkga25vdyBgbG9jYWxfc3RvcmFnZS5vYCAqZGVmaW5pdGVseSogaXMgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkLCB0aGF0JiMzOTtzIGNsZWFyIGZyb20gaXRzIG1ha2V1cCwgcmlnaHQ/IEJ1dCB3aGF0IGFib3V0IGBicGZfY2dycF9zdG9yYWdlLm9gPyBUaGF0JiMzOTtzIHRoZSBxdWVzdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0ICphbHNvKiBkZXBlbmRzIG9uIHRoZSBCUEYgc3lzY2FsbCBpbnRlcmZhY2UuIFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBob3cgSSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB1c2VkIHRvIGJ1aWxkIGl0IHRvIGJlIHN1cmUuIEl0IGNvdWxkIGJlIGJ1aWx0IHdpdGggdGhlIHNhbWUgZmxhZywgYSBkaWZmZXJlbnQgb25lLCBvciBldmVuIGRlcGVuZCBvbiBhbm90aGVyIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NncnBfc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0zMz1pZmVxICgkKENPTkZJR19DR1JPVVBTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xua2VybmVsL2JwZi9NYWtlZmlsZS0zNS1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYxNgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQlBGIFRyYW1wb2xpbmUgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhhdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2ssIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBib3RoIGBDT05GSUdfQ0dST1VQU2AgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgZmlsZS4gVGhlcmUmIzM5O3Mgc29tZXRoaW5nIGluIHRoZXJlIEkgd2FudCB0byBjaGVjayBhZ2FpbiwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZXNlIGZlYXR1cmVzIGludGVyYWN0IG9yIGhvdyB0aGUgQlBGIHRyYW1wb2xpbmVzIGFyZSBzZXQgdXAgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNncm91cHMuIEkgcHJvYmFibHkgaGF2ZSBhIHNwZWNpZmljIHNjZW5hcmlvIG9yIHBvdGVudGlhbCBpc3N1ZSBpbiBtaW5kIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gb3IgcmV2aXNpdCwgc28gaXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTQ0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQlBGIFRyYW1wb2xpbmUgTGlua2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIOKAkyB3aGljaCBzdWdnZXN0cyBzb21lIHNvcnQgb2YgdGFyZ2V0IHByb2dyYW0gcmVwbGFjZW1lbnQgY2hlY2sgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgdHJhbXBvbGluZSBsaW5raW5nIHByb2Nlc3MuIEludGVyZXN0aW5nLgoKTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdywgSSBuZWVkIHRvIHRyYWNlICpiYWNrd2FyZHMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGJlLiBGaW5kaW5nIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCByZXZlYWwgdGhlIGhpZ2hlci1sZXZlbCBsb2dpYyB0aGF0IHRyaWdnZXJzIHRoZSB0cmFtcG9saW5lIGxpbmtpbmcgYW5kLCBjb25zZXF1ZW50bHksIHRoZSB0YXJnZXQgcHJvZ3JhbSBjaGVjay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NjI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcwLVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwOTI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM1Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2Mjc9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVx0XHRcdFx0XHRcdCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBCUEYgUHJvZ3JhbSBBdHRhY2htZW50IFBvaW50cyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhcmUgYWxsIGNydWNpYWwgZW50cnkgcG9pbnRzLiBUaGV5JiMzOTtyZSB0aGUgZ2F0ZXMgdGhyb3VnaCB3aGljaCBCUEYgcHJvZ3JhbXMgZ2V0IGF0dGFjaGVkLiBFc3NlbnRpYWxseSwgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IGludGVyZmFjZXMgZm9yIGludGVncmF0aW5nIEJQRiBwcm9ncmFtcyBpbnRvIHZhcmlvdXMga2VybmVsIGNvbnRleHRzLiBOb3csIHNpbmNlIHRob3NlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgaW4gY2hhcmdlIG9mIHByb2dyYW0gYXR0YWNobWVudCwgSSB3YW50IHRvIGZpbmQgdGhlIGNhbGxpbmcgbG9jYXRpb25zIG9mIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBpZGVudGlmeSB0aGUgY29udGV4dHMgd2hpY2ggbWFrZSB1c2Ugb2YgaXQuIFRoYXQgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGJlaW5nIGludGVncmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTE1MDk9c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbms7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0xNTExLSNpZmRlZiBDT05GSUdfQlBGX0pJVFxuaW5jbHVkZS9saW51eC9icGYuaDoxNTEyOmludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTEzLVx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE2MDU9dTE2IGJwZl9vdXRfc3RhY2tfYXJnX2NudChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xNjA2LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2MDc6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTYwOC1cdFx0XHRcdFx0ICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3OTUtXHRcdCAqIEFsbG93IHJlLWF0dGFjaCBmb3IgVFJBQ0lORyBhbmQgTFNNIHByb2dyYW1zLiBJZiBpdCYjMzk7c1xua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc5NjpcdFx0ICogY3VycmVudGx5IGxpbmtlZCwgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nIHdpbGwgZmFpbC5cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3OTctXHRcdCAqIEVYVCBwcm9ncmFtcyBuZWVkIHRvIHNwZWNpZnkgdGd0X3Byb2dfZmQsIHNvIHRoZXlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zODY5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzg3MDpcdGVyciA9IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZsaW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIHRndF9wcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4NzEtXHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjEtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NjI6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjMtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2OC1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5Njk6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3MC1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDkyPWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM0LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTEzNTpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNnNoaW1fbGluay1cdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM2LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjI3PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc2LVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjc3Olx0XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OC1cdFx0XHRcdFx0XHQgXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIzOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBUYXJnZXRpbmcgQlBGIFRyYWNpbmcgUHJvZ3JhbSBBdHRhY2htZW50KioKCk9rYXksIHNvIG15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgLiBUaGF0IGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGF0dGFjaGluZyBCUEYgdHJhY2luZyBwcm9ncmFtcywgYW5kIHRoYXQmIzM5O3MgKmFsd2F5cyogYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGZ1enppbmcuIEl0JiMzOTtzIGNsZWFybHkgcmVhY2hhYmxlLCB3aGljaCBpcyBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB0ZXN0aW5nIHRoaXMgdGhvcm91Z2hseS4KCk5vdywgSSYjMzk7bSBub3RpbmcgdGhhdCB0aGUgZnVuY3Rpb24gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgYXR0YWNoaW5nIGFuIGV4dGVuc2lvbiBwcm9ncmFtLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9FWFRgLiBUaGUgcGF0Y2ggYWRkZWQgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBwb3RlbnRpYWwgY2dyb3VwIHN0b3JhZ2Ugc2l6ZSBtaXNtYXRjaGVzLiBJZiB0aGUgc2l6ZXMgZG9uJiMzOTt0IGxpbmUgdXAsIGl0JiMzOTtzIHN1cHBvc2VkIHRvIHJldHVybiBgLUVJTlZBTGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgcG90ZW50aWFsIGltcGFjdCBpcyBzaWduaWZpY2FudCwgc28gdGhhdCYjMzk7cyBhbm90aGVyIGZ1bmN0aW9uIEkgbmVlZCB0byBmdXp6LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgLUVJTlZBTGAgaXMgcmV0dXJuZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgd29ydGggZGlyZWN0bHkgZnV6emluZy4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgaXMgc3RhdGljLCB3aGljaCBtZWFucyBpdCBtaWdodCBiZSBpbmxpbmVkLiBUaGlzIG1ha2VzIGRpcmVjdCBmdXp6aW5nIG1vcmUgY29tcGxpY2F0ZWQsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gZmluZCB3YXlzIHRvIHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gT24gdGhlIG90aGVyIGhhbmQsIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZS4gQWxzbywgSSB0aG91Z2h0IGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAgd2FzIG5vbi1zdGF0aWMgdG9vLCBhbmQgd291bGQgYmUgYSBnb29kIGNhbmRpZGF0ZS4gV2FpdCwgbGV0IG1lIGNoZWNrLiBBaCwgaXQmIzM5O3Mgc3RhdGljIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIHN0YXRpYyBhIGJpdCBjbG9zZXIgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGVzdGluZyB0aGlzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNjg4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzY4OTpzdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM2OTAtXHRcdFx0XHQgICBpbnQgdGd0X3Byb2dfZmQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NDM1Mj1zdGF0aWMgaW50IGJwZl9yYXdfdHBfbGlua19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQzNzYtXHRcdH1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQzNzc6XHRcdHJldHVybiBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLCAwLCAwLCAwLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Mzc4LVx0Y2FzZSBCUEZfUFJPR19UWVBFX1JBV19UUkFDRVBPSU5UOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3NC1cdGNhc2UgQlBGX1BST0dfVFlQRV9FWFQ6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODc1Olx0XHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3Ni1cdFx0XHRcdFx0ICAgICAgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5Ni1cdFx0ZWxzZVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NzpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5OC1cdFx0XHRcdFx0XHQgICAgICBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEZ1bmN0aW9uIFZpc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIEJQRiBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUuIEZpcnN0IG9ic2VydmF0aW9uOiBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlbiwgSSBzZWUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2Agd2hpY2ggaXMgKm5vbi1zdGF0aWMqLCB0aGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSB0byBmb2xsb3cuIEFuZCBqdXN0IHRvIGNvbmZpcm0sIGBsaW5rX2NyZWF0ZWAgaXMgc3RhdGljLiBUaGUgYHN5c19icGZgIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50IGlzIHRvbyBicm9hZCBmb3IgbXkgaW1tZWRpYXRlIG5lZWRzLgoKTm93LCBsZXQmIzM5O3MgZm9jdXMgb24gdGhpcyBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3MgZXhwb3J0ZWQgb3IganVzdCBkZWNsYXJlZCBub24tc3RhdGljLiBMb29raW5nIGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGl0JiMzOTtzIGRlZmluaXRlbHkgbm9uLXN0YXRpYy4gR29vZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnl0aGluZyB3aXRoIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIC0geWVwLCBzdGlsbCBzdGF0aWMuIEFuZCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFzIHdlbGwsIHN0aWxsIHN0YXRpYy4KCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrLiBJcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBpcyBub24tc3RhdGljPyBMb29rcyBsaWtlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGlzIGRlZmluaXRlbHkgdGhlIHByaW1lIGNhbmRpZGF0ZSBoZXJlLiBJdCBhcHBlYXJzIHRvIGJlIG15IG1vc3QgcHJvbWlzaW5nIG9wdGlvbi4gQWxzbywgYGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW1gIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBjYWxsIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGJ1dCB0aGUgc3RhdGljIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBgdHItJmd0O2V4dGVuc2lvbl9wcm9nYCBpcyBpbnZvbHZlZC4KCkxldCYjMzk7cyBxdWlja2x5IHJlLWV4YW1pbmUgYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBvbmUgbW9yZSB0aW1lLiBKdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIyLVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NjI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcwLVx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwOTI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzQtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM1Olx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMzYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2Mjc9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUsIG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVx0XHRcdFx0XHRcdCBcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTYyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIHByb2Zlc3Npb25hbCBwZXJzcGVjdGl2ZSwgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBxdWljayBtZW50YWwgY2hlY2suIEkgc2VlIHRoYXQgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgaXMgYmVpbmcgY2FsbGVkICp3aXRoaW4qIHRoZSBjb250ZXh0IG9mIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQmIzM5O3Mgc2lnbmlmaWNhbnQuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9uIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbGlua2luZyBwcm9jZXNzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVncml0eSBjaGVjayBvciBzZWN1cml0eSBtZWFzdXJlIHJlbGF0ZWQgdG8gcHJvZ3JhbSByZXBsYWNlbWVudC4gYGJwZl9mcmVwbGFjZWAgYW5kIHRyYW1wb2xpbmVzIHRvZ2V0aGVyIGFyZSBjb21tb25seSB1c2VkIGluIGVCUEYgdG8gaG90LXN3YXAgcHJvZ3JhbXMgb3IgbW9kaWZ5IHRoZSBleGVjdXRpb24gcGF0aC4gU28sIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIG11c3QgYmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGludGVncml0eSBjaGVja3Mgb3IgdmFsaWRhdGlvbiBzdGVwcyB0aGF0IGZ1bmN0aW9uIGlzIHBlcmZvcm1pbmcgb24gdGhlIHRhcmdldCBwcm9ncmFtIGR1cmluZyBhICYjMzQ7cmVwbGFjZSYjMzQ7IG9wZXJhdGlvbi4gSXMgaXQgdmFsaWRhdGluZyBwcm9ncmFtIHNpemUsIGluc3RydWN0aW9uIHNldCBjb21wYXRpYmlsaXR5LCBwZXJtaXR0ZWQgc3lzY2FsbHMsIG9yIHBlcmhhcHMgZXZlbiBjaGVja2luZyBmb3IgbWFsaWNpb3VzIGNvZGUgaW5qZWN0aW9uIGF0dGVtcHRzPyBJdCYjMzk7cyBhbGwgYWJvdXQgZW5zdXJpbmcgc2FmZSBhbmQgY29udHJvbGxlZCBwcm9ncmFtIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcdFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBMaW5raW5nIFByb2Nlc3MqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgaG93IGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGZpdHMgaW50byB0aGUgcGljdHVyZS4gTXkgYWltIGlzIHRvIGdldCBhIGdyYXNwIG9uIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgdGFyZ2V0IHByb2dyYW0gY2hlY2sgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiB3aXRoaW4gYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoYXTigJlzIGdvaW5nIG9uIGF0IHRoZSBwcm9ncmFtJiMzOTtzIHN0YWdlIHdoZW4gaXQgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIHdpbGwgaGVscCBpbiBmaWd1cmluZyBvdXQgdGhlIHVzZSBjYXNlcyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggdGhlIHRhcmdldCBwcm9ncmFtIHJlcGxhY2VtZW50LiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGVuc3VyaW5nIHRoZSB0cmFtcG9saW5lIG1lY2hhbmlzbSBiZWhhdmVzIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTIxOlx0c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4gOTIyOlx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuIDkyMzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbiA5MjQ6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcbiA5MjU6XHRcdFx0XHRcdCAgICAgIHZvaWQgKmRhdGEpXG4gOTI2Olx0e1xuIDkyNzpcdFx0ZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGtpbmQ7XG4gOTI4Olx0XHRpbnQgZXJyID0gMDtcbiA5Mjk6XHRcdGludCBjbnQgPSAwLCBpO1xuIDkzMDpcdFxuIDkzMTpcdFx0a2luZCA9IGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChub2RlLVx1MDAzZWxpbmstXHUwMDNlcHJvZyk7XG4gOTMyOlx0XHRpZiAodHItXHUwMDNlZXh0ZW5zaW9uX3Byb2cpXG4gOTMzOlx0XHRcdC8qIGNhbm5vdCBhdHRhY2ggZmVudHJ5L2ZleGl0IGlmIGV4dGVuc2lvbiBwcm9nIGlzIGF0dGFjaGVkLlxuIDkzNDpcdFx0XHQgKiBjYW5ub3Qgb3ZlcndyaXRlIGV4dGVuc2lvbiBwcm9nIGVpdGhlci5cbiA5MzU6XHRcdFx0ICovXG4gOTM2Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gOTM3Olx0XG4gOTM4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBCUEZfVFJBTVBfTUFYOyBpJiM0MzsmIzQzOylcbiA5Mzk6XHRcdFx0Y250ICYjNDM7PSB0ci1cdTAwM2Vwcm9nc19jbnRbaV07XG4gOTQwOlx0XG4gOTQxOlx0XHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xuIDk0MjpcdFx0XHQvKiBDYW5ub3QgYXR0YWNoIGV4dGVuc2lvbiBpZiBmZW50cnkvZmV4aXQgYXJlIGluIHVzZS4gKi9cbiA5NDM6XHRcdFx0aWYgKGNudClcbiA5NDQ6XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDk0NTpcdFx0XHRlcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2csIG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nKTtcbiA5NDY6XHRcdFx0aWYgKGVycilcbiA5NDc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDk0ODpcdFx0XHR0ci1cdTAwM2VleHRlbnNpb25fcHJvZyA9IG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nO1xuIDk0OTpcdFx0XHRyZXR1cm4gYnBmX2FyY2hfdGV4dF9wb2tlKHRyLVx1MDAzZWZ1bmMuYWRkciwgQlBGX01PRF9OT1AsXG4gOTUwOlx0XHRcdFx0XHRcdCAgQlBGX01PRF9KVU1QLCBOVUxMLFxuIDk1MTpcdFx0XHRcdFx0XHQgIG5vZGUtXHUwMDNlbGluay1cdTAwM2Vwcm9nLVx1MDAzZWJwZl9mdW5jKTtcbiA5NTI6XHRcdH1cbiA5NTM6XHRcdGVyciA9IGJwZl90cmFtcG9saW5lX2FkZF9wcm9nKHRyLCBub2RlLCBjbnQpO1xuIDk1NDpcdFx0aWYgKGVycilcbiA5NTU6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTY6XHRcdGVyciA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgdHJ1ZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLywgb3BzLCBkYXRhKTtcbiA5NTc6XHRcdGlmIChlcnIpXG4gOTU4Olx0XHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHRyLCBub2RlKTtcbiA5NTk6XHRcdHJldHVybiBlcnI7XG4gOTYwOlx0fVxuIDk2MTpcdFxuIDk2MjpcdGludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuIDk2MzpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbiA5NjQ6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gOTY1Olx0e1xuIDk2NjpcdFx0aW50IGVycjtcbiA5Njc6XHRcbiA5Njg6XHRcdHRyYW1wb2xpbmVfbG9jayh0cik7XG4gOTY5Olx0XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbiA5NzA6XHRcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyNTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBUcmFtcG9saW5lIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZXNlIEJQRiB0cmFtcG9saW5lcyB3b3JrLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSYjMzk7cmUgcmVwbGFjaW5nIHByb2dyYW1zIOKAkyB0aGF0JiMzOTtzIHdoZW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZ2V0cyBjYWxsZWQgd2l0aCBgQlBGX1RSQU1QX1JFUExBQ0VgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBtYXBzIHRvIHRoZSBgQlBGX1BST0dfVFlQRV9FWFRgIHR5cGUuIFRoZSAmIzM0O2ZyZXBsYWNlJiMzNDsgaXMgdGhlIGtleS4gTXkgZm9jdXMgc3ltYm9sIGhlcmUgbG9va3MgdG8gYmUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayB0aGUgY29yZSBsb2dpYy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcy4gT2theSwgSSBzZWUgYGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoYCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgLCB3aGljaCBpcyBhbHNvIHN0YXRpYywgYnV0IGBsaW5rX2NyZWF0ZWAgaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBzeXNfYnBmYC4gU28sIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGRvZXMgaW5kZWVkIGxvb2sgbGlrZSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgcmVmcmVzaCBteSBtZW1vcnksIGxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQlBGX0pJVGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGFuZCBhbHNvLCBvZiBjb3Vyc2UsIGBDT05GSUdfQ0dST1VQU2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIHRoZSByaWdodCBvbmUgZm9yIGNncm91cC1yZWxhdGVkIEJQRiBzdG9yYWdlLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODQ2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ0dST1VQX0JQRiBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpSaWdodCwgc28gd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIHRoYXQgYENHUk9VUF9CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlLiBHaXZlbiB0aGUgY29udGV4dCwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gSSYjMzk7bSB0aGlua2luZyBlaXRoZXIgYGluaXQvS2NvbmZpZ2Ag4oCTIGJlY2F1c2UgaXQgb2Z0ZW4gaG91c2VzIGNvcmUsIGZvdW5kYXRpb25hbCBvcHRpb25zLCBvciwgbW9yZSBsaWtlbHksIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gZUJQRiwgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFRoZSBicGYgc3Vic3lzdGVtIGlzLCBieSBpdHMgbmF0dXJlLCBoZWF2aWx5IHJlbGlhbnQgb24ga2NvbmZpZyBvcHRpb25zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNncm91cHMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gYW5kIHBvdGVudGlhbGx5IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIHN1Yi1vcHRpb25zIGRlZmluZWQgdGhlcmUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEzNDQ9Y29uZmlnIENHUk9VUF9QRVJGXG4tLVxuaW5pdC9LY29uZmlnLTEzNTQtXG5pbml0L0tjb25maWc6MTM1NTpjb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBCUEYgQ29uZmlndXJhdGlvbiAmYW1wOyBKSVQgU3RhdHVzKioKCk9rYXksIHNvIHRoZSBjb250ZXh0IGlzIGBDR1JPVVBfQlBGYC4gR290IGl0LiBUaGF0JiMzOTtzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiBmb3IgdGhpcyB1c2UgY2FzZS4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgaXMgc2V0IGNvcnJlY3RseS4gTm93LCBiZWZvcmUgSSBwcm9jZWVkIEkgbmVlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIGBCUEZfSklUYC4gVGhpcyBpcyBjcml0aWNhbC4gV2l0aG91dCBKSVQsIHBlcmZvcm1hbmNlIHdpbGwgYmUgc2V2ZXJlbHkgaGFtcGVyZWQsIGFuZCB0aGUgd2hvbGUgZGVwbG95bWVudCBpcyBwcm9iYWJseSBub3QgZ29pbmcgdG8gYmUgd29ydGggaXQuIFRpbWUgdG8gcnVuIGEgcXVpY2sgZGlhZ25vc3RpYy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz00PWNvbmZpZyBCUEZcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMTItIyBDbGFzc2ljIEJQRiBKSVQgKGNCUEYpXG5rZXJuZWwvYnBmL0tjb25maWc6MTM6Y29uZmlnIEhBVkVfQ0JQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy0xNC1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMTYtIyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxua2VybmVsL2JwZi9LY29uZmlnOjE3OmNvbmZpZyBIQVZFX0VCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctMTgtXHRib29sXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTIxLSMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG5rZXJuZWwvYnBmL0tjb25maWc6MjI6Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctNDQtXHRkZXBlbmRzIG9uIEJQRlxua2VybmVsL2JwZi9LY29uZmlnOjQ1Olx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00Ni1cdHNlbGVjdCBFWEVDTUVNXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVx0aGVscFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2NTpcdCAgV2hlbiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04gaXMgZW5hYmxlZCwgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfZW5hYmxlXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXHQgIGlzIHBlcm1hbmVudGx5IHNldCB0byAxIGFuZCBzZXR0aW5nIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoYXQgd2lsbFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWc6NzA6XHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9OTI9Y29uZmlnIEJQRl9MU01cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctOTYtXHRkZXBlbmRzIG9uIFNFQ1VSSVRZXG5rZXJuZWwvYnBmL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy05OC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBCUEYgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBnZXQgdGhlIG9idmlvdXMgb3V0IG9mIHRoZSB3YXkg4oCTIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBDR1JPVVBfQlBGYCBhcmUgdGhlIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gV2UmIzM5O3JlIGFzc3VtaW5nIHRob3NlIGFyZSBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgcHJlcmVxdWlzaXRlLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgdmVyeSBzcGVjaWZpYy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZnVuY3Rpb24gaXMgZXhwb3J0ZWQuIFRoaXMgaXMgY3J1Y2lhbDsgaWYgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBteSBlbnRpcmUgbGluZSBvZiByZWFzb25pbmcgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIFRoYXQgZnVuY3Rpb24gaXMgYSBrZXkgYnVpbGRpbmcgYmxvY2sgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM4NAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBUcmFtcG9saW5lIExpbmtpbmcgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0LiBJdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlLCB1bmxpa2UgdGhlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCBhbmQgYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgZWZmb3J0cyBoZXJlLiBBbHNvLCB0aGVyZSBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgd2hpY2ggY291bGQgd2FycmFudCBhIGxvb2sgbGF0ZXIgb24sIGJ1dCBmb3Igbm93LCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyB0aGUgZm9jYWwgcG9pbnQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBDR1JPVVBfQlBGYCBlbmFibGVkLiBgQ09ORklHX0NHUk9VUFNgIGlzIG5lZWRlZCBmb3IgYENPTkZJR19DR1JPVVBfQlBGYCwgYW5kIGBDT05GSUdfQlBGYCBpcyBuZWVkZWQgZm9yIGBDT05GSUdfQlBGX1NZU0NBTExgLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgYWxsIGluIHBsYWNlLgoKUmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYsIGl0IGxvb2tzIGxpa2UgYSBjaGVjayBpcyBiZWluZyBhZGRlZCB0byBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCB0byBwcmV2ZW50IGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggY2dyb3VwIHN0b3JhZ2UgdHlwZXMsIGNvbXBhcmluZyBgdmFsdWVfc2l6ZWAgb2YgbWFwcyBiZXR3ZWVuIHRoZSB0YXJnZXQgYW5kIGV4dGVuc2lvbiBwcm9ncmFtcy4gSWYgdGhlcmUmIzM5O3MgYSBtaXNtYXRjaCwgaXQgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0JiMzOTtzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gbWVtb3J5IHNhZmV0eSwgYW5kIHRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKU28sIHRvIHN1bW1hcml6ZTogSSYjMzk7bSBmb2N1c2VkIG9uIHRoZSBzeW1ib2wgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGFuZCBJJiMzOTt2ZSBub3RlZCB0aGF0IHdlIG5lZWQgdGhlc2UgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHRvIHJlY29yZCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCB0byBwcmV2ZW50IGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIGF0dGFjaGluZyBhIEJQRiBleHRlbnNpb24gcHJvZ3JhbSAoZnJlcGxhY2UpIHRvIGEgdGFyZ2V0IHByb2dyYW0gd2l0aCBhIG1pc21hdGNoZWQgY2dyb3VwIHN0b3JhZ2UgdmFsdWUgc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZmAgc3lzY2FsbCB3aGVuIGF0dGFjaGluZyB0cmFjaW5nIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9saW5rX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTM6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gZW5zdXJlIHRoYXQgdGhlIGB2YWx1ZV9zaXplYCBvZiBgY2dyb3VwX3N0b3JhZ2VgIG1hcHMgaW4gdGhlIGV4dGVuc2lvbiBwcm9ncmFtIG1hdGNoZXMgdGhlIHRhcmdldCBwcm9ncmFtLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGEgbWlzbWF0Y2ggbGVhZHMgdG8gYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3Igc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggMWE3MjFmYzRiZWY1Ni4uMzc0M2Y2YzI1ZTJjZSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTgwNiw5ICYjNDM7ODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpCiYjNDM7c3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy0mZ3Q7YXV4OwomIzQzOwllbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7CiAKIAlndWFyZChtdXRleCkoJmFtcDthdXgtJmd0O2V4dF9tdXRleCk7CiAJaWYgKGF1eC0mZ3Q7cHJvZ19hcnJheV9tZW1iZXJfY250KQpAQCAtODIxLDYgJiM0Mzs4MjMsMjAgQEAgc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWF1eC0mZ3Q7aXNfZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwomIzQzOwkvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0mIzM5O3MKJiM0MzsJICogY2dyb3VwIHN0b3JhZ2UgY29udGV4dCAodmlhIHByb2dfaXRlbS0mZ3Q7Y2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGUKJiM0MzsJICogdmVyaWZpZXIgYm91bmRzIGl0cyBhY2Nlc3NlcyBieSBpdHMgb3duIG1hcCYjMzk7cyB2YWx1ZV9zaXplLiBBCiYjNDM7CSAqIHZhbHVlX3NpemUgbWlzbWF0Y2ggbGVhZHMgdG8gc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkgewomIzQzOwkJc3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy0mZ3Q7YXV4LSZndDtjZ3JvdXBfc3RvcmFnZVtpXTsKJiM0MzsJCXN0cnVjdCBicGZfbWFwICpwcm9nX21hcCA9IHByb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2VbaV07CiYjNDM7CiYjNDM7CQlpZiAocHJvZ19tYXAgJmFtcDsmYW1wOyAoIXRndF9tYXAgfHwgcHJvZ19tYXAtJmd0O3ZhbHVlX3NpemUgIT0gdGd0X21hcC0mZ3Q7dmFsdWVfc2l6ZSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTI2LDcgJiM0Mzs5NDIsNyBAQCBzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwKIAkJLyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovCiAJCWlmIChjbnQpCiAJCQlyZXR1cm4gLUVCVVNZOwotCQllcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2cpOwomIzQzOwkJZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLSZndDtsaW5rLSZndDtwcm9nKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJCXRyLSZndDtleHRlbnNpb25fcHJvZyA9IG5vZGUtJmd0O2xpbmstJmd0O3Byb2c7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYwCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0JiMzOTtzIGZvY3VzZWQgb24gYSBjcml0aWNhbCB2YWxpZGF0aW9uIGFyb3VuZCBgY2dyb3VwX3N0b3JhZ2VgIG1hcCBpbnRlcmFjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4dGVuc2lvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIGVuc3VyaW5nIHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSAqbWF0Y2hlcyogdGhlIHRhcmdldCBwcm9ncmFtJiMzOTtzIGNvcnJlc3BvbmRpbmcgbWFwIHNpemUuIFRoZSBjb21tZW50IGV4cGxpY2l0bHkgZmxhZ3MgYSAmIzM0O3ZhbHVlX3NpemUgbWlzbWF0Y2ggbGVhZHMgdG8gc2xhYiBvdXQtb2YtYm91bmRzIGFjY2VzcyYjMzQ7IOKAkyB3aGljaCBpbnN0YW50bHkgcmFpc2VzIHRoZSByZWQgZmxhZyBvZiBhIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZS4gSXQgc2VlbXMgY2xlYXIgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgKmtub3duKiBvdXQtb2YtYm91bmRzIGFjY2VzcyB2dWxuZXJhYmlsaXR5LgoKU2luY2UgdGhlIHN0YXRlZCB2dWxuZXJhYmlsaXR5IGlzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBhcmUgd2VsbC1hZGRyZXNzZWQgYnkgS0FTQU4sIHRoaXMgaXMgYSBjbGVhciBjYXNlLiBUaGUgYW5hbHlzaXMgY29uZmlybXMgdGhhdCB0aGUgY29kZSBtZXJlbHkgKnZhbGlkYXRlcyogdGhpcyBgdmFsdWVfc2l6ZWAgcmVsYXRpb25zaGlwLiBJIHNlZSBubyBpbmRpY2F0aW9uIG9mIGludHJvZHVjaW5nIG5ldyBhbGxvY2F0aW9ucywgcGFzc2luZyBhbnkgbmV3IHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBleHBvc2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIHN0cmljdGx5IGEgKmNoZWNrKiB0byBwcmV2ZW50IHRoZSBPT0IuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgYmxvY2sgdG8gbWFrZSBzdXJlOgpgYGBjCglmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKGkpIHsKCQlzdHJ1Y3QgYnBmX21hcCAqdGd0X21hcCA9IHRndF9wcm9nLSZndDthdXgtJmd0O2Nncm91cF9zdG9yYWdlW2ldOwoJCXN0cnVjdCBicGZfbWFwICpwcm9nX21hcCA9IHByb2ctJmd0O2F1eC0mZ3Q7Y2dyb3VwX3N0b3JhZ2VbaV07CgoJCWlmIChwcm9nX21hcCAmYW1wOyZhbXA7ICghdGd0X21hcCB8fCBwcm9nX21hcC0mZ3Q7dmFsdWVfc2l6ZSAhPSB0Z3RfbWFwLSZndDt2YWx1ZV9zaXplKSkKCQkJcmV0dXJuIC1FSU5WQUw7Cgl9CmBgYApZZWFoLCBleGFjdGx5IGFzIEkgdGhvdWdodC4gUHVyZSB2YWxpZGF0aW9uLiBObyBuZXcgbWVtb3J5IGV4cG9zdXJlIGlzIGludm9sdmVkLiBTbywgZm9yIHRoZSByZWNvcmQsIEkmIzM5O2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaXggdXNpbmcgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIChLQVNBTikgZm9yIHRoZSBqb2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gZW5zdXJlIHRoYXQgdGhlIGB2YWx1ZV9zaXplYCBvZiBgY2dyb3VwX3N0b3JhZ2VgIG1hcHMgaW4gdGhlIGV4dGVuc2lvbiBwcm9ncmFtIG1hdGNoZXMgdGhlIHRhcmdldCBwcm9ncmFtLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGEgbWlzbWF0Y2ggbGVhZHMgdG8gYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3Igc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjMzOjU4LjYzMDczNDMwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDI3ODk5Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gZW5zdXJlIHRoYXQgdGhlIGB2YWx1ZV9zaXplYCBvZiBgY2dyb3VwX3N0b3JhZ2VgIG1hcHMgaW4gdGhlIGV4dGVuc2lvbiBwcm9ncmFtIG1hdGNoZXMgdGhlIHRhcmdldCBwcm9ncmFtLiBUaGUgY29tbWVudCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGEgbWlzbWF0Y2ggbGVhZHMgdG8gYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3Igc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjMzOjU4LjYzMDc0MTIzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzOTQ0NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTE1ODc1YmY1MWMwY2YxOGQxYWI1NWY5Yjg0NGZiYTY2YmE5NmZlN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuaW5kZXggMWE3MjFmYzRiZWY1Ni4uMzc0M2Y2YzI1ZTJjZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbisrKyBiL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuQEAgLTgwNiw5ICs4MDYsMTEgQEAgc3RhdGljIGVudW0gYnBmX3RyYW1wX3Byb2dfdHlwZSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXFxuK3N0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gdGd0X3Byb2ctXFx1MDAzZWF1eDtcXG4rXFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBpO1xcbiBcXG4gXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZhdXgtXFx1MDAzZWV4dF9tdXRleCk7XFxuIFxcdGlmIChhdXgtXFx1MDAzZXByb2dfYXJyYXlfbWVtYmVyX2NudClcXG5AQCAtODIxLDYgKzgyMywyMCBAQCBzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0YXV4LVxcdTAwM2Vpc19leHRlbmRlZCA9IHRydWU7XFxuK1xcbitcXHQvKiBBdCBydW50aW1lIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBpbmhlcml0cyB0aGUgdGFyZ2V0IHByb2dyYW0nc1xcbitcXHQgKiBjZ3JvdXAgc3RvcmFnZSBjb250ZXh0ICh2aWEgcHJvZ19pdGVtLVxcdTAwM2VjZ3JvdXBfc3RvcmFnZSksIHdoaWxlIHRoZVxcbitcXHQgKiB2ZXJpZmllciBib3VuZHMgaXRzIGFjY2Vzc2VzIGJ5IGl0cyBvd24gbWFwJ3MgdmFsdWVfc2l6ZS4gQVxcbitcXHQgKiB2YWx1ZV9zaXplIG1pc21hdGNoIGxlYWRzIHRvIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXFxuK1xcdCAqL1xcbitcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKGkpIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcXG4rXFx0XFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcXG4rXFxuK1xcdFxcdGlmIChwcm9nX21hcCBcXHUwMDI2XFx1MDAyNiAoIXRndF9tYXAgfHwgcHJvZ19tYXAtXFx1MDAzZXZhbHVlX3NpemUgIT0gdGd0X21hcC1cXHUwMDNldmFsdWVfc2l6ZSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtOTI2LDcgKzk0Miw3IEBAIHN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbiBcXHRcXHQvKiBDYW5ub3QgYXR0YWNoIGV4dGVuc2lvbiBpZiBmZW50cnkvZmV4aXQgYXJlIGluIHVzZS4gKi9cXG4gXFx0XFx0aWYgKGNudClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tXFx0XFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nKTtcXG4rXFx0XFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVxcdTAwM2VsaW5rLVxcdTAwM2Vwcm9nKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0dHItXFx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6MzM6NTkuMTc1MzAxMjAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQ2ODIzMDU3OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYuLjM3NDNmNmMyNWUyY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC04MDYsOSArODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZylcbitzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cdTAwM2VhdXg7XG4rXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2YXV4LVx1MDAzZWV4dF9tdXRleCk7XG4gXHRpZiAoYXV4LVx1MDAzZXByb2dfYXJyYXlfbWVtYmVyX2NudClcbkBAIC04MjEsNiArODIzLDIwIEBAIHN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRhdXgtXHUwMDNlaXNfZXh0ZW5kZWQgPSB0cnVlO1xuK1xuK1x0LyogQXQgcnVudGltZSB0aGUgZXh0ZW5zaW9uIHByb2dyYW0gaW5oZXJpdHMgdGhlIHRhcmdldCBwcm9ncmFtJ3NcbitcdCAqIGNncm91cCBzdG9yYWdlIGNvbnRleHQgKHZpYSBwcm9nX2l0ZW0tXHUwMDNlY2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGVcbitcdCAqIHZlcmlmaWVyIGJvdW5kcyBpdHMgYWNjZXNzZXMgYnkgaXRzIG93biBtYXAncyB2YWx1ZV9zaXplLiBBXG4rXHQgKiB2YWx1ZV9zaXplIG1pc21hdGNoIGxlYWRzIHRvIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqdGd0X21hcCA9IHRndF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcbitcdFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG4rXG4rXHRcdGlmIChwcm9nX21hcCBcdTAwMjZcdTAwMjYgKCF0Z3RfbWFwIHx8IHByb2dfbWFwLVx1MDAzZXZhbHVlX3NpemUgIT0gdGd0X21hcC1cdTAwM2V2YWx1ZV9zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05MjYsNyArOTQyLDcgQEAgc3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4gXHRcdC8qIENhbm5vdCBhdHRhY2ggZXh0ZW5zaW9uIGlmIGZlbnRyeS9mZXhpdCBhcmUgaW4gdXNlLiAqL1xuIFx0XHRpZiAoY250KVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4tXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZyk7XG4rXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozMzo1OS4xNzUzMDI3NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI1Mzk3NDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEl0IHNlZW1zIHRoZXkndmUgbW9kaWZpZWQgdGhlIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGZ1bmN0aW9uLCBhbmQgdGhlIG1vc3Qgbm90YWJsZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dgIGFzIGFuIGFyZ3VtZW50LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBmcmVwbGFjZSAoZXh0ZW5zaW9uKSBwcm9ncmFtcyBhbmQgQlBGIHRyYW1wb2xpbmVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgdmFsaWRhdGluZyB0aGUgY2dyb3VwIHN0b3JhZ2UgdmFsdWUgc2l6ZS5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gc3RlcCwgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGVyZSBpcyBhIG1pc21hdGNoLiBUaGlzIGlzIGdvb2QgdG8gc2VlIGFzIG1pc21hdGNoZWQgc3RvcmFnZSBzaXplcyB3b3VsZCBjYXVzZSBzZXJpb3VzIGlzc3Vlcy5cblxuTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGFyZSB0aWVkIHRvIHRoaXMuIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWcgb3B0aW9ucy4gSSB3aWxsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIG5hbWVzIHRoZW1zZWx2ZXMuIEknbGwgc2VhcmNoIGZvciBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCBhbmQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgY29uZmlndXJhYmxlIGJlaGF2aW9yIHJlbGF0ZWQgdG8gQlBGIHRyYW1wb2xpbmVzIGFuZCBjZ3JvdXAgc3RvcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM0OjQ1LjQyOTI4MjYyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMyNzQ2MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03ODI9c3RhdGljIGVudW0gYnBmX3RyYW1wX3Byb2dfdHlwZSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODA4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjgwOTpzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgxMC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTIxPXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTQ0LVxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTQ1OlxcdFxcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTQ2LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM0OjQ4LjE2MjAzNTQwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTU3NjA0MDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgS2VybmVsIEJQRiBUcmFtcG9saW5lIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGVuYWJsaW5nIGFuZCBzaGFwaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20gd2l0aGluIHRoZSBrZXJuZWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgbG93LWxldmVsIGltcGxpY2F0aW9ucyBoZXJlOiBob3cgdGhlc2Ugb3B0aW9ucyBpbXBhY3QgbWVtb3J5IGFsbG9jYXRpb24sIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LCBzZWN1cml0eSBib3VuZGFyaWVzLCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuRmlyc3QsIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgY29yZSBvcHRpb25zIHRoYXQgZGlyZWN0bHkgY29udHJvbCB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBvZiB0aGUgdHJhbXBvbGluZSBpdHNlbGYg4oCTIHRoZSBcIm9uL29mZlwiIHN3aXRjaGVzLCBzbyB0byBzcGVhay4gVGhlbiwgSSBuZWVkIHRvIGNvbnNpZGVyIG9wdGlvbnMgd2hpY2ggaW5mbHVlbmNlIHdoaWNoIGluc3RydWN0aW9uIHNldHMgYXJlIHN1cHBvcnRlZCwgYW5kIHdoYXQgbGV2ZWxzIG9mIEJQRiB2ZXJpZmllciByaWdvciBhcmUgYXBwbGllZC4gQW55dGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgcHJvdGVjdGlvbiBjb21lcyB0byBtaW5kIGltbWVkaWF0ZWx5LiBJIGFsc28gd2FudCB0byBjb25zaWRlciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgLSBhcmUgdGhlcmUgb3B0aW9ucyB0aGF0IGNhbiB0cmFkZSBvZmYgZm9yIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5PyBBcmUgdGhlcmUgb3B0aW9ucyBoZXJlIHRoYXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBrZXJuZWwgYnVpbGQgZmxhZ3M/XG5cbkJleW9uZCB0aGUgYmFzaWMgZW5hYmxlbWVudCwgSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBhbnkgb3B0aW9ucyB0aGF0IGdvdmVybiBmZWF0dXJlcyBsaWtlIGluZGlyZWN0IGp1bXBzLCBmdW5jdGlvbiBjYWxscywgb3IgdHJhbXBvbGluZSBjaGFpbmluZy4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGUgY29kZSB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgb3B0aW9ucywgdG9vLiBPZnRlbiwgdGhlcmUgYXJlIHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBzdXJmYWNlLiBJbiBzaG9ydCwgSSdtIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGZyb20gdGhlIG1vc3QgZnVuZGFtZW50YWwgZW5hYmxlL2Rpc2FibGUgb3B0aW9ucyB0byB0aGUgZmluZS1ncmFpbmVkIGNvbnRyb2xzIHRoYXQgZGV0ZXJtaW5lIHRoZSBiZWhhdmlvciBvZiB0aGUgQlBGIHRyYW1wb2xpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozNzo0OS43MzgwNzk1NTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMzQ2OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW1wb2xpbmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBkaXNhc20ubyBtcHJvZy5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gdHJhbXBvbGluZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjUwLjI4MDQzMTMzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODA3MDUxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk15IEJQRiBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBmb3IgYW55IHNlcmlvdXMgQlBGIGRlcGxveW1lbnQuIEkgbWVhbiwgd2l0aG91dCB0aGUgSklULCBwZXJmb3JtYW5jZSBpcyBnb2luZyB0byBiZSBzZXZlcmVseSBsaW1pdGVkLCBhbmQgdGhhdCdzIGp1c3QgYSBub24tc3RhcnRlciBmb3IgbW9zdCByZWFsLXdvcmxkIHVzZSBjYXNlcy4gU28sIGBDT05GSUdfQlBGX0pJVGAgaXMgZGVmaW5pdGVseSBhIG11c3QtaGF2ZS5cblxuVGhlbiwgdGhlcmUncyBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIEknZCBiZSBzdXJwcmlzZWQgaWYgd2UgY291bGQgZ2V0IGF3YXkgKndpdGhvdXQqIHRoYXQgb25lIGVpdGhlci4gSXQncyB0aGUgd2hvbGUgZW50cnkgcG9pbnQsIGFmdGVyIGFsbC4gR290dGEgaGF2ZSB0aGF0IHN5c2NhbGwgaW50ZXJmYWNlIGVuYWJsZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgdGhlIGNncm91cCBzaXR1YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0aGF0IHN0b3JhZ2UgaXMgY29uZmlndXJlZC4gSXMgY2dyb3VwIHN1cHBvcnQgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoaXMgcGFydGljdWxhciBidWlsZCwgb3IgaXMgaXQgaGlkZGVuIGJlaGluZCBhbm90aGVyIGNvbmZpZyBvcHRpb24/IEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgSSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IG9yIGlmIGl0J3MgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtaXguIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCB0byBlbnN1cmUgc21vb3RoIG9wZXJhdGlvbiwgSSBkb24ndCB3YW50IHRvIGdldCBjYXVnaHQgd2l0aG91dCB0aGUgcmVxdWlyZWQgaW5mcmFzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozNzo1My45NjExMzk4OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzNTMzOTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9zdG9yYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjU0LjA0NjUwNTIxNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njc4NTYyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipCUEYgTG9jYWwgU3RvcmFnZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgQlBGIGxvY2FsIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgbmFtZWQgbGlrZSB0aGF0LCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGxvZ2ljIGFuZCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBsb2NhbCBzdG9yYWdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGluZ3MgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGF0IHRoaXMgZmlsZSB3aWxsIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHJlbGF0ZWQgY29kZSBhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAxNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjU5LjcxNDM2NTExN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2MDAwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX3N0b3JhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NDIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTEyPURFRklORV9CUEZfU1RPUkFHRV9DQUNIRShjZ3JvdXBfY2FjaGUpO1xcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTEzLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE0OnN0YXRpYyBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgX19yY3UgKipjZ3JvdXBfc3RvcmFnZV9wdHIodm9pZCAqb3duZXIpXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTUte1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MzU9c3RhdGljIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9kYXRhICpcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzozNjpjZ3JvdXBfc3RvcmFnZV9sb29rdXAoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBib29sIGNhY2hlaXRfbG9ja2l0KVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM3LXtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzozODpcXHRzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKmNncm91cF9zdG9yYWdlO1xcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTM5LVxcdHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXA7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNDAtXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6NDE6XFx0Y2dyb3VwX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soY2dyb3VwLVxcdTAwM2VicGZfY2dycF9zdG9yYWdlLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQyLVxcdFxcdFxcdFxcdFxcdCAgICAgICBicGZfcmN1X2xvY2tfaGVsZCgpKTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo0MzpcXHRpZiAoIWNncm91cF9zdG9yYWdlKVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTQ0LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNDYtXFx0c21hcCA9IChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjQ3OlxcdHJldHVybiBicGZfbG9jYWxfc3RvcmFnZV9sb29rdXAoY2dyb3VwX3N0b3JhZ2UsIHNtYXAsIGNhY2hlaXRfbG9ja2l0KTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy00OC19XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYz01MD1zdGF0aWMgdm9pZCAqYnBmX2NncnBfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy02MC1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo2MTpcXHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtNjItXFx0Y2dyb3VwX3B1dChjZ3JvdXApO1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9NjY9c3RhdGljIGxvbmcgYnBmX2NncnBfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy04My1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYzo4NDpzdGF0aWMgaW50IGNncm91cF9zdG9yYWdlX2RlbGV0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODUte1xcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtODctXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6ODg6XFx0c2RhdGEgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAoY2dyb3VwLCBtYXAsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy04OS1cXHRpZiAoIXNkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9OTU9c3RhdGljIGxvbmcgYnBmX2NncnBfc3RvcmFnZV9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMDQtXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTA1OlxcdGVyciA9IGNncm91cF9zdG9yYWdlX2RlbGV0ZShjZ3JvdXAsIG1hcCk7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTA2LVxcdGNncm91cF9wdXQoY2dyb3VwKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTExMD1zdGF0aWMgaW50IG5vdHN1cHBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTQtXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTE1OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTExNi17XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xMTktXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM6MTIwOnN0YXRpYyB2b2lkIGNncm91cF9zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTIxLXtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTEyNT1CUEZfQ0FMTF80KGJwZl9jZ3JwX3N0b3JhZ2VfZ2V0LCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHN0cnVjdCBjZ3JvdXAgKiwgY2dyb3VwLFxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTM2LVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjEzNzpcXHRzZGF0YSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChjZ3JvdXAsIG1hcCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTM4LVxcdGlmIChzZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jPTE1MT1CUEZfQ0FMTF8yKGJwZl9jZ3JwX3N0b3JhZ2VfZGVsZXRlLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHN0cnVjdCBjZ3JvdXAgKiwgY2dyb3VwKVxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmMtMTU2LVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE1NzpcXHRyZXR1cm4gY2dyb3VwX3N0b3JhZ2VfZGVsZXRlKGNncm91cCwgbWFwKTtcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNTgtfVxcbi0tXFxua2VybmVsL2JwZi9icGZfY2dycF9zdG9yYWdlLmM9MTYwPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBjZ3JwX3N0b3JhZ2VfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE2Mi1cXHQubWFwX2FsbG9jX2NoZWNrID0gYnBmX2xvY2FsX3N0b3JhZ2VfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE2MzpcXHQubWFwX2FsbG9jID0gY2dyb3VwX3N0b3JhZ2VfbWFwX2FsbG9jLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE2NDpcXHQubWFwX2ZyZWUgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfZnJlZSxcXG5rZXJuZWwvYnBmL2JwZl9jZ3JwX3N0b3JhZ2UuYy0xNjUtXFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBub3RzdXBwX2dldF9uZXh0X2tleSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE3MS1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfbG9jYWxfc3RvcmFnZV9tYXBfYnRmX2lkWzBdLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jOjE3MjpcXHQubWFwX293bmVyX3N0b3JhZ2VfcHRyID0gY2dyb3VwX3N0b3JhZ2VfcHRyLFxcbmtlcm5lbC9icGYvYnBmX2NncnBfc3RvcmFnZS5jLTE3My19O1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0yNDI9c3RhdGljIHZvaWQgY2dyb3VwX2JwZl9vZmZsaW5lKHN0cnVjdCBjZ3JvdXAgKmNncnApXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0Ny1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI0ODpzdGF0aWMgdm9pZCBicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZXNbXSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI0OS17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNTA6XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI1MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI1MjpcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjUzOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZV9mcmVlKHN0b3JhZ2VzW3N0eXBlXSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTQtfVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjU1LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU2OnN0YXRpYyBpbnQgYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlc1tdLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjU3OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VzW10sXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNTgtXFx0XFx0XFx0XFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNjEte1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjYyOlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNjM6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkga2V5O1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjY0LVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI2OC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI2OTpcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzA6XFx0XFx0bWFwID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV07XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzEtXFx0XFx0aWYgKCFtYXApXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3My1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI3NDpcXHRcXHRzdG9yYWdlc1tzdHlwZV0gPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAoKHZvaWQgKiltYXAsIFxcdTAwMjZrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3NS1cXHRcXHRpZiAoc3RvcmFnZXNbc3R5cGVdKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yNzctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyNzg6XFx0XFx0c3RvcmFnZXNbc3R5cGVdID0gYnBmX2Nncm91cF9zdG9yYWdlX2FsbG9jKHByb2csIHN0eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI3OS1cXHRcXHRpZiAoSVNfRVJSKHN0b3JhZ2VzW3N0eXBlXSkpIHtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI4MDpcXHRcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2ZyZWUobmV3X3N0b3JhZ2VzKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI4MS1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjg5LVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjkwOnN0YXRpYyB2b2lkIGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKmRzdFtdLFxcbmtlcm5lbC9icGYvY2dyb3VwLmM6MjkxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzcmNbXSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5Mi17XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyOTM6XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTI5NC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjI5NTpcXHRmb3JfZWFjaF9jZ3JvdXBfc3RvcmFnZV90eXBlKHN0eXBlKVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMjk2LVxcdFxcdGRzdFtzdHlwZV0gPSBzcmNbc3R5cGVdO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0yOTgtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoyOTk6c3RhdGljIHZvaWQgYnBmX2Nncm91cF9zdG9yYWdlc19saW5rKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2VzW10sXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDIte1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MzAzOlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMDQtXFxua2VybmVsL2JwZi9jZ3JvdXAuYzozMDU6XFx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShzdHlwZSlcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjMwNjpcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VfbGluayhzdG9yYWdlc1tzdHlwZV0sIGNncnAsIGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTMwNy19XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTMyNT1zdGF0aWMgdm9pZCBjZ3JvdXBfYnBmX3JlbGVhc2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zMzAtXFx0c3RydWN0IGxpc3RfaGVhZCAqc3RvcmFnZXMgPSBcXHUwMDI2Y2dycC1cXHUwMDNlYnBmLnN0b3JhZ2VzO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MzMxOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMzMyLVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0zNjMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0b3JhZ2UsIHN0bXAsIHN0b3JhZ2VzLCBsaXN0X2NnKSB7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzozNjQ6XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdG9yYWdlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jOjM2NTpcXHRcXHRicGZfY2dyb3VwX3N0b3JhZ2VfZnJlZShzdG9yYWdlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTM2Ni1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jPTQ1Mz1zdGF0aWMgaW50IGNvbXB1dGVfZWZmZWN0aXZlX3Byb2dzKHN0cnVjdCBjZ3JvdXAgKmNncnAsXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTQ5NS1cXHRcXHRcXHRpdGVtLVxcdTAwM2Vwcm9nID0gcHJvZ19saXN0X3Byb2cocGwpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6NDk2OlxcdFxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfYXNzaWduKGl0ZW0tXFx1MDAzZWNncm91cF9zdG9yYWdlLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtNDk3LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBsLVxcdTAwM2VzdG9yYWdlKTtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9ODA2PXN0YXRpYyBpbnQgX19jZ3JvdXBfYnBmX2F0dGFjaChzdHJ1Y3QgY2dyb3VwICpjZ3JwLFxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04MTMtXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEw7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTQ6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZVtNQVhfQlBGX0NHUk9VUF9TVE9SQUdFX1RZUEVdID0ge307XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4MTU6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqbmV3X3N0b3JhZ2VbTUFYX0JQRl9DR1JPVVBfU1RPUkFHRV9UWVBFXSA9IHt9O1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODE2LVxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2cgPSBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2c7XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2MS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjg2MjpcXHRpZiAoYnBmX2Nncm91cF9zdG9yYWdlc19hbGxvYyhzdG9yYWdlLCBuZXdfc3RvcmFnZSwgdHlwZSxcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg2My1cXHRcXHRcXHRcXHQgICAgICBwcm9nID8gOiBsaW5rLVxcdTAwM2VsaW5rLnByb2csIGNncnApKVxcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04NzAtXFx0XFx0aWYgKCFwbCkge1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6ODcxOlxcdFxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy04NzItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3Ny1cXHRcXHRcXHRrZnJlZShwbCk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4Nzg6XFx0XFx0XFx0YnBmX2Nncm91cF9zdG9yYWdlc19mcmVlKG5ld19zdG9yYWdlKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTg3OS1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy04ODUtXFx0cGwtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzo4ODY6XFx0YnBmX2Nncm91cF9zdG9yYWdlc19hc3NpZ24ocGwtXFx1MDAzZXN0b3JhZ2UsIHN0b3JhZ2UpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtODg3LVxcdGNncnAtXFx1MDAzZWJwZi5mbGFnc1thdHlwZV0gPSBzYXZlZF9mbGFncztcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTA2LVxcdH1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjkwNzpcXHRicGZfY2dyb3VwX3N0b3JhZ2VzX2xpbmsobmV3X3N0b3JhZ2UsIGNncnAsIHR5cGUpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtOTA4LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy05MTgtXFx0fVxcbmtlcm5lbC9icGYvY2dyb3VwLmM6OTE5OlxcdGJwZl9jZ3JvdXBfc3RvcmFnZXNfZnJlZShuZXdfc3RvcmFnZSk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy05MjAtXFx0aWYgKCFvbGRfcHJvZykge1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzkwPUJQRl9DQUxMXzIoYnBmX2dldF9sb2NhbF9zdG9yYWdlLCBzdHJ1Y3QgYnBmX21hcCAqLCBtYXAsIHU2NCwgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3OTUtXFx0ICovXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzk2OlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGUgPSBjZ3JvdXBfc3RvcmFnZV90eXBlKG1hcCk7XFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzk3OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk4LVxcdHN0cnVjdCBicGZfY2dfcnVuX2N0eCAqY3R4O1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xODAyLVxcdGN0eCA9IGNvbnRhaW5lcl9vZihjdXJyZW50LVxcdTAwM2VicGZfY3R4LCBzdHJ1Y3QgYnBmX2NnX3J1bl9jdHgsIHJ1bl9jdHgpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmM6MTgwMzpcXHRzdG9yYWdlID0gY3R4LVxcdTAwM2Vwcm9nX2l0ZW0tXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE4MDQtXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNDk1PXN0YXRpYyBib29sIF9fYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI0OTktXFx0c3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4ID0gZnAtXFx1MDAzZWF1eDtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTAwOlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgaTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTAxLVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTE4LVxcdFxcdG1hcC1cXHUwMDNlb3duZXItXFx1MDAzZWF0dGFjaF9mdW5jX3Byb3RvID0gYXV4LVxcdTAwM2VhdHRhY2hfZnVuY19wcm90bztcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTE5OlxcdFxcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xcbmtlcm5lbC9icGYvY29yZS5jLTI1MjAtXFx0XFx0XFx0bWFwLVxcdTAwM2Vvd25lci1cXHUwMDNlc3RvcmFnZV9jb29raWVbaV0gPVxcbmtlcm5lbC9icGYvY29yZS5jOjI1MjE6XFx0XFx0XFx0XFx0YXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXSA/XFxua2VybmVsL2JwZi9jb3JlLmM6MjUyMjpcXHRcXHRcXHRcXHRhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW2ldLVxcdTAwM2Vjb29raWUgOiAwO1xcbmtlcm5lbC9icGYvY29yZS5jLTI1MjMtXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjUzMy1cXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTM0OlxcdFxcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xcbmtlcm5lbC9icGYvY29yZS5jLTI1MzUtXFx0XFx0XFx0aWYgKCFyZXQpXFxua2VybmVsL2JwZi9jb3JlLmMtMjUzNi1cXHRcXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTM3OlxcdFxcdFxcdGNvb2tpZSA9IGF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV0gP1xcbmtlcm5lbC9icGYvY29yZS5jOjI1Mzg6XFx0XFx0XFx0XFx0IGF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV0tXFx1MDAzZWNvb2tpZSA6IDA7XFxua2VybmVsL2JwZi9jb3JlLmMtMjUzOS1cXHRcXHRcXHRyZXQgPSBtYXAtXFx1MDAzZW93bmVyLVxcdTAwM2VzdG9yYWdlX2Nvb2tpZVtpXSA9PSBjb29raWUgfHxcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIwLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjIxOnN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMi1cXHRzdHJ1Y3QgYnBmX21hcCBtYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yOC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyOTpzdGF0aWMgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcF90b19zdG9yYWdlKHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzAte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMxOlxcdHJldHVybiBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCwgbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMi19XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYz0zND1zdGF0aWMgYm9vbCBhdHRhY2hfdHlwZV9pc29sYXRlZChjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM1LXtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNjpcXHRyZXR1cm4gbWFwLVxcdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM3LX1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zOC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozOTpzdGF0aWMgaW50IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXlfY21wKGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDAtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqX2tleTEsIGNvbnN0IHZvaWQgKl9rZXkyKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDItXFx0aWYgKGF0dGFjaF90eXBlX2lzb2xhdGVkKFxcdTAwMjZtYXAtXFx1MDAzZW1hcCkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MzpcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSAqa2V5MSA9IF9rZXkxO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ0OlxcdFxcdGNvbnN0IHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5ICprZXkyID0gX2tleTI7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDUtXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy02NS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo2NjpzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo2NzpjZ3JvdXBfc3RvcmFnZV9sb29rdXAoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy02OC1cXHRcXHQgICAgICB2b2lkICprZXksIGJvb2wgbG9ja2VkKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNzctXFx0d2hpbGUgKG5vZGUpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo3ODpcXHRcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTc5LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjgwOlxcdFxcdHN0b3JhZ2UgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSwgbm9kZSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtODEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6ODI6XFx0XFx0c3dpdGNoIChicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5X2NtcChtYXAsIGtleSwgXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZWtleSkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy04My1cXHRcXHRjYXNlIC0xOlxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTAxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEwMjpzdGF0aWMgaW50IGNncm91cF9zdG9yYWdlX2luc2VydChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjEwMzpcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMDQte1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTA4LVxcdHdoaWxlICgqbmV3KSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTA5OlxcdFxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnRoaXM7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTEwLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjExMTpcXHRcXHR0aGlzID0gY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UsIG5vZGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTExMi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMTMtXFx0XFx0cGFyZW50ID0gKm5ldztcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMTQ6XFx0XFx0c3dpdGNoIChicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5X2NtcChtYXAsIFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VrZXksIFxcdTAwMjZ0aGlzLVxcdTAwM2VrZXkpKSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTE1LVxcdFxcdGNhc2UgLTE6XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTMyOnN0YXRpYyB2b2lkICpjZ3JvdXBfc3RvcmFnZV9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqX21hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTEzMy17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM0OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxMzU6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzYtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTM3OlxcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xMzgtXFx0aWYgKCFzdG9yYWdlKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQzLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE0NDpzdGF0aWMgbG9uZyBjZ3JvdXBfc3RvcmFnZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQ1LVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE0Ni17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTQ3OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTQ4LVxcdHN0cnVjdCBicGZfc3RvcmFnZV9idWZmZXIgKm5ldztcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE1Ni1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxNTc6XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cCgoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKiltYXAsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTU4LVxcdFxcdFxcdFxcdFxcdGtleSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjE4MjppbnQgYnBmX3BlcmNwdV9jZ3JvdXBfc3RvcmFnZV9jb3B5KHN0cnVjdCBicGZfbWFwICpfbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMTgzLVxcdFxcdFxcdFxcdCAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE4NC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTg1OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoxODY6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xODctXFx0aW50IGNwdSwgb2ZmID0gMDtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTE5MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MTkxOlxcdHN0b3JhZ2UgPSBjZ3JvdXBfc3RvcmFnZV9sb29rdXAobWFwLCBrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0xOTItXFx0aWYgKCFzdG9yYWdlKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMTUtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjE2OmludCBicGZfcGVyY3B1X2Nncm91cF9zdG9yYWdlX3VwZGF0ZShzdHJ1Y3QgYnBmX21hcCAqX21hcCwgdm9pZCAqa2V5LFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxNy1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIxOC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjE5OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXAgPSBtYXBfdG9fc3RvcmFnZShfbWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyMjA6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqc3RvcmFnZTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yMjEtXFx0dm9pZCAqdmFsO1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjI4LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyMjk6XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXAsIGtleSwgZmFsc2UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTIzMC1cXHRpZiAoIXN0b3JhZ2UpIHtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI1NS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNTY6c3RhdGljIGludCBjZ3JvdXBfc3RvcmFnZV9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKl9tYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTctXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKl9uZXh0X2tleSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yNTgte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI1OTpcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqbWFwID0gbWFwX3RvX3N0b3JhZ2UoX21hcCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MjYwOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjYxLVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjY3LVxcdGlmIChrZXkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyNjg6XFx0XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXAsIGtleSwgdHJ1ZSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjY5LVxcdFxcdGlmICghc3RvcmFnZSlcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI3Ni1cXHRcXHRzdG9yYWdlID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bWFwLVxcdTAwM2VsaXN0LFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI3NzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSwgbGlzdF9tYXApO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTI3OC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yODItXFx0aWYgKGF0dGFjaF90eXBlX2lzb2xhdGVkKFxcdTAwMjZtYXAtXFx1MDAzZW1hcCkpIHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzoyODM6XFx0XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgKm5leHQgPSBfbmV4dF9rZXk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjg0LVxcdFxcdCpuZXh0ID0gc3RvcmFnZS1cXHUwMDNla2V5O1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjI5NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmNncm91cF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0yOTcte1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMjk5LVxcdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjMwMDpcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX21hcCAqbWFwO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMwMS1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMwOC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozMDk6XFx0aWYgKGF0dHItXFx1MDAzZWtleV9zaXplICE9IHNpemVvZihzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMTAtXFx0ICAgIGF0dHItXFx1MDAzZWtleV9zaXplICE9IHNpemVvZihfX3U2NCkpXFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zMjYtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzI3OlxcdG1hcCA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXApLCBudW1hX25vZGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTMyOC1cXHRpZiAoIW1hcClcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0MC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNDE6c3RhdGljIHZvaWQgY2dyb3VwX3N0b3JhZ2VfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKl9tYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzQyLXtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzozNDM6XFx0c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXAgKm1hcCA9IG1hcF90b19zdG9yYWdlKF9tYXApO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0NC1cXHRzdHJ1Y3QgbGlzdF9oZWFkICpzdG9yYWdlcyA9IFxcdTAwMjZtYXAtXFx1MDAzZWxpc3Q7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzQ1OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UsICpzdG1wO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0Ni1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM0OS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RvcmFnZSwgc3RtcCwgc3RvcmFnZXMsIGxpc3RfbWFwKSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzUwOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZV91bmxpbmsoc3RvcmFnZSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzUxOlxcdFxcdGJwZl9jZ3JvdXBfc3RvcmFnZV9mcmVlKHN0b3JhZ2UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM1Mi1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNjEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6MzYyOnN0YXRpYyBsb25nIGNncm91cF9zdG9yYWdlX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNjMte1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzY2LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM2NzpzdGF0aWMgaW50IGNncm91cF9zdG9yYWdlX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM2OC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzc1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjM3NjpcXHRcXHQvKiBLZXkgaXMgZXhwZWN0ZWQgdG8gYmUgb2Ygc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXkgdHlwZSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzctXFx0XFx0ICogd2hpY2ggaXM6XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mzc4OlxcdFxcdCAqIHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2Vfa2V5IHtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy0zNzktXFx0XFx0ICpcXHRfX3U2NFxcdGNncm91cF9pbm9kZV9pZDtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTM5NC1cXHRcXHRtID0gKHN0cnVjdCBidGZfbWVtYmVyICopKGtleV90eXBlICsgMSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6Mzk1OlxcdFxcdHNpemUgPSBzaXplb2ZfZmllbGQoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXksIGNncm91cF9pbm9kZV9pZCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtMzk2LVxcdFxcdGlmICghYnRmX21lbWJlcl9pc19yZWdfaW50KGJ0Ziwga2V5X3R5cGUsIG0sIDAsIHNpemUpKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDAyLVxcdFxcdG0rKztcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MDM6XFx0XFx0b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9rZXksIGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MDQ6XFx0XFx0c2l6ZSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlX2tleSwgYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQwNS1cXHRcXHRpZiAoIWJ0Zl9tZW1iZXJfaXNfcmVnX2ludChidGYsIGtleV90eXBlLCBtLCBvZmZzZXQsIHNpemUpKVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDE3LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQxODpzdGF0aWMgdm9pZCBjZ3JvdXBfc3RvcmFnZV9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MTktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzZXFfZmlsZSAqbSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MjAte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQyMTpcXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIHN0eXBlO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQyMjpcXHRzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQyMy1cXHRpbnQgY3B1O1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDI1LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0MjY6XFx0c3RvcmFnZSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cChtYXBfdG9fc3RvcmFnZShtYXApLCBrZXksIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MjctXFx0aWYgKCFzdG9yYWdlKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MzItXFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVxcdTAwM2VidGYsIG1hcC1cXHUwMDNlYnRmX2tleV90eXBlX2lkLCBrZXksIG0pO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQzMzpcXHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00MzQtXFx0aWYgKHN0eXBlID09IEJQRl9DR1JPVVBfU1RPUkFHRV9TSEFSRUQpIHtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1Mi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NTM6c3RhdGljIHU2NCBjZ3JvdXBfc3RvcmFnZV9tYXBfdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NTQte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1NS1cXHQvKiBDdXJyZW50bHkgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBlbGVtZW50cyBhcmUgbm90IGNvdW50ZWQuICovXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDU2OlxcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZV9tYXApO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ1Ny19XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDU4LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ1OTpCVEZfSURfTElTVF9TSU5HTEUoY2dyb3VwX3N0b3JhZ2VfbWFwX2J0Zl9pZHMsIHN0cnVjdCxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjA6XFx0XFx0ICAgYnBmX2Nncm91cF9zdG9yYWdlX21hcClcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjE6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGNncm91cF9zdG9yYWdlX21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYyOlxcdC5tYXBfYWxsb2MgPSBjZ3JvdXBfc3RvcmFnZV9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDYzOlxcdC5tYXBfZnJlZSA9IGNncm91cF9zdG9yYWdlX21hcF9mcmVlLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2NDpcXHQubWFwX2dldF9uZXh0X2tleSA9IGNncm91cF9zdG9yYWdlX2dldF9uZXh0X2tleSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NjU6XFx0Lm1hcF9sb29rdXBfZWxlbSA9IGNncm91cF9zdG9yYWdlX2xvb2t1cF9lbGVtLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ2NjpcXHQubWFwX3VwZGF0ZV9lbGVtID0gY2dyb3VwX3N0b3JhZ2VfdXBkYXRlX2VsZW0sXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDY3OlxcdC5tYXBfZGVsZXRlX2VsZW0gPSBjZ3JvdXBfc3RvcmFnZV9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Njg6XFx0Lm1hcF9jaGVja19idGYgPSBjZ3JvdXBfc3RvcmFnZV9jaGVja19idGYsXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDY5OlxcdC5tYXBfc2VxX3Nob3dfZWxlbSA9IGNncm91cF9zdG9yYWdlX3NlcV9zaG93X2VsZW0sXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDcwOlxcdC5tYXBfbWVtX3VzYWdlID0gY2dyb3VwX3N0b3JhZ2VfbWFwX3VzYWdlLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3MTpcXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZjZ3JvdXBfc3RvcmFnZV9tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzItfTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00NzMtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDc0OmludCBicGZfY2dyb3VwX3N0b3JhZ2VfYXNzaWduKHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCwgc3RydWN0IGJwZl9tYXAgKl9tYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc1LXtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0NzY6XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUoX21hcCk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDc3LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ3ODpcXHRpZiAoYXV4LVxcdTAwM2VjZ3JvdXBfc3RvcmFnZVtzdHlwZV0gXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo0Nzk6XFx0ICAgIGF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdICE9IF9tYXApXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgwLVxcdFxcdHJldHVybiAtRUJVU1k7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgxLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ4MjpcXHRhdXgtXFx1MDAzZWNncm91cF9zdG9yYWdlW3N0eXBlXSA9IF9tYXA7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDgzLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNDg1LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ4NjpzdGF0aWMgc2l6ZV90IGJwZl9jZ3JvdXBfc3RvcmFnZV9jYWxjdWxhdGVfc2l6ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgKnBhZ2VzKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ4Ny17XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy00ODktXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NDkwOlxcdGlmIChjZ3JvdXBfc3RvcmFnZV90eXBlKG1hcCkgPT0gQlBGX0NHUk9VUF9TVE9SQUdFX1NIQVJFRCkge1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ5MS1cXHRcXHRzaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfc3RvcmFnZV9idWZmZXIpICsgbWFwLVxcdTAwM2V2YWx1ZV9zaXplO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjQ5MjpcXHRcXHQqcGFnZXMgPSByb3VuZF91cChzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSkgKyBzaXplLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTQ5My1cXHRcXHRcXHRcXHQgIFBBR0VfU0laRSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwMi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MDM6c3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSAqYnBmX2Nncm91cF9zdG9yYWdlX2FsbG9jKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MDQ6XFx0XFx0XFx0XFx0XFx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZSlcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MDUte1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUwNi1cXHRjb25zdCBnZnBfdCBnZnAgPSBfX0dGUF9aRVJPIHwgR0ZQX1VTRVI7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTA3OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2U7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTA4LVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01MTEtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTEyOlxcdG1hcCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlY2dyb3VwX3N0b3JhZ2Vbc3R5cGVdO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxMy1cXHRpZiAoIW1hcClcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUxNS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MTY6XFx0c2l6ZSA9IGJwZl9jZ3JvdXBfc3RvcmFnZV9jYWxjdWxhdGVfc2l6ZShtYXAsIFxcdTAwMjZwYWdlcyk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTE3LVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjUxODpcXHRzdG9yYWdlID0gYnBmX21hcF9rbWFsbG9jX25vZGUobWFwLCBzaXplb2Yoc3RydWN0IGJwZl9jZ3JvdXBfc3RvcmFnZSksXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTE5LVxcdFxcdFxcdFxcdCAgICAgICBnZnAsIG1hcC1cXHUwMDNlbnVtYV9ub2RlKTtcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUzNC1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1MzU6XFx0c3RvcmFnZS1cXHUwMDNlbWFwID0gKHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICopbWFwO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTUzNi1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU0My1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NDQ6c3RhdGljIHZvaWQgZnJlZV9zaGFyZWRfY2dyb3VwX3N0b3JhZ2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU0NS17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTQ2OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UgPVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU0NzpcXHRcXHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCByY3UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU0OC1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1Mi1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NTM6c3RhdGljIHZvaWQgZnJlZV9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1NC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTU1OlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2UgKnN0b3JhZ2UgPVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU1NjpcXHRcXHRjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlLCByY3UpO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU1Ny1cXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU2MS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NjI6dm9pZCBicGZfY2dyb3VwX3N0b3JhZ2VfZnJlZShzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU2My17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTY0OlxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTY1LVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzAtXFx0bWFwID0gXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZW1hcC1cXHUwMDNlbWFwO1xcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jOjU3MTpcXHRzdHlwZSA9IGNncm91cF9zdG9yYWdlX3R5cGUobWFwKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzItXFx0aWYgKHN0eXBlID09IEJQRl9DR1JPVVBfU1RPUkFHRV9TSEFSRUQpXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTczOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VyY3UsIGZyZWVfc2hhcmVkX2Nncm91cF9zdG9yYWdlX3JjdSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTc0LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1NzU6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZXJjdSwgZnJlZV9wZXJjcHVfY2dyb3VwX3N0b3JhZ2VfcmN1KTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01NzYtfVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3Ny1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1Nzg6dm9pZCBicGZfY2dyb3VwX3N0b3JhZ2VfbGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlLFxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU3OS1cXHRcXHRcXHQgICAgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCxcXG4tLVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTU4MS17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTgyOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTgzLVxcbi0tXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTkyLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bWFwLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYzo1OTM6XFx0V0FSTl9PTihjZ3JvdXBfc3RvcmFnZV9pbnNlcnQobWFwLCBzdG9yYWdlKSk7XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmMtNTk0LVxcdGxpc3RfYWRkKFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VsaXN0X21hcCwgXFx1MDAyNm1hcC1cXHUwMDNlbGlzdCk7XFxuLS1cXG5rZXJuZWwvYnBmL2xvY2FsX3N0b3JhZ2UuYy01OTgtXFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NTk5OnZvaWQgYnBmX2Nncm91cF9zdG9yYWdlX3VubGluayhzdHJ1Y3QgYnBmX2Nncm91cF9zdG9yYWdlICpzdG9yYWdlKVxcbmtlcm5lbC9icGYvbG9jYWxfc3RvcmFnZS5jLTYwMC17XFxua2VybmVsL2JwZi9sb2NhbF9zdG9yYWdlLmM6NjAxOlxcdHN0cnVjdCBicGZfY2dyb3VwX3N0b3JhZ2VfbWFwICptYXA7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM3OjU5Ljc4OTk3MzE4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDc4MTE0Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDZ3JvdXAgQlBGIENvbmZpZ3VyYXRpb24gYW5kIE1ha2VmaWxlIEV4cGxvcmF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGNncm91cCBCUEYgZnVuY3Rpb25hbGl0eSBhZ2Fpbi4gTmVlZCB0byBiZSBzdXJlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGlmIG1lbW9yeSBzZXJ2ZXMsIGl0IHNob3VsZCBiZSBgQ09ORklHX0NHUk9VUF9CUEZgLiBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGF0LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGtlcm5lbCdzIGNncm91cCBCUEYgaW50ZWdyYXRpb24gaXMgYWx3YXlzIGV2b2x2aW5nLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXQncyBwcm9iYWJseSBiZXN0IHRvIGdvIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhpcyBmaWxlIGlzIG9mdGVuIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIHBpZWNlcyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEuIEl0J3MgbGlrZWx5IHRoYXQgZGVwZW5kZW5jaWVzIGFuZCBjb21waWxhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gY2dyb3VwIEJQRiBhcmUgZGVjbGFyZWQgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIG5hbWUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5ldyBvciBpbnRlcmVzdGluZyBjaGFuZ2VzIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgbmV3IGNvbXBpbGF0aW9uIGZsYWdzIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTc5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6Mzg6MDMuODY4MDkxNDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NzIxNTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNncm91cF9zdG9yYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM4OjAzLjk3NDg3NDk3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTcxMzY1MzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgT2JqZWN0IENvbXBpbGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGxvY2FsX3N0b3JhZ2Uub2Agb3IgYGJwZl9jZ3JwX3N0b3JhZ2Uub2Agb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBidWlsdC4gR2l2ZW4gdGhlc2UgYXJlIEJQRiByZWxhdGVkLCBteSBmaXJzdCBzdG9wIGhhcyB0byBiZSB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGJ1aWxkIHJ1bGVzLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgc2hvdyBtZSBob3cgdGhlc2UgYXJlIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg2OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjI1LjY4ODUzMTMxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MDc4NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvY2FsX3N0b3JhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfbG9jYWxfc3RvcmFnZS5vIGJwZl90YXNrX3N0b3JhZ2Uub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBmaXh1cHMubyBjZmcubyBzdGF0ZXMubyBiYWNrdHJhY2subyBjaGVja19idGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozOToyNi4xOTI2MjU5NzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NDUyNzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQlBGIFN5c2NhbGwgRGVwZW5kZW5jeSBmb3IgU3RvcmFnZSBNb2R1bGVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBCUEYgbW9kdWxlcy4gSSBrbm93IGBsb2NhbF9zdG9yYWdlLm9gICpkZWZpbml0ZWx5KiBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZWQsIHRoYXQncyBjbGVhciBmcm9tIGl0cyBtYWtldXAsIHJpZ2h0PyBCdXQgd2hhdCBhYm91dCBgYnBmX2NncnBfc3RvcmFnZS5vYD8gVGhhdCdzIHRoZSBxdWVzdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0ICphbHNvKiBkZXBlbmRzIG9uIHRoZSBCUEYgc3lzY2FsbCBpbnRlcmZhY2UuIFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgaGF2ZSBpbXBvcnRhbnQgaW1wbGljYXRpb25zIGZvciBob3cgSSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZsYWdzIHVzZWQgdG8gYnVpbGQgaXQgdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgYnVpbHQgd2l0aCB0aGUgc2FtZSBmbGFnLCBhIGRpZmZlcmVudCBvbmUsIG9yIGV2ZW4gZGVwZW5kIG9uIGFub3RoZXIgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjMwLjQ2NzE1Njc1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1NDE4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NncnBfc3RvcmFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MzM9aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY2dyb3VwX2l0ZXIubyBicGZfY2dycF9zdG9yYWdlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTM1LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjMwLjUyMTcwNTExNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIwNzY1MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQlBGIFRyYW1wb2xpbmUgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyB0aGF0IGZvciB0aGlzIHBhcnRpY3VsYXIgdGFzaywgSSdtIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX0NHUk9VUFNgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmaWxlLiBUaGVyZSdzIHNvbWV0aGluZyBpbiB0aGVyZSBJIHdhbnQgdG8gY2hlY2sgYWdhaW4sIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdCBvciBob3cgdGhlIEJQRiB0cmFtcG9saW5lcyBhcmUgc2V0IHVwIHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzLiBJIHByb2JhYmx5IGhhdmUgYSBzcGVjaWZpYyBzY2VuYXJpbyBvciBwb3RlbnRpYWwgaXNzdWUgaW4gbWluZCB0aGF0IEkgbmVlZCB0byBjb25maXJtIG9yIHJldmlzaXQsIHNvIGl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjE2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6Mzk6MzQuMjQyNDgxNzI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE3NTQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzgyPXN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTgwOC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo4MDk6c3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MTAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkyMT1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0NC1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk0NTpcXHRcXHRlcnIgPSBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2codGd0X3Byb2csIG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2cpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk0Ni1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozOTozNC4zMDM2NjQ4NDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5NjA3MDk3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEJQRiBUcmFtcG9saW5lIExpbmtpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCDigJMgd2hpY2ggc3VnZ2VzdHMgc29tZSBzb3J0IG9mIHRhcmdldCBwcm9ncmFtIHJlcGxhY2VtZW50IGNoZWNrIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbGlua2luZyBwcm9jZXNzLiBJbnRlcmVzdGluZy5cblxuTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdywgSSBuZWVkIHRvIHRyYWNlICpiYWNrd2FyZHMqLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXMgY2FsbGluZyBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuIEZpbmRpbmcgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgaGlnaGVyLWxldmVsIGxvZ2ljIHRoYXQgdHJpZ2dlcnMgdGhlIHRyYW1wb2xpbmUgbGlua2luZyBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIHRhcmdldCBwcm9ncmFtIGNoZWNrLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE0NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjM5OjQ1LjI2NDM3ODk5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4ODE4MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTYyPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY5OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzAtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA5Mj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzU6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjI3PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXFx0XFx0ZGF0YS1cXHUwMDNlZW50cnkgPSBcXHUwMDI2bW5vZGUtXFx1MDAzZWVudHJ5O1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzozOTo0NS4zMjMyNjc3NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0ODgwOTQwMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFByb2dyYW0gQXR0YWNobWVudCBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhcmUgYWxsIGNydWNpYWwgZW50cnkgcG9pbnRzLiBUaGV5J3JlIHRoZSBnYXRlcyB0aHJvdWdoIHdoaWNoIEJQRiBwcm9ncmFtcyBnZXQgYXR0YWNoZWQuIEVzc2VudGlhbGx5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgaW50ZXJmYWNlcyBmb3IgaW50ZWdyYXRpbmcgQlBGIHByb2dyYW1zIGludG8gdmFyaW91cyBrZXJuZWwgY29udGV4dHMuIE5vdywgc2luY2UgdGhvc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBpbiBjaGFyZ2Ugb2YgcHJvZ3JhbSBhdHRhY2htZW50LCBJIHdhbnQgdG8gZmluZCB0aGUgY2FsbGluZyBsb2NhdGlvbnMgb2YgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGlkZW50aWZ5IHRoZSBjb250ZXh0cyB3aGljaCBtYWtlIHVzZSBvZiBpdC4gVGhhdCB3aWxsIHByb3ZpZGUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IEJQRiBwcm9ncmFtcyBhcmUgYmVpbmcgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDoyOS44MTEzNjYyNzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Nzk4MjE3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MTUwOT1zdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaztcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMTUxMS0jaWZkZWYgQ09ORklHX0JQRl9KSVRcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE1MTI6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTEzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTYwNT11MTYgYnBmX291dF9zdGFja19hcmdfY250KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjA2LSNlbHNlXFxuaW5jbHVkZS9saW51eC9icGYuaDoxNjA3OnN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjA4LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc5NS1cXHRcXHQgKiBBbGxvdyByZS1hdHRhY2ggZm9yIFRSQUNJTkcgYW5kIExTTSBwcm9ncmFtcy4gSWYgaXQnc1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3OTY6XFx0XFx0ICogY3VycmVudGx5IGxpbmtlZCwgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nIHdpbGwgZmFpbC5cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzk3LVxcdFxcdCAqIEVYVCBwcm9ncmFtcyBuZWVkIHRvIHNwZWNpZnkgdGd0X3Byb2dfZmQsIHNvIHRoZXlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4NjktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzg3MDpcXHRlcnIgPSBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNmxpbmstXFx1MDAzZWxpbmsubm9kZSwgdHIsIHRndF9wcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zODcxLVxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTkwMj1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZW1vdmVfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTIwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyMTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2MS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NjI6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2OC1cXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTcwLVxcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwOTI9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM1OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZzaGltX2xpbmstXFx1MDAzZWxpbmsubm9kZSwgdHIsIE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyNz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc2LVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjc3OlxcdFxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OC1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6MzIuNTkxMTk1NDI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzgzOTEzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogVGFyZ2V0aW5nIEJQRiBUcmFjaW5nIFByb2dyYW0gQXR0YWNobWVudCoqXG5cbk9rYXksIHNvIG15IGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgLiBUaGF0IGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGF0dGFjaGluZyBCUEYgdHJhY2luZyBwcm9ncmFtcywgYW5kIHRoYXQncyAqYWx3YXlzKiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZnV6emluZy4gSXQncyBjbGVhcmx5IHJlYWNoYWJsZSwgd2hpY2ggaXMga2V5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB0ZXN0aW5nIHRoaXMgdGhvcm91Z2hseS5cblxuTm93LCBJJ20gbm90aW5nIHRoYXQgdGhlIGZ1bmN0aW9uIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGdldHMgY2FsbGVkIHdoZW4gd2UncmUgYXR0YWNoaW5nIGFuIGV4dGVuc2lvbiBwcm9ncmFtLCBzcGVjaWZpY2FsbHkgdGhvc2Ugb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9FWFRgLiBUaGUgcGF0Y2ggYWRkZWQgYSBuZXcgY2hlY2sgcmVsYXRlZCB0byBwb3RlbnRpYWwgY2dyb3VwIHN0b3JhZ2Ugc2l6ZSBtaXNtYXRjaGVzLiBJZiB0aGUgc2l6ZXMgZG9uJ3QgbGluZSB1cCwgaXQncyBzdXBwb3NlZCB0byByZXR1cm4gYC1FSU5WQUxgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQsIHNvIHRoYXQncyBhbm90aGVyIGZ1bmN0aW9uIEkgbmVlZCB0byBmdXp6LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBgLUVJTlZBTGAgaXMgcmV0dXJuZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIHdvcnRoIGRpcmVjdGx5IGZ1enppbmcuIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBkaXJlY3QgZnV6emluZyBtb3JlIGNvbXBsaWNhdGVkLCBidXQgSSBzdGlsbCBuZWVkIHRvIGZpbmQgd2F5cyB0byB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIE9uIHRoZSBvdGhlciBoYW5kLCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUuIEFsc28sIEkgdGhvdWdodCBgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hgIHdhcyBub24tc3RhdGljIHRvbywgYW5kIHdvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUuIFdhaXQsIGxldCBtZSBjaGVjay4gQWgsIGl0J3Mgc3RhdGljIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIE9rYXksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0IGJlaW5nIHN0YXRpYyBhIGJpdCBjbG9zZXIgdG8gbWFrZSBzdXJlIEknbSB0ZXN0aW5nIHRoaXMgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIzOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDozOS4wNjk1ODk4NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3MjEwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MzY4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNjg4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM2ODk6c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzY5MC1cXHRcXHRcXHRcXHQgICBpbnQgdGd0X3Byb2dfZmQsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00MzUyPXN0YXRpYyBpbnQgYnBmX3Jhd190cF9saW5rX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00Mzc2LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0Mzc3OlxcdFxcdHJldHVybiBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChwcm9nLCAwLCAwLCAwLCBhdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDM3OC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfUkFXX1RSQUNFUE9JTlQ6XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg3NC1cXHRjYXNlIEJQRl9QUk9HX1RZUEVfRVhUOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4NzU6XFx0XFx0cmV0ID0gYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gocHJvZyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODc2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTYtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTc6XFx0XFx0XFx0cmV0ID0gYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2gocHJvZyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6MzkuMTMzMzE3MTM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjU4ODI4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEZ1bmN0aW9uIFZpc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBCUEYgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlLiBGaXJzdCBvYnNlcnZhdGlvbjogYGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZW4sIEkgc2VlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIHdoaWNoIGlzICpub24tc3RhdGljKiwgdGhhdCdzIGFuIGludGVyZXN0aW5nIG9uZSB0byBmb2xsb3cuIEFuZCBqdXN0IHRvIGNvbmZpcm0sIGBsaW5rX2NyZWF0ZWAgaXMgc3RhdGljLiBUaGUgYHN5c19icGZgIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50IGlzIHRvbyBicm9hZCBmb3IgbXkgaW1tZWRpYXRlIG5lZWRzLlxuXG5Ob3csIGxldCdzIGZvY3VzIG9uIHRoaXMgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZnVuY3Rpb24uIEkgbmVlZCB0byBrbm93IGlmIGl0J3MgZXhwb3J0ZWQgb3IganVzdCBkZWNsYXJlZCBub24tc3RhdGljLiBMb29raW5nIGF0IGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLiBHb29kLiBMZXQncyBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBhbnl0aGluZyB3aXRoIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIC0geWVwLCBzdGlsbCBzdGF0aWMuIEFuZCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFzIHdlbGwsIHN0aWxsIHN0YXRpYy5cblxuT2theSwgbGV0J3MgdGFrZSBhIHN0ZXAgYmFjay4gSXMgdGhlcmUgYW55dGhpbmcgKmVsc2UqIHRoYXQgaXMgbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltZSBjYW5kaWRhdGUgaGVyZS4gSXQgYXBwZWFycyB0byBiZSBteSBtb3N0IHByb21pc2luZyBvcHRpb24uIEFsc28sIGBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltYCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgY2FsbCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBidXQgdGhlIHN0YXRpYyBgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nYCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgYHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nYCBpcyBpbnZvbHZlZC5cblxuTGV0J3MgcXVpY2tseSByZS1leGFtaW5lIGBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2Agb25lIG1vcmUgdGltZS4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDo0NS41OTkyMDM2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM4NDQxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTAyPXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTIxOnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkyMi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTYyPWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY5OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzAtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA5Mj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM0LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzU6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjI3PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzYtXFx0XFx0ZGF0YS1cXHUwMDNlZW50cnkgPSBcXHUwMDI2bW5vZGUtXFx1MDAzZWVudHJ5O1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2Nzc6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc4LVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDo0NS42OTMwNTQxMThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwMTk2NDI1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBwcm9mZXNzaW9uYWwgcGVyc3BlY3RpdmUsIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIGEgcXVpY2sgbWVudGFsIGNoZWNrLiBJIHNlZSB0aGF0IGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIGJlaW5nIGNhbGxlZCAqd2l0aGluKiB0aGUgY29udGV4dCBvZiBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0J3Mgc2lnbmlmaWNhbnQuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9uIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgbGlua2luZyBwcm9jZXNzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVncml0eSBjaGVjayBvciBzZWN1cml0eSBtZWFzdXJlIHJlbGF0ZWQgdG8gcHJvZ3JhbSByZXBsYWNlbWVudC4gYGJwZl9mcmVwbGFjZWAgYW5kIHRyYW1wb2xpbmVzIHRvZ2V0aGVyIGFyZSBjb21tb25seSB1c2VkIGluIGVCUEYgdG8gaG90LXN3YXAgcHJvZ3JhbXMgb3IgbW9kaWZ5IHRoZSBleGVjdXRpb24gcGF0aC4gU28sIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIG11c3QgYmUgcGFydCBvZiB0aGUgbWVjaGFuaXNtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGludGVncml0eSBjaGVja3Mgb3IgdmFsaWRhdGlvbiBzdGVwcyB0aGF0IGZ1bmN0aW9uIGlzIHBlcmZvcm1pbmcgb24gdGhlIHRhcmdldCBwcm9ncmFtIGR1cmluZyBhIFwicmVwbGFjZVwiIG9wZXJhdGlvbi4gSXMgaXQgdmFsaWRhdGluZyBwcm9ncmFtIHNpemUsIGluc3RydWN0aW9uIHNldCBjb21wYXRpYmlsaXR5LCBwZXJtaXR0ZWQgc3lzY2FsbHMsIG9yIHBlcmhhcHMgZXZlbiBjaGVja2luZyBmb3IgbWFsaWNpb3VzIGNvZGUgaW5qZWN0aW9uIGF0dGVtcHRzPyBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyBzYWZlIGFuZCBjb250cm9sbGVkIHByb2dyYW0gdXBkYXRlcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU2MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQwOjUwLjU5NTAyMTkzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY1MDA3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTc4Mj1zdGF0aWMgZW51bSBicGZfdHJhbXBfcHJvZ190eXBlIGJwZl9hdHRhY2hfdHlwZV90b190cmFtcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy04MDgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6ODA5OnN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtODEwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05MjE9c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDQtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NDU6XFx0XFx0ZXJyID0gYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHRndF9wcm9nLCBub2RlLVxcdTAwM2VsaW5rLVxcdTAwM2Vwcm9nKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NDYtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6NTAuNjkxNTI3NTIyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTcxODI4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgTGlua2luZyBQcm9jZXNzKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNwZWNpZmljYWxseSBob3cgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBNeSBhaW0gaXMgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSB0YXJnZXQgcHJvZ3JhbSBjaGVjayBpbiB0aGlzIGNvbnRleHQuIEknbSB0aGlua2luZyBJJ2xsIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiB3aXRoaW4gYF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoYXTigJlzIGdvaW5nIG9uIGF0IHRoZSBwcm9ncmFtJ3Mgc3RhZ2Ugd2hlbiBpdCBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgd2lsbCBoZWxwIGluIGZpZ3VyaW5nIG91dCB0aGUgdXNlIGNhc2VzIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgdGFyZ2V0IHByb2dyYW0gcmVwbGFjZW1lbnQuIEl0J3MgYSBrZXkgcGFydCBvZiBlbnN1cmluZyB0aGUgdHJhbXBvbGluZSBtZWNoYW5pc20gYmVoYXZlcyBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDA6NTUuNDg4NzE0MDEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjE6XFx0c3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuIDkyMjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbiA5MjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcXG4gOTI0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcXG4gOTI1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmRhdGEpXFxuIDkyNjpcXHR7XFxuIDkyNzpcXHRcXHRlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUga2luZDtcXG4gOTI4OlxcdFxcdGludCBlcnIgPSAwO1xcbiA5Mjk6XFx0XFx0aW50IGNudCA9IDAsIGk7XFxuIDkzMDpcXHRcXG4gOTMxOlxcdFxcdGtpbmQgPSBicGZfYXR0YWNoX3R5cGVfdG9fdHJhbXAobm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxuIDkzMjpcXHRcXHRpZiAodHItXFx1MDAzZWV4dGVuc2lvbl9wcm9nKVxcbiA5MzM6XFx0XFx0XFx0LyogY2Fubm90IGF0dGFjaCBmZW50cnkvZmV4aXQgaWYgZXh0ZW5zaW9uIHByb2cgaXMgYXR0YWNoZWQuXFxuIDkzNDpcXHRcXHRcXHQgKiBjYW5ub3Qgb3ZlcndyaXRlIGV4dGVuc2lvbiBwcm9nIGVpdGhlci5cXG4gOTM1OlxcdFxcdFxcdCAqL1xcbiA5MzY6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gOTM3OlxcdFxcbiA5Mzg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEJQRl9UUkFNUF9NQVg7IGkrKylcXG4gOTM5OlxcdFxcdFxcdGNudCArPSB0ci1cXHUwMDNlcHJvZ3NfY250W2ldO1xcbiA5NDA6XFx0XFxuIDk0MTpcXHRcXHRpZiAoa2luZCA9PSBCUEZfVFJBTVBfUkVQTEFDRSkge1xcbiA5NDI6XFx0XFx0XFx0LyogQ2Fubm90IGF0dGFjaCBleHRlbnNpb24gaWYgZmVudHJ5L2ZleGl0IGFyZSBpbiB1c2UuICovXFxuIDk0MzpcXHRcXHRcXHRpZiAoY250KVxcbiA5NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gOTQ1OlxcdFxcdFxcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZyk7XFxuIDk0NjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA5NDc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gOTQ4OlxcdFxcdFxcdHRyLVxcdTAwM2VleHRlbnNpb25fcHJvZyA9IG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2c7XFxuIDk0OTpcXHRcXHRcXHRyZXR1cm4gYnBmX2FyY2hfdGV4dF9wb2tlKHRyLVxcdTAwM2VmdW5jLmFkZHIsIEJQRl9NT0RfTk9QLFxcbiA5NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBCUEZfTU9EX0pVTVAsIE5VTEwsXFxuIDk1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIG5vZGUtXFx1MDAzZWxpbmstXFx1MDAzZXByb2ctXFx1MDAzZWJwZl9mdW5jKTtcXG4gOTUyOlxcdFxcdH1cXG4gOTUzOlxcdFxcdGVyciA9IGJwZl90cmFtcG9saW5lX2FkZF9wcm9nKHRyLCBub2RlLCBjbnQpO1xcbiA5NTQ6XFx0XFx0aWYgKGVycilcXG4gOTU1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NjpcXHRcXHRlcnIgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIHRydWUgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sIG9wcywgZGF0YSk7XFxuIDk1NzpcXHRcXHRpZiAoZXJyKVxcbiA5NTg6XFx0XFx0XFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2codHIsIG5vZGUpO1xcbiA5NTk6XFx0XFx0cmV0dXJuIGVycjtcXG4gOTYwOlxcdH1cXG4gOTYxOlxcdFxcbiA5NjI6XFx0aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuIDk2MzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuIDk2NDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXFxuIDk2NTpcXHR7XFxuIDk2NjpcXHRcXHRpbnQgZXJyO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbiA5Njk6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbiA5NzA6XFx0XFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MDo1NS40ODg4OTAzMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg3NzM5MzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZXNlIEJQRiB0cmFtcG9saW5lcyB3b3JrLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSdyZSByZXBsYWNpbmcgcHJvZ3JhbXMg4oCTIHRoYXQncyB3aGVuIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGdldHMgY2FsbGVkIHdpdGggYEJQRl9UUkFNUF9SRVBMQUNFYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgbWFwcyB0byB0aGUgYEJQRl9QUk9HX1RZUEVfRVhUYCB0eXBlLiBUaGUgXCJmcmVwbGFjZVwiIGlzIHRoZSBrZXkuIE15IGZvY3VzIHN5bWJvbCBoZXJlIGxvb2tzIHRvIGJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0J3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayB0aGUgY29yZSBsb2dpYy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMuIE9rYXksIEkgc2VlIGBicGZfdHJhY2luZ19wcm9nX2F0dGFjaGAsIGJ1dCB0aGF0J3Mgc3RhdGljLiBJdCdzIGNhbGxlZCBmcm9tIGBsaW5rX2NyZWF0ZWAsIHdoaWNoIGlzIGFsc28gc3RhdGljLCBidXQgYGxpbmtfY3JlYXRlYCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYHN5c19icGZgLiBTbywgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZG9lcyBpbmRlZWQgbG9vayBsaWtlIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHJlZnJlc2ggbXkgbWVtb3J5LCBsZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzLiBXZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfQlBGX0pJVGAsIGBDT05GSUdfQ0dST1VQX0JQRmAsIGFuZCBhbHNvLCBvZiBjb3Vyc2UsIGBDT05GSUdfQ0dST1VQU2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX0NHUk9VUF9CUEZgIGlzIHRoZSByaWdodCBvbmUgZm9yIGNncm91cC1yZWxhdGVkIEJQRiBzdG9yYWdlLiBUaGF0J3MgYSBjcnVjaWFsIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI1MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjAxLjM2NjI4NzcyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNDM5MDI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfc3RvcmFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjAxLjQ3OTczMzg0OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDM5MjM1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDR1JPVVBfQlBGIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIHNvIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gY2hlY2sgZm9yIHRoYXQgYENHUk9VUF9CUEZgIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBvcHRpb24gd2lsbCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkuIEknbSB0aGlua2luZyBlaXRoZXIgYGluaXQvS2NvbmZpZ2Ag4oCTIGJlY2F1c2UgaXQgb2Z0ZW4gaG91c2VzIGNvcmUsIGZvdW5kYXRpb25hbCBvcHRpb25zLCBvciwgbW9yZSBsaWtlbHksIGlmIGl0J3MgcmVsYXRlZCB0byBlQlBGLCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gVGhlIGJwZiBzdWJzeXN0ZW0gaXMsIGJ5IGl0cyBuYXR1cmUsIGhlYXZpbHkgcmVsaWFudCBvbiBrY29uZmlnIG9wdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY2dyb3Vwcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBzdWItb3B0aW9ucyBkZWZpbmVkIHRoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg0NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjA1LjkxODk3MzgxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwMjYwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ0dST1VQX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEzNDQ9Y29uZmlnIENHUk9VUF9QRVJGXFxuLS1cXG5pbml0L0tjb25maWctMTM1NC1cXG5pbml0L0tjb25maWc6MTM1NTpjb25maWcgQ0dST1VQX0JQRlxcbmluaXQvS2NvbmZpZy0xMzU2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MDUuOTkxMDA4NzA3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjI2ODY3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBCUEYgQ29uZmlndXJhdGlvbiBcdTAwMjYgSklUIFN0YXR1cyoqXG5cbk9rYXksIHNvIHRoZSBjb250ZXh0IGlzIGBDR1JPVVBfQlBGYC4gR290IGl0LiBUaGF0J3MgdGhlIGtleSBjb25maWcgb3B0aW9uIGZvciB0aGlzIHVzZSBjYXNlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBpcyBzZXQgY29ycmVjdGx5LiBOb3csIGJlZm9yZSBJIHByb2NlZWQgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgYEJQRl9KSVRgLiBUaGlzIGlzIGNyaXRpY2FsLiBXaXRob3V0IEpJVCwgcGVyZm9ybWFuY2Ugd2lsbCBiZSBzZXZlcmVseSBoYW1wZXJlZCwgYW5kIHRoZSB3aG9sZSBkZXBsb3ltZW50IGlzIHByb2JhYmx5IG5vdCBnb2luZyB0byBiZSB3b3J0aCBpdC4gVGltZSB0byBydW4gYSBxdWljayBkaWFnbm9zdGljLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MDkuODEzNjk4NTg1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMzMTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9ND1jb25maWcgQlBGXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMTItIyBDbGFzc2ljIEJQRiBKSVQgKGNCUEYpXFxua2VybmVsL2JwZi9LY29uZmlnOjEzOmNvbmZpZyBIQVZFX0NCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTE0LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0xNi0jIEV4dGVuZGVkIEJQRiBKSVQgKGVCUEYpXFxua2VybmVsL2JwZi9LY29uZmlnOjE3OmNvbmZpZyBIQVZFX0VCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTE4LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0yMS0jIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0Llxcbmtlcm5lbC9icGYvS2NvbmZpZzoyMjpjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cXHRib29sXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy00NC1cXHRkZXBlbmRzIG9uIEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZzo0NTpcXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00Ni1cXHRzZWxlY3QgRVhFQ01FTVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcdGhlbHBcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZzo3MDpcXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkyPWNvbmZpZyBCUEZfTFNNXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctOTYtXFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctOTgtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MTowOS44ODkwMzYzNjNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5ODY1MDM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgQlBGIFZlcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBqdXN0IGdldCB0aGUgb2J2aW91cyBvdXQgb2YgdGhlIHdheSDigJMgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgIGFyZSB0aGUgY29yZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIFdlJ3JlIGFzc3VtaW5nIHRob3NlIGFyZSBlbmFibGVkLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGUuIE5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8sIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyB2ZXJ5IHNwZWNpZmljLiBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLiBUaGlzIGlzIGNydWNpYWw7IGlmIGl0J3Mgbm90IGV4cG9ydGVkLCBteSBlbnRpcmUgbGluZSBvZiByZWFzb25pbmcgaXMgZGVhZCBpbiB0aGUgd2F0ZXIuIFRoYXQgZnVuY3Rpb24gaXMgYSBrZXkgYnVpbGRpbmcgYmxvY2sgYW5kIEkgbmVlZCB0byBiZSBzdXJlIGl0J3MgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MToxNS43ODc2ODk5MTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NzM3Nzg3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEzOjQxOjE1Ljg3NzQzNTgxOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAwMjk4OTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgTGlua2luZyBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhcyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0LiBJdCdzIG5vdCBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUsIHVubGlrZSB0aGUgb3RoZXIgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIGFuZCBgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBJJ20gZ29pbmcgdG8gY2VudGVyIG15IGVmZm9ydHMgaGVyZS4gQWxzbywgdGhlcmUgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbWAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIHdoaWNoIGNvdWxkIHdhcnJhbnQgYSBsb29rIGxhdGVyIG9uLCBidXQgZm9yIG5vdywgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgaXMgdGhlIGZvY2FsIHBvaW50LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZXMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgIGVuYWJsZWQuIGBDT05GSUdfQ0dST1VQU2AgaXMgbmVlZGVkIGZvciBgQ09ORklHX0NHUk9VUF9CUEZgLCBhbmQgYENPTkZJR19CUEZgIGlzIG5lZWRlZCBmb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgaW4gcGxhY2UuXG5cblJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLCBpdCBsb29rcyBsaWtlIGEgY2hlY2sgaXMgYmVpbmcgYWRkZWQgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIFRoZSBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIGNncm91cCBzdG9yYWdlIHR5cGVzLCBjb21wYXJpbmcgYHZhbHVlX3NpemVgIG9mIG1hcHMgYmV0d2VlbiB0aGUgdGFyZ2V0IGFuZCBleHRlbnNpb24gcHJvZ3JhbXMuIElmIHRoZXJlJ3MgYSBtaXNtYXRjaCwgaXQgcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0J3MgZGlyZWN0bHkgcmVsYXRlZCB0byBtZW1vcnkgc2FmZXR5LCBhbmQgdGhlcmVmb3JlLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQncyB3b3J0aCBmdXp6aW5nLlxuXG5TbywgdG8gc3VtbWFyaXplOiBJJ20gZm9jdXNlZCBvbiB0aGUgc3ltYm9sIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBhbmQgSSd2ZSBub3RlZCB0aGF0IHdlIG5lZWQgdGhlc2UgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYENHUk9VUF9CUEZgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSSdtIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mzg0LCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MToyNS44ODA0Mjc2MDlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc5Mjg5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIHByZXZlbnQgYSBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gYXR0YWNoaW5nIGEgQlBGIGV4dGVuc2lvbiBwcm9ncmFtIChmcmVwbGFjZSkgdG8gYSB0YXJnZXQgcHJvZ3JhbSB3aXRoIGEgbWlzbWF0Y2hlZCBjZ3JvdXAgc3RvcmFnZSB2YWx1ZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmYCBzeXNjYWxsIHdoZW4gYXR0YWNoaW5nIHRyYWNpbmcgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkNHUk9VUF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2AgdG8gcHJldmVudCBhIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBhdHRhY2hpbmcgYSBCUEYgZXh0ZW5zaW9uIHByb2dyYW0gKGZyZXBsYWNlKSB0byBhIHRhcmdldCBwcm9ncmFtIHdpdGggYSBtaXNtYXRjaGVkIGNncm91cCBzdG9yYWdlIHZhbHVlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGZgIHN5c2NhbGwgd2hlbiBhdHRhY2hpbmcgdHJhY2luZyBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MjUuOTk4MzYyOTI1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTExMzQ4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTM6NDE6MjUuOTk4ODU0NDI1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY5MTA4NTEzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDExNTg3NWJmNTFjMGNmMThkMWFiNTVmOWI4NDRmYmE2NmJhOTZmZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMzozMzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDFhNzIxZmM0YmVmNTYuLjM3NDNmNmMyNWUyY2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC04MDYsOSArODA2LDExIEBAIHN0YXRpYyBlbnVtIGJwZl90cmFtcF9wcm9nX3R5cGUgYnBmX2F0dGFjaF90eXBlX3RvX3RyYW1wKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2coc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZylcbitzdGF0aWMgaW50IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSB0Z3RfcHJvZy1cdTAwM2VhdXg7XG4rXHRlbnVtIGJwZl9jZ3JvdXBfc3RvcmFnZV90eXBlIGk7XG4gXG4gXHRndWFyZChtdXRleCkoXHUwMDI2YXV4LVx1MDAzZWV4dF9tdXRleCk7XG4gXHRpZiAoYXV4LVx1MDAzZXByb2dfYXJyYXlfbWVtYmVyX2NudClcbkBAIC04MjEsNiArODIzLDIwIEBAIHN0YXRpYyBpbnQgYnBmX2ZyZXBsYWNlX2NoZWNrX3RndF9wcm9nKHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRhdXgtXHUwMDNlaXNfZXh0ZW5kZWQgPSB0cnVlO1xuK1xuK1x0LyogQXQgcnVudGltZSB0aGUgZXh0ZW5zaW9uIHByb2dyYW0gaW5oZXJpdHMgdGhlIHRhcmdldCBwcm9ncmFtJ3NcbitcdCAqIGNncm91cCBzdG9yYWdlIGNvbnRleHQgKHZpYSBwcm9nX2l0ZW0tXHUwMDNlY2dyb3VwX3N0b3JhZ2UpLCB3aGlsZSB0aGVcbitcdCAqIHZlcmlmaWVyIGJvdW5kcyBpdHMgYWNjZXNzZXMgYnkgaXRzIG93biBtYXAncyB2YWx1ZV9zaXplLiBBXG4rXHQgKiB2YWx1ZV9zaXplIG1pc21hdGNoIGxlYWRzIHRvIHNsYWIgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2Nncm91cF9zdG9yYWdlX3R5cGUoaSkge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqdGd0X21hcCA9IHRndF9wcm9nLVx1MDAzZWF1eC1cdTAwM2VjZ3JvdXBfc3RvcmFnZVtpXTtcbitcdFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG4rXG4rXHRcdGlmIChwcm9nX21hcCBcdTAwMjZcdTAwMjYgKCF0Z3RfbWFwIHx8IHByb2dfbWFwLVx1MDAzZXZhbHVlX3NpemUgIT0gdGd0X21hcC1cdTAwM2V2YWx1ZV9zaXplKSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC05MjYsNyArOTQyLDcgQEAgc3RhdGljIGludCBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4gXHRcdC8qIENhbm5vdCBhdHRhY2ggZXh0ZW5zaW9uIGlmIGZlbnRyeS9mZXhpdCBhcmUgaW4gdXNlLiAqL1xuIFx0XHRpZiAoY250KVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4tXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZyk7XG4rXHRcdGVyciA9IGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZyh0Z3RfcHJvZywgbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2cpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdHRyLVx1MDAzZWV4dGVuc2lvbl9wcm9nID0gbm9kZS1cdTAwM2VsaW5rLVx1MDAzZXByb2c7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MToyNS45OTg4NTUzMTVaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkxMDgxODUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJwZl9mcmVwbGFjZV9jaGVja190Z3RfcHJvZ2Agd2l0aGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGZvY3VzZWQgb24gYSBjcml0aWNhbCB2YWxpZGF0aW9uIGFyb3VuZCBgY2dyb3VwX3N0b3JhZ2VgIG1hcCBpbnRlcmFjdGlvbnMgZHVyaW5nIEJQRiBwcm9ncmFtIGV4dGVuc2lvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrIGVuc3VyaW5nIHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSAqbWF0Y2hlcyogdGhlIHRhcmdldCBwcm9ncmFtJ3MgY29ycmVzcG9uZGluZyBtYXAgc2l6ZS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBmbGFncyBhIFwidmFsdWVfc2l6ZSBtaXNtYXRjaCBsZWFkcyB0byBzbGFiIG91dC1vZi1ib3VuZHMgYWNjZXNzXCIg4oCTIHdoaWNoIGluc3RhbnRseSByYWlzZXMgdGhlIHJlZCBmbGFnIG9mIGEgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLiBJdCBzZWVtcyBjbGVhciB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSAqa25vd24qIG91dC1vZi1ib3VuZHMgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuXG5cblNpbmNlIHRoZSBzdGF0ZWQgdnVsbmVyYWJpbGl0eSBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggYXJlIHdlbGwtYWRkcmVzc2VkIGJ5IEtBU0FOLCB0aGlzIGlzIGEgY2xlYXIgY2FzZS4gVGhlIGFuYWx5c2lzIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgbWVyZWx5ICp2YWxpZGF0ZXMqIHRoaXMgYHZhbHVlX3NpemVgIHJlbGF0aW9uc2hpcC4gSSBzZWUgbm8gaW5kaWNhdGlvbiBvZiBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbnMsIHBhc3NpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgb3IgZXhwb3NpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHN0cmljdGx5IGEgKmNoZWNrKiB0byBwcmV2ZW50IHRoZSBPT0IuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIGJsb2NrIHRvIG1ha2Ugc3VyZTpcbmBgYGNcblx0Zm9yX2VhY2hfY2dyb3VwX3N0b3JhZ2VfdHlwZShpKSB7XG5cdFx0c3RydWN0IGJwZl9tYXAgKnRndF9tYXAgPSB0Z3RfcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG5cdFx0c3RydWN0IGJwZl9tYXAgKnByb2dfbWFwID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlY2dyb3VwX3N0b3JhZ2VbaV07XG5cblx0XHRpZiAocHJvZ19tYXAgXHUwMDI2XHUwMDI2ICghdGd0X21hcCB8fCBwcm9nX21hcC1cdTAwM2V2YWx1ZV9zaXplICE9IHRndF9tYXAtXHUwMDNldmFsdWVfc2l6ZSkpXG5cdFx0XHRyZXR1cm4gLUVJTlZBTDtcblx0fVxuYGBgXG5ZZWFoLCBleGFjdGx5IGFzIEkgdGhvdWdodC4gUHVyZSB2YWxpZGF0aW9uLiBObyBuZXcgbWVtb3J5IGV4cG9zdXJlIGlzIGludm9sdmVkLiBTbywgZm9yIHRoZSByZWNvcmQsIEknbGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgdG9vbHMgKEtBU0FOKSBmb3IgdGhlIGpvYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2MCwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMzo0MTozMi45MDk2Nzg2NjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBicGZfZnJlcGxhY2VfY2hlY2tfdGd0X3Byb2dgIHRvIGVuc3VyZSB0aGF0IHRoZSBgdmFsdWVfc2l6ZWAgb2YgYGNncm91cF9zdG9yYWdlYCBtYXBzIGluIHRoZSBleHRlbnNpb24gcHJvZ3JhbSBtYXRjaGVzIHRoZSB0YXJnZXQgcHJvZ3JhbS4gVGhlIGNvbW1lbnQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBhIG1pc21hdGNoIGxlYWRzIHRvIGEgc2xhYiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[1] Phase: Succeeded StartedAt: 2026-08-14 13:41:44 +0000 UTC FinishedAt: 2026-08-14 13:41:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 13:41:44 +0000 UTC FinishedAt: 2026-08-14 13:41:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2] Phase: Succeeded StartedAt: 2026-08-14 13:41:44 +0000 UTC FinishedAt: 2026-08-14 17:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 13:41:44 +0000 UTC FinishedAt: 2026-08-14 17:22:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 13:41:44 +0000 UTC FinishedAt: 2026-08-14 13:41:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 13:41:44 +0000 UTC FinishedAt: 2026-08-14 13:41:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow77gbj/series-workflow77gbj-convert-artifact-945416070/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 13:41:54 +0000 UTC FinishedAt: 2026-08-14 13:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 13:41:54 +0000 UTC FinishedAt: 2026-08-14 13:59:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a0d2a143-c282-4157-8731-aa95d7d0c7e6,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-workflow77gbj/series-workflow77gbj-convert-artifact-945416070/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": "08837256-55b6-4a24-a5de-e8be68d2bdca", "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-workflow77gbj/series-workflow77gbj-build-action-2023435036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 13:41:54 +0000 UTC FinishedAt: 2026-08-14 13:58:51 +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:*a0d2a143-c282-4157-8731-aa95d7d0c7e6,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-workflow77gbj/series-workflow77gbj-convert-artifact-945416070/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": "08837256-55b6-4a24-a5de-e8be68d2bdca", "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-workflow77gbj/series-workflow77gbj-build-action-2023435036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 13:59:01 +0000 UTC FinishedAt: 2026-08-14 13:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 13:59:01 +0000 UTC FinishedAt: 2026-08-14 13:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 13:59:01 +0000 UTC FinishedAt: 2026-08-14 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 13:59:01 +0000 UTC FinishedAt: 2026-08-14 13:59:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow77gbj/series-workflow77gbj-convert-artifact-1431134425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 13:59:11 +0000 UTC FinishedAt: 2026-08-14 14:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 13:59:11 +0000 UTC FinishedAt: 2026-08-14 14:00:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08837256-55b6-4a24-a5de-e8be68d2bdca,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-workflow77gbj/series-workflow77gbj-build-action-2023435036/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-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 14:01:07 +0000 UTC FinishedAt: 2026-08-14 14:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 14:01:07 +0000 UTC FinishedAt: 2026-08-14 14:01:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 14:01:07 +0000 UTC FinishedAt: 2026-08-14 14:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 14:01:07 +0000 UTC FinishedAt: 2026-08-14 14:18:21 +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:*a0d2a143-c282-4157-8731-aa95d7d0c7e6,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-workflow77gbj/series-workflow77gbj-convert-artifact-1431134425/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": "37d6f6ef-68ce-4607-9aac-429c8effecdc", "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-workflow77gbj/series-workflow77gbj-build-action-3794044213/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 14:01:07 +0000 UTC FinishedAt: 2026-08-14 14:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a0d2a143-c282-4157-8731-aa95d7d0c7e6,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-workflow77gbj/series-workflow77gbj-convert-artifact-1431134425/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": "37d6f6ef-68ce-4607-9aac-429c8effecdc", "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-workflow77gbj/series-workflow77gbj-build-action-3794044213/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 14:18:21 +0000 UTC FinishedAt: 2026-08-14 14:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 14:18:21 +0000 UTC FinishedAt: 2026-08-14 14:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 14:18:21 +0000 UTC FinishedAt: 2026-08-14 14:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 14:18:21 +0000 UTC FinishedAt: 2026-08-14 14:20:19 +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:*37d6f6ef-68ce-4607-9aac-429c8effecdc,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-workflow77gbj/series-workflow77gbj-build-action-3794044213/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-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 14:20:29 +0000 UTC FinishedAt: 2026-08-14 17:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 14:20:29 +0000 UTC FinishedAt: 2026-08-14 17:22:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"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:*08837256-55b6-4a24-a5de-e8be68d2bdca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37d6f6ef-68ce-4607-9aac-429c8effecdc,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-workflow77gbj/series-workflow77gbj-build-action-2023435036/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-workflow77gbj/series-workflow77gbj-build-action-3794044213/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 14:20:29 +0000 UTC FinishedAt: 2026-08-14 14:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 14:20:29 +0000 UTC FinishedAt: 2026-08-14 14:20:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"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-workflow77gbj/series-workflow77gbj-convert-artifact-1842049998/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 14:20:29 +0000 UTC FinishedAt: 2026-08-14 14:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 14:20:29 +0000 UTC FinishedAt: 2026-08-14 14:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 14:20:30 +0000 UTC FinishedAt: 2026-08-14 14:20:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 14:20:40 +0000 UTC FinishedAt: 2026-08-14 17:22:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow77gbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_link_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","CGROUP_BPF"],"series_id":"a7684560-2d10-403b-8bb7-744f666fbd98","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 14:20:40 +0000 UTC FinishedAt: 2026-08-14 17:22:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08837256-55b6-4a24-a5de-e8be68d2bdca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37d6f6ef-68ce-4607-9aac-429c8effecdc,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-workflow77gbj/series-workflow77gbj-build-action-2023435036/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-workflow77gbj/series-workflow77gbj-build-action-3794044213/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-workflow77gbj/series-workflow77gbj-convert-artifact-1842049998/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,}