Name: series-workflowt898t Phase: Succeeded StartedAt: 2026-09-10 09:51:14 +0000 UTC FinishedAt: 2026-09-10 13:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[0] Phase: Succeeded StartedAt: 2026-09-10 09:51:14 +0000 UTC FinishedAt: 2026-09-10 09:55:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 09:51:14 +0000 UTC FinishedAt: 2026-09-10 09:55:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "abc1d2eb-df75-4665-afd7-02fdf758e66b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_action_put_many", "tca_action_gd", "tcf_action_delete", "tcf_del_notify", "tc_ctl_action" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAgICYjMzQ7dGNhX2FjdGlvbl9nZCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDt0Y19jdGxfYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9hY3Rpb25fcHV0X21hbnkoKWAgaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYFRDQV9BQ1RfTUFYX1BSSU9gIHNsb3RzIHJhdGhlciB0aGFuIHRlcm1pbmF0aW5nIGF0IHRoZSBmaXJzdCBOVUxMIGVudHJ5IHZpYSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHJlbWFpbmluZyBhY3Rpb24gcmVmZXJlbmNlcyBhcmUgcmVsZWFzZWQgd2hlbiBhbiBlYXJsaWVyIGFjdGlvbiBkZWxldGlvbiBpbiBhIGJhdGNoIGZhaWxzIGFmdGVyIGNsZWFyaW5nIGl0cyBzbG90LlxuXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wmIzM5O3MgYmF0Y2ggYWN0aW9uIGRlbGV0aW9uIGVycm9yIGhhbmRsaW5nIHBhdGggKHRjZl9hY3Rpb25fcHV0X21hbnkgaW4gbmV0L3NjaGVkL2FjdF9hcGkuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0RFTEFDVElPTikgYW5kIGlzIHdlbGwtc3VpdGVkIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuaW5kZXggMzdlY2VkODRkZmE1Zi4uODY3MTBhNTk2YTBmYSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcbkBAIC0xMjIzLDExICYjNDM7MTIyMywxNiBAQCBzdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXG4gXG4gc3RhdGljIHZvaWQgdGNmX2FjdGlvbl9wdXRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXG4ge1xuLVx0c3RydWN0IHRjX2FjdGlvbiAqYTtcbiBcdGludCBpO1xuIFxuLVx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS1cdTAwM2VvcHM7XG4mIzQzO1x0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRDQV9BQ1RfTUFYX1BSSU87IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGNfYWN0aW9uICphID0gYWN0aW9uc1tpXTtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFhKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG9wcyA9IGEtXHUwMDNlb3BzO1xuIFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXG4gXHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxuQEAgLTAsMCAmIzQzOzEsMTE1IEBAXG4mIzQzO1tcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7ZDcxMFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Z2FjdFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzI1NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7dG90YWwgYWN0cyAzXFxcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBbXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIDAsXG4mIzQzOyAgICAgICAgICAgICAgICAxLFxuJiM0MzsgICAgICAgICAgICAgICAgMjU1XG4mIzQzOyAgICAgICAgICAgIF1cbiYjNDM7ICAgICAgICBdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtkNzExXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O1JlbGVhc2UgdGFpbCByZWZlcmVuY2VzIGFmdGVyIG1pZGRsZSBhY3Rpb24gZGVsZXRpb24gZmFpbHNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Z2FjdFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMlwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzI1NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7dG90YWwgYWN0cyAyXFxcXGIuKmluZGV4IDIgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBbXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIDAsXG4mIzQzOyAgICAgICAgICAgICAgICAxLFxuJiM0MzsgICAgICAgICAgICAgICAgMjU1XG4mIzQzOyAgICAgICAgICAgIF1cbiYjNDM7ICAgICAgICBdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtkNzEzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0RlbGV0ZSBhIHRhaWwgYWN0aW9uIG9uY2UgYWZ0ZXIgYSBmYWlsZWQgYmF0Y2hcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Z2FjdFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcHJvdG9jb2wgaXAgaW5ncmVzcyB1MzIgbWF0Y2ggdTMyIDAgMCBhY3Rpb24gZ2FjdCBpbmRleCAxXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBhY3Rpb25zIGRlbCBhY3Rpb24gZ2FjdCBpbmRleCAxIGFjdGlvbiBnYWN0IGluZGV4IDJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzI1NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0O3NoIC1jICYjMzk7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXHUwMDI2XHUwMDI2ICRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0JiMzOTtcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDt0b3RhbCBhY3RzIDFcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcYlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXVxuJiM0MzsgICAgICAgIF1cbiYjNDM7ICAgIH1cbiYjNDM7XVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAgICYjMzQ7dGNhX2FjdGlvbl9nZCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDt0Y19jdGxfYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBjbGVhbnVwIGxvZ2ljIGluIHRyYWZmaWMgY29udHJvbCYjMzk7cyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmY2NWY2MDEzMDg1ZDM3MmNkNTVkZGJkY2M3NGMyNWZlOWY2NDZlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggMzdlY2VkODRkZmE1Zi4uODY3MTBhNTk2YTBmYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC0xMjIzLDExICYjNDM7MTIyMywxNiBAQCBzdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApCiAKIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKQogewotCXN0cnVjdCB0Y19hY3Rpb24gKmE7CiAJaW50IGk7CiAKLQl0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7Ci0JCWNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLSZndDtvcHM7CiYjNDM7CS8qIERlbGV0aW9uIG1heSBoYXZlIGNsZWFyZWQgZW50cmllcyBiZWZvcmUgZmFpbGluZy4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRDQV9BQ1RfTUFYX1BSSU87IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgdGNfYWN0aW9uICphID0gYWN0aW9uc1tpXTsKJiM0MzsJCWNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7CiYjNDM7CiYjNDM7CQlpZiAoIWEpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlvcHMgPSBhLSZndDtvcHM7CiAJCWlmICh0Y2ZfYWN0aW9uX3B1dChhKSkKIAkJCW1vZHVsZV9wdXQob3BzLSZndDtvd25lcik7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2FjdGlvbnMvYmF0Y2gtZGVsZXRlLmpzb24KQEAgLTAsMCAmIzQzOzEsMTE1IEBACiYjNDM7WwomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7ZDcxMCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7UmVsZWFzZSB0YWlsIHJlZmVyZW5jZXMgYWZ0ZXIgZmlyc3QgYWN0aW9uIGRlbGV0aW9uIGZhaWxzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2dhY3QmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXSwKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDEmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MjU1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3RvdGFsIGFjdHMgM1xcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxiLippbmRleCAzIHJlZiAxIGJpbmQgMFxcYiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgWwomIzQzOyAgICAgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIDAsCiYjNDM7ICAgICAgICAgICAgICAgIDEsCiYjNDM7ICAgICAgICAgICAgICAgIDI1NQomIzQzOyAgICAgICAgICAgIF0KJiM0MzsgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2Q3MTEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlbGVhc2UgdGFpbCByZWZlcmVuY2VzIGFmdGVyIG1pZGRsZSBhY3Rpb24gZGVsZXRpb24gZmFpbHMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7YWN0aW9ucyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Z2FjdCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdLAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMiYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDsyNTUmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7dG90YWwgYWN0cyAyXFxiLippbmRleCAyIHJlZiAyIGJpbmQgMVxcYi4qaW5kZXggMyByZWYgMSBiaW5kIDBcXGImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdCiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtkNzEzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtEZWxldGUgYSB0YWlsIGFjdGlvbiBvbmNlIGFmdGVyIGEgZmFpbGVkIGJhdGNoJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2dhY3QmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXSwKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MjU1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0O3NoIC1jICYjMzk7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgJmFtcDsmYW1wOyAkVEMgYWN0aW9ucyBscyBhY3Rpb24gZ2FjdCYjMzk7JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3RvdGFsIGFjdHMgMVxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXGImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdCiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0KJiM0MztdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgYW5kIHRoZSBmaWxlIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgaXMgYG5ldC9zY2hlZC9hY3RfYXBpLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGNmX2FjdGlvbl9wdXRfbWFueWAgZnVuY3Rpb24sIGFzIGlkZW50aWZpZWQgYnkgdGhlIGRpZmYuIFRoaXMgYXJlYSBoYW5kbGVzIHRoZSBhY3Rpb24gQVBJIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzY2hlZHVsZXIsIHdoaWNoIGlzIHNvbWV0aGluZyBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGNvZGUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLCB3aGljaCBpbiB0aGlzIGNhc2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGxpbmUgMTIyMyBvZiB0aGUgbWVudGlvbmVkIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIGxpbmUgaW4gb3JkZXIgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgYWx0ZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdHJldCA9IF9fdGNmX2lkcl9yZWxlYXNlKGEsIGJpbmQsIHRydWUpO1xuMTIxMTpcdFx0XHRpZiAocmV0ID09IEFDVF9QX0RFTEVURUQpXG4xMjEyOlx0XHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuMTIxMzpcdFx0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4xMjE0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjEyMTU6XHRcdH1cbjEyMTY6XHRcdHJldHVybiByZXQ7XG4xMjE3Olx0fVxuMTIxODpcdFxuMTIxOTpcdHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcbjEyMjA6XHR7XG4xMjIxOlx0XHRyZXR1cm4gX190Y2ZfYWN0aW9uX3B1dChwLCBmYWxzZSk7XG4xMjIyOlx0fVxuMTIyMzpcdFxuMTIyNDpcdHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuMTIyNTpcdHtcbjEyMjY6XHRcdGludCBpO1xuMTIyNzpcdFxuMTIyODpcdFx0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuMTIyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSYjNDM7JiM0MzspIHtcbjEyMzA6XHRcdFx0c3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07XG4xMjMxOlx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XG4xMjMyOlx0XG4xMjMzOlx0XHRcdGlmICghYSlcbjEyMzQ6XHRcdFx0XHRjb250aW51ZTtcbjEyMzU6XHRcdFx0b3BzID0gYS1cdTAwM2VvcHM7XG4xMjM2Olx0XHRcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSlcbjEyMzc6XHRcdFx0XHRtb2R1bGVfcHV0KG9wcy1cdTAwM2Vvd25lcik7XG4xMjM4Olx0XHR9XG4xMjM5Olx0fVxuMTI0MDpcdFxuMTI0MTpcdHN0YXRpYyB2b2lkIHRjYV9wdXRfYm91bmRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxuMTI0MjpcdHtcbjEyNDM6XHRcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4xMjQ0Olx0XHRpbnQgaTtcbjEyNDU6XHRcbjEyNDY6XHRcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbjEyNDc6XHRcdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuMTI0ODpcdFxuMTI0OTpcdFx0XHRpZiAoaW5pdF9yZXNbaV0gPT0gQUNUX1BfQ1JFQVRFRClcbjEyNTA6XHRcdFx0XHRjb250aW51ZTtcbjEyNTE6XHRcbjEyNTI6XHRcdFx0aWYgKHRjZl9hY3Rpb25fcHV0KGEpKVxuMTI1MzpcdFx0XHRcdG1vZHVsZV9wdXQob3BzLVx1MDAzZW93bmVyKTtcbjEyNTQ6XHRcdH1cbjEyNTU6XHR9XG4xMjU2Olx0XG4xMjU3Olx0aW50XG4xMjU4Olx0dGNmX2FjdGlvbl9kdW1wX29sZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBpbnQgYmluZCwgaW50IHJlZilcbjEyNTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBBY3Rpb24gRXhlY3V0aW9uIExvZ2ljKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBhY3Rpb25zIGFyZSBiZWluZyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbiDigJMgd2hlcmUgaXMgaXQgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoZSBzeXN0ZW0/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHRoZSByb2xlIG9mIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgaW4gdGhpcyB3aG9sZSBwcm9jZXNzPyBJIHN1c3BlY3QgdGhleSYjMzk7cmUgY2xvc2VseSByZWxhdGVkLCBtYXliZSBldmVuIHBhcnQgb2YgYSBsb29wIG9yIHNvbWUgaXRlcmF0aXZlIG9wZXJhdGlvbi4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHF1aWNrIGNvZGUgZGl2ZS4gTGV0JiMzOTtzIGZpcmUgdXAgYGdyZXBgIGFuZCBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBib3RoIG9mIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLiBUaGlzIHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgY2FsbCBzaXRlcyBmb3IgYHRjZl9hY3Rpb25fcHV0X21hbnlgIGFuZCBzaG93IG1lIHdoZXJlIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgaXMgYmVpbmcgdXRpbGl6ZWQsIGdpdmluZyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXppbmcgdGhlIGFjdGlvbiBleGVjdXRpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2FsbHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2FjdGlvbl9wdXRfbWFueSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0xMjE5PXN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEyMjQ6c3RhdGljIHZvaWQgdGNmX2FjdGlvbl9wdXRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjUte1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjAzMT10Y2FfYWN0aW9uX2dkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjA3NTpcdHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucyk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIHRoaXMgY29kZSwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZWZpbml0aW9uIG9mIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpdHMgc2lnbmF0dXJlLCBob3cgaXQmIzM5O3MgdXNlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgaXRzIHJvbGUgaXMgaW4gaXRlcmF0aW5nIHRocm91Z2ggYWN0aW9ucyB3aXRoaW4gdGhlIFRyYWZmaWMgQ29udHJvbCBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIGFjdGlvbnM7IGlzIGl0IGp1c3QgcHJvdmlkaW5nIGl0ZXJhdGlvbiwgb3IgaXMgaXQgcG90ZW50aWFsbHkgbWFuaXB1bGF0aW5nIHRoZW0gaW4gc29tZSB3YXk/CgpOZXh0LCBteSBmb2N1cyBzaGlmdHMgdG8gYHRjYV9hY3Rpb25fZ2RgLiBJIGhhdmUgdG8gY29ubmVjdCB0aGlzIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSBhIGhhbmRsZSwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgb3IgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGFjdGlvbi4gQ29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLCBgZ2RgIGxpa2VseSBtZWFucyAmIzM0O2dlbmVyaWMgZGF0YSYjMzQ7IG9yICYjMzQ7Z2xvYmFsIGRhdGEmIzM0OyBmb3IgYWN0aW9ucywgYW5kIEkgd2FudCB0byBjb25maXJtIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gaXQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBhY3Rpb25zIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgbG9vcC4gVGhlIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBmaWxlIGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlc2UgY3J1Y2lhbCBkZWZpbml0aW9ucyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVsYXRpb25zaGlwIHRob3JvdWdobHkgYmVmb3JlIEkgY2FuIGdvIGFueSBmdXJ0aGVyLiBJIGFsc28ga25vdyB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgb2YgdGhlIEFjdGlvbiBBUEkgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wa3RfY2xzLmg9Mjc5PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y2ZfZXh0c19wdXRfbmV0KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjk0LVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjI5NTojZGVmaW5lIHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIFxcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjk2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgKChhKSA9IGFjdGlvbnNbaV0pOyBpJiM0MzsmIzQzOylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWN0aW9uIEl0ZXJhdG9yIGluIFRyYWZmaWMgQ29udHJvbCoqCgpPa2F5LCBzbyBJIHdhcyBkaWdnaW5nIGludG8gdGhlIHRyYWZmaWMgY29udHJvbCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gLiBJIG5vdGljZWQgc29tZXRoaW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGluIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIGFjdGlvbnMuIFRoZSBtYWNybywgYCNkZWZpbmUgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucylgLCBjbGV2ZXJseSB1c2VzIGBhY3Rpb25zW2ldID09IE5VTExgIGFzIGl0cyB0ZXJtaW5hdGlvbiBjb25kaXRpb24uIEJ1dCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuCgpUaGUgaXNzdWUgYXJpc2VzIGR1cmluZyBiYXRjaCBhY3Rpb24gZGVsZXRpb24sIHdoZW4gYWN0aW9ucyBhcmUgc2V0IHRvIGBOVUxMYCBhZnRlciB0aGV5JiMzOTtyZSByZW1vdmVkIChlaXRoZXIgZHVyaW5nIG9yIGFmdGVyIHRoZSBkZWxldGlvbiBsb29wKS4gSWYgYW4gZXJyb3IgcG9wcyB1cCAqYmVmb3JlKiBhbGwgYWN0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoaXMgZGVsZXRpb24gcHJvY2VzcywgdGhlIGl0ZXJhdG9yIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgd2FzIHByZW1hdHVyZWx5IHN0b3BwaW5nIHdoZW4gaXQgaGl0IHRoYXQgZmlyc3QgYE5VTExgIHBvaW50ZXIuIFRoaXMgd291bGQgbGVhZCB0byBhIG1lbW9yeSBsZWFrIGJlY2F1c2UgdGhlIGFjdGlvbnMgKmFmdGVyKiB0aGF0IGBOVUxMYCBwb2ludGVyIHdlcmUgbmV2ZXIgZGUtcmVmZXJlbmNlZCBvciByZWxlYXNlZCEKClRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCBmcm9tIHRoZSBwYXRjaCwgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIGl0ZXJhdGlvbiBpbiBgdGNmX2FjdGlvbl9wdXRfbWFueWAgc28gdGhhdCBpdCBsb29wcyB0aHJvdWdoICphbGwqIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBlZmZlY3RpdmVseSBza2lwcGluZyBgTlVMTGAgZW50cmllcyAoYGlmICghYSkgY29udGludWU7YCkgcmF0aGVyIHRoYW4gYnJlYWtpbmcgdGhlIGxvb3AgYXQgdGhlIGZpcnN0IGBOVUxMYC4gVGhpcyB3YXksICpldmVyeSogYWN0aW9uIGdldHMgcHJvY2Vzc2VkLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcm1lZGlhdGUgYE5VTExgIHBvaW50ZXJzLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHdvcmtzLCBJJiMzOTttIGdvaW5nIHRvIHJlYWQgdGhlIGNvZGUgb2YgYHRjYV9hY3Rpb25fZ2RgIGFyb3VuZCBsaW5lIDIwMzAsIHdoZXJlIHRoZSBiYXRjaCBkZWxldGlvbiBsb2dpYyB3b3VsZCBsaWtlbHkgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhY3Rpb25zIGFyZSBhY3R1YWxseSBoYW5kbGVkIGR1cmluZyB0aGlzIGRlbGV0aW9uIHByb2Nlc3MgdG8gc2VlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG9yaWdpbmFsIHByb2JsZW0gYW5kIHRoZSBudWFuY2VzIG9mIHRoZSBwcm9wb3NlZCBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDMwOlx0c3RhdGljIGludFxuMjAzMTpcdHRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcbjIwMzI6XHRcdCAgICAgIHUzMiBwb3J0aWQsIGludCBldmVudCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMjAzMzpcdHtcbjIwMzQ6XHRcdGludCBpLCByZXQ7XG4yMDM1Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfQUNUX01BWF9QUklPICYjNDM7IDFdO1xuMjAzNjpcdFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0O1xuMjAzNzpcdFx0c2l6ZV90IGF0dHJfc2l6ZSA9IDA7XG4yMDM4Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307XG4yMDM5Olx0XG4yMDQwOlx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9BQ1RfTUFYX1BSSU8sIG5sYSwgTlVMTCxcbjIwNDE6XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuMjA0MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwNDM6XHRcdFx0cmV0dXJuIHJldDtcbjIwNDQ6XHRcbjIwNDU6XHRcdGlmIChldmVudCA9PSBSVE1fREVMQUNUSU9OIFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9ST09UKSB7XG4yMDQ2Olx0XHRcdGlmICh0YlsxXSlcbjIwNDc6XHRcdFx0XHRyZXR1cm4gdGNhX2FjdGlvbl9mbHVzaChuZXQsIHRiWzFdLCBuLCBwb3J0aWQsIGV4dGFjayk7XG4yMDQ4Olx0XG4yMDQ5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hpbGUgZmx1c2hpbmcgVEMgYWN0aW9uXCYjMzQ7KTtcbjIwNTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMDUxOlx0XHR9XG4yMDUyOlx0XG4yMDUzOlx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgdGJbaV07IGkmIzQzOyYjNDM7KSB7XG4yMDU0Olx0XHRcdGFjdCA9IHRjZl9hY3Rpb25fZ2V0XzEobmV0LCB0YltpXSwgbiwgcG9ydGlkLCBleHRhY2spO1xuMjA1NTpcdFx0XHRpZiAoSVNfRVJSKGFjdCkpIHtcbjIwNTY6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKGFjdCk7XG4yMDU3Olx0XHRcdFx0Z290byBlcnI7XG4yMDU4Olx0XHRcdH1cbjIwNTk6XHRcdFx0YXR0cl9zaXplICYjNDM7PSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xuMjA2MDpcdFx0XHRhY3Rpb25zW2kgLSAxXSA9IGFjdDtcbjIwNjE6XHRcdH1cbjIwNjI6XHRcbjIwNjM6XHRcdGF0dHJfc2l6ZSA9IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKGF0dHJfc2l6ZSk7XG4yMDY0Olx0XG4yMDY1Olx0XHRpZiAoZXZlbnQgPT0gUlRNX0dFVEFDVElPTilcbjIwNjY6XHRcdFx0cmV0ID0gdGNmX2dldF9ub3RpZnkobmV0LCBwb3J0aWQsIG4sIGFjdGlvbnMsIGF0dHJfc2l6ZSwgZXZlbnQsXG4yMDY3Olx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4yMDY4Olx0XHRlbHNlIHsgLyogZGVsZXRlICovXG4yMDY5Olx0XHRcdHJldCA9IHRjZl9kZWxfbm90aWZ5KG5ldCwgbiwgYWN0aW9ucywgcG9ydGlkLCBhdHRyX3NpemUsIGV4dGFjayk7XG4yMDcwOlx0XHRcdGlmIChyZXQpXG4yMDcxOlx0XHRcdFx0Z290byBlcnI7XG4yMDcyOlx0XHRcdHJldHVybiAwO1xuMjA3MzpcdFx0fVxuMjA3NDpcdGVycjpcbjIwNzU6XHRcdHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucyk7XG4yMDc2Olx0XHRyZXR1cm4gcmV0O1xuMjA3NzpcdH1cbjIwNzg6XHRcbjIwNzk6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRjZl9hZGRfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcbjIwODA6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXG4yMDgxOlx0XHRcdFx0XHRcdCAgdTMyIHBvcnRpZCwgc2l6ZV90IGF0dHJfc2l6ZSxcbjIwODI6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMDgzOlx0e1xuMjA4NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjIwODU6XHRcbjIwODY6XHRcdHNrYiA9IGFsbG9jX3NrYihtYXgoYXR0cl9zaXplLCBOTE1TR19HT09EU0laRSksIEdGUF9LRVJORUwpO1xuMjA4NzpcdFx0aWYgKCFza2IpXG4yMDg4Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTtcbjIwODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB0Y2ZfZGVsX25vdGlmeWAgYW5kIGl0cyBJbXBhY3Qgb24gYGFjdGlvbnNbXWAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUgYHRjZl9kZWxfbm90aWZ5YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYGFjdGlvbnNbXWAgYXJyYXkuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBgYWN0aW9uc1tdYCBhcnJheSBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgaG93IHRyYWZmaWMgY29udHJvbCBwb2xpY2llcyBhcmUgZW5mb3JjZWQsIGFuZCBkZWxldGluZyBhIHJ1bGUsIG9yIG1vZGlmeWluZyBhbiBleGlzdGluZyBvbmUgdmlhIHRoZSBmdW5jdGlvbiBiZWluZyBleHBsb3JlZCBoYXMgdG8gaGF2ZSBzcGVjaWZpYyBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgYHRjZl9kZWxfbm90aWZ5YCBtb2RpZmllcyB0aG9zZSBhcnJheSBlbnRyaWVzLiBEb2VzIGl0IHNpbXBseSBjbGVhciB0aGVtPyBEb2VzIGl0IHJlb3JkZXIgdGhlbT8gRG9lcyBpdCBjb21wbGV0ZWx5IHJlbW92ZSB0aGVtPyBEb2VzIGl0IGRvIGEgY29tYmluYXRpb24gb2YgYWxsIG9mIHRoZSBhYm92ZSwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBUaGUgcHJlY2lzZSBtZWNoYW5pY3Mgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgcGFyYW1vdW50IHRvIGRldGVybWluaW5nIGhvdyBydWxlIHJlbW92YWwvbW9kaWZpY2F0aW9uIGlzIGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gYWx0ZXJzIGBhY3Rpb25zW11gIGlzIGdvaW5nIHRvIGJlIGtleSB0byBncmFzcGluZyBpdHMgb3ZlcmFsbCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB0aGF0IGFycmF5LCBhbmQgdGhlIHBvaW50ZXJzIGl0IGNvbnRhaW5zLCB0byBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZSBkZWxldGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0xOTIzPWludCB0Y2ZfYWN0aW9uX3Jlb2ZmbG9hZF9jYihmbG93X2luZHJfYmxvY2tfYmluZF9jYl90ICpjYixcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE5ODAtXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE5ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE5ODItXHRcdFx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAwMjpzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDAzLVx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLCB1MzIgcG9ydGlkLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMS1cdH0gZWxzZSB7XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwMTI6XHRcdHNrYiA9IHRjZl9kZWxfbm90aWZ5X21zZyhuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDEzLVx0XHRcdFx0XHQgZXh0YWNrKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA2OC1cdGVsc2UgeyAvKiBkZWxldGUgKi9cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjA2OTpcdFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA3MC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTk4MC0yMDI5IG9mIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4gVGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLi4uIHJpZ2h0LCBpdCYjMzk7cyBhYm91dCB0aGUgYWN0aW9uIG1vZHVsZSBBUEksIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MgaGVyZS4gT2theSwgKnNjcm9sbGluZy4uLiogIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKKipGb2N1c2luZyBvbiB0aGUgQWN0aW9uIE1vZHVsZSBBUEkgU2VjdGlvbioqCgpSaWdodCwgbGluZXMgMTk4MC0yMDI5LiAgTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBsaWtlbHkgY292ZXJzIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGZvciBhY3Rpb24gbW9kdWxlcywgYWxvbmcgd2l0aCByZWxhdGVkIHN0cnVjdHVyZXMgb3IgZGF0YS4gV2Ugd2lsbCBmb2N1cyBzcGVjaWZpY2FsbHkgb246IGhvdyB0aGUga2VybmVsIHJlZ2lzdGVycywgdW5yZWdpc3RlcnMgYW5kIGhhbmRsZXMgdGhlIGFjdGlvbnMuICBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gKlJlYWRpbmcuLi4qIEFoLCB0aGVyZSYjMzk7cyBgYWN0X3JlZ2lzdGVyKClgLiBZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBUaGUgYGFjdF91bnJlZ2lzdGVyKClgIGZ1bmN0aW9uIHNob3VsZCBiZSBjbG9zZS4KCkkgYmV0IHdlIGhhdmUgc29tZSBjcml0aWNhbCBzdHJ1Y3R1cmVzIGRlZmluZWQgYXJvdW5kIHRoaXM6IHByb2JhYmx5IHNvbWUgc29ydCBvZiBgc3RydWN0IGFjdF9vcHNgLCBvciBzb21ldGhpbmcgc2ltaWxhciwgZm9yIGRlZmluaW5nIHRoZSBvcGVyYXRpb25zIHRoYXQgYW4gYWN0aW9uIG1vZHVsZSBuZWVkcyB0byBpbXBsZW1lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgYSB3YXkgdGhlIGFjdGlvbiBmcmFtZXdvcmsga25vd3MgYWJvdXQgdGhlIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBmcm9tIHRoZSBzcGVjaWZpYyBhY3Rpb24gbW9kdWxlcy4KCipSZWFkaW5nIGNsb3NlbHkuLi4qIE9rYXksIGxvb2tzIGxpa2UgaXQgcHJvYmFibHkgaGFuZGxlcyByZWdpc3RyYXRpb24uIGBhY3RfcmVnaXN0ZXIoKWAgY2VydGFpbmx5IGxvb2tzIHRvIGJlIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGBhY3RfdW5yZWdpc3RlcigpYCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuIE5vdywgSSB3YW50IHRvIGZpbmQgdGhlIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgdGhlIGFjdGlvbnMgdGhlbXNlbHZlczsgdGhlIHJlZ2lzdHJhdGlvbiBBUEkgaXMgZ29pbmcgdG8gbmVlZCBhIHdheSB0byBrbm93IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBhY3Rpb24uIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBnbHVlIGJldHdlZW4gdGhlIGFjdGlvbiBtb2R1bGVzIGFuZCB0aGUgdGMgZnJhbWV3b3JrLiBJIGJldCB0aGVyZSBhcmUgc29tZSBjYWxsYmFja3MgaW52b2x2ZWQuCgoqRGl2aW5nIGRlZXBlci4uLiogWWVwLCB0aGVyZSBpdCBpcyEgYHN0cnVjdCBhY3Rfb3BzYC4gSSB3YXMgcmlnaHQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFRoaXMgbGlrZWx5IGluY2x1ZGVzIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgbGlrZSBgdGNmX2FjdGlvbl9leGVjKClgLCBhbmQgb3RoZXIgY3J1Y2lhbCBhY3Rpb24tc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlc2Ugc3RydWN0IGVsZW1lbnRzIGNsb3NlbHkgdG8gc2VlIGV4YWN0bHkgd2hhdCBwYXJhbWV0ZXJzIHRoZXkgcmVxdWlyZSBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuICBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgYWN0aW9uIG1vZHVsZSBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGZyYW1ld29yayBoYW5kbGVzIHRoZSBtb2R1bGVzISBPa2F5LCBnb29kISBJIGNhbiBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIGFuZCBwb3RlbnRpYWwgdHJhcHMgZm9yIG1vZHVsZSBpbXBsZW1lbnRhdGlvbnMgYW5kIHRoZWlyIGxpZmVjeWNsZSwgYW5kIHdpbGwga2VlcCB0aGF0IGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdFxuMTk4MTpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxuMTk4MjpcdFx0XHRcdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcbjE5ODM6XHRcdFx0XHRcdFx0ICB1MzIgcG9ydGlkLCBzaXplX3QgYXR0cl9zaXplLFxuMTk4NDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE5ODU6XHR7XG4xOTg2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTk4NzpcdFxuMTk4ODpcdFx0c2tiID0gYWxsb2Nfc2tiKG1heChhdHRyX3NpemUsIE5MTVNHX0dPT0RTSVpFKSwgR0ZQX0tFUk5FTCk7XG4xOTg5Olx0XHRpZiAoIXNrYilcbjE5OTA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0JVRlMpO1xuMTk5MTpcdFxuMTk5MjpcdFx0aWYgKHRjYV9nZXRfZmlsbChza2IsIGFjdGlvbnMsIHBvcnRpZCwgbi1cdTAwM2VubG1zZ19zZXEsIDAsIFJUTV9ERUxBQ1RJT04sXG4xOTkzOlx0XHRcdFx0IDAsIDIsIGV4dGFjaykgXHUwMDNjPSAwKSB7XG4xOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGZpbGwgbmV0bGluayBUQyBhY3Rpb24gYXR0cmlidXRlc1wmIzM0Oyk7XG4xOTk1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTk5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbjE5OTc6XHRcdH1cbjE5OTg6XHRcbjE5OTk6XHRcdHJldHVybiBza2I7XG4yMDAwOlx0fVxuMjAwMTpcdFxuMjAwMjpcdHN0YXRpYyBpbnQgdGNmX2RlbF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMDAzOlx0XHRcdFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIHUzMiBwb3J0aWQsXG4yMDA0Olx0XHRcdFx0ICBzaXplX3QgYXR0cl9zaXplLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMDA1Olx0e1xuMjAwNjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjIwMDc6XHRcdGludCByZXQ7XG4yMDA4Olx0XG4yMDA5Olx0XHRpZiAoIXJ0bmxfbm90aWZ5X25lZWRlZChuZXQsIG4tXHUwMDNlbmxtc2dfZmxhZ3MsIFJUTkxHUlBfVEMpKSB7XG4yMDEwOlx0XHRcdHNrYiA9IE5VTEw7XG4yMDExOlx0XHR9IGVsc2Uge1xuMjAxMjpcdFx0XHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcbjIwMTM6XHRcdFx0XHRcdFx0IGV4dGFjayk7XG4yMDE0Olx0XHRcdGlmIChJU19FUlIoc2tiKSlcbjIwMTU6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuMjAxNjpcdFx0fVxuMjAxNzpcdFxuMjAxODpcdFx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cbjIwMTk6XHRcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIERlbGV0aW9uIExvZ2ljKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgZm9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIHN0YXJ0cyB0byBhc3NlbWJsZS4gVGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0mIzM5O3MgbGlmZWN5Y2xlIOKAkyBhIGRlbGV0aW9uIGFjdGlvbiByZWxhdGVkIHRvLCBsaWtlbHksIGEgdHJhbnNhY3Rpb24gY29udHJvbCBmcmFtZXdvcmsgKFRDRiksIGdpdmVuIHRoZSBwcmVmaXguIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGV4YWN0bHkgaXMgYmVpbmcgZGVsZXRlZD8gQSByZWNvcmQ/IEFuIG9iamVjdD8gQW4gZW50aXJlIGRhdGEgc3RydWN0dXJlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZGVsZXRpb24/IEFyZSB0aGVyZSBjYXNjYWRpbmcgZWZmZWN0cyB0byBjb25zaWRlcj8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gbWFuYWdlPyBJcyB0aGlzIGRlbGV0aW9uIHVzZXIgaW5pdGlhdGVkLCBvciBhdXRvbWF0aWM/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZD8gTW9yZSBpbXBvcnRhbnRseSwgaXMgZGF0YSBpbnRlZ3JpdHkgYXQgcmlzaywgYW5kIGlzIHRoZXJlIGFueSByb2xsYmFjayBvciByZWNvdmVyeSBpbXBsZW1lbnRlZD8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoaXMgYWN0aW9uIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0xNzY3PXN0YXRpYyBpbnQgdGNhX2FjdGlvbl9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE4NDItXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE4NDM6c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg0NC17XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDAyPXN0YXRpYyBpbnQgdGNmX2RlbF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDE4LVx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxOTpcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMjAtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHRjZl9hY3Rpb25fZGVsZXRlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgMTg0My4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbiAtIGRlbGV0ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIHN5c3RlbSBhcmUgYWx3YXlzIGNyaXRpY2FsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBtYW5pcHVsYXRlPyBJ4oCZbSBpbW1lZGlhdGVseSBnb2luZyB0byBsb29rIGZvciBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMsIGxvY2tzLCBvciBwb3RlbnRpYWwgZm9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgb2Z0ZW4gd2hlcmUgc3VidGxlIGJ1dCBkZXZhc3RhdGluZyBidWdzIHJlc2lkZSwgc28gdGhhdOKAmXMgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgaW5pdGlhbCBhbmFseXNpcy4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZywgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gc29tZSBmb3JtIG9mICYjMzQ7dHJhbnNpZW50IGNhY2hlIGZpbGUmIzM0OywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYW5kIHRoZSBzY29wZSBvZiBpdHMgZGVsZXRlIG9wZXJhdGlvbnMuIE5vdywgbGV04oCZcyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F54oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0MDpcdFx0cmV0dXJuIGVycjtcbjE4NDE6XHR9XG4xODQyOlx0XG4xODQzOlx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcbjE4NDQ6XHR7XG4xODQ1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xuMTg0NjpcdFx0aW50IGk7XG4xODQ3Olx0XG4xODQ4Olx0XHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XG4xODQ5Olx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVx1MDAzZW9wcztcbjE4NTA6XHRcdFx0LyogQWN0aW9ucyBjYW4gYmUgZGVsZXRlZCBjb25jdXJyZW50bHkgc28gd2UgbXVzdCBzYXZlIHRoZWlyXG4xODUxOlx0XHRcdCAqIHR5cGUgYW5kIGlkIHRvIHNlYXJjaCBhZ2FpbiBhZnRlciByZWZlcmVuY2UgaXMgcmVsZWFzZWQuXG4xODUyOlx0XHRcdCAqL1xuMTg1MzpcdFx0XHRzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8gPSBhLVx1MDAzZWlkcmluZm87XG4xODU0Olx0XHRcdHUzMiBhY3RfaW5kZXggPSBhLVx1MDAzZXRjZmFfaW5kZXg7XG4xODU1Olx0XG4xODU2Olx0XHRcdGFjdGlvbnNbaV0gPSBOVUxMO1xuMTg1NzpcdFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpIHtcbjE4NTg6XHRcdFx0XHQvKiBsYXN0IHJlZmVyZW5jZSwgYWN0aW9uIHdhcyBkZWxldGVkIGNvbmN1cnJlbnRseSAqL1xuMTg1OTpcdFx0XHRcdG1vZHVsZV9wdXQob3BzLVx1MDAzZW93bmVyKTtcbjE4NjA6XHRcdFx0fSBlbHNlIHtcbjE4NjE6XHRcdFx0XHRpbnQgcmV0O1xuMTg2MjpcdFxuMTg2MzpcdFx0XHRcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXG4xODY0Olx0XHRcdFx0cmV0ID0gdGNmX2lkcl9kZWxldGVfaW5kZXgoaWRyaW5mbywgYWN0X2luZGV4KTtcbjE4NjU6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTg2NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjE4Njc6XHRcdFx0fVxuMTg2ODpcdFx0fVxuMTg2OTpcdFx0cmV0dXJuIDA7XG4xODcwOlx0fVxuMTg3MTpcdFxuMTg3MjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3Jlb2ZmbG9hZF9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsXG4xODczOlx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbilcbjE4NzQ6XHR7XG4xODc1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xuMTg3NjpcdFx0XHRbMF0gPSBhY3Rpb24sXG4xODc3Olx0XHR9O1xuMTg3ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE4Nzk6XHRcdHNpemVfdCBhdHRyX3NpemU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYSBUcmFmZmljIENvbnRyb2wgQWN0aW9uIERlbGV0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQuIEl0IHNlZW1zIGxpa2UgdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24sIGFzIGl0IHByb2Nlc3NlcyBlYWNoIGFjdGlvbiwgc2V0cyBgYWN0aW9uc1tpXWAgdG8gYE5VTExgLiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiBgdGNmX2lkcl9kZWxldGVfaW5kZXhgIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSwgaW5kaWNhdGluZyBhIGZhaWx1cmUuIEluIHRoYXQgY2FzZSwgYHRjZl9hY3Rpb25fZGVsZXRlYCBhbHNvIHJldHVybnMgYW4gZXJyb3IgKGByZXQgJmx0OyAwYCkuIE5vdywgdGhlIGNvZGUgdGhlbiBoaXRzIGBlcnI6IHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucylgLiBUaGUgb2xkIHZlcnNpb24gb2YgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHVzZWQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCwgd2hpY2ggd291bGQgY2hlY2sgYCgoYSkgPSBhY3Rpb25zW2ldKWAgYW5kIGltbWVkaWF0ZWx5IGJyZWFrIGlmIGl0IGVuY291bnRlcmVkIGEgYE5VTExgIHBvaW50ZXIuIEJlY2F1c2UgYGFjdGlvbnNbaV1gIGhhZCBhbHJlYWR5IGJlZW4gc2V0IHRvIGBOVUxMYCBmb3IgdGhlIGZhaWxpbmcgYWN0aW9uIChvciBldmVuIGFjdGlvbnMgdGhhdCBmYWlsZWQgcHJldmlvdXNseSksIHRoaXMgY2F1c2VkIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgdG8gYmFpbCBvdXQgcHJlbWF0dXJlbHkuIEVzc2VudGlhbGx5LCBpdCB3b3VsZCBzdG9wIGF0IGluZGV4IDAgKG9yIHdoaWNoZXZlciBpbmRleCB3YXMgYE5VTExgKSwgbGVhdmluZyBzdWJzZXF1ZW50IGFjdGlvbnMgaW4gdGhlIGBhY3Rpb25zYCBhcnJheSB1bnRvdWNoZWQsIHJlc3VsdGluZyBpbiBhIG1lbW9yeSBsZWFrLiBOb3csIEkgc2VlIHRoZSBmaXggaXMgdGhhdCBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgY2hhbmdlZCB0byBsb29wIHRocm91Z2ggYWxsIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBwdXR0aW5nIGFueSBub24tYE5VTExgIGFjdGlvbiBwb2ludGVycyBpdCBmaW5kcy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIGlmIHRoaXMgbWVyaXRzIGZ1enppbmc6CgoxLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBidWcgcmVzaWRlcyBpbiB0cmFmZmljIGNvbnRyb2wvcGFja2V0IHNjaGVkdWxpbmcgY29kZSAoYG5ldC9zY2hlZC9hY3RfYXBpLmNgKSwgd2hpY2ggaXMgY29yZSB0byB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgaXMgcHJpbWUgcmVhbC1lc3RhdGUgZm9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCjIuICAqKkFjY2VzczoqKiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChgUlRNX0RFTEFDVElPTmAsIGBydG5ldGxpbmtgLCBhbmQgYE5FVExJTktfUk9VVEVgKSwgd2hpY2ggaXMgc29tZXRoaW5nIFN5emthbGxlciBoYXMgYmVlbiBoYW1tZXJpbmcgb24gZm9yIHNvbWUgdGltZS4KMy4gICoqRXhlY3V0aW9uOioqIEkgY2FuIGRlZmluaXRlbHkgZ2V0IHRoaXMgcnVubmluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgbWFjaGluZSAobGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSkgd2l0aCBhIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBhIG5ldGxpbmsgc29ja2V0LCBtYWtpbmcgaXQgZWFzeSB0byB0ZXN0LgoKQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgSSB3YW50IHRvIGZ1enouIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBUaW1lIHRvIHNlYXJjaCBmb3IgYGFjdF9hcGlgIHdpdGhpbiBgbmV0L3NjaGVkL01ha2VmaWxlYCBvciBgbmV0L3NjaGVkL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfYXBpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX05FVF9DTFMpXHRcdCYjNDM7PSBjbHNfYXBpLm9cbm5ldC9zY2hlZC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkVUX0NMU19BQ1QpXHQmIzQzOz0gYWN0X2FwaS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX05FVF9BQ1RfUE9MSUNFKVx0JiM0Mzs9IGFjdF9wb2xpY2Uub1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMi0vKlxubmV0L3NjaGVkL2FjdF9hcGkuYzozOiAqIG5ldC9zY2hlZC9hY3RfYXBpLmNcdFBhY2tldCBhY3Rpb24gQVBJLlxubmV0L3NjaGVkL2FjdF9hcGkuYy00LSAqXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3BlZGl0LmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjM6I2luY2x1ZGUgXHUwMDNjbmV0L2FjdF9hcGkuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jOjE5OiNpbmNsdWRlIFx1MDAzY25ldC9hY3RfYXBpLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfY29ubm1hcmsuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jc3VtLmMtMjktXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzozMDojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy0zMS0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTIzLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoxNzojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjEzOiNpbmNsdWRlIFx1MDAzY25ldC9hY3RfYXBpLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X25hdC5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjX2FjdC90Y19uYXQuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9uYXQuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X25hdC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYzoxODojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9nc28uaFx1MDAzZVxuLS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2FjdF9hcGkuaFx1MDAzZVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmMtMjAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3NjaGVkL2Nsc19mdy5jOjIxOiNpbmNsdWRlIFx1MDAzY25ldC9hY3RfYXBpLmhcdTAwM2Vcbm5ldC9zY2hlZC9jbHNfZncuYy0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzoxODojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMTktI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3NjaGVkL2Nsc191MzIuYzozOTojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBORVRfQ0xTX0FDVGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gc3BvdCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmFyaW91cyBuZXR3b3JrIHNjaGVkdWxlciBvcHRpb25zIGFyZSBjb250cm9sbGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGNsZWFyIGRlZmluaXRpb24gdGhlcmUsIGhvcGVmdWxseSB3aXRoIHRoZSB1c3VhbCBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHNwZWxsIG91dCB0aGUgcHJlcmVxdWlzaXRlcy4gSSYjMzk7bSByZWFsbHkgY3VyaW91cyB0byBzZWUgd2hpY2ggZmVhdHVyZXMgb3IgdW5kZXJseWluZyBzdWJzeXN0ZW1zICptdXN0KiBiZSBlbmFibGVkIGJlZm9yZSBgTkVUX0NMU19BQ1RgIGJlY29tZXMgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3JpdGljYWwgZm9yIHByb3BlciBrZXJuZWwgY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGN1c3RvbWl6aW5nIHRoZSBuZXR3b3JrIHN0YWNrIGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIG5lZWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3NjaGVkL0tjb25maWdgLiBMaW5lIDcwMi4uLiB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBzcGVjaWZpYyBmZWF0dXJlIG9yIG9wdGlvbiBiZWdpbnMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBzY2hlZHVsaW5nIGRpc2NpcGxpbmVzIGFuZCBxdWV1aW5nIGFsZ29yaXRobXMuIEkmIzM5O2xsIGV4cGVjdCB0byBmaW5kIHRoZSB0eXBpY2FsIGBjb25maWdgIGJsb2NrcywgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFuZCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgaW5mbHVlbmNpbmcgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLiBEZXBlbmRpbmcgb24gd2hhdCBJIHNlZSB0aGVyZSBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggb3RoZXIgcmVsYXRlZCBmaWxlcywgbGlrZSB0aGUgaGVhZGVyIGZpbGVzLiBJJiMzOTttIGludGVyZXN0ZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBjZXJ0YWluIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnksIGFuZCBob3cgdGhlIGtlcm5lbCBpcyBzZXQgdXAgb3ZlcmFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0XHQgIG1hdGNoZXMuXG4gNjk2Olx0XHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFwmIzM0O3BvbGljeVwmIzM0OyB3aGljaCBhbGxvd3MgcGFja2V0IGNsYXNzaWZpY2F0aW9uXG4gNjk3Olx0XHQgIGJhc2VkIG9uIElQc2VjIHBvbGljeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBkZWNhcHN1bGF0aW9uXG4gNjk4Olx0XG4gNjk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4gNzE1Olx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXG4gNzE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFmZmljIFBvbGljaW5nXCYjMzQ7XG4gNzE3Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gNzE4Olx0XHRoZWxwXG4gNzE5Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZG8gdHJhZmZpYyBwb2xpY2luZywgaS5lLiBzdHJpY3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5FVF9DTFNfQUNUIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgTkVUX0NMU19BQ1RgIGlzIGFwcGFyZW50bHkgZGVmaW5lZCB3aXRoaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gVGltZSB0byBjb25maXJtIHRoYXQgYW5kIHVuZGVyc3RhbmQgaXRzIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHRvcC1sZXZlbCBkZXBlbmRlbmN5IGZvciBgbmV0L3NjaGVkL0tjb25maWdgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgYnVpbGQuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY3ksIGxpa2VseSBpbiB0aGUgYG1lbnVjb25maWcgTkVUX1NDSEVEYCBibG9jay4gTm93LCBJIHNob3VsZCBleGFtaW5lIHRoZSBiZWdpbm5pbmcgb2YgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGZpcnN0IDQwIGxpbmVzLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBpbml0aWFsIG92ZXJ2aWV3IGFuZCBhbnkgaW50cm9kdWN0b3J5IGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgYE5FVF9DTFNfQUNUYCBpcyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdGVsbHMgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiAgMjE6XHRcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXG4gIDIyOlx0XHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXG4gIDIzOlx0XHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UmIzM5O2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXG4gIDI2Olx0XHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTImIzQzO3RjIGF0XG4gIDI3Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cdTAwM2UuICBUaGF0IHBhY2thZ2VcbiAgMjg6XHRcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcbiAgMjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlx1MDAzZS5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXG4gIDMyOlx0XHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXG4gIDMzOlx0XHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xuICAzNDpcdFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9kaWZmc2Vydi5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgdG8gXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW1cJiMzNDsgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcbiAgMzg6XHRcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxuICAzOTpcdFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAxNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbmV0d29ya2luZyBjb25maWd1cmF0aW9uLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSB0aGUgc3RhdHVzIG9mIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19BQ1RgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgZXhwZWN0ZWQsIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGN1cnJlbnQgc2V0dGluZ3MuIEJ1dCB0aGF0JiMzOTtzIG5vdCBlbm91Z2gg4oCTIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIGBORVRfU0NIRURgIHRvIGV2ZW4gYmUgKmF2YWlsYWJsZSogaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UuKm5ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTI2OT1zb3VyY2UgXCYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzA6c291cmNlIFwmIzM0O25ldC9zY2hlZC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNzEtc291cmNlIFwmIzM0O25ldC9kY2IvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI5MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWcqKgoKT2theSwgc28gSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nLCBhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4gSW5zdGVhZCBvZiBibGluZGx5IGdyZXBwaW5nLCBsZXQmIzM5O3MgdGFrZSBhIHRhcmdldGVkIGFwcHJvYWNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgbmV0L0tjb25maWdgIGFyb3VuZCBsaW5lIDI3MC4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aC4uLiB3ZWxsLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlIGFuZCBnZW5lcmFsIGtub3dsZWRnZSBvZiB0aGUgcHJvamVjdCYjMzk7cyBzdHJ1Y3R1cmUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIHRoYXQgcmVsYXRlIHRvIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBvciBzb21lIGFzcGVjdCBvZiBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLiBJdCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gYSBkcml2ZXImIzM5O3MgZW5hYmxlbWVudC4gVGltZSB0byBnbyBodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG4gMjYxOlx0c291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xuIDI2MjpcdHNvdXJjZSBcJiMzNDtuZXQvODAyMXEvS2NvbmZpZ1wmIzM0O1xuIDI2MzpcdHNvdXJjZSBcJiMzNDtuZXQvbGxjL0tjb25maWdcJiMzNDtcbiAyNjQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3gyNS9LY29uZmlnXCYjMzQ7XG4gMjY1Olx0c291cmNlIFwmIzM0O25ldC9sYXBiL0tjb25maWdcJiMzNDtcbiAyNjY6XHRzb3VyY2UgXCYjMzQ7bmV0L3Bob25ldC9LY29uZmlnXCYjMzQ7XG4gMjY3Olx0c291cmNlIFwmIzM0O25ldC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAyNjg6XHRzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuIDI2OTpcdHNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbiAyNzA6XHRzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbiAyNzE6XHRzb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG4gMjcyOlx0c291cmNlIFwmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wmIzM0O1xuIDI3MzpcdHNvdXJjZSBcJiMzNDtuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCYjMzQ7XG4gMjc0Olx0c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG4gMjc1Olx0c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xuIDI3NjpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG4gMjc3Olx0c291cmNlIFwmIzM0O25ldC9tcGxzL0tjb25maWdcJiMzNDtcbiAyNzg6XHRzb3VyY2UgXCYjMzQ7bmV0L25zaC9LY29uZmlnXCYjMzQ7XG4gMjc5Olx0c291cmNlIFwmIzM0O25ldC9oc3IvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXR3b3JrIFNjaGVkdWxpbmcgYW5kIEFjdGlvbiBEZWxldGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGtleXdvcmRzIGp1bXAgb3V0OiBgTkVUX1NDSEVEYCwgYE5FVF9DTFNfQUNUYCwgYW5kIG9mIGNvdXJzZSwganVzdCBgTkVUYCDigJMgc3RhbmRhcmQgbmV0d29ya2luZyBzdHVmZi4gUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayBzY2hlZHVsaW5nIGFuZCBjbGFzcyBhY3Rpb25zLCBzcGVjaWZpY2FsbHkuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hhdCYjMzk7cyBhZmZlY3RlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBIbW0sIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFsdGVyZWQgaXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBJbnRlcmVzdGluZy4KCk15IGFwcHJvYWNoIGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHRjZl9hY3Rpb25fcHV0X21hbnlgLCBpcyB1c2VkLiBMZXQmIzM5O3Mgc2VlIHRoZSBjYWxsZXJzIG9mIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBhbmQgd2hhdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGUgJiMzNDt0YyBhY3Rpb24gZGVsZXRlL2dldCBiYXRjaCBvcGVyYXRpb25zJiMzNDsgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4KClNwZWNpZmljYWxseSwgaGVyZSYjMzk7cyB3aGF0IHNlZW1zIGRpcmVjdGx5IHJlbGV2YW50OgoqICAgYHRjZl9hY3Rpb25fcHV0X21hbnlgIOKAkyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXRzZWxmLgoqICAgYHRjYV9hY3Rpb25fZ2RgIOKAkyB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IHRoYXQgY2FsbHMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFsbCBjb21pbmcgZnJvbS4KKiAgIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAg4oCTIExvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIGxvb3AgdGhhdCBjbGVhcnMgYWN0aW9uIGVudHJpZXMuCiogICBgdGNmX2RlbF9ub3RpZnlgIOKAkyBUaGlzIGNhbGxzIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAsIHNvIGRlbGV0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZCBoZXJlLgoqICAgYHRjX2N0bF9hY3Rpb25gIOKAkyBUaGlzIG9uZSBoYW5kbGVzIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGZvciBhY3Rpb24gcmVxdWVzdHMgKFJUTVxfTkVXQUNUSU9OLCBSVE1cX0RFTEFDVElPTiwgUlRNXF9HRVRBQ1RJT04pLiBUaGUgc3RhbmRhcmQgQ1JVRCBvcGVyYXRpb25zLgoKU28sIG5leHQgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGB0Y2FfYWN0aW9uX2dkYCBhbmQgYHRjX2N0bF9hY3Rpb25gLCBhbmQgdHJhY2UgdGhlaXIgcmVzcGVjdGl2ZSBjYWxsZXJzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGZsb3cgb2YgYWN0aW9uIGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIGFuZCBkZWxldGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY3RsX2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0yMTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0Y2FhX3BvbGljeVtUQ0FfUk9PVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTUxLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTUyOnN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxNTMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIzMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2FjdGlvbl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMzE1Olx0ey5tc2d0eXBlID0gUlRNX05FV0FDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjMxNjpcdHsubXNndHlwZSA9IFJUTV9ERUxBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTc6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUQUNUSU9OLCAuZG9pdCA9IHRjX2N0bF9hY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIzMTgtXHQgLmR1bXBpdCA9IHRjX2R1bXBfYWN0aW9ufSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGNfY3RsX2FjdGlvbmAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHRjX2N0bF9hY3Rpb25gIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3RhY2sgaXMgZnVuY3Rpb25pbmcuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWN0aW9uIGlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgcGFyYW1ldGVycyBpdCYjMzk7cyByZWx5aW5nIG9uLCBzcGVjaWZpY2FsbHkuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGNvbnRyb2wgZmxvdyDigJMgZW5zdXJlIGl0IGhhbmRsZXMgdmFyaW91cyBjb25kaXRpb25zIHJvYnVzdGx5IGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBsdXJraW5nIGluIHRoZXJlLiBJdCYjMzk7cyBhbHNvIGltcG9ydGFudCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdCwgYXJlIHdlIG9wdGltaXppbmcgZm9yIHRoZSBleHBlY3RlZCB1c2UgY2FzZT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgZW50cnkgcG9pbnRzIGFuZCB3b3JrIG15IHdheSB0aHJvdWdoIHRoZSBjb3JlIGxvZ2ljLCB0YWtpbmcgZGV0YWlsZWQgbm90ZXMgYW5kIHBvc3NpYmx5IHNldHRpbmcgdXAgc29tZSBxdWljayB0ZXN0cyB0byB2YWxpZGF0ZSB0aGUgYXNzdW1wdGlvbnMgSSYjMzk7bSBtYWtpbmcgYWJvdXQgaXRzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNTA6XHR9O1xuMjE1MTpcdFxuMjE1MjpcdHN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMTUzOlx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIxNTQ6XHR7XG4yMTU1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjE1NjpcdFx0c3RydWN0IG5sYXR0ciAqdGNhW1RDQV9ST09UX01BWCAmIzQzOyAxXTtcbjIxNTc6XHRcdHUzMiBwb3J0aWQgPSBORVRMSU5LX0NCKHNrYikucG9ydGlkO1xuMjE1ODpcdFx0dTMyIGZsYWdzID0gMDtcbjIxNTk6XHRcdGludCByZXQgPSAwO1xuMjE2MDpcdFxuMjE2MTpcdFx0aWYgKChuLVx1MDAzZW5sbXNnX3R5cGUgIT0gUlRNX0dFVEFDVElPTikgXHUwMDI2XHUwMDI2XG4yMTYyOlx0XHQgICAgIW5ldGxpbmtfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKVxuMjE2MzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjE2NDpcdFxuMjE2NTpcdFx0cmV0ID0gbmxtc2dfcGFyc2VfZGVwcmVjYXRlZChuLCBzaXplb2Yoc3RydWN0IHRjYW1zZyksIHRjYSxcbjIxNjY6XHRcdFx0XHRcdCAgICAgVENBX1JPT1RfTUFYLCBOVUxMLCBleHRhY2spO1xuMjE2NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNjg6XHRcdFx0cmV0dXJuIHJldDtcbjIxNjk6XHRcbjIxNzA6XHRcdGlmICh0Y2FbVENBX0FDVF9UQUJdID09IE5VTEwpIHtcbjIxNzE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXRsaW5rIGFjdGlvbiBhdHRyaWJ1dGVzIG1pc3NpbmdcJiMzNDspO1xuMjE3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxNzM6XHRcdH1cbjIxNzQ6XHRcbjIxNzU6XHRcdC8qIG4tXHUwMDNlbmxtc2dfZmxhZ3MgXHUwMDI2IE5MTV9GX0NSRUFURSAqL1xuMjE3NjpcdFx0c3dpdGNoIChuLVx1MDAzZW5sbXNnX3R5cGUpIHtcbjIxNzc6XHRcdGNhc2UgUlRNX05FV0FDVElPTjpcbjIxNzg6XHRcdFx0Lyogd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBhbGwgb3RoZXIgZmxhZ3NcbjIxNzk6XHRcdFx0ICogaW1wbHkgY3JlYXRlIG9ubHkgaWYgaXQgZG9lc24mIzM5O3QgZXhpc3RcbjIxODA6XHRcdFx0ICogTm90ZSB0aGF0IENSRUFURSB8IEVYQ0wgaW1wbGllcyB0aGF0XG4yMTgxOlx0XHRcdCAqIGJ1dCBzaW5jZSB3ZSB3YW50IGF2b2lkIGFtYmlndWl0eSAoZWcgd2hlbiBmbGFnc1xuMjE4MjpcdFx0XHQgKiBpcyB6ZXJvKSB0aGVuIGp1c3Qgc2V0IHRoaXNcbjIxODM6XHRcdFx0ICovXG4yMTg0Olx0XHRcdGlmIChuLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9SRVBMQUNFKVxuMjE4NTpcdFx0XHRcdGZsYWdzID0gVENBX0FDVF9GTEFHU19SRVBMQUNFO1xuMjE4NjpcdFx0XHRyZXQgPSB0Y2ZfYWN0aW9uX2FkZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sIHBvcnRpZCwgZmxhZ3MsXG4yMTg3Olx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4yMTg4Olx0XHRcdGJyZWFrO1xuMjE4OTpcdFx0Y2FzZSBSVE1fREVMQUNUSU9OOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgYWN0X2FwaS5jYCBmb3Igc29tZSBBY3Rpb24gSW5zaWdodHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBhY3Rpb24gQVBJLCBhbmQgSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgYSBzcGVjaWZpYyBzZWN0aW9uIHRoYXQgbmVlZHMgY2xvc2VyIHNjcnV0aW55LiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAyMTg1LTIyMDUgb2YgYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBUaGlzIHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCB2aWV3IG9mIHRoZSBjb2RlIGhhbmRsaW5nIGFjdGlvbiBjb25maWd1cmF0aW9uIG9yIHByb2Nlc3Npbmc7IGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGFjdGlvbnMgYXJlIHBhcnNlZCwgdmFsaWRhdGVkLCBvciBwZXJoYXBzIGV2ZW4gZXhlY3V0ZWQgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgcmVsYXRlZCB0byBob3cgYWN0aW9uIHBhcmFtZXRlcnMgYXJlIHJlY2VpdmVkIGFuZCBob3cgdGhleSYjMzk7cmUgbWFwcGVkIHRvIHRoZSBzcGVjaWZpYyBhY3Rpb24gaW1wbGVtZW50YXRpb25zLiBUaGlzIHNlY3Rpb24gd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiBzb21lIGludGVyYWN0aW9ucywgbGlrZSBob3cgdXNlci1zcGFjZSB0b29scyBjb21tdW5pY2F0ZSB3aXRoIHRoZSBrZXJuZWwgdG8gc2V0IHVwIGFuZCBtYW5hZ2UgdGhlc2UgYWN0aW9ucy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGNyaXRpY2FsIHRoZXJlIGFib3V0IGFjdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgZXZlbiBlcnJvciBoYW5kbGluZyB0aGF0IG1pZ2h0IGhhdmUgYmVhcmluZyBvbiB0aGUgaXNzdWUgSeKAmW0gbG9va2luZyBhdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBzZWN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxODU6XHRcdFx0XHRmbGFncyA9IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRTtcbjIxODY6XHRcdFx0cmV0ID0gdGNmX2FjdGlvbl9hZGQobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLCBwb3J0aWQsIGZsYWdzLFxuMjE4NzpcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuMjE4ODpcdFx0XHRicmVhaztcbjIxODk6XHRcdGNhc2UgUlRNX0RFTEFDVElPTjpcbjIxOTA6XHRcdFx0cmV0ID0gdGNhX2FjdGlvbl9nZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sXG4yMTkxOlx0XHRcdFx0XHQgICAgcG9ydGlkLCBSVE1fREVMQUNUSU9OLCBleHRhY2spO1xuMjE5MjpcdFx0XHRicmVhaztcbjIxOTM6XHRcdGNhc2UgUlRNX0dFVEFDVElPTjpcbjIxOTQ6XHRcdFx0cmV0ID0gdGNhX2FjdGlvbl9nZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sXG4yMTk1Olx0XHRcdFx0XHQgICAgcG9ydGlkLCBSVE1fR0VUQUNUSU9OLCBleHRhY2spO1xuMjE5NjpcdFx0XHRicmVhaztcbjIxOTc6XHRcdGRlZmF1bHQ6XG4yMTk4Olx0XHRcdEJVRygpO1xuMjE5OTpcdFx0fVxuMjIwMDpcdFxuMjIwMTpcdFx0cmV0dXJuIHJldDtcbjIyMDI6XHR9XG4yMjAzOlx0XG4yMjA0Olx0c3RhdGljIHN0cnVjdCBubGF0dHIgKmZpbmRfZHVtcF9raW5kKHN0cnVjdCBubGF0dHIgKipubGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDg1CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDQ3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFRyYWZmaWMgQ29udHJvbCBBY3Rpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgdGNmX2FjdGlvbl9wdXRfbWFueWAsIGB0Y2FfYWN0aW9uX2dkYCwgYHRjZl9kZWxfbm90aWZ5YCwgYHRjZl9hY3Rpb25fZGVsZXRlYCwgYW5kIGB0Y19jdGxfYWN0aW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLgoKR29vZCwgaXQgc2VlbXMgdGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBjb25maXJtZWQgYnkgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIGluIHRoZSBjb2RlIHNuaXBwZXQgSSBmb3VuZC4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gYGFjdF9hcGkub2AuIEluY2x1ZGluZyB0aGVzZSBzeW1ib2xzIGZvciBmdXp6aW5nIGlzIGEgc29saWQgYXBwcm9hY2gsIHNpbmNlIGBrYWxsc3ltc2Agd2lsbCBtYWtlIHRoZSBzeW1ib2xzIGF2YWlsYWJsZSB1bmxlc3MgdGhlIGNvbXBpbGVyIGNvbXBsZXRlbHkgaW5saW5lcyB0aGVtLCB3aGljaCBpcyB1bmxpa2VseS4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIGJhdGNoIGRlbGV0aW9uIG9mIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbi4gVGhlIHBhdGNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBsZWFrIGlmIGVhcmxpZXIgYWN0aW9ucyBhcmUgZGVsZXRlZCBhbmQgdGhlbiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCBsYXRlci4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGZpeCBhaW1zIHRvIGVuc3VyZSB0aGF0IG5vIGRhbmdsaW5nIHJlZmVyZW5jZXMgYXJlIGxlZnQgYmVoaW5kIHdoZW4gZXJyb3JzIG9jY3VyIGR1cmluZyB0aGlzIHByb2Nlc3MuIFRoaXMgc2VlbXMgaW1wb3J0YW50LgoKRmluYWxseSwgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQgYXJlIGBORVRfQ0xTX0FDVGAgYW5kIGBORVRfU0NIRURgLiBNYWtlcyBzZW5zZSwgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIHN1Ym1pdCB0aGlzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAgICYjMzQ7dGNhX2FjdGlvbl9nZCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDt0Y19jdGxfYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBjbGVhbnVwIGxvZ2ljIGluIHRyYWZmaWMgY29udHJvbCYjMzk7cyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfYWN0aW9uX3B1dF9tYW55JiMzNDssCiAgICAmIzM0O3RjYV9hY3Rpb25fZ2QmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9kZWxldGUmIzM0OywKICAgICYjMzQ7dGNmX2RlbF9ub3RpZnkmIzM0OywKICAgICYjMzQ7dGNfY3RsX2FjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wmIzM5O3MgYmF0Y2ggYWN0aW9uIGRlbGV0aW9uIGVycm9yIGhhbmRsaW5nIHBhdGggKHRjZl9hY3Rpb25fcHV0X21hbnkgaW4gbmV0L3NjaGVkL2FjdF9hcGkuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0RFTEFDVElPTikgYW5kIGlzIHdlbGwtc3VpdGVkIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cblxuVGhlIGBhY3Rpb25zYCBhcnJheSBpbiBgdGNhX2FjdGlvbl9nZCgpYCBpcyB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O2ApLCBzbyBhbGwgdW5wb3B1bGF0ZWQgb3IgY2xlYXJlZCBlbnRyaWVzIGFyZSBzYWZlbHkgTlVMTC4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIHN0cmljdGx5IGEgcmVmZXJlbmNlIGNvdW50IC8gcmVzb3VyY2UgbGVhaywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDM3ZWNlZDg0ZGZhNWYuLjg2NzEwYTU5NmEwZmEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtMTIyMywxMSAmIzQzOzEyMjMsMTYgQEAgc3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKQogCiBzdGF0aWMgdm9pZCB0Y2ZfYWN0aW9uX3B1dF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSkKIHsKLQlzdHJ1Y3QgdGNfYWN0aW9uICphOwogCWludCBpOwogCi0JdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykgewotCQljb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS0mZ3Q7b3BzOwomIzQzOwkvKiBEZWxldGlvbiBtYXkgaGF2ZSBjbGVhcmVkIGVudHJpZXMgYmVmb3JlIGZhaWxpbmcuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBUQ0FfQUNUX01BWF9QUklPOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07CiYjNDM7CQljb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzOwomIzQzOwomIzQzOwkJaWYgKCFhKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJb3BzID0gYS0mZ3Q7b3BzOwogCQlpZiAodGNmX2FjdGlvbl9wdXQoYSkpCiAJCQltb2R1bGVfcHV0KG9wcy0mZ3Q7b3duZXIpOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lZjdjYTRhNjc3NWJjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uCkBAIC0wLDAgJiM0MzsxLDExNSBAQAomIzQzO1sKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2Q3MTAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlbGVhc2UgdGFpbCByZWZlcmVuY2VzIGFmdGVyIGZpcnN0IGFjdGlvbiBkZWxldGlvbiBmYWlscyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtnYWN0JiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgWwomIzQzOyAgICAgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIDAsCiYjNDM7ICAgICAgICAgICAgICAgIDEsCiYjNDM7ICAgICAgICAgICAgICAgIDI1NQomIzQzOyAgICAgICAgICAgIF0sCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcHJvdG9jb2wgaXAgaW5ncmVzcyB1MzIgbWF0Y2ggdTMyIDAgMCBhY3Rpb24gZ2FjdCBpbmRleCAxJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBhY3Rpb25zIGRlbCBhY3Rpb24gZ2FjdCBpbmRleCAxIGFjdGlvbiBnYWN0IGluZGV4IDIgYWN0aW9uIGdhY3QgaW5kZXggMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzI1NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgYWN0aW9ucyBscyBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDt0b3RhbCBhY3RzIDNcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxiLippbmRleCAyIHJlZiAxIGJpbmQgMFxcYi4qaW5kZXggMyByZWYgMSBiaW5kIDBcXGImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdCiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtkNzExJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2dhY3QmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXSwKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDImIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MjU1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3RvdGFsIGFjdHMgMlxcYi4qaW5kZXggMiByZWYgMiBiaW5kIDFcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxiJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXQomIzQzOyAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7ZDcxMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7RGVsZXRlIGEgdGFpbCBhY3Rpb24gb25jZSBhZnRlciBhIGZhaWxlZCBiYXRjaCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtnYWN0JiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgWwomIzQzOyAgICAgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIDAsCiYjNDM7ICAgICAgICAgICAgICAgIDEsCiYjNDM7ICAgICAgICAgICAgICAgIDI1NQomIzQzOyAgICAgICAgICAgIF0sCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDEmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzI1NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDtzaCAtYyAmIzM5OyRUQyBhY3Rpb25zIGRlbCBhY3Rpb24gZ2FjdCBpbmRleCAyICZhbXA7JmFtcDsgJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3QmIzM5OyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDt0b3RhbCBhY3RzIDFcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxiJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXQomIzQzOyAgICAgICAgXQomIzQzOyAgICB9CiYjNDM7XQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgdXNlciYjMzk7cyBhc2tpbmcgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIGRpc3NlY3QgdGhlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBJdCBsb29rcyBsaWtlIGNoYW5nZXMgYXJvdW5kIHRoZSBgdGNmX2FjdGlvbl9wdXRfbWFueWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgbG9va3MgdG8gYmUgdG91Y2hpbmcgdGhlIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIGFuIGFycmF5IG9mIGB0Y19hY3Rpb25gIHBvaW50ZXJzLiBCZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBmdXp6aW5nIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyB0aGlzIHNwZWNpZmljIGNoYW5nZSBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBncmFiIHRoZSByZWxldmFudCBjb2RlIGJsb2NrIGFyb3VuZCBsaW5lIDEyMjMsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgbmVlZGVkIGNvbnRleHQgZm9yIGFzc2Vzc2luZyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UgZHVyaW5nIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjIzLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjI1LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA3NC1lcnI6XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc2LVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEZWVwIERpdmUgaW50byBgdGNmX2FjdGlvbl9wdXRfbWFueWAgQ2FsbHNpdGVzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgYmVpbmcgdXNlZCwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBhbmFseXppbmcgYSBmZXcga2V5IGNhbGwgc2l0ZXMgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgdGNhX2FjdGlvbl9nZGAgYW5kIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBwbGFjZXMgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIHdlbGwuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBjb250ZXh0cyBpbiB3aGljaCB3ZSYjMzk7cmUgYmF0Y2hpbmcgb3IgYnVsay1wdXR0aW5nIGFjdGlvbnMuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaXRzIGRlc2lnbiwgZWZmaWNpZW5jeSwgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRvIGRvY3VtZW50IGV2ZXJ5dGhpbmcgZm9yIGxhdGVyIGFuYWx5c2lzIGFuZCByZXZpZXcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdHJldCA9IF9fdGNmX2lkcl9yZWxlYXNlKGEsIGJpbmQsIHRydWUpO1xuMTIxMTpcdFx0XHRpZiAocmV0ID09IEFDVF9QX0RFTEVURUQpXG4xMjEyOlx0XHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuMTIxMzpcdFx0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4xMjE0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjEyMTU6XHRcdH1cbjEyMTY6XHRcdHJldHVybiByZXQ7XG4xMjE3Olx0fVxuMTIxODpcdFxuMTIxOTpcdHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcbjEyMjA6XHR7XG4xMjIxOlx0XHRyZXR1cm4gX190Y2ZfYWN0aW9uX3B1dChwLCBmYWxzZSk7XG4xMjIyOlx0fVxuMTIyMzpcdFxuMTIyNDpcdHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuMTIyNTpcdHtcbjEyMjY6XHRcdGludCBpO1xuMTIyNzpcdFxuMTIyODpcdFx0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuMTIyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSYjNDM7JiM0MzspIHtcbjEyMzA6XHRcdFx0c3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07XG4xMjMxOlx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XG4xMjMyOlx0XG4xMjMzOlx0XHRcdGlmICghYSlcbjEyMzQ6XHRcdFx0XHRjb250aW51ZTtcbjEyMzU6XHRcdFx0b3BzID0gYS1cdTAwM2VvcHM7XG4xMjM2Olx0XHRcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSlcbjEyMzc6XHRcdFx0XHRtb2R1bGVfcHV0KG9wcy1cdTAwM2Vvd25lcik7XG4xMjM4Olx0XHR9XG4xMjM5Olx0fVxuMTI0MDpcdFxuMTI0MTpcdHN0YXRpYyB2b2lkIHRjYV9wdXRfYm91bmRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxuMTI0MjpcdHtcbjEyNDM6XHRcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4xMjQ0Olx0XHRpbnQgaTtcbjEyNDU6XHRcbjEyNDY6XHRcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbjEyNDc6XHRcdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuMTI0ODpcdFxuMTI0OTpcdFx0XHRpZiAoaW5pdF9yZXNbaV0gPT0gQUNUX1BfQ1JFQVRFRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBhbmQgYHRjYV9hY3Rpb25fZ2RgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSB0d28uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9ucyBvZiBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGFuZCBgdGNhX2FjdGlvbl9nZGAuIEkga25vdyB0aGV5JiMzOTtyZSByZWxhdGVkIHRvIHRyYWZmaWMgY29udHJvbCAoVEMpIGFjdGlvbnMsIHNvIGxpa2VseSBwYXJ0IG9mIHRoZSBmcmFtZXdvcmsmIzM5O3MgYWN0aW9uIGhhbmRsaW5nIG1lY2hhbmlzbS4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCAqaG93KiB0aGV5JiMzOTtyZSB1c2VkIHRvZ2V0aGVyLCBhbmQgd2hhdCBlYWNoIGlzIHJlc3BvbnNpYmxlIGZvci4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGEgY29kZSBzbmlwcGV0IG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBUQyBhY3Rpb24gdHJhdmVyc2FsIG9yIGl0ZXJhdGlvbi4gSSB3YW50IHRvIHNlZSB3aGVyZSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGlzIGNhbGxlZCwgd2hhdCBpdCYjMzk7cyBwYXNzZWQsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjYWxsYmFjayBvciBsb29wIGJvZHkgaXQgZXhlY3V0ZXMuIFRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRjYV9hY3Rpb25fZ2RgIHJlcHJlc2VudHMuIElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWN0aW9uLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBhIGdsb2JhbCBkZXNjcmlwdG9yPyBQcm9iYWJseSBhbiBhY3Rpb24mIzM5O3Mgc3BlY2lmaWMgZGF0YSwgc2luY2UgdGhlIG90aGVyIG9uZSBzZWVtcyBsaWtlIGEgdHJhdmVyc2FsIGZ1bmN0aW9uLiBUaGUgJiMzNDtnZCYjMzQ7IHByb2JhYmx5IHN0YW5kcyBmb3IgJiMzNDtnZW5lcmljIGRhdGEmIzM0OywgJiMzNDtncm91cCBkYXRhJiMzNDsgb3IgJiMzNDtnbG9iYWwgZGF0YSYjMzQ7IGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBJJiMzOTttIGJldHRpbmcgdGhhdCBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGl0ZXJhdGVzIHRocm91Z2ggYSBsaXN0IG9mIGFjdGlvbnMgYW5kIGludm9rZXMgYSBjYWxsYmFjayBvciBwcm9jZXNzZXMgdGhpcyBgdGNhX2FjdGlvbl9nZGAgb3Igb3RoZXIgYWN0aW9uIGRhdGEgdGhhdCBlYWNoIGFjdGlvbiB1c2VzLiBVbmRlcnN0YW5kaW5nIHRoaXMgcmVsYXRpb25zaGlwIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIGhvdyB0aGUgYWN0aW9uIGZyYW1ld29yayB3aXRoaW4gVEMgd29ya3MgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9hY3RfZm9yX2VhY2hfYWN0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0Oy5jbGFuZy1mb3JtYXQ9NzE9Rm9yRWFjaE1hY3Jvczpcbi0tXG4uY2xhbmctZm9ybWF0LTcxMS0gIC0gJiMzOTt0Yl9wcm9wZXJ0eV9mb3JfZWFjaCYjMzk7XG4uY2xhbmctZm9ybWF0OjcxMjogIC0gJiMzOTt0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbiYjMzk7XG4uY2xhbmctZm9ybWF0LTcxMy0gIC0gJiMzOTt0Y2ZfZXh0c19mb3JfZWFjaF9hY3Rpb24mIzM5O1xuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD0yNzk9c3RhdGljIGlubGluZSB2b2lkIHRjZl9leHRzX3B1dF9uZXQoc3RydWN0IHRjZl9leHRzICpleHRzKVxuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yOTQtXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Mjk1OiNkZWZpbmUgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykgXFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yOTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUQ0FfQUNUX01BWF9QUklPIFx1MDAyNlx1MDAyNiAoKGEpID0gYWN0aW9uc1tpXSk7IGkmIzQzOyYjNDM7KVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIwMT1pbnQgdGNmX2FjdGlvbl9kZXN0cm95KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGJpbmQpXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjA2LVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjA3Olx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjA4LVx0XHRhY3Rpb25zW2ldID0gTlVMTDtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTEyNDE9c3RhdGljIHZvaWQgdGNhX3B1dF9ib3VuZF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGluaXRfcmVzW10pXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjQ1LVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ2Olx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjQ3LVx0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS1cdTAwM2VvcHM7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMjYzPWludCB0Y2ZfYWN0aW9uX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2OS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI3MDpcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI3MS1cdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIGkgJiM0MzsgMSk7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMzMyPXZvaWQgdGNmX2lkcl9pbnNlcnRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTMzNi1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTMzNzpcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTMzOC1cdFx0c3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvO1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTg0Mz1zdGF0aWMgaW50IHRjZl9hY3Rpb25fZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg0Ny1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTg0ODpcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg0OS1cdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM9Mzg5Mj1pbnQgdGNfc2V0dXBfYWN0aW9uKHN0cnVjdCBmbG93X2FjdGlvbiAqZmxvd19hY3Rpb24sXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zOTA3LVx0aiA9IDA7XG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM5MDg6XHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhY3QsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzkwOS1cdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWZlcmVuY2UgQ291bnQgTGVhayBpbiBUcmFmZmljIENvbnRyb2wgQWN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBhcHBlYXJzIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCwgcmVmZXJlbmNlIGNvdW50IGxlYWsgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGhhbmRsaW5nLiBUaGUgaW5pdGlhbCBpdGVyYXRpb24gbG9naWMsIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAsIHVzZWQgYSBsb29wIHRoYXQgdGVybWluYXRlZCBwcmVtYXR1cmVseSBpZiBpdCBlbmNvdW50ZXJlZCBhIE5VTEwgZW50cnkgd2l0aGluIHRoZSBgYWN0aW9uc1tdYCBhcnJheS4gU3BlY2lmaWNhbGx5LCB0aGUgbG9vcCB3YXM6IGBmb3IgKGkgPSAwOyBpICZsdDsgVENBX0FDVF9NQVhfUFJJTyAmYW1wOyZhbXA7ICgoYSkgPSBhY3Rpb25zW2ldKTsgaSYjNDM7JiM0MzspYC4gVGhpcyBtZWFucyB0aGF0IGlmIGBhY3Rpb25zYCBoYWQgTlVMTHMgaW50ZXJzcGVyc2VkLCB0aGUgbG9vcCB3b3VsZCBiYWlsIG91dCBiZWZvcmUgcHJvY2Vzc2luZyBhbGwgdGhlIGludGVuZGVkIGFjdGlvbnMuCgpOb3csIHRoZSBwcm9ibGVtIGFyaXNlcyBpbiBzY2VuYXJpb3MgbGlrZSBgdGNmX2FjdGlvbl9kZWxldGVgIG9yIGB0Y2FfYWN0aW9uX2dkYC4gSWYgYW4gYWN0aW9uIGZhaWxzIGRlbGV0aW9uIGR1cmluZyBhIGNsZWFudXAgKHdpdGhpbiBgdGNmX2FjdGlvbl9kZXN0cm95YCBvciBgdGNmX2FjdGlvbl9kZWxldGVgLCBwZXJoYXBzKSwgaXQmIzM5O3MgcG9zc2libGUgZm9yIGVhcmxpZXIgZW50cmllcyBpbiB0aGUgYGFjdGlvbnNbXWAgYXJyYXkgdG8gYmUgc2V0IHRvIE5VTEwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgb3IgaXMgbm8gbG9uZ2VyIHZhbGlkLiBDb25zZXF1ZW50bHksIHdoZW4gYHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucylgIGlzIGNhbGxlZCBsYXRlciwgb2Z0ZW4gZHVyaW5nIGVycm9yIGhhbmRsaW5nLCB0aGUgc2FtZSBlYXJseS10ZXJtaW5hdGlvbiBiZWhhdmlvciBvY2N1cnMuIFRoaXMgbWVhbnMgSSYjMzk7bSBza2lwcGluZyBzb21lIGFjdGlvbnMgdGhhdCBhcmUgc3RpbGwgdGhlcmUuIFRob3NlIHJlZmVyZW5jZXMgYXJlIGxlYWtlZCBiZWNhdXNlIHRoZSBmdW5jdGlvbiB3b24mIzM5O3QgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZSByZW1haW5pbmcgYWN0aW9ucyAqYWZ0ZXIqIHRoZSBmaXJzdCBOVUxMIGlzIGVuY291bnRlcmVkLiBUaGlzIGxlYWRzIHRvIGEgcmVzb3VyY2UgbGVhaywgc3BlY2lmaWNhbGx5LCBhIHJlZmNvdW50IGxlYWsuIFRoZSBvYmplY3RzIHJlbWFpbiBpbiBtZW1vcnksIGJ1dCBhcmUgbm8gbG9uZ2VyIGFjY2Vzc2libGUuCgpUaGUgcHJvcG9zZWQgZml4IOKAkyBtb2RpZnlpbmcgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHRvIGl0ZXJhdGUgdGhyb3VnaCAqYWxsKiBgVENBX0FDVF9NQVhfUFJJT2AgZW50cmllcyBhbmQgc2ltcGx5IHNraXAgYW55IE5VTEwgZW50cmllcyDigJMgc2VlbXMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IGd1YXJhbnRlZXMgdGhhdCBhbGwgYWN0aW9ucyB3aWxsIGhhdmUgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkZWNyZW1lbnRlZCwgZXZlbiBpZiBzb21lIGhhdmUgYmVlbiBtYXJrZWQgYXMgTlVMTCBpbiB0aGUgYXJyYXkgZHVlIHRvIGFuIGVhcmxpZXIgZmFpbHVyZSBvciBkZWxldGlvbi4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHplcm8gaW4gb24gbGluZXMgYXJvdW5kIDIwMzAgaW4gYHRjZl9hY3Rpb25fZGVsZXRlYCBhbmQgYHRjYV9hY3Rpb25fZ2RgIHRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0aGUgYGFjdGlvbnNgIGFycmF5IGlzIGJlaW5nIGluaXRpYWxpemVkLCBwb3B1bGF0ZWQsIGFuZCB1c2VkIGluIHRoZSBkZWxldGlvbiBzZXF1ZW5jZS4gVGhpcyB3aWxsIGhlbHAgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByb290IGNhdXNlIGFuZCBlbnN1cmUgdGhlIHByb3Bvc2VkIGZpeCBhZGRyZXNzZXMgdGhlIGFjdHVhbCBwcm9ibGVtIGFuZCBpc24mIzM5O3QganVzdCB0cmVhdGluZyBhIHN5bXB0b20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzMDpcdHN0YXRpYyBpbnRcbjIwMzE6XHR0Y2FfYWN0aW9uX2dkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMDMyOlx0XHQgICAgICB1MzIgcG9ydGlkLCBpbnQgZXZlbnQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIwMzM6XHR7XG4yMDM0Olx0XHRpbnQgaSwgcmV0O1xuMjAzNTpcdFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0FDVF9NQVhfUFJJTyAmIzQzOyAxXTtcbjIwMzY6XHRcdHN0cnVjdCB0Y19hY3Rpb24gKmFjdDtcbjIwMzc6XHRcdHNpemVfdCBhdHRyX3NpemUgPSAwO1xuMjAzODpcdFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O1xuMjAzOTpcdFxuMjA0MDpcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfQUNUX01BWF9QUklPLCBubGEsIE5VTEwsXG4yMDQxOlx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjIwNDI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDQzOlx0XHRcdHJldHVybiByZXQ7XG4yMDQ0Olx0XG4yMDQ1Olx0XHRpZiAoZXZlbnQgPT0gUlRNX0RFTEFDVElPTiBcdTAwMjZcdTAwMjYgbi1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfUk9PVCkge1xuMjA0NjpcdFx0XHRpZiAodGJbMV0pXG4yMDQ3Olx0XHRcdFx0cmV0dXJuIHRjYV9hY3Rpb25fZmx1c2gobmV0LCB0YlsxXSwgbiwgcG9ydGlkLCBleHRhY2spO1xuMjA0ODpcdFxuMjA0OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgbmV0bGluayBhdHRyaWJ1dGVzIHdoaWxlIGZsdXNoaW5nIFRDIGFjdGlvblwmIzM0Oyk7XG4yMDUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjA1MTpcdFx0fVxuMjA1MjpcdFxuMjA1MzpcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IFRDQV9BQ1RfTUFYX1BSSU8gXHUwMDI2XHUwMDI2IHRiW2ldOyBpJiM0MzsmIzQzOykge1xuMjA1NDpcdFx0XHRhY3QgPSB0Y2ZfYWN0aW9uX2dldF8xKG5ldCwgdGJbaV0sIG4sIHBvcnRpZCwgZXh0YWNrKTtcbjIwNTU6XHRcdFx0aWYgKElTX0VSUihhY3QpKSB7XG4yMDU2Olx0XHRcdFx0cmV0ID0gUFRSX0VSUihhY3QpO1xuMjA1NzpcdFx0XHRcdGdvdG8gZXJyO1xuMjA1ODpcdFx0XHR9XG4yMDU5Olx0XHRcdGF0dHJfc2l6ZSAmIzQzOz0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0KTtcbjIwNjA6XHRcdFx0YWN0aW9uc1tpIC0gMV0gPSBhY3Q7XG4yMDYxOlx0XHR9XG4yMDYyOlx0XG4yMDYzOlx0XHRhdHRyX3NpemUgPSB0Y2ZfYWN0aW9uX2Z1bGxfYXR0cnNfc2l6ZShhdHRyX3NpemUpO1xuMjA2NDpcdFxuMjA2NTpcdFx0aWYgKGV2ZW50ID09IFJUTV9HRVRBQ1RJT04pXG4yMDY2Olx0XHRcdHJldCA9IHRjZl9nZXRfbm90aWZ5KG5ldCwgcG9ydGlkLCBuLCBhY3Rpb25zLCBhdHRyX3NpemUsIGV2ZW50LFxuMjA2NzpcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuMjA2ODpcdFx0ZWxzZSB7IC8qIGRlbGV0ZSAqL1xuMjA2OTpcdFx0XHRyZXQgPSB0Y2ZfZGVsX25vdGlmeShuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLCBleHRhY2spO1xuMjA3MDpcdFx0XHRpZiAocmV0KVxuMjA3MTpcdFx0XHRcdGdvdG8gZXJyO1xuMjA3MjpcdFx0XHRyZXR1cm4gMDtcbjIwNzM6XHRcdH1cbjIwNzQ6XHRlcnI6XG4yMDc1Olx0XHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xuMjA3NjpcdFx0cmV0dXJuIHJldDtcbjIwNzc6XHR9XG4yMDc4Olx0XG4yMDc5Olx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfYWRkX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMDgwOlx0XHRcdFx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuMjA4MTpcdFx0XHRcdFx0XHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXG4yMDgyOlx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMjA4MzpcdHtcbjIwODQ6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBNYW5hZ2VtZW50IElzc3VlcyBpbiBUcmFmZmljIENvbnRyb2wgQWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lLCBzcGVjaWZpY2FsbHkgbGluZSAyMDM4LiBJdCBsb29rcyBsaWtlIHRoZSBgYWN0aW9uc2AgYXJyYXksIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGB0Y19hY3Rpb25gIHN0cnVjdHVyZSwgaXMgYmVpbmcgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0htbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhpcyBpcyB0aGUgb25seSBwbGFjZSBpdCYjMzk7cyBoYW5kbGVkIGxpa2UgdGhpcz8mIzM0Oy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgemVybyBpbml0aWFsaXphdGlvbiBpcyBnZW5lcmFsbHkgZ29vZCBwcmFjdGljZSB0byBzdGFydCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4KCk15IG5leHQgc3RlcCBpcyBuYXR1cmFsbHkgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGNmX2FjdGlvbl9wdXRfbWFueWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBhY3Rpb25zYCBhcnJheSBpcyBiZWluZyB1c2VkLCBzbyBrbm93aW5nIHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgZGVhbGxvY2F0ZWQgaXMgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdyZXAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNhbGwgc2l0ZXMgYW5kIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcgZnJvbSB0aGVyZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBtYW5hZ2luZyBtZW1vcnkgY29ycmVjdGx5IGluIHRoaXMgY3J1Y2lhbCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYWN0aW9uX3B1dF9tYW55JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjIzLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjI1LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA3NC1lcnI6XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc2LVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc4NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6CgoqKkFuYWx5emluZyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgYW5kIGB0Y2ZfZGVsX25vdGlmeWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y2ZfYWN0aW9uX3B1dF9tYW55YC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZ290IHJlc3RyaWN0ZWQgc2NvcGUg4oCTIG9ubHkgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gSG1tLCBhbmQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgdGNhX2FjdGlvbl9nZGAuIFRoYXQgbmFycm93cyBkb3duIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgYW5kIHVzYWdlLCB3aGljaCBpcyBnb29kLiBLbm93aW5nIHRoYXQgY29udGV4dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGhlcmUsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYHRjZl9kZWxfbm90aWZ5YC4gSSB3YW50IHRvIHRyYWNlIGhvdyBkYXRhIGlzIGhhbmRsZWQgdGhlcmUg4oCTIHNlZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQsIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB3aGF0ZXZlciB0aGlzIHRoaW5nIGlzIHRoYXQgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHB1dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEl04oCZcyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgZGF0YSBmbG93IG5vdywgZm9sbG93aW5nIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB3aGF0IHRyaWdnZXJzIHdoYXQgaXMgY3J1Y2lhbC4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGltcG9ydGFudCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3byBjYWxscywgYW5kIEkgbmVlZCB0byB1bmNvdmVyIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9kZWxfbm90aWZ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTkyMz1pbnQgdGNmX2FjdGlvbl9yZW9mZmxvYWRfY2IoZmxvd19pbmRyX2Jsb2NrX2JpbmRfY2JfdCAqY2IsXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgwLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxOTgxOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgyLVx0XHRcdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMDEtXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwMDI6c3RhdGljIGludCB0Y2ZfZGVsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMy1cdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMTEtXHR9IGVsc2Uge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMDEyOlx0XHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMy1cdFx0XHRcdFx0IGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDMxPXRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNjgtXHRlbHNlIHsgLyogZGVsZXRlICovXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNjk6XHRcdHJldCA9IHRjZl9kZWxfbm90aWZ5KG5ldCwgbiwgYWN0aW9ucywgcG9ydGlkLCBhdHRyX3NpemUsIGV4dGFjayk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzAtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHRjZl9kZWxfbm90aWZ5YCBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGB0Y2ZfZGVsX25vdGlmeWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbiBmbG93IHdpdGhpbiB0aGUgVHJhZmZpYyBDb250cm9sIEZyYW1ld29yay4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyBsdXJraW5nIGhlcmUsIHBlcmhhcHMgYSByYWNlIGNvbmRpdGlvbiBvciBhbiB1bmhhbmRsZWQgY29ybmVyIGNhc2UuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBkYXRhLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW46CgoqICAgKipUaGUgZW50cnkgcG9pbnQ6KiogV2hlcmUgZG9lcyBgdGNmX2RlbF9ub3RpZnlgIGZpdCBpbnRvIHRoZSBicm9hZGVyIGRlbGV0aW9uIHByb2Nlc3M/IFdoYXQgY2FsbHMgaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBJcyBpdCBjYWxsZWQgZnJvbSB1c2VyLXNwYWNlLCBrZXJuZWwgc3BhY2UsIG9yIGJvdGg/CiogICAqKkRhdGEgaW50ZWdyaXR5OioqIEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBkYXRhIHJhY2VzPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgUkNVLCBzcGlubG9ja3MsIGFuZCBtdXRleGVzLgoqICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGVycm9yIGNvZGVzIGFyZSByZXR1cm5lZCwgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkIHVwc3RyZWFtPyBJcyB0aGVyZSBwcm9wZXIgY2xlYW51cCBpbiBjYXNlIG9mIGZhaWx1cmU/IEkgd2FudCB0byBzZWUgaWYgYW55IHJlc291cmNlcyBhcmUgbGVha2VkLgoqICAgKipJbnRlcmFjdGlvbiB3aXRoIG90aGVyIFRDRiBjb21wb25lbnRzOioqIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgVENGLCBhbmQgYW55IHBvc3NpYmxlIGFyZWFzIG9mIGNvbmZsaWN0LgoqICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBIb3cgaXMgbWVtb3J5IGhhbmRsZWQgd2hlbiBhbiBvYmplY3QgaXMgcmVtb3ZlZD8gSXMgdGhlIGNsZWFudXAgY29ycmVjdD8KClVsdGltYXRlbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55IHdlYWtuZXNzZXMgaW4gdGhlIGRlbGV0aW9uIG1lY2hhbmlzbSB0aGF0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcywgaW5jb3JyZWN0IHRyYWZmaWMgYmVoYXZpb3IsIG9yIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IEkgaGF2ZSBhIHZhZ3VlIGlkZWEgb2YgdGhlIHByb2JsZW0sIGFuZCB3aWxsIGJlIGxvb2tpbmcgZm9yIGEgcG90ZW50aWFsIGNhdXNlLCBzbyB0aGUgY2hlY2sgd2lsbCBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTgwOlx0XG4xOTgxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4xOTgyOlx0XHRcdFx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuMTk4MzpcdFx0XHRcdFx0XHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXG4xOTg0Olx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTk4NTpcdHtcbjE5ODY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xOTg3Olx0XG4xOTg4Olx0XHRza2IgPSBhbGxvY19za2IobWF4KGF0dHJfc2l6ZSwgTkxNU0dfR09PRFNJWkUpLCBHRlBfS0VSTkVMKTtcbjE5ODk6XHRcdGlmICghc2tiKVxuMTk5MDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PQlVGUyk7XG4xOTkxOlx0XG4xOTkyOlx0XHRpZiAodGNhX2dldF9maWxsKHNrYiwgYWN0aW9ucywgcG9ydGlkLCBuLVx1MDAzZW5sbXNnX3NlcSwgMCwgUlRNX0RFTEFDVElPTixcbjE5OTM6XHRcdFx0XHQgMCwgMiwgZXh0YWNrKSBcdTAwM2M9IDApIHtcbjE5OTQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZmlsbCBuZXRsaW5rIFRDIGFjdGlvbiBhdHRyaWJ1dGVzXCYjMzQ7KTtcbjE5OTU6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xOTk2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuMTk5NzpcdFx0fVxuMTk5ODpcdFxuMTk5OTpcdFx0cmV0dXJuIHNrYjtcbjIwMDA6XHR9XG4yMDAxOlx0XG4yMDAyOlx0c3RhdGljIGludCB0Y2ZfZGVsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcbjIwMDM6XHRcdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcbjIwMDQ6XHRcdFx0XHQgIHNpemVfdCBhdHRyX3NpemUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIwMDU6XHR7XG4yMDA2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMjAwNzpcdFx0aW50IHJldDtcbjIwMDg6XHRcbjIwMDk6XHRcdGlmICghcnRubF9ub3RpZnlfbmVlZGVkKG5ldCwgbi1cdTAwM2VubG1zZ19mbGFncywgUlROTEdSUF9UQykpIHtcbjIwMTA6XHRcdFx0c2tiID0gTlVMTDtcbjIwMTE6XHRcdH0gZWxzZSB7XG4yMDEyOlx0XHRcdHNrYiA9IHRjZl9kZWxfbm90aWZ5X21zZyhuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLFxuMjAxMzpcdFx0XHRcdFx0XHQgZXh0YWNrKTtcbjIwMTQ6XHRcdFx0aWYgKElTX0VSUihza2IpKVxuMjAxNTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNrYik7XG4yMDE2Olx0XHR9XG4yMDE3Olx0XG4yMDE4Olx0XHQvKiBub3cgZG8gdGhlIGRlbGV0ZSAqL1xuMjAxOTpcdFx0cmV0ID0gdGNmX2FjdGlvbl9kZWxldGUobmV0LCBhY3Rpb25zKTtcbjIwMjA6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjIwMjE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZGVsZXRlIFRDIGFjdGlvblwmIzM0Oyk7XG4yMDIyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMjAyMzpcdFx0XHRyZXR1cm4gcmV0O1xuMjAyNDpcdFx0fVxuMjAyNTpcdFxuMjAyNjpcdFx0cmV0dXJuIHJ0bmV0bGlua19tYXliZV9zZW5kKHNrYiwgbmV0LCBwb3J0aWQsIFJUTkxHUlBfVEMsXG4yMDI3Olx0XHRcdFx0XHQgICAgbi1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfRUNITyk7XG4yMDI4Olx0fVxuMjAyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gRGVsZXRpb24gTG9naWMqKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MgY2FsbGluZyBmb3IgYHRjZl9hY3Rpb25fZGVsZXRlYC4gTXkgaW1tZWRpYXRlIG1lbnRhbCBtYXAgc3RhcnRzIHRvIGFzc2VtYmxlLiBUaGlzIHN1Z2dlc3RzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbSYjMzk7cyBsaWZlY3ljbGUg4oCTIGEgZGVsZXRpb24gYWN0aW9uIHJlbGF0ZWQgdG8sIGxpa2VseSwgYSB0cmFuc2FjdGlvbiBjb250cm9sIGZyYW1ld29yayAoVENGKSwgZ2l2ZW4gdGhlIHByZWZpeC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBiZWluZyBkZWxldGVkPyBBIHJlY29yZD8gQW4gb2JqZWN0PyBBbiBlbnRpcmUgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWxldGlvbj8gQXJlIHRoZXJlIGNhc2NhZGluZyBlZmZlY3RzIHRvIGNvbnNpZGVyPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBtYW5hZ2U/IElzIHRoaXMgZGVsZXRpb24gdXNlciBpbml0aWF0ZWQsIG9yIGF1dG9tYXRpYz8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkPyBNb3JlIGltcG9ydGFudGx5LCBpcyBkYXRhIGludGVncml0eSBhdCByaXNrLCBhbmQgaXMgdGhlcmUgYW55IHJvbGxiYWNrIG9yIHJlY292ZXJ5IGltcGxlbWVudGVkPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBhY3Rpb24gdG8gcHJvcGVybHkgZXZhbHVhdGUgaXQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyB0aGlzIGlzIGJlaW5nIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0MDpcdFx0cmV0dXJuIGVycjtcbjE4NDE6XHR9XG4xODQyOlx0XG4xODQzOlx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcbjE4NDQ6XHR7XG4xODQ1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xuMTg0NjpcdFx0aW50IGk7XG4xODQ3Olx0XG4xODQ4Olx0XHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XG4xODQ5Olx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVx1MDAzZW9wcztcbjE4NTA6XHRcdFx0LyogQWN0aW9ucyBjYW4gYmUgZGVsZXRlZCBjb25jdXJyZW50bHkgc28gd2UgbXVzdCBzYXZlIHRoZWlyXG4xODUxOlx0XHRcdCAqIHR5cGUgYW5kIGlkIHRvIHNlYXJjaCBhZ2FpbiBhZnRlciByZWZlcmVuY2UgaXMgcmVsZWFzZWQuXG4xODUyOlx0XHRcdCAqL1xuMTg1MzpcdFx0XHRzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8gPSBhLVx1MDAzZWlkcmluZm87XG4xODU0Olx0XHRcdHUzMiBhY3RfaW5kZXggPSBhLVx1MDAzZXRjZmFfaW5kZXg7XG4xODU1Olx0XG4xODU2Olx0XHRcdGFjdGlvbnNbaV0gPSBOVUxMO1xuMTg1NzpcdFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpIHtcbjE4NTg6XHRcdFx0XHQvKiBsYXN0IHJlZmVyZW5jZSwgYWN0aW9uIHdhcyBkZWxldGVkIGNvbmN1cnJlbnRseSAqL1xuMTg1OTpcdFx0XHRcdG1vZHVsZV9wdXQob3BzLVx1MDAzZW93bmVyKTtcbjE4NjA6XHRcdFx0fSBlbHNlIHtcbjE4NjE6XHRcdFx0XHRpbnQgcmV0O1xuMTg2MjpcdFxuMTg2MzpcdFx0XHRcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXG4xODY0Olx0XHRcdFx0cmV0ID0gdGNmX2lkcl9kZWxldGVfaW5kZXgoaWRyaW5mbywgYWN0X2luZGV4KTtcbjE4NjU6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTg2NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjE4Njc6XHRcdFx0fVxuMTg2ODpcdFx0fVxuMTg2OTpcdFx0cmV0dXJuIDA7XG4xODcwOlx0fVxuMTg3MTpcdFxuMTg3MjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3Jlb2ZmbG9hZF9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsXG4xODczOlx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbilcbjE4NzQ6XHR7XG4xODc1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xuMTg3NjpcdFx0XHRbMF0gPSBhY3Rpb24sXG4xODc3Olx0XHR9O1xuMTg3ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE4Nzk6XHRcdHNpemVfdCBhdHRyX3NpemU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTkzCgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDgyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZXNvdXJjZSBMZWFrIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGZvY3VzZXMgb24gdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUsIGlmIGB0Y2ZfaWRyX2RlbGV0ZV9pbmRleGAgZmFpbHMgYXQgaW5kZXggMCwgdGhlIGNvZGUgc2V0cyBgYWN0aW9uc1swXWAgdG8gYE5VTExgIGJ1dCBkb2VzbiYjMzk7dCBoYW5kbGUgdGhlIHJlbWFpbmluZyBhY3Rpb25zIHByb3Blcmx5LiBUaGlzIGxlYWRzIHRvIGEgcmVmZXJlbmNlIGNvdW50IGxlYWssIGEgY2xhc3NpYyByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLiBUaGUgc3Vic2VxdWVudCBlcnJvciBoYW5kbGluZyBwYXRoIGluIGB0Y2FfYWN0aW9uX2dkYCwgdXBvbiBlbmNvdW50ZXJpbmcgdGhlIGVycm9yLCBjYWxscyBgdGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKWAsIGJ1dCBiZWNhdXNlIGBhY3Rpb25zWzBdYCBpcyBub3cgYE5VTExgLCB0aGUgaXRlcmF0aW9uIHN0b3BzIHByZW1hdHVyZWx5LCBsZWF2aW5nIHJlZmVyZW5jZXMgdG8gbGF0ZXIgYWN0aW9ucyBpbiB0aGUgYXJyYXkgbGVha2VkLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGVudGlyZSBgYWN0aW9uc2AgYXJyYXksIGZyb20gMCB0byBgVENBX0FDVF9NQVhfUFJJTyAtIDFgLCByZWdhcmRsZXNzIG9mIGBOVUxMYCBlbnRyaWVzLCBjb3JyZWN0bHkgcmVsZWFzaW5nIGFsbCByZWZlcmVuY2VzLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgZml4IGZvciBhIHNwZWNpZmljIHJlc291cmNlIGxlYWsgZHVyaW5nIGVycm9yIGhhbmRsaW5nLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJJiMzOTttIGNhcmVmdWxseSBldmFsdWF0aW5nIHdoZXRoZXIgdGhlIHBhdGNoIGNvdWxkIGludHJvZHVjZSBuZXcgdnVsbmVyYWJpbGl0aWVzLgoKKiAgICoqVXNlciBTcGFjZSBMZWFrYWdlOioqIEFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgbWlnaHQgbGVhaz8gTm8sIHRoaXMgY29kZSBkb2VzbiYjMzk7dCBpbnRlcmFjdCB3aXRoIHVzZXIgc3BhY2UgZGlyZWN0bHkgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIHRoaXMgcG9zc2liaWxpdHkuCiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgQnJhbmNoaW5nOioqIERvZXMgaXQgaW50cm9kdWNlIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGBhY3Rpb25zYCBhcnJheSBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgKGA9IHt9YCksIHNvIGVhY2ggZW50cnkgaXMgZWl0aGVyIGEgdmFsaWQgcG9pbnRlciBvciBgTlVMTGAuIFRoaXMgaW5pdGlhbGl6YXRpb24gcHJldmVudHMgYW55IHBvdGVudGlhbCBtaXN1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuCiogICAqKkJ1ZmZlciBFcnJvcnM6KiogRG9lcyBpdCBpbnZvbHZlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ/IE5vcGUuCiogICAqKkJvdW5kcyBDaGVja3M6KiogRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KCkdpdmVuIHRoZXNlIG9ic2VydmF0aW9ucywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IGFib3V0IGZpeGluZyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSByZWxlYXNlZCwgbm90IGFib3V0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKSGVyZSYjMzk7cyBteSByYXRpb25hbGU6CgpLTVNBTiBmb2N1c2VzIG9uIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gSW4gY29udHJhc3QsIHRoaXMgcGF0Y2ggaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgYW4gYXJyYXkgb2YgYWN0aW9ucyBhZnRlciBhIGRlbGV0aW9uIGZhaWx1cmUuIENydWNpYWxseSwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gemVyby1pbml0aWFsaXplcyB0aGUgYGFjdGlvbnNgIGFycmF5IChgPSB7fWApLiBUaGlzIGluaXRpYWxpemF0aW9uIG1lYW5zIHRoYXQgdGhlIGNvZGUgb25seSB3b3JrcyB3aXRoIGVpdGhlciB2YWxpZCBwb2ludGVycyBvciBgTlVMTGAgZW50cmllcy4gS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBmaXggYWRkcmVzc2VzIGEgcmVzb3VyY2UgbGVhayAocmVmZXJlbmNlIGNvdW50IGJ1ZykgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBpZGVudGlmeSBhbnkgaXNzdWVzIGluIHRoaXMgYXJlYS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBgVENBX0FDVF9NQVhfUFJJT2Agc2xvdHMgcmF0aGVyIHRoYW4gdGVybWluYXRpbmcgYXQgdGhlIGZpcnN0IE5VTEwgZW50cnkgdmlhIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcmVtYWluaW5nIGFjdGlvbiByZWZlcmVuY2VzIGFyZSByZWxlYXNlZCB3aGVuIGFuIGVhcmxpZXIgYWN0aW9uIGRlbGV0aW9uIGluIGEgYmF0Y2ggZmFpbHMgYWZ0ZXIgY2xlYXJpbmcgaXRzIHNsb3QuXG5cblRoZSBgYWN0aW9uc2AgYXJyYXkgaW4gYHRjYV9hY3Rpb25fZ2QoKWAgaXMgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbVENBX0FDVF9NQVhfUFJJT10gPSB7fTtgKSwgc28gYWxsIHVucG9wdWxhdGVkIG9yIGNsZWFyZWQgZW50cmllcyBhcmUgc2FmZWx5IE5VTEwuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBzdHJpY3RseSBhIHJlZmVyZW5jZSBjb3VudCAvIHJlc291cmNlIGxlYWssIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBgVENBX0FDVF9NQVhfUFJJT2Agc2xvdHMgcmF0aGVyIHRoYW4gdGVybWluYXRpbmcgYXQgdGhlIGZpcnN0IE5VTEwgZW50cnkgdmlhIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcmVtYWluaW5nIGFjdGlvbiByZWZlcmVuY2VzIGFyZSByZWxlYXNlZCB3aGVuIGFuIGVhcmxpZXIgYWN0aW9uIGRlbGV0aW9uIGluIGEgYmF0Y2ggZmFpbHMgYWZ0ZXIgY2xlYXJpbmcgaXRzIHNsb3QuXG5cblRoZSBgYWN0aW9uc2AgYXJyYXkgaW4gYHRjYV9hY3Rpb25fZ2QoKWAgaXMgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbVENBX0FDVF9NQVhfUFJJT10gPSB7fTtgKSwgc28gYWxsIHVucG9wdWxhdGVkIG9yIGNsZWFyZWQgZW50cmllcyBhcmUgc2FmZWx5IE5VTEwuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBzdHJpY3RseSBhIHJlZmVyZW5jZSBjb3VudCAvIHJlc291cmNlIGxlYWssIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUyOjUzLjAwNTcwNDE1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc3ODM1NzQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2FjdGlvbl9wdXRfbWFueVwiLFxuICAgIFwidGNhX2FjdGlvbl9nZFwiLFxuICAgIFwidGNmX2FjdGlvbl9kZWxldGVcIixcbiAgICBcInRjZl9kZWxfbm90aWZ5XCIsXG4gICAgXCJ0Y19jdGxfYWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBgVENBX0FDVF9NQVhfUFJJT2Agc2xvdHMgcmF0aGVyIHRoYW4gdGVybWluYXRpbmcgYXQgdGhlIGZpcnN0IE5VTEwgZW50cnkgdmlhIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcmVtYWluaW5nIGFjdGlvbiByZWZlcmVuY2VzIGFyZSByZWxlYXNlZCB3aGVuIGFuIGVhcmxpZXIgYWN0aW9uIGRlbGV0aW9uIGluIGEgYmF0Y2ggZmFpbHMgYWZ0ZXIgY2xlYXJpbmcgaXRzIHNsb3QuXFxuXFxuVGhlIGBhY3Rpb25zYCBhcnJheSBpbiBgdGNhX2FjdGlvbl9nZCgpYCBpcyB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O2ApLCBzbyBhbGwgdW5wb3B1bGF0ZWQgb3IgY2xlYXJlZCBlbnRyaWVzIGFyZSBzYWZlbHkgTlVMTC4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIHN0cmljdGx5IGEgcmVmZXJlbmNlIGNvdW50IC8gcmVzb3VyY2UgbGVhaywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mjo1My4wMDU3MTIyMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ1MzM1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZjY1ZjYwMTMwODVkMzcyY2Q1NWRkYmRjYzc0YzI1ZmU5ZjY0NmU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA5OjUyOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXFxuaW5kZXggMzdlY2VkODRkZmE1Zi4uODY3MTBhNTk2YTBmYSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jXFxuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xcbkBAIC0xMjIzLDExICsxMjIzLDE2IEBAIHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcXG4gXFxuIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbiB7XFxuLVxcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS1cXHUwMDNlb3BzO1xcbitcXHQvKiBEZWxldGlvbiBtYXkgaGF2ZSBjbGVhcmVkIGVudHJpZXMgYmVmb3JlIGZhaWxpbmcuICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUQ0FfQUNUX01BWF9QUklPOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XFxuK1xcbitcXHRcXHRpZiAoIWEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRvcHMgPSBhLVxcdTAwM2VvcHM7XFxuIFxcdFxcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSlcXG4gXFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2FjdGlvbnMvYmF0Y2gtZGVsZXRlLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2FjdGlvbnMvYmF0Y2gtZGVsZXRlLmpzb25cXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uXFxuQEAgLTAsMCArMSwxMTUgQEBcXG4rW1xcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkNzEwXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcImFjdGlvbnNcXFwiLFxcbisgICAgICAgICAgICBcXFwiZ2FjdFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXFxuKyAgICAgICAgICAgIFtcXG4rICAgICAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFxcXCIsXFxuKyAgICAgICAgICAgICAgICAwLFxcbisgICAgICAgICAgICAgICAgMSxcXG4rICAgICAgICAgICAgICAgIDI1NVxcbisgICAgICAgICAgICBdLFxcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMVxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMlxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcHJvdG9jb2wgaXAgaW5ncmVzcyB1MzIgbWF0Y2ggdTMyIDAgMCBhY3Rpb24gZ2FjdCBpbmRleCAxXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIyNTVcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwidG90YWwgYWN0cyAzXFxcXFxcXFxiLippbmRleCAxIHJlZiAyIGJpbmQgMVxcXFxcXFxcYi4qaW5kZXggMiByZWYgMSBiaW5kIDBcXFxcXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXFxcXFxiXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXFxcIixcXG4rICAgICAgICAgICAgW1xcbisgICAgICAgICAgICAgICAgXFxcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XFxcIixcXG4rICAgICAgICAgICAgICAgIDAsXFxuKyAgICAgICAgICAgICAgICAxLFxcbisgICAgICAgICAgICAgICAgMjU1XFxuKyAgICAgICAgICAgIF1cXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkNzExXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJhY3Rpb25zXFxcIixcXG4rICAgICAgICAgICAgXFxcImdhY3RcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgMCxcXG4rICAgICAgICAgICAgICAgIDEsXFxuKyAgICAgICAgICAgICAgICAyNTVcXG4rICAgICAgICAgICAgXSxcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDNcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMlxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMjU1XFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInRvdGFsIGFjdHMgMlxcXFxcXFxcYi4qaW5kZXggMiByZWYgMiBiaW5kIDFcXFxcXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXFxcXFxiXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXFxcIixcXG4rICAgICAgICAgICAgW1xcbisgICAgICAgICAgICAgICAgXFxcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XFxcIixcXG4rICAgICAgICAgICAgICAgIDAsXFxuKyAgICAgICAgICAgICAgICAxLFxcbisgICAgICAgICAgICAgICAgMjU1XFxuKyAgICAgICAgICAgIF1cXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkNzEzXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJEZWxldGUgYSB0YWlsIGFjdGlvbiBvbmNlIGFmdGVyIGEgZmFpbGVkIGJhdGNoXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJhY3Rpb25zXFxcIixcXG4rICAgICAgICAgICAgXFxcImdhY3RcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgMCxcXG4rICAgICAgICAgICAgICAgIDEsXFxuKyAgICAgICAgICAgICAgICAyNTVcXG4rICAgICAgICAgICAgXSxcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMlxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjI1NVxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCJzaCAtYyAnJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXFx1MDAyNlxcdTAwMjYgJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3QnXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInRvdGFsIGFjdHMgMVxcXFxcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcXFxcXGJcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgMCxcXG4rICAgICAgICAgICAgICAgIDEsXFxuKyAgICAgICAgICAgICAgICAyNTVcXG4rICAgICAgICAgICAgXVxcbisgICAgICAgIF1cXG4rICAgIH1cXG4rXVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mjo1NC42NTEyMjI1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkwODE5Njk5NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCIsXG4gICAgXCJ0Y2FfYWN0aW9uX2dkXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICAgIFwidGNmX2RlbF9ub3RpZnlcIixcbiAgICBcInRjX2N0bF9hY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5pbmRleCAzN2VjZWQ4NGRmYTVmLi44NjcxMGE1OTZhMGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuQEAgLTEyMjMsMTEgKzEyMjMsMTYgQEAgc3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKVxuIFxuIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuIHtcbi1cdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4gXHRpbnQgaTtcbiBcbi1cdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuK1x0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSsrKSB7XG4rXHRcdHN0cnVjdCB0Y19hY3Rpb24gKmEgPSBhY3Rpb25zW2ldO1xuK1x0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzO1xuK1xuK1x0XHRpZiAoIWEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG9wcyA9IGEtXHUwMDNlb3BzO1xuIFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXG4gXHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxuQEAgLTAsMCArMSwxMTUgQEBcbitbXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzEwXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiYWN0aW9uc1wiLFxuKyAgICAgICAgICAgIFwiZ2FjdFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdLFxuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyNTVcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3RcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwidG90YWwgYWN0cyAzXFxcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzExXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImFjdGlvbnNcIixcbisgICAgICAgICAgICBcImdhY3RcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXSxcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDNcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDJcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMjU1XCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInRvdGFsIGFjdHMgMlxcXFxiLippbmRleCAyIHJlZiAyIGJpbmQgMVxcXFxiLippbmRleCAzIHJlZiAxIGJpbmQgMFxcXFxiXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXVxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiZDcxM1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiRGVsZXRlIGEgdGFpbCBhY3Rpb24gb25jZSBhZnRlciBhIGZhaWxlZCBiYXRjaFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJhY3Rpb25zXCIsXG4rICAgICAgICAgICAgXCJnYWN0XCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF0sXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDFcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMlwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjI1NVwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCJzaCAtYyAnJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXHUwMDI2XHUwMDI2ICRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0J1wiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJ0b3RhbCBhY3RzIDFcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcYlwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF1cbisgICAgICAgIF1cbisgICAgfVxuK11cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUyOjU0LjY1MTIyNTU3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NDk5OTAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG5ldC9zY2hlZC9hY3RfYXBpLmNgIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIGZpbGUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBpcyBgbmV0L3NjaGVkL2FjdF9hcGkuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbiwgYXMgaWRlbnRpZmllZCBieSB0aGUgZGlmZi4gVGhpcyBhcmVhIGhhbmRsZXMgdGhlIGFjdGlvbiBBUEkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHNjaGVkdWxlciwgd2hpY2ggaXMgc29tZXRoaW5nIEknbSB2ZXJ5IGZhbWlsaWFyIHdpdGguIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb2RlIHRoYXQgaGFzIGJlZW4gY2hhbmdlZCwgd2hpY2ggaW4gdGhpcyBjYXNlIHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lIDEyMjMgb2YgdGhlIG1lbnRpb25lZCBmaWxlLiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIGxpbmUgaW4gb3JkZXIgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgYWx0ZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjAwLjUwMTIxOTM1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0XFx0XFx0cmV0ID0gX190Y2ZfaWRyX3JlbGVhc2UoYSwgYmluZCwgdHJ1ZSk7XFxuMTIxMTpcXHRcXHRcXHRpZiAocmV0ID09IEFDVF9QX0RFTEVURUQpXFxuMTIxMjpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KG9wcy1cXHUwMDNlb3duZXIpO1xcbjEyMTM6XFx0XFx0XFx0ZWxzZSBpZiAocmV0IFxcdTAwM2MgMClcXG4xMjE0OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTIxNTpcXHRcXHR9XFxuMTIxNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMTc6XFx0fVxcbjEyMTg6XFx0XFxuMTIxOTpcXHRzdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuMTIyMDpcXHR7XFxuMTIyMTpcXHRcXHRyZXR1cm4gX190Y2ZfYWN0aW9uX3B1dChwLCBmYWxzZSk7XFxuMTIyMjpcXHR9XFxuMTIyMzpcXHRcXG4xMjI0OlxcdHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbjEyMjU6XFx0e1xcbjEyMjY6XFx0XFx0aW50IGk7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdC8qIERlbGV0aW9uIG1heSBoYXZlIGNsZWFyZWQgZW50cmllcyBiZWZvcmUgZmFpbGluZy4gKi9cXG4xMjI5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUQ0FfQUNUX01BWF9QUklPOyBpKyspIHtcXG4xMjMwOlxcdFxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmEgPSBhY3Rpb25zW2ldO1xcbjEyMzE6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcztcXG4xMjMyOlxcdFxcbjEyMzM6XFx0XFx0XFx0aWYgKCFhKVxcbjEyMzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTIzNTpcXHRcXHRcXHRvcHMgPSBhLVxcdTAwM2VvcHM7XFxuMTIzNjpcXHRcXHRcXHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXFxuMTIzNzpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KG9wcy1cXHUwMDNlb3duZXIpO1xcbjEyMzg6XFx0XFx0fVxcbjEyMzk6XFx0fVxcbjEyNDA6XFx0XFxuMTI0MTpcXHRzdGF0aWMgdm9pZCB0Y2FfcHV0X2JvdW5kX21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLCBpbnQgaW5pdF9yZXNbXSlcXG4xMjQyOlxcdHtcXG4xMjQzOlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XFxuMTI0NDpcXHRcXHRpbnQgaTtcXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbjEyNDc6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXFx1MDAzZW9wcztcXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0XFx0aWYgKGluaXRfcmVzW2ldID09IEFDVF9QX0NSRUFURUQpXFxuMTI1MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjUxOlxcdFxcbjEyNTI6XFx0XFx0XFx0aWYgKHRjZl9hY3Rpb25fcHV0KGEpKVxcbjEyNTM6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4xMjU0OlxcdFxcdH1cXG4xMjU1OlxcdH1cXG4xMjU2OlxcdFxcbjEyNTc6XFx0aW50XFxuMTI1ODpcXHR0Y2ZfYWN0aW9uX2R1bXBfb2xkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBiaW5kLCBpbnQgcmVmKVxcbjEyNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzowMC41MDEzODI0MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDk1NTY0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQWN0aW9uIEV4ZWN1dGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBhY3Rpb25zIGFyZSBiZWluZyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbiDigJMgd2hlcmUgaXMgaXQgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoZSBzeXN0ZW0/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0J3MgdGhlIHJvbGUgb2YgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBpbiB0aGlzIHdob2xlIHByb2Nlc3M/IEkgc3VzcGVjdCB0aGV5J3JlIGNsb3NlbHkgcmVsYXRlZCwgbWF5YmUgZXZlbiBwYXJ0IG9mIGEgbG9vcCBvciBzb21lIGl0ZXJhdGl2ZSBvcGVyYXRpb24uXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBkaXZlLiBMZXQncyBmaXJlIHVwIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYm90aCBvZiB0aGVzZSBmdW5jdGlvbiBuYW1lcy4gVGhpcyBzaG91bGQgcXVpY2tseSBoaWdobGlnaHQgdGhlIGNhbGwgc2l0ZXMgZm9yIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBhbmQgc2hvdyBtZSB3aGVyZSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGlzIGJlaW5nIHV0aWxpemVkLCBnaXZpbmcgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgYW5hbHl6aW5nIHRoZSBhY3Rpb24gZXhlY3V0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzowMy41OTY5NDg3MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMjk1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdGlvbl9wdXRfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTIyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MDMuNjcwMTg1MDEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzNjI1MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGlzIGNvZGUsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlZmluaXRpb24gb2YgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYC4gSSdsbCBuZWVkIHRvIGtub3cgaXRzIHNpZ25hdHVyZSwgaG93IGl0J3MgdXNlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgaXRzIHJvbGUgaXMgaW4gaXRlcmF0aW5nIHRocm91Z2ggYWN0aW9ucyB3aXRoaW4gdGhlIFRyYWZmaWMgQ29udHJvbCBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nIHdpdGggYWN0aW9uczsgaXMgaXQganVzdCBwcm92aWRpbmcgaXRlcmF0aW9uLCBvciBpcyBpdCBwb3RlbnRpYWxseSBtYW5pcHVsYXRpbmcgdGhlbSBpbiBzb21lIHdheT9cblxuTmV4dCwgbXkgZm9jdXMgc2hpZnRzIHRvIGB0Y2FfYWN0aW9uX2dkYC4gSSBoYXZlIHRvIGNvbm5lY3QgdGhpcyB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSBhIGhhbmRsZSwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgb3IgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGFjdGlvbi4gQ29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLCBgZ2RgIGxpa2VseSBtZWFucyBcImdlbmVyaWMgZGF0YVwiIG9yIFwiZ2xvYmFsIGRhdGFcIiBmb3IgYWN0aW9ucywgYW5kIEkgd2FudCB0byBjb25maXJtIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gaXQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBhY3Rpb25zIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgbG9vcC4gVGhlIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBmaWxlIGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlc2UgY3J1Y2lhbCBkZWZpbml0aW9ucyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVsYXRpb25zaGlwIHRob3JvdWdobHkgYmVmb3JlIEkgY2FuIGdvIGFueSBmdXJ0aGVyLiBJIGFsc28ga25vdyB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgb2YgdGhlIEFjdGlvbiBBUEkgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzowOC4wMDY0Mzk0NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMTk2MjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BrdF9jbHMuaD0yNzk9c3RhdGljIGlubGluZSB2b2lkIHRjZl9leHRzX3B1dF9uZXQoc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI5NC1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Mjk1OiNkZWZpbmUgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykgXFxcXFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yOTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRDQV9BQ1RfTUFYX1BSSU8gXFx1MDAyNlxcdTAwMjYgKChhKSA9IGFjdGlvbnNbaV0pOyBpKyspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjEwLjUxODQwNzgyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NDAxMjU2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBY3Rpb24gSXRlcmF0b3IgaW4gVHJhZmZpYyBDb250cm9sKipcblxuT2theSwgc28gSSB3YXMgZGlnZ2luZyBpbnRvIHRoZSB0cmFmZmljIGNvbnRyb2wgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYC4gSSBub3RpY2VkIHNvbWV0aGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbiBob3cgaXQgaXRlcmF0ZXMgdGhyb3VnaCBhY3Rpb25zLiBUaGUgbWFjcm8sIGAjZGVmaW5lIHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpYCwgY2xldmVybHkgdXNlcyBgYWN0aW9uc1tpXSA9PSBOVUxMYCBhcyBpdHMgdGVybWluYXRpb24gY29uZGl0aW9uLiBCdXQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuXG5cblRoZSBpc3N1ZSBhcmlzZXMgZHVyaW5nIGJhdGNoIGFjdGlvbiBkZWxldGlvbiwgd2hlbiBhY3Rpb25zIGFyZSBzZXQgdG8gYE5VTExgIGFmdGVyIHRoZXkncmUgcmVtb3ZlZCAoZWl0aGVyIGR1cmluZyBvciBhZnRlciB0aGUgZGVsZXRpb24gbG9vcCkuIElmIGFuIGVycm9yIHBvcHMgdXAgKmJlZm9yZSogYWxsIGFjdGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGlzIGRlbGV0aW9uIHByb2Nlc3MsIHRoZSBpdGVyYXRvciBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIHdhcyBwcmVtYXR1cmVseSBzdG9wcGluZyB3aGVuIGl0IGhpdCB0aGF0IGZpcnN0IGBOVUxMYCBwb2ludGVyLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBtZW1vcnkgbGVhayBiZWNhdXNlIHRoZSBhY3Rpb25zICphZnRlciogdGhhdCBgTlVMTGAgcG9pbnRlciB3ZXJlIG5ldmVyIGRlLXJlZmVyZW5jZWQgb3IgcmVsZWFzZWQhXG5cblRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCBmcm9tIHRoZSBwYXRjaCwgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIGl0ZXJhdGlvbiBpbiBgdGNmX2FjdGlvbl9wdXRfbWFueWAgc28gdGhhdCBpdCBsb29wcyB0aHJvdWdoICphbGwqIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBlZmZlY3RpdmVseSBza2lwcGluZyBgTlVMTGAgZW50cmllcyAoYGlmICghYSkgY29udGludWU7YCkgcmF0aGVyIHRoYW4gYnJlYWtpbmcgdGhlIGxvb3AgYXQgdGhlIGZpcnN0IGBOVUxMYC4gVGhpcyB3YXksICpldmVyeSogYWN0aW9uIGdldHMgcHJvY2Vzc2VkLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcm1lZGlhdGUgYE5VTExgIHBvaW50ZXJzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgd29ya3MsIEknbSBnb2luZyB0byByZWFkIHRoZSBjb2RlIG9mIGB0Y2FfYWN0aW9uX2dkYCBhcm91bmQgbGluZSAyMDMwLCB3aGVyZSB0aGUgYmF0Y2ggZGVsZXRpb24gbG9naWMgd291bGQgbGlrZWx5IGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWN0aW9ucyBhcmUgYWN0dWFsbHkgaGFuZGxlZCBkdXJpbmcgdGhpcyBkZWxldGlvbiBwcm9jZXNzIHRvIHNlZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgcHJvcG9zZWQgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MTcuMTU4NTM1Mzc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzA6XFx0c3RhdGljIGludFxcbjIwMzE6XFx0dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjIwMzI6XFx0XFx0ICAgICAgdTMyIHBvcnRpZCwgaW50IGV2ZW50LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMjAzMzpcXHR7XFxuMjAzNDpcXHRcXHRpbnQgaSwgcmV0O1xcbjIwMzU6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0FDVF9NQVhfUFJJTyArIDFdO1xcbjIwMzY6XFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0O1xcbjIwMzc6XFx0XFx0c2l6ZV90IGF0dHJfc2l6ZSA9IDA7XFxuMjAzODpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307XFxuMjAzOTpcXHRcXG4yMDQwOlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX0FDVF9NQVhfUFJJTywgbmxhLCBOVUxMLFxcbjIwNDE6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbjIwNDI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjA0MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIwNDQ6XFx0XFxuMjA0NTpcXHRcXHRpZiAoZXZlbnQgPT0gUlRNX0RFTEFDVElPTiBcXHUwMDI2XFx1MDAyNiBuLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX1JPT1QpIHtcXG4yMDQ2OlxcdFxcdFxcdGlmICh0YlsxXSlcXG4yMDQ3OlxcdFxcdFxcdFxcdHJldHVybiB0Y2FfYWN0aW9uX2ZsdXNoKG5ldCwgdGJbMV0sIG4sIHBvcnRpZCwgZXh0YWNrKTtcXG4yMDQ4OlxcdFxcbjIwNDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hpbGUgZmx1c2hpbmcgVEMgYWN0aW9uXFxcIik7XFxuMjA1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMDUxOlxcdFxcdH1cXG4yMDUyOlxcdFxcbjIwNTM6XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBUQ0FfQUNUX01BWF9QUklPIFxcdTAwMjZcXHUwMDI2IHRiW2ldOyBpKyspIHtcXG4yMDU0OlxcdFxcdFxcdGFjdCA9IHRjZl9hY3Rpb25fZ2V0XzEobmV0LCB0YltpXSwgbiwgcG9ydGlkLCBleHRhY2spO1xcbjIwNTU6XFx0XFx0XFx0aWYgKElTX0VSUihhY3QpKSB7XFxuMjA1NjpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGFjdCk7XFxuMjA1NzpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4yMDU4OlxcdFxcdFxcdH1cXG4yMDU5OlxcdFxcdFxcdGF0dHJfc2l6ZSArPSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xcbjIwNjA6XFx0XFx0XFx0YWN0aW9uc1tpIC0gMV0gPSBhY3Q7XFxuMjA2MTpcXHRcXHR9XFxuMjA2MjpcXHRcXG4yMDYzOlxcdFxcdGF0dHJfc2l6ZSA9IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKGF0dHJfc2l6ZSk7XFxuMjA2NDpcXHRcXG4yMDY1OlxcdFxcdGlmIChldmVudCA9PSBSVE1fR0VUQUNUSU9OKVxcbjIwNjY6XFx0XFx0XFx0cmV0ID0gdGNmX2dldF9ub3RpZnkobmV0LCBwb3J0aWQsIG4sIGFjdGlvbnMsIGF0dHJfc2l6ZSwgZXZlbnQsXFxuMjA2NzpcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuMjA2ODpcXHRcXHRlbHNlIHsgLyogZGVsZXRlICovXFxuMjA2OTpcXHRcXHRcXHRyZXQgPSB0Y2ZfZGVsX25vdGlmeShuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLCBleHRhY2spO1xcbjIwNzA6XFx0XFx0XFx0aWYgKHJldClcXG4yMDcxOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjIwNzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA3MzpcXHRcXHR9XFxuMjA3NDpcXHRlcnI6XFxuMjA3NTpcXHRcXHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xcbjIwNzY6XFx0XFx0cmV0dXJuIHJldDtcXG4yMDc3OlxcdH1cXG4yMDc4OlxcdFxcbjIwNzk6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfYWRkX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMjA4MDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcXG4yMDgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgdTMyIHBvcnRpZCwgc2l6ZV90IGF0dHJfc2l6ZSxcXG4yMDgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwODM6XFx0e1xcbjIwODQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4yMDg1OlxcdFxcbjIwODY6XFx0XFx0c2tiID0gYWxsb2Nfc2tiKG1heChhdHRyX3NpemUsIE5MTVNHX0dPT0RTSVpFKSwgR0ZQX0tFUk5FTCk7XFxuMjA4NzpcXHRcXHRpZiAoIXNrYilcXG4yMDg4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTtcXG4yMDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzoxNy4xNTg3MDEzODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY5ODcwNTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHRjZl9kZWxfbm90aWZ5YCBhbmQgaXRzIEltcGFjdCBvbiBgYWN0aW9uc1tdYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUgYHRjZl9kZWxfbm90aWZ5YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYGFjdGlvbnNbXWAgYXJyYXkuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBgYWN0aW9uc1tdYCBhcnJheSBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgaG93IHRyYWZmaWMgY29udHJvbCBwb2xpY2llcyBhcmUgZW5mb3JjZWQsIGFuZCBkZWxldGluZyBhIHJ1bGUsIG9yIG1vZGlmeWluZyBhbiBleGlzdGluZyBvbmUgdmlhIHRoZSBmdW5jdGlvbiBiZWluZyBleHBsb3JlZCBoYXMgdG8gaGF2ZSBzcGVjaWZpYyBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgYHRjZl9kZWxfbm90aWZ5YCBtb2RpZmllcyB0aG9zZSBhcnJheSBlbnRyaWVzLiBEb2VzIGl0IHNpbXBseSBjbGVhciB0aGVtPyBEb2VzIGl0IHJlb3JkZXIgdGhlbT8gRG9lcyBpdCBjb21wbGV0ZWx5IHJlbW92ZSB0aGVtPyBEb2VzIGl0IGRvIGEgY29tYmluYXRpb24gb2YgYWxsIG9mIHRoZSBhYm92ZSwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBUaGUgcHJlY2lzZSBtZWNoYW5pY3Mgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgcGFyYW1vdW50IHRvIGRldGVybWluaW5nIGhvdyBydWxlIHJlbW92YWwvbW9kaWZpY2F0aW9uIGlzIGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gYWx0ZXJzIGBhY3Rpb25zW11gIGlzIGdvaW5nIHRvIGJlIGtleSB0byBncmFzcGluZyBpdHMgb3ZlcmFsbCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoYXQgYXJyYXksIGFuZCB0aGUgcG9pbnRlcnMgaXQgY29udGFpbnMsIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlIGRlbGV0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjI2Ljg1NzQwODc2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MzQ3MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9kZWxfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuYz0xOTIzPWludCB0Y2ZfYWN0aW9uX3Jlb2ZmbG9hZF9jYihmbG93X2luZHJfYmxvY2tfYmluZF9jYl90ICpjYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTk4MC1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE5ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDAxLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAwMjpzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMy1cXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMS1cXHR9IGVsc2Uge1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxMjpcXHRcXHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMTMtXFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDY4LVxcdGVsc2UgeyAvKiBkZWxldGUgKi9cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNjk6XFx0XFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MjYuOTc2NzYwODM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTU3NTE4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDE5ODAtMjAyOSBvZiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZS4uLiByaWdodCwgaXQncyBhYm91dCB0aGUgYWN0aW9uIG1vZHVsZSBBUEksIGlzbid0IGl0PyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBoZXJlLiBPa2F5LCAqc2Nyb2xsaW5nLi4uKiAgTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBBY3Rpb24gTW9kdWxlIEFQSSBTZWN0aW9uKipcblxuUmlnaHQsIGxpbmVzIDE5ODAtMjAyOS4gIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IHRoaXMgbGlrZWx5IGNvdmVycyB0aGUgY29yZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBmb3IgYWN0aW9uIG1vZHVsZXMsIGFsb25nIHdpdGggcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGRhdGEuIFdlIHdpbGwgZm9jdXMgc3BlY2lmaWNhbGx5IG9uOiBob3cgdGhlIGtlcm5lbCByZWdpc3RlcnMsIHVucmVnaXN0ZXJzIGFuZCBoYW5kbGVzIHRoZSBhY3Rpb25zLiAgSSdsbCBzdGFydCBieSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gKlJlYWRpbmcuLi4qIEFoLCB0aGVyZSdzIGBhY3RfcmVnaXN0ZXIoKWAuIFllcCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gVGhlIGBhY3RfdW5yZWdpc3RlcigpYCBmdW5jdGlvbiBzaG91bGQgYmUgY2xvc2UuXG5cbkkgYmV0IHdlIGhhdmUgc29tZSBjcml0aWNhbCBzdHJ1Y3R1cmVzIGRlZmluZWQgYXJvdW5kIHRoaXM6IHByb2JhYmx5IHNvbWUgc29ydCBvZiBgc3RydWN0IGFjdF9vcHNgLCBvciBzb21ldGhpbmcgc2ltaWxhciwgZm9yIGRlZmluaW5nIHRoZSBvcGVyYXRpb25zIHRoYXQgYW4gYWN0aW9uIG1vZHVsZSBuZWVkcyB0byBpbXBsZW1lbnQuIEknbSBsb29raW5nIGZvciBhIHdheSB0aGUgYWN0aW9uIGZyYW1ld29yayBrbm93cyBhYm91dCB0aGUgbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGZyb20gdGhlIHNwZWNpZmljIGFjdGlvbiBtb2R1bGVzLlxuXG4qUmVhZGluZyBjbG9zZWx5Li4uKiBPa2F5LCBsb29rcyBsaWtlIGl0IHByb2JhYmx5IGhhbmRsZXMgcmVnaXN0cmF0aW9uLiBgYWN0X3JlZ2lzdGVyKClgIGNlcnRhaW5seSBsb29rcyB0byBiZSBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBgYWN0X3VucmVnaXN0ZXIoKWAgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBOb3csIEkgd2FudCB0byBmaW5kIHRoZSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHRoZSBhY3Rpb25zIHRoZW1zZWx2ZXM7IHRoZSByZWdpc3RyYXRpb24gQVBJIGlzIGdvaW5nIHRvIG5lZWQgYSB3YXkgdG8ga25vdyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYWN0aW9uLiBJdCdzIHByb2JhYmx5IHRoZSBnbHVlIGJldHdlZW4gdGhlIGFjdGlvbiBtb2R1bGVzIGFuZCB0aGUgdGMgZnJhbWV3b3JrLiBJIGJldCB0aGVyZSBhcmUgc29tZSBjYWxsYmFja3MgaW52b2x2ZWQuXG5cbipEaXZpbmcgZGVlcGVyLi4uKiBZZXAsIHRoZXJlIGl0IGlzISBgc3RydWN0IGFjdF9vcHNgLiBJIHdhcyByaWdodC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gVGhpcyBsaWtlbHkgaW5jbHVkZXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBsaWtlIGB0Y2ZfYWN0aW9uX2V4ZWMoKWAsIGFuZCBvdGhlciBjcnVjaWFsIGFjdGlvbi1zcGVjaWZpYyBvcGVyYXRpb25zLiBJIG5lZWQgdG8gZXhhbWluZSB0aGVzZSBzdHJ1Y3QgZWxlbWVudHMgY2xvc2VseSB0byBzZWUgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgdGhleSByZXF1aXJlIGFuZCBob3cgdGhleSdyZSB1c2VkLiAgVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGFjdGlvbiBtb2R1bGUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZSBmcmFtZXdvcmsgaGFuZGxlcyB0aGUgbW9kdWxlcyEgT2theSwgZ29vZCEgSSBjYW4gc2VlIHRoZSB1c3VhbCBzdXNwZWN0cyBhbmQgcG90ZW50aWFsIHRyYXBzIGZvciBtb2R1bGUgaW1wbGVtZW50YXRpb25zIGFuZCB0aGVpciBsaWZlY3ljbGUsIGFuZCB3aWxsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MzcuOTM0Mjg0MTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5ODA6XFx0XFxuMTk4MTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRjZl9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4xOTgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbjE5ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICB1MzIgcG9ydGlkLCBzaXplX3QgYXR0cl9zaXplLFxcbjE5ODQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTk4NTpcXHR7XFxuMTk4NjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjE5ODc6XFx0XFxuMTk4ODpcXHRcXHRza2IgPSBhbGxvY19za2IobWF4KGF0dHJfc2l6ZSwgTkxNU0dfR09PRFNJWkUpLCBHRlBfS0VSTkVMKTtcXG4xOTg5OlxcdFxcdGlmICghc2tiKVxcbjE5OTA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0JVRlMpO1xcbjE5OTE6XFx0XFxuMTk5MjpcXHRcXHRpZiAodGNhX2dldF9maWxsKHNrYiwgYWN0aW9ucywgcG9ydGlkLCBuLVxcdTAwM2VubG1zZ19zZXEsIDAsIFJUTV9ERUxBQ1RJT04sXFxuMTk5MzpcXHRcXHRcXHRcXHQgMCwgMiwgZXh0YWNrKSBcXHUwMDNjPSAwKSB7XFxuMTk5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gZmlsbCBuZXRsaW5rIFRDIGFjdGlvbiBhdHRyaWJ1dGVzXFxcIik7XFxuMTk5NTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTk2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbjE5OTc6XFx0XFx0fVxcbjE5OTg6XFx0XFxuMTk5OTpcXHRcXHRyZXR1cm4gc2tiO1xcbjIwMDA6XFx0fVxcbjIwMDE6XFx0XFxuMjAwMjpcXHRzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjIwMDM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIHUzMiBwb3J0aWQsXFxuMjAwNDpcXHRcXHRcXHRcXHQgIHNpemVfdCBhdHRyX3NpemUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMDA1OlxcdHtcXG4yMDA2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMjAwNzpcXHRcXHRpbnQgcmV0O1xcbjIwMDg6XFx0XFxuMjAwOTpcXHRcXHRpZiAoIXJ0bmxfbm90aWZ5X25lZWRlZChuZXQsIG4tXFx1MDAzZW5sbXNnX2ZsYWdzLCBSVE5MR1JQX1RDKSkge1xcbjIwMTA6XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4yMDExOlxcdFxcdH0gZWxzZSB7XFxuMjAxMjpcXHRcXHRcXHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcXG4yMDEzOlxcdFxcdFxcdFxcdFxcdFxcdCBleHRhY2spO1xcbjIwMTQ6XFx0XFx0XFx0aWYgKElTX0VSUihza2IpKVxcbjIwMTU6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2tiKTtcXG4yMDE2OlxcdFxcdH1cXG4yMDE3OlxcdFxcbjIwMTg6XFx0XFx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cXG4yMDE5OlxcdFxcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjM3LjkzNDUyODc5NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIyODQ0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gRGVsZXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSdzIGNhbGxpbmcgZm9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIHN0YXJ0cyB0byBhc3NlbWJsZS4gVGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0ncyBsaWZlY3ljbGUg4oCTIGEgZGVsZXRpb24gYWN0aW9uIHJlbGF0ZWQgdG8sIGxpa2VseSwgYSB0cmFuc2FjdGlvbiBjb250cm9sIGZyYW1ld29yayAoVENGKSwgZ2l2ZW4gdGhlIHByZWZpeC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBiZWluZyBkZWxldGVkPyBBIHJlY29yZD8gQW4gb2JqZWN0PyBBbiBlbnRpcmUgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWxldGlvbj8gQXJlIHRoZXJlIGNhc2NhZGluZyBlZmZlY3RzIHRvIGNvbnNpZGVyPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBtYW5hZ2U/IElzIHRoaXMgZGVsZXRpb24gdXNlciBpbml0aWF0ZWQsIG9yIGF1dG9tYXRpYz8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkPyBNb3JlIGltcG9ydGFudGx5LCBpcyBkYXRhIGludGVncml0eSBhdCByaXNrLCBhbmQgaXMgdGhlcmUgYW55IHJvbGxiYWNrIG9yIHJlY292ZXJ5IGltcGxlbWVudGVkPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBhY3Rpb24gdG8gcHJvcGVybHkgZXZhbHVhdGUgaXQuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6NDAuMDU3Mzc3MDU1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg3MjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTc2Nz1zdGF0aWMgaW50IHRjYV9hY3Rpb25fZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE4NDItXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxODQzOnN0YXRpYyBpbnQgdGNmX2FjdGlvbl9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xODQ0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjAwMj1zdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDE4LVxcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMDE5OlxcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDIwLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjQwLjE0OTI1NzY3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzkzMzE4NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgdGNmX2FjdGlvbl9kZWxldGVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYHRjZl9hY3Rpb25fZGVsZXRlYCBmdW5jdGlvbiBhcm91bmQgbGluZSAxODQzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIC0gZGVsZXRlIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgc3lzdGVtIGFyZSBhbHdheXMgY3JpdGljYWwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IG1hbmlwdWxhdGU/IEnigJltIGltbWVkaWF0ZWx5IGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvYnZpb3VzIHJhY2UgY29uZGl0aW9ucywgbG9ja3MsIG9yIHBvdGVudGlhbCBmb3IgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBvZnRlbiB3aGVyZSBzdWJ0bGUgYnV0IGRldmFzdGF0aW5nIGJ1Z3MgcmVzaWRlLCBzbyB0aGF04oCZcyB3aGVyZSBJJ2xsIGZvY3VzIG15IGluaXRpYWwgYW5hbHlzaXMuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZywgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gc29tZSBmb3JtIG9mIFwidHJhbnNpZW50IGNhY2hlIGZpbGVcIiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYW5kIHRoZSBzY29wZSBvZiBpdHMgZGVsZXRlIG9wZXJhdGlvbnMuIE5vdywgbGV04oCZcyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F54oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6NDMuOTQyNTc5MjgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDA6XFx0XFx0cmV0dXJuIGVycjtcXG4xODQxOlxcdH1cXG4xODQyOlxcdFxcbjE4NDM6XFx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcXG4xODQ0OlxcdHtcXG4xODQ1OlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XFxuMTg0NjpcXHRcXHRpbnQgaTtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbjE4NDk6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXFx1MDAzZW9wcztcXG4xODUwOlxcdFxcdFxcdC8qIEFjdGlvbnMgY2FuIGJlIGRlbGV0ZWQgY29uY3VycmVudGx5IHNvIHdlIG11c3Qgc2F2ZSB0aGVpclxcbjE4NTE6XFx0XFx0XFx0ICogdHlwZSBhbmQgaWQgdG8gc2VhcmNoIGFnYWluIGFmdGVyIHJlZmVyZW5jZSBpcyByZWxlYXNlZC5cXG4xODUyOlxcdFxcdFxcdCAqL1xcbjE4NTM6XFx0XFx0XFx0c3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvID0gYS1cXHUwMDNlaWRyaW5mbztcXG4xODU0OlxcdFxcdFxcdHUzMiBhY3RfaW5kZXggPSBhLVxcdTAwM2V0Y2ZhX2luZGV4O1xcbjE4NTU6XFx0XFxuMTg1NjpcXHRcXHRcXHRhY3Rpb25zW2ldID0gTlVMTDtcXG4xODU3OlxcdFxcdFxcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSkge1xcbjE4NTg6XFx0XFx0XFx0XFx0LyogbGFzdCByZWZlcmVuY2UsIGFjdGlvbiB3YXMgZGVsZXRlZCBjb25jdXJyZW50bHkgKi9cXG4xODU5OlxcdFxcdFxcdFxcdG1vZHVsZV9wdXQob3BzLVxcdTAwM2Vvd25lcik7XFxuMTg2MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NjE6XFx0XFx0XFx0XFx0aW50IHJldDtcXG4xODYyOlxcdFxcbjE4NjM6XFx0XFx0XFx0XFx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cXG4xODY0OlxcdFxcdFxcdFxcdHJldCA9IHRjZl9pZHJfZGVsZXRlX2luZGV4KGlkcmluZm8sIGFjdF9pbmRleCk7XFxuMTg2NTpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xODY2OlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTg2NzpcXHRcXHRcXHR9XFxuMTg2ODpcXHRcXHR9XFxuMTg2OTpcXHRcXHRyZXR1cm4gMDtcXG4xODcwOlxcdH1cXG4xODcxOlxcdFxcbjE4NzI6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCxcXG4xODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb24pXFxuMTg3NDpcXHR7XFxuMTg3NTpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xcbjE4NzY6XFx0XFx0XFx0WzBdID0gYWN0aW9uLFxcbjE4Nzc6XFx0XFx0fTtcXG4xODc4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTg3OTpcXHRcXHRzaXplX3QgYXR0cl9zaXplO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo0My45NDI3NTcwMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc0ODU2NDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGEgVHJhZmZpYyBDb250cm9sIEFjdGlvbiBEZWxldGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkndmUgYmVlbiBsb29raW5nIGF0LiBJdCBzZWVtcyBsaWtlIHRoZSBgdGNmX2FjdGlvbl9kZWxldGVgIGZ1bmN0aW9uLCBhcyBpdCBwcm9jZXNzZXMgZWFjaCBhY3Rpb24sIHNldHMgYGFjdGlvbnNbaV1gIHRvIGBOVUxMYC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYHRjZl9pZHJfZGVsZXRlX2luZGV4YCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUsIGluZGljYXRpbmcgYSBmYWlsdXJlLiBJbiB0aGF0IGNhc2UsIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgYWxzbyByZXR1cm5zIGFuIGVycm9yIChgcmV0IFx1MDAzYyAwYCkuIE5vdywgdGhlIGNvZGUgdGhlbiBoaXRzIGBlcnI6IHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucylgLiBUaGUgb2xkIHZlcnNpb24gb2YgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHVzZWQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCwgd2hpY2ggd291bGQgY2hlY2sgYCgoYSkgPSBhY3Rpb25zW2ldKWAgYW5kIGltbWVkaWF0ZWx5IGJyZWFrIGlmIGl0IGVuY291bnRlcmVkIGEgYE5VTExgIHBvaW50ZXIuIEJlY2F1c2UgYGFjdGlvbnNbaV1gIGhhZCBhbHJlYWR5IGJlZW4gc2V0IHRvIGBOVUxMYCBmb3IgdGhlIGZhaWxpbmcgYWN0aW9uIChvciBldmVuIGFjdGlvbnMgdGhhdCBmYWlsZWQgcHJldmlvdXNseSksIHRoaXMgY2F1c2VkIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgdG8gYmFpbCBvdXQgcHJlbWF0dXJlbHkuIEVzc2VudGlhbGx5LCBpdCB3b3VsZCBzdG9wIGF0IGluZGV4IDAgKG9yIHdoaWNoZXZlciBpbmRleCB3YXMgYE5VTExgKSwgbGVhdmluZyBzdWJzZXF1ZW50IGFjdGlvbnMgaW4gdGhlIGBhY3Rpb25zYCBhcnJheSB1bnRvdWNoZWQsIHJlc3VsdGluZyBpbiBhIG1lbW9yeSBsZWFrLiBOb3csIEkgc2VlIHRoZSBmaXggaXMgdGhhdCBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgY2hhbmdlZCB0byBsb29wIHRocm91Z2ggYWxsIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBwdXR0aW5nIGFueSBub24tYE5VTExgIGFjdGlvbiBwb2ludGVycyBpdCBmaW5kcy5cblxuTm93LCBsZXQncyBjb25zaWRlciBpZiB0aGlzIG1lcml0cyBmdXp6aW5nOlxuXG4xLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBidWcgcmVzaWRlcyBpbiB0cmFmZmljIGNvbnRyb2wvcGFja2V0IHNjaGVkdWxpbmcgY29kZSAoYG5ldC9zY2hlZC9hY3RfYXBpLmNgKSwgd2hpY2ggaXMgY29yZSB0byB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgaXMgcHJpbWUgcmVhbC1lc3RhdGUgZm9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG4yLiAgKipBY2Nlc3M6KiogSXQncyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChgUlRNX0RFTEFDVElPTmAsIGBydG5ldGxpbmtgLCBhbmQgYE5FVExJTktfUk9VVEVgKSwgd2hpY2ggaXMgc29tZXRoaW5nIFN5emthbGxlciBoYXMgYmVlbiBoYW1tZXJpbmcgb24gZm9yIHNvbWUgdGltZS5cbjMuICAqKkV4ZWN1dGlvbjoqKiBJIGNhbiBkZWZpbml0ZWx5IGdldCB0aGlzIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsIG1hY2hpbmUgKGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUpIHdpdGggYSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYSBuZXRsaW5rIHNvY2tldCwgbWFraW5nIGl0IGVhc3kgdG8gdGVzdC5cblxuQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgSSB3YW50IHRvIGZ1enouIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFRpbWUgdG8gc2VhcmNoIGZvciBgYWN0X2FwaWAgd2l0aGluIGBuZXQvc2NoZWQvTWFrZWZpbGVgIG9yIGBuZXQvc2NoZWQvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6NDguNjkxMzI2NjM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDU5MDg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3RfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkVUX0NMU19BQ1QpXFx0Kz0gYWN0X2FwaS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19ORVRfQUNUX1BPTElDRSlcXHQrPSBhY3RfcG9saWNlLm9cXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMi0vKlxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MzogKiBuZXQvc2NoZWQvYWN0X2FwaS5jXFx0UGFja2V0IGFjdGlvbiBBUEkuXFxubmV0L3NjaGVkL2FjdF9hcGkuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIyLSNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX3BlZGl0LmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMzojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY29ubm1hcmsuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTI5LVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jOjMwOiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTMxLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjUtI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTM6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTQtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvYWN0X25hdC5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90Y19hY3QvdGNfbmF0LmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9uYXQuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvYWN0X25hdC5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L2dzby5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NjaGVkL2Nsc19mdy5jOjIxOiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9jbHNfZncuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjM5OiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjQ4Ljc4NTkyMjM1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjgwNDY5NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9DTFNfQUNUYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZ28tdG8gc3BvdCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmFyaW91cyBuZXR3b3JrIHNjaGVkdWxlciBvcHRpb25zIGFyZSBjb250cm9sbGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY2xlYXIgZGVmaW5pdGlvbiB0aGVyZSwgaG9wZWZ1bGx5IHdpdGggdGhlIHVzdWFsIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgc3BlbGwgb3V0IHRoZSBwcmVyZXF1aXNpdGVzLiBJJ20gcmVhbGx5IGN1cmlvdXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIG9yIHVuZGVybHlpbmcgc3Vic3lzdGVtcyAqbXVzdCogYmUgZW5hYmxlZCBiZWZvcmUgYE5FVF9DTFNfQUNUYCBiZWNvbWVzIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIga2VybmVsIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBjdXN0b21pemluZyB0aGUgbmV0d29yayBzdGFjayBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbCBuZWVkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1MS40NjYzOTQ1MjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODY3NzM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19BQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1MS41NzUwNzY1MThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3ODY2OTA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIExpbmUgNzAyLi4uIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24gYmVnaW5zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24uIEknbSBsb29raW5nIGZvciB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHNjaGVkdWxpbmcgZGlzY2lwbGluZXMgYW5kIHF1ZXVpbmcgYWxnb3JpdGhtcy4gSSdsbCBleHBlY3QgdG8gZmluZCB0aGUgdHlwaWNhbCBgY29uZmlnYCBibG9ja3MsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbmQgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIGluZmx1ZW5jaW5nIGhvdyB0aGlzIGlzIGFsbCB3aXJlZCB0b2dldGhlci4gRGVwZW5kaW5nIG9uIHdoYXQgSSBzZWUgdGhlcmUgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIG90aGVyIHJlbGF0ZWQgZmlsZXMsIGxpa2UgdGhlIGhlYWRlciBmaWxlcy4gSSdtIGludGVyZXN0ZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBjZXJ0YWluIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnksIGFuZCBob3cgdGhlIGtlcm5lbCBpcyBzZXQgdXAgb3ZlcmFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1NS4zNTM3NDc1MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjk1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk1OlxcdFxcdCAgbWF0Y2hlcy5cXG4gNjk2OlxcdFxcdCAgQ3VycmVudCBzdXBwb3J0ZWQgbWF0Y2ggaXMgXFxcInBvbGljeVxcXCIgd2hpY2ggYWxsb3dzIHBhY2tldCBjbGFzc2lmaWNhdGlvblxcbiA2OTc6XFx0XFx0ICBiYXNlZCBvbiBJUHNlYyBwb2xpY3kgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGVjYXBzdWxhdGlvblxcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzAwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cXG4gNzAxOlxcdFxcbiA3MDI6XFx0Y29uZmlnIE5FVF9DTFNfQUNUXFxuIDcwMzpcXHRcXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcbiA3MDQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNzA1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXFxuIDcwODpcXHRcXHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXFxuIDcwOTpcXHRcXHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cXG4gNzEwOlxcdFxcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdCAgQSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgaXByb3V0ZTIgcGFja2FnZSBpcyByZXF1aXJlZCB0byB1c2VcXG4gNzEzOlxcdFxcdCAgZXh0ZW5kZWQgbWF0Y2hlcy5cXG4gNzE0OlxcdFxcbiA3MTU6XFx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXFxuIDcxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBQb2xpY2luZ1xcXCJcXG4gNzE3OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzE4OlxcdFxcdGhlbHBcXG4gNzE5OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBkbyB0cmFmZmljIHBvbGljaW5nLCBpLmUuIHN0cmljdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1NS4zNTM4MzYxMDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxMDEwODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5FVF9DTFNfQUNUIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBORVRfQ0xTX0FDVGAgaXMgYXBwYXJlbnRseSBkZWZpbmVkIHdpdGhpbiBgbmV0L3NjaGVkL0tjb25maWdgLiBUaW1lIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgdG9wLWxldmVsIGRlcGVuZGVuY3kgZm9yIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBidWlsZC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmN5LCBsaWtlbHkgaW4gdGhlIGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAgYmxvY2suIE5vdywgSSBzaG91bGQgZXhhbWluZSB0aGUgYmVnaW5uaW5nIG9mIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCA0MCBsaW5lcy4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgaW5pdGlhbCBvdmVydmlldyBhbmQgYW55IGludHJvZHVjdG9yeSBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gaG93IGBORVRfQ0xTX0FDVGAgaXMgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1OC4wNjM5NDc1MDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1OC4wNjQwNDE1NjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3ODg1NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgbmV0d29ya2luZyBjb25maWd1cmF0aW9uLlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfQUNUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5J3JlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgZXhwZWN0ZWQsIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGN1cnJlbnQgc2V0dGluZ3MuIEJ1dCB0aGF0J3Mgbm90IGVub3VnaCDigJMgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciBgTkVUX1NDSEVEYCB0byBldmVuIGJlICphdmFpbGFibGUqIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjU5Ljk0MjkwMjQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI5ODgxMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qbmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjY5PXNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI3MS1zb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MDIuNTcyNzkwMDkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjIwMjAzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgYW5kIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4gSW5zdGVhZCBvZiBibGluZGx5IGdyZXBwaW5nLCBsZXQncyB0YWtlIGEgdGFyZ2V0ZWQgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMjcwLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoLi4uIHdlbGwsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UgYW5kIGdlbmVyYWwga25vd2xlZGdlIG9mIHRoZSBwcm9qZWN0J3Mgc3RydWN0dXJlLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIHRoYXQgcmVsYXRlIHRvIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBvciBzb21lIGFzcGVjdCBvZiBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLiBJdCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gYSBkcml2ZXIncyBlbmFibGVtZW50LiBUaW1lIHRvIGdvIGh1bnRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MDQuOTM0ODE0NTE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0c291cmNlIFxcXCJuZXQvYnJpZGdlL0tjb25maWdcXFwiXFxuIDI2MTpcXHRzb3VyY2UgXFxcIm5ldC9kc2EvS2NvbmZpZ1xcXCJcXG4gMjYyOlxcdHNvdXJjZSBcXFwibmV0LzgwMjFxL0tjb25maWdcXFwiXFxuIDI2MzpcXHRzb3VyY2UgXFxcIm5ldC9sbGMvS2NvbmZpZ1xcXCJcXG4gMjY0OlxcdHNvdXJjZSBcXFwibmV0L3gyNS9LY29uZmlnXFxcIlxcbiAyNjU6XFx0c291cmNlIFxcXCJuZXQvbGFwYi9LY29uZmlnXFxcIlxcbiAyNjY6XFx0c291cmNlIFxcXCJuZXQvcGhvbmV0L0tjb25maWdcXFwiXFxuIDI2NzpcXHRzb3VyY2UgXFxcIm5ldC82bG93cGFuL0tjb25maWdcXFwiXFxuIDI2ODpcXHRzb3VyY2UgXFxcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcXFwiXFxuIDI2OTpcXHRzb3VyY2UgXFxcIm5ldC9tYWM4MDIxNTQvS2NvbmZpZ1xcXCJcXG4gMjcwOlxcdHNvdXJjZSBcXFwibmV0L3NjaGVkL0tjb25maWdcXFwiXFxuIDI3MTpcXHRzb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG4gMjcyOlxcdHNvdXJjZSBcXFwibmV0L2Ruc19yZXNvbHZlci9LY29uZmlnXFxcIlxcbiAyNzM6XFx0c291cmNlIFxcXCJuZXQvYmF0bWFuLWFkdi9LY29uZmlnXFxcIlxcbiAyNzQ6XFx0c291cmNlIFxcXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1xcXCJcXG4gMjc1OlxcdHNvdXJjZSBcXFwibmV0L3Ztd192c29jay9LY29uZmlnXFxcIlxcbiAyNzY6XFx0c291cmNlIFxcXCJuZXQvbmV0bGluay9LY29uZmlnXFxcIlxcbiAyNzc6XFx0c291cmNlIFxcXCJuZXQvbXBscy9LY29uZmlnXFxcIlxcbiAyNzg6XFx0c291cmNlIFxcXCJuZXQvbnNoL0tjb25maWdcXFwiXFxuIDI3OTpcXHRzb3VyY2UgXFxcIm5ldC9oc3IvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MDQuOTM0OTM0MTc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNDI3MDQ4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBTY2hlZHVsaW5nIGFuZCBBY3Rpb24gRGVsZXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5d29yZHMganVtcCBvdXQ6IGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgb2YgY291cnNlLCBqdXN0IGBORVRgIOKAkyBzdGFuZGFyZCBuZXR3b3JraW5nIHN0dWZmLiBSaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgc2NoZWR1bGluZyBhbmQgY2xhc3MgYWN0aW9ucywgc3BlY2lmaWNhbGx5LlxuXG5Ob3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IHdoYXQncyBjaGFuZ2VkIGFuZCB3aGF0J3MgYWZmZWN0ZWQuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBIbW0sIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFsdGVyZWQgaXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBJbnRlcmVzdGluZy5cblxuTXkgYXBwcm9hY2ggaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgdGNmX2FjdGlvbl9wdXRfbWFueWAsIGlzIHVzZWQuIExldCdzIHNlZSB0aGUgY2FsbGVycyBvZiBgdGNmX2FjdGlvbl9wdXRfbWFueWAgYW5kIHdoYXQncyBpbnZvbHZlZCBpbiB0aGUgXCJ0YyBhY3Rpb24gZGVsZXRlL2dldCBiYXRjaCBvcGVyYXRpb25zXCIgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC5cblxuU3BlY2lmaWNhbGx5LCBoZXJlJ3Mgd2hhdCBzZWVtcyBkaXJlY3RseSByZWxldmFudDpcbiogICBgdGNmX2FjdGlvbl9wdXRfbWFueWAg4oCTIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpdHNlbGYuXG4qICAgYHRjYV9hY3Rpb25fZ2RgIOKAkyB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IHRoYXQgY2FsbHMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBUaGF0J3Mgd2hlcmUgaXQncyBhbGwgY29taW5nIGZyb20uXG4qICAgYHRjZl9hY3Rpb25fZGVsZXRlYCDigJMgTG9va3MgbGlrZSBpdCdzIHRoZSBsb29wIHRoYXQgY2xlYXJzIGFjdGlvbiBlbnRyaWVzLlxuKiAgIGB0Y2ZfZGVsX25vdGlmeWAg4oCTIFRoaXMgY2FsbHMgYHRjZl9hY3Rpb25fZGVsZXRlYCwgc28gZGVsZXRpb24gaXMgYmVpbmcgdHJpZ2dlcmVkIGhlcmUuXG4qICAgYHRjX2N0bF9hY3Rpb25gIOKAkyBUaGlzIG9uZSBoYW5kbGVzIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGZvciBhY3Rpb24gcmVxdWVzdHMgKFJUTVxcX05FV0FDVElPTiwgUlRNXFxfREVMQUNUSU9OLCBSVE1cXF9HRVRBQ1RJT04pLiBUaGUgc3RhbmRhcmQgQ1JVRCBvcGVyYXRpb25zLlxuXG5TbywgbmV4dCBJJ2xsIGdvIHRocm91Z2ggdGhlIGRlY2xhcmF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBgdGNhX2FjdGlvbl9nZGAgYW5kIGB0Y19jdGxfYWN0aW9uYCwgYW5kIHRyYWNlIHRoZWlyIHJlc3BlY3RpdmUgY2FsbGVycy4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBmbG93IG9mIGFjdGlvbiBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uLCBhbmQgZGVsZXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDoxNC4yNzc2NDA5MzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2Mzg4OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2N0bF9hY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTIxNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHRjYWFfcG9saWN5W1RDQV9ST09UX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTUxLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjE1MjpzdGF0aWMgaW50IHRjX2N0bF9hY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE1My1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMzE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciB0Y19hY3Rpb25fcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTU6XFx0ey5tc2d0eXBlID0gUlRNX05FV0FDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTY6XFx0ey5tc2d0eXBlID0gUlRNX0RFTEFDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTc6XFx0ey5tc2d0eXBlID0gUlRNX0dFVEFDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9uLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjMxOC1cXHQgLmR1bXBpdCA9IHRjX2R1bXBfYWN0aW9ufSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MTQuMzc0MDM2MDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4NDE4NDY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRjX2N0bF9hY3Rpb25gIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHRjX2N0bF9hY3Rpb25gIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3RhY2sgaXMgZnVuY3Rpb25pbmcuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWN0aW9uIGlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgcGFyYW1ldGVycyBpdCdzIHJlbHlpbmcgb24sIHNwZWNpZmljYWxseS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IHRoZSBjb250cm9sIGZsb3cg4oCTIGVuc3VyZSBpdCBoYW5kbGVzIHZhcmlvdXMgY29uZGl0aW9ucyByb2J1c3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBsdXJraW5nIGluIHRoZXJlLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LCBhcmUgd2Ugb3B0aW1pemluZyBmb3IgdGhlIGV4cGVjdGVkIHVzZSBjYXNlPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGVudHJ5IHBvaW50cyBhbmQgd29yayBteSB3YXkgdGhyb3VnaCB0aGUgY29yZSBsb2dpYywgdGFraW5nIGRldGFpbGVkIG5vdGVzIGFuZCBwb3NzaWJseSBzZXR0aW5nIHVwIHNvbWUgcXVpY2sgdGVzdHMgdG8gdmFsaWRhdGUgdGhlIGFzc3VtcHRpb25zIEknbSBtYWtpbmcgYWJvdXQgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk1OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjE3LjA1ODIyMjk2M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTUwOlxcdH07XFxuMjE1MTpcXHRcXG4yMTUyOlxcdHN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMjE1MzpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIxNTQ6XFx0e1xcbjIxNTU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMjE1NjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX1JPT1RfTUFYICsgMV07XFxuMjE1NzpcXHRcXHR1MzIgcG9ydGlkID0gTkVUTElOS19DQihza2IpLnBvcnRpZDtcXG4yMTU4OlxcdFxcdHUzMiBmbGFncyA9IDA7XFxuMjE1OTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yMTYwOlxcdFxcbjIxNjE6XFx0XFx0aWYgKChuLVxcdTAwM2VubG1zZ190eXBlICE9IFJUTV9HRVRBQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxuMjE2MjpcXHRcXHQgICAgIW5ldGxpbmtfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKVxcbjIxNjM6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yMTY0OlxcdFxcbjIxNjU6XFx0XFx0cmV0ID0gbmxtc2dfcGFyc2VfZGVwcmVjYXRlZChuLCBzaXplb2Yoc3RydWN0IHRjYW1zZyksIHRjYSxcXG4yMTY2OlxcdFxcdFxcdFxcdFxcdCAgICAgVENBX1JPT1RfTUFYLCBOVUxMLCBleHRhY2spO1xcbjIxNjc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE2ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIxNjk6XFx0XFxuMjE3MDpcXHRcXHRpZiAodGNhW1RDQV9BQ1RfVEFCXSA9PSBOVUxMKSB7XFxuMjE3MTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZXRsaW5rIGFjdGlvbiBhdHRyaWJ1dGVzIG1pc3NpbmdcXFwiKTtcXG4yMTcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxNzM6XFx0XFx0fVxcbjIxNzQ6XFx0XFxuMjE3NTpcXHRcXHQvKiBuLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0NSRUFURSAqL1xcbjIxNzY6XFx0XFx0c3dpdGNoIChuLVxcdTAwM2VubG1zZ190eXBlKSB7XFxuMjE3NzpcXHRcXHRjYXNlIFJUTV9ORVdBQ1RJT046XFxuMjE3ODpcXHRcXHRcXHQvKiB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGFsbCBvdGhlciBmbGFnc1xcbjIxNzk6XFx0XFx0XFx0ICogaW1wbHkgY3JlYXRlIG9ubHkgaWYgaXQgZG9lc24ndCBleGlzdFxcbjIxODA6XFx0XFx0XFx0ICogTm90ZSB0aGF0IENSRUFURSB8IEVYQ0wgaW1wbGllcyB0aGF0XFxuMjE4MTpcXHRcXHRcXHQgKiBidXQgc2luY2Ugd2Ugd2FudCBhdm9pZCBhbWJpZ3VpdHkgKGVnIHdoZW4gZmxhZ3NcXG4yMTgyOlxcdFxcdFxcdCAqIGlzIHplcm8pIHRoZW4ganVzdCBzZXQgdGhpc1xcbjIxODM6XFx0XFx0XFx0ICovXFxuMjE4NDpcXHRcXHRcXHRpZiAobi1cXHUwMDNlbmxtc2dfZmxhZ3MgXFx1MDAyNiBOTE1fRl9SRVBMQUNFKVxcbjIxODU6XFx0XFx0XFx0XFx0ZmxhZ3MgPSBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0U7XFxuMjE4NjpcXHRcXHRcXHRyZXQgPSB0Y2ZfYWN0aW9uX2FkZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sIHBvcnRpZCwgZmxhZ3MsXFxuMjE4NzpcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuMjE4ODpcXHRcXHRcXHRicmVhaztcXG4yMTg5OlxcdFxcdGNhc2UgUlRNX0RFTEFDVElPTjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MTcuMDU4MzUxODYzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjk5MzY4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgYWN0X2FwaS5jYCBmb3Igc29tZSBBY3Rpb24gSW5zaWdodHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGUgYWN0aW9uIEFQSSwgYW5kIEkndmUgZ290IGEgaHVuY2ggYWJvdXQgYSBzcGVjaWZpYyBzZWN0aW9uIHRoYXQgbmVlZHMgY2xvc2VyIHNjcnV0aW55LiBMZXQncyB6ZXJvIGluIG9uIGxpbmVzIDIxODUtMjIwNSBvZiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFRoaXMgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpZXcgb2YgdGhlIGNvZGUgaGFuZGxpbmcgYWN0aW9uIGNvbmZpZ3VyYXRpb24gb3IgcHJvY2Vzc2luZzsgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBhY3Rpb25zIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgb3IgcGVyaGFwcyBldmVuIGV4ZWN1dGVkIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgcmVsYXRlZCB0byBob3cgYWN0aW9uIHBhcmFtZXRlcnMgYXJlIHJlY2VpdmVkIGFuZCBob3cgdGhleSdyZSBtYXBwZWQgdG8gdGhlIHNwZWNpZmljIGFjdGlvbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgc2VjdGlvbiB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHNvbWUgaW50ZXJhY3Rpb25zLCBsaWtlIGhvdyB1c2VyLXNwYWNlIHRvb2xzIGNvbW11bmljYXRlIHdpdGggdGhlIGtlcm5lbCB0byBzZXQgdXAgYW5kIG1hbmFnZSB0aGVzZSBhY3Rpb25zLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgY3JpdGljYWwgdGhlcmUgYWJvdXQgYWN0aW9uIHN0YXRlIHRyYW5zaXRpb25zLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciBldmVuIGVycm9yIGhhbmRsaW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWFyaW5nIG9uIHRoZSBpc3N1ZSBJ4oCZbSBsb29raW5nIGF0LiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoaXMgc2VjdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjE5LjQyODI5MjE3NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTg1OlxcdFxcdFxcdFxcdGZsYWdzID0gVENBX0FDVF9GTEFHU19SRVBMQUNFO1xcbjIxODY6XFx0XFx0XFx0cmV0ID0gdGNmX2FjdGlvbl9hZGQobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLCBwb3J0aWQsIGZsYWdzLFxcbjIxODc6XFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbjIxODg6XFx0XFx0XFx0YnJlYWs7XFxuMjE4OTpcXHRcXHRjYXNlIFJUTV9ERUxBQ1RJT046XFxuMjE5MDpcXHRcXHRcXHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcXG4yMTkxOlxcdFxcdFxcdFxcdFxcdCAgICBwb3J0aWQsIFJUTV9ERUxBQ1RJT04sIGV4dGFjayk7XFxuMjE5MjpcXHRcXHRcXHRicmVhaztcXG4yMTkzOlxcdFxcdGNhc2UgUlRNX0dFVEFDVElPTjpcXG4yMTk0OlxcdFxcdFxcdHJldCA9IHRjYV9hY3Rpb25fZ2QobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLFxcbjIxOTU6XFx0XFx0XFx0XFx0XFx0ICAgIHBvcnRpZCwgUlRNX0dFVEFDVElPTiwgZXh0YWNrKTtcXG4yMTk2OlxcdFxcdFxcdGJyZWFrO1xcbjIxOTc6XFx0XFx0ZGVmYXVsdDpcXG4yMTk4OlxcdFxcdFxcdEJVRygpO1xcbjIxOTk6XFx0XFx0fVxcbjIyMDA6XFx0XFxuMjIwMTpcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMDI6XFx0fVxcbjIyMDM6XFx0XFxuMjIwNDpcXHRzdGF0aWMgc3RydWN0IG5sYXR0ciAqZmluZF9kdW1wX2tpbmQoc3RydWN0IG5sYXR0ciAqKm5sYSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MTkuNDI4NDgyMTM1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MjMzODgwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBUcmFmZmljIENvbnRyb2wgQWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCwgYHRjYV9hY3Rpb25fZ2RgLCBgdGNmX2RlbF9ub3RpZnlgLCBgdGNmX2FjdGlvbl9kZWxldGVgLCBhbmQgYHRjX2N0bF9hY3Rpb25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay5cblxuR29vZCwgaXQgc2VlbXMgdGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBjb25maXJtZWQgYnkgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIGluIHRoZSBjb2RlIHNuaXBwZXQgSSBmb3VuZC4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gYGFjdF9hcGkub2AuIEluY2x1ZGluZyB0aGVzZSBzeW1ib2xzIGZvciBmdXp6aW5nIGlzIGEgc29saWQgYXBwcm9hY2gsIHNpbmNlIGBrYWxsc3ltc2Agd2lsbCBtYWtlIHRoZSBzeW1ib2xzIGF2YWlsYWJsZSB1bmxlc3MgdGhlIGNvbXBpbGVyIGNvbXBsZXRlbHkgaW5saW5lcyB0aGVtLCB3aGljaCBpcyB1bmxpa2VseS5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgYmF0Y2ggZGVsZXRpb24gb2YgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYHRjZl9hY3Rpb25fcHV0X21hbnlgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmVmZXJlbmNlIGxlYWsgaWYgZWFybGllciBhY3Rpb25zIGFyZSBkZWxldGVkIGFuZCB0aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIGxhdGVyLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoaXMgZml4IGFpbXMgdG8gZW5zdXJlIHRoYXQgbm8gZGFuZ2xpbmcgcmVmZXJlbmNlcyBhcmUgbGVmdCBiZWhpbmQgd2hlbiBlcnJvcnMgb2NjdXIgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gVGhpcyBzZWVtcyBpbXBvcnRhbnQuXG5cbkZpbmFsbHksIHRoZSBjb25maWd1cmF0aW9ucyB0byBiZSBlbmFibGVkIGFyZSBgTkVUX0NMU19BQ1RgIGFuZCBgTkVUX1NDSEVEYC4gTWFrZXMgc2Vuc2UsIHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gc3VibWl0IHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ4NSwiT3V0cHV0VG9rZW5zIjoxNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDoyNS4zNTE4NzI5MjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNDY0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCIsXG4gICAgXCJ0Y2FfYWN0aW9uX2dkXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICAgIFwidGNmX2RlbF9ub3RpZnlcIixcbiAgICBcInRjX2N0bF9hY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCIsXG4gICAgXCJ0Y2FfYWN0aW9uX2dkXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICAgIFwidGNmX2RlbF9ub3RpZnlcIixcbiAgICBcInRjX2N0bF9hY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDoyNS40NzA5MjU5NjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzEzMTIzMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MjUuNDcxMzc3MDE4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODAzMTI2NjY0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cXG5cXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5pbmRleCAzN2VjZWQ4NGRmYTVmLi44NjcxMGE1OTZhMGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuQEAgLTEyMjMsMTEgKzEyMjMsMTYgQEAgc3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKVxuIFxuIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuIHtcbi1cdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4gXHRpbnQgaTtcbiBcbi1cdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuK1x0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSsrKSB7XG4rXHRcdHN0cnVjdCB0Y19hY3Rpb24gKmEgPSBhY3Rpb25zW2ldO1xuK1x0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzO1xuK1xuK1x0XHRpZiAoIWEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG9wcyA9IGEtXHUwMDNlb3BzO1xuIFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXG4gXHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxuQEAgLTAsMCArMSwxMTUgQEBcbitbXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzEwXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiYWN0aW9uc1wiLFxuKyAgICAgICAgICAgIFwiZ2FjdFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdLFxuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyNTVcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3RcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwidG90YWwgYWN0cyAzXFxcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzExXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImFjdGlvbnNcIixcbisgICAgICAgICAgICBcImdhY3RcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXSxcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDNcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDJcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMjU1XCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInRvdGFsIGFjdHMgMlxcXFxiLippbmRleCAyIHJlZiAyIGJpbmQgMVxcXFxiLippbmRleCAzIHJlZiAxIGJpbmQgMFxcXFxiXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXVxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiZDcxM1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiRGVsZXRlIGEgdGFpbCBhY3Rpb24gb25jZSBhZnRlciBhIGZhaWxlZCBiYXRjaFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJhY3Rpb25zXCIsXG4rICAgICAgICAgICAgXCJnYWN0XCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF0sXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDFcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMlwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjI1NVwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCJzaCAtYyAnJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXHUwMDI2XHUwMDI2ICRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0J1wiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJ0b3RhbCBhY3RzIDFcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcYlwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF1cbisgICAgICAgIF1cbisgICAgfVxuK11cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjI1LjQ3MTM3ODA2N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTQ1NzU5NDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyJ3MgYXNraW5nIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBkaXNzZWN0IHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBJdCBsb29rcyBsaWtlIGNoYW5nZXMgYXJvdW5kIHRoZSBgdGNmX2FjdGlvbl9wdXRfbWFueWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgbG9va3MgdG8gYmUgdG91Y2hpbmcgdGhlIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIGFuIGFycmF5IG9mIGB0Y19hY3Rpb25gIHBvaW50ZXJzLiBCZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBmdXp6aW5nIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyB0aGlzIHNwZWNpZmljIGNoYW5nZSBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGdyYWIgdGhlIHJlbGV2YW50IGNvZGUgYmxvY2sgYXJvdW5kIGxpbmUgMTIyMywgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBuZWVkZWQgY29udGV4dCBmb3IgYXNzZXNzaW5nIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIG1pZ2h0IGV4cG9zZSBkdXJpbmcgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjM2LjkyODk3NTA0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjkyMjUzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdGlvbl9wdXRfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTIyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MzcuODU4MjEwMTI1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTYzNzg5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqRGVlcCBEaXZlIGludG8gYHRjZl9hY3Rpb25fcHV0X21hbnlgIENhbGxzaXRlcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgYmVpbmcgdXNlZCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGFuYWx5emluZyBhIGZldyBrZXkgY2FsbCBzaXRlcyB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgdGNhX2FjdGlvbl9nZGAgYW5kIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEknbSBnb2luZyB0byBsb29rIGF0IG90aGVyIHBsYWNlcyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHdlJ3JlIGJhdGNoaW5nIG9yIGJ1bGstcHV0dGluZyBhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBkZXNpZ24sIGVmZmljaWVuY3ksIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBkb2N1bWVudCBldmVyeXRoaW5nIGZvciBsYXRlciBhbmFseXNpcyBhbmQgcmV2aWV3LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjQxLjU1NDU5MTgzMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcdFxcdHJldCA9IF9fdGNmX2lkcl9yZWxlYXNlKGEsIGJpbmQsIHRydWUpO1xcbjEyMTE6XFx0XFx0XFx0aWYgKHJldCA9PSBBQ1RfUF9ERUxFVEVEKVxcbjEyMTI6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4xMjEzOlxcdFxcdFxcdGVsc2UgaWYgKHJldCBcXHUwMDNjIDApXFxuMTIxNDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMTU6XFx0XFx0fVxcbjEyMTY6XFx0XFx0cmV0dXJuIHJldDtcXG4xMjE3OlxcdH1cXG4xMjE4OlxcdFxcbjEyMTk6XFx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKVxcbjEyMjA6XFx0e1xcbjEyMjE6XFx0XFx0cmV0dXJuIF9fdGNmX2FjdGlvbl9wdXQocCwgZmFsc2UpO1xcbjEyMjI6XFx0fVxcbjEyMjM6XFx0XFxuMTIyNDpcXHRzdGF0aWMgdm9pZCB0Y2ZfYWN0aW9uX3B1dF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcXG4xMjI1OlxcdHtcXG4xMjI2OlxcdFxcdGludCBpO1xcbjEyMjc6XFx0XFxuMTIyODpcXHRcXHQvKiBEZWxldGlvbiBtYXkgaGF2ZSBjbGVhcmVkIGVudHJpZXMgYmVmb3JlIGZhaWxpbmcuICovXFxuMTIyOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSsrKSB7XFxuMTIzMDpcXHRcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphID0gYWN0aW9uc1tpXTtcXG4xMjMxOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XFxuMTIzMjpcXHRcXG4xMjMzOlxcdFxcdFxcdGlmICghYSlcXG4xMjM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMzU6XFx0XFx0XFx0b3BzID0gYS1cXHUwMDNlb3BzO1xcbjEyMzY6XFx0XFx0XFx0aWYgKHRjZl9hY3Rpb25fcHV0KGEpKVxcbjEyMzc6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4xMjM4OlxcdFxcdH1cXG4xMjM5OlxcdH1cXG4xMjQwOlxcdFxcbjEyNDE6XFx0c3RhdGljIHZvaWQgdGNhX3B1dF9ib3VuZF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGluaXRfcmVzW10pXFxuMTI0MjpcXHR7XFxuMTI0MzpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xcbjEyNDQ6XFx0XFx0aW50IGk7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdFxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG4xMjQ3OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVxcdTAwM2VvcHM7XFxuMTI0ODpcXHRcXG4xMjQ5OlxcdFxcdFxcdGlmIChpbml0X3Jlc1tpXSA9PSBBQ1RfUF9DUkVBVEVEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDo0MS41NTQ3NTIwNDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1NjgzNDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIHR3by4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIG9mIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYC4gSSBrbm93IHRoZXkncmUgcmVsYXRlZCB0byB0cmFmZmljIGNvbnRyb2wgKFRDKSBhY3Rpb25zLCBzbyBsaWtlbHkgcGFydCBvZiB0aGUgZnJhbWV3b3JrJ3MgYWN0aW9uIGhhbmRsaW5nIG1lY2hhbmlzbS4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCAqaG93KiB0aGV5J3JlIHVzZWQgdG9nZXRoZXIsIGFuZCB3aGF0IGVhY2ggaXMgcmVzcG9uc2libGUgZm9yLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIGNvZGUgc25pcHBldCBvciBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gVEMgYWN0aW9uIHRyYXZlcnNhbCBvciBpdGVyYXRpb24uIEkgd2FudCB0byBzZWUgd2hlcmUgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBpcyBjYWxsZWQsIHdoYXQgaXQncyBwYXNzZWQsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjYWxsYmFjayBvciBsb29wIGJvZHkgaXQgZXhlY3V0ZXMuIFRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRjYV9hY3Rpb25fZ2RgIHJlcHJlc2VudHMuIElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWN0aW9uLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBhIGdsb2JhbCBkZXNjcmlwdG9yPyBQcm9iYWJseSBhbiBhY3Rpb24ncyBzcGVjaWZpYyBkYXRhLCBzaW5jZSB0aGUgb3RoZXIgb25lIHNlZW1zIGxpa2UgYSB0cmF2ZXJzYWwgZnVuY3Rpb24uIFRoZSBcImdkXCIgcHJvYmFibHkgc3RhbmRzIGZvciBcImdlbmVyaWMgZGF0YVwiLCBcImdyb3VwIGRhdGFcIiBvciBcImdsb2JhbCBkYXRhXCIgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIEknbSBiZXR0aW5nIHRoYXQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCBvZiBhY3Rpb25zIGFuZCBpbnZva2VzIGEgY2FsbGJhY2sgb3IgcHJvY2Vzc2VzIHRoaXMgYHRjYV9hY3Rpb25fZ2RgIG9yIG90aGVyIGFjdGlvbiBkYXRhIHRoYXQgZWFjaCBhY3Rpb24gdXNlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyBob3cgdGhlIGFjdGlvbiBmcmFtZXdvcmsgd2l0aGluIFRDIHdvcmtzIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTUwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDo0NC45MTE1ODkwNjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjQ4MDQ5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC03MTEtICAtICd0Yl9wcm9wZXJ0eV9mb3JfZWFjaCdcXG4uY2xhbmctZm9ybWF0OjcxMjogIC0gJ3RjZl9hY3RfZm9yX2VhY2hfYWN0aW9uJ1xcbi5jbGFuZy1mb3JtYXQtNzEzLSAgLSAndGNmX2V4dHNfZm9yX2VhY2hfYWN0aW9uJ1xcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTI3OT1zdGF0aWMgaW5saW5lIHZvaWQgdGNmX2V4dHNfcHV0X25ldChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjk0LVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyOTU6I2RlZmluZSB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSBcXFxcXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI5Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiAoKGEpID0gYWN0aW9uc1tpXSk7IGkrKylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIwMT1pbnQgdGNmX2FjdGlvbl9kZXN0cm95KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGJpbmQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMDYtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjA3OlxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMDgtXFx0XFx0YWN0aW9uc1tpXSA9IE5VTEw7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTEyNDE9c3RhdGljIHZvaWQgdGNhX3B1dF9ib3VuZF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGluaXRfcmVzW10pXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDUtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ2OlxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDctXFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXFx1MDAzZW9wcztcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTI2Mz1pbnQgdGNmX2FjdGlvbl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2OS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEyNzA6XFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI3MS1cXHRcXHRuZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgaSArIDEpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMzMyPXZvaWQgdGNmX2lkcl9pbnNlcnRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMzM2LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTMzNzpcXHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMzM4LVxcdFxcdHN0cnVjdCB0Y2ZfaWRyaW5mbyAqaWRyaW5mbztcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTg0Mz1zdGF0aWMgaW50IHRjZl9hY3Rpb25fZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xODQ3LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTg0ODpcXHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xODQ5LVxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVxcdTAwM2VvcHM7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM4OTI9aW50IHRjX3NldHVwX2FjdGlvbihzdHJ1Y3QgZmxvd19hY3Rpb24gKmZsb3dfYWN0aW9uLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zOTA3LVxcdGogPSAwO1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzkwODpcXHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhY3QsIGFjdGlvbnMpIHtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM5MDktXFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6NDcuMDc2Mzk4MDM1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjE4NjU0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVmZXJlbmNlIENvdW50IExlYWsgaW4gVHJhZmZpYyBDb250cm9sIEFjdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGFwcGVhcnMgSSd2ZSBpZGVudGlmaWVkIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIHJlZmVyZW5jZSBjb3VudCBsZWFrIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBoYW5kbGluZy4gVGhlIGluaXRpYWwgaXRlcmF0aW9uIGxvZ2ljLCBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gLCB1c2VkIGEgbG9vcCB0aGF0IHRlcm1pbmF0ZWQgcHJlbWF0dXJlbHkgaWYgaXQgZW5jb3VudGVyZWQgYSBOVUxMIGVudHJ5IHdpdGhpbiB0aGUgYGFjdGlvbnNbXWAgYXJyYXkuIFNwZWNpZmljYWxseSwgdGhlIGxvb3Agd2FzOiBgZm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgKChhKSA9IGFjdGlvbnNbaV0pOyBpKyspYC4gVGhpcyBtZWFucyB0aGF0IGlmIGBhY3Rpb25zYCBoYWQgTlVMTHMgaW50ZXJzcGVyc2VkLCB0aGUgbG9vcCB3b3VsZCBiYWlsIG91dCBiZWZvcmUgcHJvY2Vzc2luZyBhbGwgdGhlIGludGVuZGVkIGFjdGlvbnMuXG5cbk5vdywgdGhlIHByb2JsZW0gYXJpc2VzIGluIHNjZW5hcmlvcyBsaWtlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgb3IgYHRjYV9hY3Rpb25fZ2RgLiBJZiBhbiBhY3Rpb24gZmFpbHMgZGVsZXRpb24gZHVyaW5nIGEgY2xlYW51cCAod2l0aGluIGB0Y2ZfYWN0aW9uX2Rlc3Ryb3lgIG9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAsIHBlcmhhcHMpLCBpdCdzIHBvc3NpYmxlIGZvciBlYXJsaWVyIGVudHJpZXMgaW4gdGhlIGBhY3Rpb25zW11gIGFycmF5IHRvIGJlIHNldCB0byBOVUxMIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjdGlvbiBoYXMgYmVlbiByZW1vdmVkIG9yIGlzIG5vIGxvbmdlciB2YWxpZC4gQ29uc2VxdWVudGx5LCB3aGVuIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpYCBpcyBjYWxsZWQgbGF0ZXIsIG9mdGVuIGR1cmluZyBlcnJvciBoYW5kbGluZywgdGhlIHNhbWUgZWFybHktdGVybWluYXRpb24gYmVoYXZpb3Igb2NjdXJzLiBUaGlzIG1lYW5zIEknbSBza2lwcGluZyBzb21lIGFjdGlvbnMgdGhhdCBhcmUgc3RpbGwgdGhlcmUuIFRob3NlIHJlZmVyZW5jZXMgYXJlIGxlYWtlZCBiZWNhdXNlIHRoZSBmdW5jdGlvbiB3b24ndCBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIHJlbWFpbmluZyBhY3Rpb25zICphZnRlciogdGhlIGZpcnN0IE5VTEwgaXMgZW5jb3VudGVyZWQuIFRoaXMgbGVhZHMgdG8gYSByZXNvdXJjZSBsZWFrLCBzcGVjaWZpY2FsbHksIGEgcmVmY291bnQgbGVhay4gVGhlIG9iamVjdHMgcmVtYWluIGluIG1lbW9yeSwgYnV0IGFyZSBubyBsb25nZXIgYWNjZXNzaWJsZS5cblxuVGhlIHByb3Bvc2VkIGZpeCDigJMgbW9kaWZ5aW5nIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCB0byBpdGVyYXRlIHRocm91Z2ggKmFsbCogYFRDQV9BQ1RfTUFYX1BSSU9gIGVudHJpZXMgYW5kIHNpbXBseSBza2lwIGFueSBOVUxMIGVudHJpZXMg4oCTIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJdCBndWFyYW50ZWVzIHRoYXQgYWxsIGFjdGlvbnMgd2lsbCBoYXZlIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZGVjcmVtZW50ZWQsIGV2ZW4gaWYgc29tZSBoYXZlIGJlZW4gbWFya2VkIGFzIE5VTEwgaW4gdGhlIGFycmF5IGR1ZSB0byBhbiBlYXJsaWVyIGZhaWx1cmUgb3IgZGVsZXRpb24uXG5cbkknbSBub3cgZ29pbmcgdG8gemVybyBpbiBvbiBsaW5lcyBhcm91bmQgMjAzMCBpbiBgdGNmX2FjdGlvbl9kZWxldGVgIGFuZCBgdGNhX2FjdGlvbl9nZGAgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IHRoZSBgYWN0aW9uc2AgYXJyYXkgaXMgYmVpbmcgaW5pdGlhbGl6ZWQsIHBvcHVsYXRlZCwgYW5kIHVzZWQgaW4gdGhlIGRlbGV0aW9uIHNlcXVlbmNlLiBUaGlzIHdpbGwgaGVscCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJvb3QgY2F1c2UgYW5kIGVuc3VyZSB0aGUgcHJvcG9zZWQgZml4IGFkZHJlc3NlcyB0aGUgYWN0dWFsIHByb2JsZW0gYW5kIGlzbid0IGp1c3QgdHJlYXRpbmcgYSBzeW1wdG9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTE2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjUxLjg5ODI2NjM2NloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDMwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDMwOlxcdHN0YXRpYyBpbnRcXG4yMDMxOlxcdHRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4yMDMyOlxcdFxcdCAgICAgIHUzMiBwb3J0aWQsIGludCBldmVudCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwMzM6XFx0e1xcbjIwMzQ6XFx0XFx0aW50IGksIHJldDtcXG4yMDM1OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9BQ1RfTUFYX1BSSU8gKyAxXTtcXG4yMDM2OlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmFjdDtcXG4yMDM3OlxcdFxcdHNpemVfdCBhdHRyX3NpemUgPSAwO1xcbjIwMzg6XFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O1xcbjIwMzk6XFx0XFxuMjA0MDpcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9BQ1RfTUFYX1BSSU8sIG5sYSwgTlVMTCxcXG4yMDQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4yMDQyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIwNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMDQ0OlxcdFxcbjIwNDU6XFx0XFx0aWYgKGV2ZW50ID09IFJUTV9ERUxBQ1RJT04gXFx1MDAyNlxcdTAwMjYgbi1cXHUwMDNlbmxtc2dfZmxhZ3MgXFx1MDAyNiBOTE1fRl9ST09UKSB7XFxuMjA0NjpcXHRcXHRcXHRpZiAodGJbMV0pXFxuMjA0NzpcXHRcXHRcXHRcXHRyZXR1cm4gdGNhX2FjdGlvbl9mbHVzaChuZXQsIHRiWzFdLCBuLCBwb3J0aWQsIGV4dGFjayk7XFxuMjA0ODpcXHRcXG4yMDQ5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgbmV0bGluayBhdHRyaWJ1dGVzIHdoaWxlIGZsdXNoaW5nIFRDIGFjdGlvblxcXCIpO1xcbjIwNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjA1MTpcXHRcXHR9XFxuMjA1MjpcXHRcXG4yMDUzOlxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiB0YltpXTsgaSsrKSB7XFxuMjA1NDpcXHRcXHRcXHRhY3QgPSB0Y2ZfYWN0aW9uX2dldF8xKG5ldCwgdGJbaV0sIG4sIHBvcnRpZCwgZXh0YWNrKTtcXG4yMDU1OlxcdFxcdFxcdGlmIChJU19FUlIoYWN0KSkge1xcbjIwNTY6XFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihhY3QpO1xcbjIwNTc6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMjA1ODpcXHRcXHRcXHR9XFxuMjA1OTpcXHRcXHRcXHRhdHRyX3NpemUgKz0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0KTtcXG4yMDYwOlxcdFxcdFxcdGFjdGlvbnNbaSAtIDFdID0gYWN0O1xcbjIwNjE6XFx0XFx0fVxcbjIwNjI6XFx0XFxuMjA2MzpcXHRcXHRhdHRyX3NpemUgPSB0Y2ZfYWN0aW9uX2Z1bGxfYXR0cnNfc2l6ZShhdHRyX3NpemUpO1xcbjIwNjQ6XFx0XFxuMjA2NTpcXHRcXHRpZiAoZXZlbnQgPT0gUlRNX0dFVEFDVElPTilcXG4yMDY2OlxcdFxcdFxcdHJldCA9IHRjZl9nZXRfbm90aWZ5KG5ldCwgcG9ydGlkLCBuLCBhY3Rpb25zLCBhdHRyX3NpemUsIGV2ZW50LFxcbjIwNjc6XFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbjIwNjg6XFx0XFx0ZWxzZSB7IC8qIGRlbGV0ZSAqL1xcbjIwNjk6XFx0XFx0XFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcXG4yMDcwOlxcdFxcdFxcdGlmIChyZXQpXFxuMjA3MTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4yMDcyOlxcdFxcdFxcdHJldHVybiAwO1xcbjIwNzM6XFx0XFx0fVxcbjIwNzQ6XFx0ZXJyOlxcbjIwNzU6XFx0XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG4yMDc2OlxcdFxcdHJldHVybiByZXQ7XFxuMjA3NzpcXHR9XFxuMjA3ODpcXHRcXG4yMDc5OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2FkZF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjIwODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuMjA4MTpcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXFxuMjA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMDgzOlxcdHtcXG4yMDg0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjUxLjg5ODUxNzkxN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODUyMjY2MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IE1hbmFnZW1lbnQgSXNzdWVzIGluIFRyYWZmaWMgQ29udHJvbCBBY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lLCBzcGVjaWZpY2FsbHkgbGluZSAyMDM4LiBJdCBsb29rcyBsaWtlIHRoZSBgYWN0aW9uc2AgYXJyYXksIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGB0Y19hY3Rpb25gIHN0cnVjdHVyZSwgaXMgYmVpbmcgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIGl0J3MgaGFuZGxlZCBsaWtlIHRoaXM/XCIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHplcm8gaW5pdGlhbGl6YXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgcHJhY3RpY2UgdG8gc3RhcnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuXG5cbk15IG5leHQgc3RlcCBpcyBuYXR1cmFsbHkgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGNmX2FjdGlvbl9wdXRfbWFueWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBhY3Rpb25zYCBhcnJheSBpcyBiZWluZyB1c2VkLCBzbyBrbm93aW5nIHdoZXJlIGFuZCBob3cgaXQncyBiZWluZyBkZWFsbG9jYXRlZCBpcyBjcml0aWNhbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBncmVwIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNhbGwgc2l0ZXMgYW5kIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcgZnJvbSB0aGVyZS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG1hbmFnaW5nIG1lbW9yeSBjb3JyZWN0bHkgaW4gdGhpcyBjcnVjaWFsIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjU1Ljc1MDc4NjUwOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3Mzc4NTQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTIyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6NTcuOTI0NTc4OTkxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3Mzc1NTYzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkFuYWx5emluZyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgYW5kIGB0Y2ZfZGVsX25vdGlmeWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNmX2FjdGlvbl9wdXRfbWFueWAuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQncyBnb3QgcmVzdHJpY3RlZCBzY29wZSDigJMgb25seSB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiBIbW0sIGFuZCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYHRjYV9hY3Rpb25fZ2RgLiBUaGF0IG5hcnJvd3MgZG93biB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIGFuZCB1c2FnZSwgd2hpY2ggaXMgZ29vZC4gS25vd2luZyB0aGF0IGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgaGVyZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgdGNmX2RlbF9ub3RpZnlgLiBJIHdhbnQgdG8gdHJhY2UgaG93IGRhdGEgaXMgaGFuZGxlZCB0aGVyZSDigJMgc2VlIHdoZXJlIGl0J3MgY2FsbGVkLCB3aGF0IGl0J3MgZG9pbmcgd2l0aCB3aGF0ZXZlciB0aGlzIHRoaW5nIGlzIHRoYXQgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHB1dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEl04oCZcyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgZGF0YSBmbG93IG5vdywgZm9sbG93aW5nIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB3aGF0IHRyaWdnZXJzIHdoYXQgaXMgY3J1Y2lhbC4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGltcG9ydGFudCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3byBjYWxscywgYW5kIEkgbmVlZCB0byB1bmNvdmVyIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NTowMC42NjIxMzg3ODdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzAxMTcxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2RlbF9ub3RpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuYz0xOTIzPWludCB0Y2ZfYWN0aW9uX3Jlb2ZmbG9hZF9jYihmbG93X2luZHJfYmxvY2tfYmluZF9jYl90ICpjYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTk4MC1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE5ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDAxLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAwMjpzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMy1cXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMS1cXHR9IGVsc2Uge1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxMjpcXHRcXHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMTMtXFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDY4LVxcdGVsc2UgeyAvKiBkZWxldGUgKi9cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNjk6XFx0XFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTU6MDMuMDMyMjYzOTg5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxOTQ2OTkxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGNmX2RlbF9ub3RpZnlgIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgdGNmX2RlbF9ub3RpZnlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZWxldGlvbiBub3RpZmljYXRpb24gZmxvdyB3aXRoaW4gdGhlIFRyYWZmaWMgQ29udHJvbCBGcmFtZXdvcmsuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgbHVya2luZyBoZXJlLCBwZXJoYXBzIGEgcmFjZSBjb25kaXRpb24gb3IgYW4gdW5oYW5kbGVkIGNvcm5lciBjYXNlLiBJJ2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBkYXRhLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW46XG5cbiogICAqKlRoZSBlbnRyeSBwb2ludDoqKiBXaGVyZSBkb2VzIGB0Y2ZfZGVsX25vdGlmeWAgZml0IGludG8gdGhlIGJyb2FkZXIgZGVsZXRpb24gcHJvY2Vzcz8gV2hhdCBjYWxscyBpdD8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IElzIGl0IGNhbGxlZCBmcm9tIHVzZXItc3BhY2UsIGtlcm5lbCBzcGFjZSwgb3IgYm90aD9cbiogICAqKkRhdGEgaW50ZWdyaXR5OioqIEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBkYXRhIHJhY2VzPyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBSQ1UsIHNwaW5sb2NrcywgYW5kIG11dGV4ZXMuXG4qICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGVycm9yIGNvZGVzIGFyZSByZXR1cm5lZCwgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkIHVwc3RyZWFtPyBJcyB0aGVyZSBwcm9wZXIgY2xlYW51cCBpbiBjYXNlIG9mIGZhaWx1cmU/IEkgd2FudCB0byBzZWUgaWYgYW55IHJlc291cmNlcyBhcmUgbGVha2VkLlxuKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBvdGhlciBUQ0YgY29tcG9uZW50czoqKiBJJ2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgVENGLCBhbmQgYW55IHBvc3NpYmxlIGFyZWFzIG9mIGNvbmZsaWN0LlxuKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGlzIG1lbW9yeSBoYW5kbGVkIHdoZW4gYW4gb2JqZWN0IGlzIHJlbW92ZWQ/IElzIHRoZSBjbGVhbnVwIGNvcnJlY3Q/XG5cblVsdGltYXRlbHksIEknbSBsb29raW5nIGZvciBhbnkgd2Vha25lc3NlcyBpbiB0aGUgZGVsZXRpb24gbWVjaGFuaXNtIHRoYXQgbWlnaHQgbGVhZCB0byBjcmFzaGVzLCBpbmNvcnJlY3QgdHJhZmZpYyBiZWhhdmlvciwgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIGhhdmUgYSB2YWd1ZSBpZGVhIG9mIHRoZSBwcm9ibGVtLCBhbmQgd2lsbCBiZSBsb29raW5nIGZvciBhIHBvdGVudGlhbCBjYXVzZSwgc28gdGhlIGNoZWNrIHdpbGwgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NTowOC4yMjY5NjYyMTNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk4MDpcXHRcXG4xOTgxOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjE5ODI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuMTk4MzpcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXFxuMTk4NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xOTg1OlxcdHtcXG4xOTg2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTk4NzpcXHRcXG4xOTg4OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihtYXgoYXR0cl9zaXplLCBOTE1TR19HT09EU0laRSksIEdGUF9LRVJORUwpO1xcbjE5ODk6XFx0XFx0aWYgKCFza2IpXFxuMTk5MDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PQlVGUyk7XFxuMTk5MTpcXHRcXG4xOTkyOlxcdFxcdGlmICh0Y2FfZ2V0X2ZpbGwoc2tiLCBhY3Rpb25zLCBwb3J0aWQsIG4tXFx1MDAzZW5sbXNnX3NlcSwgMCwgUlRNX0RFTEFDVElPTixcXG4xOTkzOlxcdFxcdFxcdFxcdCAwLCAyLCBleHRhY2spIFxcdTAwM2M9IDApIHtcXG4xOTk0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBmaWxsIG5ldGxpbmsgVEMgYWN0aW9uIGF0dHJpYnV0ZXNcXFwiKTtcXG4xOTk1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE5OTY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuMTk5NzpcXHRcXHR9XFxuMTk5ODpcXHRcXG4xOTk5OlxcdFxcdHJldHVybiBza2I7XFxuMjAwMDpcXHR9XFxuMjAwMTpcXHRcXG4yMDAyOlxcdHN0YXRpYyBpbnQgdGNmX2RlbF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMjAwMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcXG4yMDA0OlxcdFxcdFxcdFxcdCAgc2l6ZV90IGF0dHJfc2l6ZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwMDU6XFx0e1xcbjIwMDY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4yMDA3OlxcdFxcdGludCByZXQ7XFxuMjAwODpcXHRcXG4yMDA5OlxcdFxcdGlmICghcnRubF9ub3RpZnlfbmVlZGVkKG5ldCwgbi1cXHUwMDNlbmxtc2dfZmxhZ3MsIFJUTkxHUlBfVEMpKSB7XFxuMjAxMDpcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjIwMTE6XFx0XFx0fSBlbHNlIHtcXG4yMDEyOlxcdFxcdFxcdHNrYiA9IHRjZl9kZWxfbm90aWZ5X21zZyhuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLFxcbjIwMTM6XFx0XFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuMjAxNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpXFxuMjAxNTpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihza2IpO1xcbjIwMTY6XFx0XFx0fVxcbjIwMTc6XFx0XFxuMjAxODpcXHRcXHQvKiBub3cgZG8gdGhlIGRlbGV0ZSAqL1xcbjIwMTk6XFx0XFx0cmV0ID0gdGNmX2FjdGlvbl9kZWxldGUobmV0LCBhY3Rpb25zKTtcXG4yMDIwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMjAyMTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gZGVsZXRlIFRDIGFjdGlvblxcXCIpO1xcbjIwMjI6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjAyMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIwMjQ6XFx0XFx0fVxcbjIwMjU6XFx0XFxuMjAyNjpcXHRcXHRyZXR1cm4gcnRuZXRsaW5rX21heWJlX3NlbmQoc2tiLCBuZXQsIHBvcnRpZCwgUlROTEdSUF9UQyxcXG4yMDI3OlxcdFxcdFxcdFxcdFxcdCAgICBuLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0VDSE8pO1xcbjIwMjg6XFx0fVxcbjIwMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU1OjA4LjIyNzE3MjgzM1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzI5NDY1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gRGVsZXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSdzIGNhbGxpbmcgZm9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIHN0YXJ0cyB0byBhc3NlbWJsZS4gVGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0ncyBsaWZlY3ljbGUg4oCTIGEgZGVsZXRpb24gYWN0aW9uIHJlbGF0ZWQgdG8sIGxpa2VseSwgYSB0cmFuc2FjdGlvbiBjb250cm9sIGZyYW1ld29yayAoVENGKSwgZ2l2ZW4gdGhlIHByZWZpeC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBiZWluZyBkZWxldGVkPyBBIHJlY29yZD8gQW4gb2JqZWN0PyBBbiBlbnRpcmUgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWxldGlvbj8gQXJlIHRoZXJlIGNhc2NhZGluZyBlZmZlY3RzIHRvIGNvbnNpZGVyPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBtYW5hZ2U/IElzIHRoaXMgZGVsZXRpb24gdXNlciBpbml0aWF0ZWQsIG9yIGF1dG9tYXRpYz8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkPyBNb3JlIGltcG9ydGFudGx5LCBpcyBkYXRhIGludGVncml0eSBhdCByaXNrLCBhbmQgaXMgdGhlcmUgYW55IHJvbGxiYWNrIG9yIHJlY292ZXJ5IGltcGxlbWVudGVkPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBhY3Rpb24gdG8gcHJvcGVybHkgZXZhbHVhdGUgaXQuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU1OjEwLjU1NjY0MDg2MVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQwOlxcdFxcdHJldHVybiBlcnI7XFxuMTg0MTpcXHR9XFxuMTg0MjpcXHRcXG4xODQzOlxcdHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXFxuMTg0NDpcXHR7XFxuMTg0NTpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xcbjE4NDY6XFx0XFx0aW50IGk7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG4xODQ5OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVxcdTAwM2VvcHM7XFxuMTg1MDpcXHRcXHRcXHQvKiBBY3Rpb25zIGNhbiBiZSBkZWxldGVkIGNvbmN1cnJlbnRseSBzbyB3ZSBtdXN0IHNhdmUgdGhlaXJcXG4xODUxOlxcdFxcdFxcdCAqIHR5cGUgYW5kIGlkIHRvIHNlYXJjaCBhZ2FpbiBhZnRlciByZWZlcmVuY2UgaXMgcmVsZWFzZWQuXFxuMTg1MjpcXHRcXHRcXHQgKi9cXG4xODUzOlxcdFxcdFxcdHN0cnVjdCB0Y2ZfaWRyaW5mbyAqaWRyaW5mbyA9IGEtXFx1MDAzZWlkcmluZm87XFxuMTg1NDpcXHRcXHRcXHR1MzIgYWN0X2luZGV4ID0gYS1cXHUwMDNldGNmYV9pbmRleDtcXG4xODU1OlxcdFxcbjE4NTY6XFx0XFx0XFx0YWN0aW9uc1tpXSA9IE5VTEw7XFxuMTg1NzpcXHRcXHRcXHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpIHtcXG4xODU4OlxcdFxcdFxcdFxcdC8qIGxhc3QgcmVmZXJlbmNlLCBhY3Rpb24gd2FzIGRlbGV0ZWQgY29uY3VycmVudGx5ICovXFxuMTg1OTpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KG9wcy1cXHUwMDNlb3duZXIpO1xcbjE4NjA6XFx0XFx0XFx0fSBlbHNlIHtcXG4xODYxOlxcdFxcdFxcdFxcdGludCByZXQ7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdFxcdFxcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXFxuMTg2NDpcXHRcXHRcXHRcXHRyZXQgPSB0Y2ZfaWRyX2RlbGV0ZV9pbmRleChpZHJpbmZvLCBhY3RfaW5kZXgpO1xcbjE4NjU6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTg2NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4Njc6XFx0XFx0XFx0fVxcbjE4Njg6XFx0XFx0fVxcbjE4Njk6XFx0XFx0cmV0dXJuIDA7XFxuMTg3MDpcXHR9XFxuMTg3MTpcXHRcXG4xODcyOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3Jlb2ZmbG9hZF9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsXFxuMTg3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uKVxcbjE4NzQ6XFx0e1xcbjE4NzU6XFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHtcXG4xODc2OlxcdFxcdFxcdFswXSA9IGFjdGlvbixcXG4xODc3OlxcdFxcdH07XFxuMTg3ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjE4Nzk6XFx0XFx0c2l6ZV90IGF0dHJfc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTU6MTAuNTU2ODUxMDExWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjI3MTY3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlc291cmNlIExlYWsgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGZvY3VzZXMgb24gdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUsIGlmIGB0Y2ZfaWRyX2RlbGV0ZV9pbmRleGAgZmFpbHMgYXQgaW5kZXggMCwgdGhlIGNvZGUgc2V0cyBgYWN0aW9uc1swXWAgdG8gYE5VTExgIGJ1dCBkb2Vzbid0IGhhbmRsZSB0aGUgcmVtYWluaW5nIGFjdGlvbnMgcHJvcGVybHkuIFRoaXMgbGVhZHMgdG8gYSByZWZlcmVuY2UgY291bnQgbGVhaywgYSBjbGFzc2ljIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUuIFRoZSBzdWJzZXF1ZW50IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYHRjYV9hY3Rpb25fZ2RgLCB1cG9uIGVuY291bnRlcmluZyB0aGUgZXJyb3IsIGNhbGxzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpYCwgYnV0IGJlY2F1c2UgYGFjdGlvbnNbMF1gIGlzIG5vdyBgTlVMTGAsIHRoZSBpdGVyYXRpb24gc3RvcHMgcHJlbWF0dXJlbHksIGxlYXZpbmcgcmVmZXJlbmNlcyB0byBsYXRlciBhY3Rpb25zIGluIHRoZSBhcnJheSBsZWFrZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbnRpcmUgYGFjdGlvbnNgIGFycmF5LCBmcm9tIDAgdG8gYFRDQV9BQ1RfTUFYX1BSSU8gLSAxYCwgcmVnYXJkbGVzcyBvZiBgTlVMTGAgZW50cmllcywgY29ycmVjdGx5IHJlbGVhc2luZyBhbGwgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIHRhcmdldGVkIGZpeCBmb3IgYSBzcGVjaWZpYyByZXNvdXJjZSBsZWFrIGR1cmluZyBlcnJvciBoYW5kbGluZy5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEknbSBjYXJlZnVsbHkgZXZhbHVhdGluZyB3aGV0aGVyIHRoZSBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgbmV3IHZ1bG5lcmFiaWxpdGllcy5cblxuKiAgICoqVXNlciBTcGFjZSBMZWFrYWdlOioqIEFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgbWlnaHQgbGVhaz8gTm8sIHRoaXMgY29kZSBkb2Vzbid0IGludGVyYWN0IHdpdGggdXNlciBzcGFjZSBkaXJlY3RseSBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyBwb3NzaWJpbGl0eS5cbiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgQnJhbmNoaW5nOioqIERvZXMgaXQgaW50cm9kdWNlIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGBhY3Rpb25zYCBhcnJheSBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgKGA9IHt9YCksIHNvIGVhY2ggZW50cnkgaXMgZWl0aGVyIGEgdmFsaWQgcG9pbnRlciBvciBgTlVMTGAuIFRoaXMgaW5pdGlhbGl6YXRpb24gcHJldmVudHMgYW55IHBvdGVudGlhbCBtaXN1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG4qICAgKipCdWZmZXIgRXJyb3JzOioqIERvZXMgaXQgaW52b2x2ZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyBOb3BlLlxuKiAgICoqQm91bmRzIENoZWNrczoqKiBEb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLlxuXG5HaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IGFib3V0IGZpeGluZyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrLiBJdCdzIGFib3V0IGVuc3VyaW5nIGFsbCByZXNvdXJjZXMgYXJlIHByb3Blcmx5IHJlbGVhc2VkLCBub3QgYWJvdXQgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuSGVyZSdzIG15IHJhdGlvbmFsZTpcblxuS01TQU4gZm9jdXNlcyBvbiBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEluIGNvbnRyYXN0LCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIGFuIGFycmF5IG9mIGFjdGlvbnMgYWZ0ZXIgYSBkZWxldGlvbiBmYWlsdXJlLiBDcnVjaWFsbHksIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHplcm8taW5pdGlhbGl6ZXMgdGhlIGBhY3Rpb25zYCBhcnJheSAoYD0ge31gKS4gVGhpcyBpbml0aWFsaXphdGlvbiBtZWFucyB0aGF0IHRoZSBjb2RlIG9ubHkgd29ya3Mgd2l0aCBlaXRoZXIgdmFsaWQgcG9pbnRlcnMgb3IgYE5VTExgIGVudHJpZXMuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgZml4IGFkZHJlc3NlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBidWcpIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgYW55IGlzc3VlcyBpbiB0aGlzIGFyZWEuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5MywiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NTo0NS43ODQwMjA0OTVaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cXG5cXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cXG5cXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt898t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 09:51:14 +0000 UTC FinishedAt: 2026-09-10 09:55:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_ACT" ], "series_id": "abc1d2eb-df75-4665-afd7-02fdf758e66b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_action_put_many", "tca_action_gd", "tcf_action_delete", "tcf_del_notify", "tc_ctl_action" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAgICYjMzQ7dGNhX2FjdGlvbl9nZCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDt0Y19jdGxfYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9hY3Rpb25fcHV0X21hbnkoKWAgaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYFRDQV9BQ1RfTUFYX1BSSU9gIHNsb3RzIHJhdGhlciB0aGFuIHRlcm1pbmF0aW5nIGF0IHRoZSBmaXJzdCBOVUxMIGVudHJ5IHZpYSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oKWAuIFRoaXMgZW5zdXJlcyB0aGF0IHJlbWFpbmluZyBhY3Rpb24gcmVmZXJlbmNlcyBhcmUgcmVsZWFzZWQgd2hlbiBhbiBlYXJsaWVyIGFjdGlvbiBkZWxldGlvbiBpbiBhIGJhdGNoIGZhaWxzIGFmdGVyIGNsZWFyaW5nIGl0cyBzbG90LlxuXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wmIzM5O3MgYmF0Y2ggYWN0aW9uIGRlbGV0aW9uIGVycm9yIGhhbmRsaW5nIHBhdGggKHRjZl9hY3Rpb25fcHV0X21hbnkgaW4gbmV0L3NjaGVkL2FjdF9hcGkuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0RFTEFDVElPTikgYW5kIGlzIHdlbGwtc3VpdGVkIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuaW5kZXggMzdlY2VkODRkZmE1Zi4uODY3MTBhNTk2YTBmYSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfYXBpLmNcbkBAIC0xMjIzLDExICYjNDM7MTIyMywxNiBAQCBzdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXG4gXG4gc3RhdGljIHZvaWQgdGNmX2FjdGlvbl9wdXRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXG4ge1xuLVx0c3RydWN0IHRjX2FjdGlvbiAqYTtcbiBcdGludCBpO1xuIFxuLVx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS1cdTAwM2VvcHM7XG4mIzQzO1x0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRDQV9BQ1RfTUFYX1BSSU87IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgdGNfYWN0aW9uICphID0gYWN0aW9uc1tpXTtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFhKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG9wcyA9IGEtXHUwMDNlb3BzO1xuIFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXG4gXHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxuQEAgLTAsMCAmIzQzOzEsMTE1IEBAXG4mIzQzO1tcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7ZDcxMFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Z2FjdFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzI1NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7dG90YWwgYWN0cyAzXFxcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBbXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIDAsXG4mIzQzOyAgICAgICAgICAgICAgICAxLFxuJiM0MzsgICAgICAgICAgICAgICAgMjU1XG4mIzQzOyAgICAgICAgICAgIF1cbiYjNDM7ICAgICAgICBdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtkNzExXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O1JlbGVhc2UgdGFpbCByZWZlcmVuY2VzIGFmdGVyIG1pZGRsZSBhY3Rpb24gZGVsZXRpb24gZmFpbHNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Z2FjdFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMlwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzI1NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7dG90YWwgYWN0cyAyXFxcXGIuKmluZGV4IDIgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hDb3VudFwmIzM0OzogXCYjMzQ7MVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBbXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIDAsXG4mIzQzOyAgICAgICAgICAgICAgICAxLFxuJiM0MzsgICAgICAgICAgICAgICAgMjU1XG4mIzQzOyAgICAgICAgICAgIF1cbiYjNDM7ICAgICAgICBdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtkNzEzXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O0RlbGV0ZSBhIHRhaWwgYWN0aW9uIG9uY2UgYWZ0ZXIgYSBmYWlsZWQgYmF0Y2hcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7Z2FjdFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7cGx1Z2luc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtyZXF1aXJlc1wmIzM0OzogXCYjMzQ7bnNQbHVnaW5cJiMzNDtcbiYjNDM7ICAgICAgICB9LFxuJiM0MzsgICAgICAgIFwmIzM0O3NldHVwXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXSxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcHJvdG9jb2wgaXAgaW5ncmVzcyB1MzIgbWF0Y2ggdTMyIDAgMCBhY3Rpb24gZ2FjdCBpbmRleCAxXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBhY3Rpb25zIGRlbCBhY3Rpb24gZ2FjdCBpbmRleCAxIGFjdGlvbiBnYWN0IGluZGV4IDJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzI1NVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0O3NoIC1jICYjMzk7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXHUwMDI2XHUwMDI2ICRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0JiMzOTtcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bWF0Y2hQYXR0ZXJuXCYjMzQ7OiBcJiMzNDt0b3RhbCBhY3RzIDFcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcYlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaENvdW50XCYjMzQ7OiBcJiMzNDsxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgMCxcbiYjNDM7ICAgICAgICAgICAgICAgIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAyNTVcbiYjNDM7ICAgICAgICAgICAgXVxuJiM0MzsgICAgICAgIF1cbiYjNDM7ICAgIH1cbiYjNDM7XVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAgICYjMzQ7dGNhX2FjdGlvbl9nZCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDt0Y19jdGxfYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBjbGVhbnVwIGxvZ2ljIGluIHRyYWZmaWMgY29udHJvbCYjMzk7cyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmY2NWY2MDEzMDg1ZDM3MmNkNTVkZGJkY2M3NGMyNWZlOWY2NDZlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA5OjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggMzdlY2VkODRkZmE1Zi4uODY3MTBhNTk2YTBmYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC0xMjIzLDExICYjNDM7MTIyMywxNiBAQCBzdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApCiAKIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKQogewotCXN0cnVjdCB0Y19hY3Rpb24gKmE7CiAJaW50IGk7CiAKLQl0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7Ci0JCWNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLSZndDtvcHM7CiYjNDM7CS8qIERlbGV0aW9uIG1heSBoYXZlIGNsZWFyZWQgZW50cmllcyBiZWZvcmUgZmFpbGluZy4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRDQV9BQ1RfTUFYX1BSSU87IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgdGNfYWN0aW9uICphID0gYWN0aW9uc1tpXTsKJiM0MzsJCWNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7CiYjNDM7CiYjNDM7CQlpZiAoIWEpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlvcHMgPSBhLSZndDtvcHM7CiAJCWlmICh0Y2ZfYWN0aW9uX3B1dChhKSkKIAkJCW1vZHVsZV9wdXQob3BzLSZndDtvd25lcik7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2FjdGlvbnMvYmF0Y2gtZGVsZXRlLmpzb24KQEAgLTAsMCAmIzQzOzEsMTE1IEBACiYjNDM7WwomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7ZDcxMCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7UmVsZWFzZSB0YWlsIHJlZmVyZW5jZXMgYWZ0ZXIgZmlyc3QgYWN0aW9uIGRlbGV0aW9uIGZhaWxzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2dhY3QmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXSwKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDEmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MjU1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3RvdGFsIGFjdHMgM1xcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxiLippbmRleCAzIHJlZiAxIGJpbmQgMFxcYiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgWwomIzQzOyAgICAgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIDAsCiYjNDM7ICAgICAgICAgICAgICAgIDEsCiYjNDM7ICAgICAgICAgICAgICAgIDI1NQomIzQzOyAgICAgICAgICAgIF0KJiM0MzsgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2Q3MTEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlbGVhc2UgdGFpbCByZWZlcmVuY2VzIGFmdGVyIG1pZGRsZSBhY3Rpb24gZGVsZXRpb24gZmFpbHMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7Y2F0ZWdvcnkmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7YWN0aW9ucyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7Z2FjdCYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdLAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMiYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDMmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7ZXhwRXhpdENvZGUmIzM0OzogJiMzNDsyNTUmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7dG90YWwgYWN0cyAyXFxiLippbmRleCAyIHJlZiAyIGJpbmQgMVxcYi4qaW5kZXggMyByZWYgMSBiaW5kIDBcXGImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdCiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtkNzEzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtEZWxldGUgYSB0YWlsIGFjdGlvbiBvbmNlIGFmdGVyIGEgZmFpbGVkIGJhdGNoJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2dhY3QmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXSwKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MjU1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0O3NoIC1jICYjMzk7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgJmFtcDsmYW1wOyAkVEMgYWN0aW9ucyBscyBhY3Rpb24gZ2FjdCYjMzk7JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3RvdGFsIGFjdHMgMVxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXGImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdCiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0KJiM0MztdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgYW5kIHRoZSBmaWxlIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgaXMgYG5ldC9zY2hlZC9hY3RfYXBpLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGNmX2FjdGlvbl9wdXRfbWFueWAgZnVuY3Rpb24sIGFzIGlkZW50aWZpZWQgYnkgdGhlIGRpZmYuIFRoaXMgYXJlYSBoYW5kbGVzIHRoZSBhY3Rpb24gQVBJIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzY2hlZHVsZXIsIHdoaWNoIGlzIHNvbWV0aGluZyBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGNvZGUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLCB3aGljaCBpbiB0aGlzIGNhc2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGxpbmUgMTIyMyBvZiB0aGUgbWVudGlvbmVkIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIGxpbmUgaW4gb3JkZXIgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgYWx0ZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdHJldCA9IF9fdGNmX2lkcl9yZWxlYXNlKGEsIGJpbmQsIHRydWUpO1xuMTIxMTpcdFx0XHRpZiAocmV0ID09IEFDVF9QX0RFTEVURUQpXG4xMjEyOlx0XHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuMTIxMzpcdFx0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4xMjE0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjEyMTU6XHRcdH1cbjEyMTY6XHRcdHJldHVybiByZXQ7XG4xMjE3Olx0fVxuMTIxODpcdFxuMTIxOTpcdHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcbjEyMjA6XHR7XG4xMjIxOlx0XHRyZXR1cm4gX190Y2ZfYWN0aW9uX3B1dChwLCBmYWxzZSk7XG4xMjIyOlx0fVxuMTIyMzpcdFxuMTIyNDpcdHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuMTIyNTpcdHtcbjEyMjY6XHRcdGludCBpO1xuMTIyNzpcdFxuMTIyODpcdFx0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuMTIyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSYjNDM7JiM0MzspIHtcbjEyMzA6XHRcdFx0c3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07XG4xMjMxOlx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XG4xMjMyOlx0XG4xMjMzOlx0XHRcdGlmICghYSlcbjEyMzQ6XHRcdFx0XHRjb250aW51ZTtcbjEyMzU6XHRcdFx0b3BzID0gYS1cdTAwM2VvcHM7XG4xMjM2Olx0XHRcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSlcbjEyMzc6XHRcdFx0XHRtb2R1bGVfcHV0KG9wcy1cdTAwM2Vvd25lcik7XG4xMjM4Olx0XHR9XG4xMjM5Olx0fVxuMTI0MDpcdFxuMTI0MTpcdHN0YXRpYyB2b2lkIHRjYV9wdXRfYm91bmRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxuMTI0MjpcdHtcbjEyNDM6XHRcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4xMjQ0Olx0XHRpbnQgaTtcbjEyNDU6XHRcbjEyNDY6XHRcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbjEyNDc6XHRcdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuMTI0ODpcdFxuMTI0OTpcdFx0XHRpZiAoaW5pdF9yZXNbaV0gPT0gQUNUX1BfQ1JFQVRFRClcbjEyNTA6XHRcdFx0XHRjb250aW51ZTtcbjEyNTE6XHRcbjEyNTI6XHRcdFx0aWYgKHRjZl9hY3Rpb25fcHV0KGEpKVxuMTI1MzpcdFx0XHRcdG1vZHVsZV9wdXQob3BzLVx1MDAzZW93bmVyKTtcbjEyNTQ6XHRcdH1cbjEyNTU6XHR9XG4xMjU2Olx0XG4xMjU3Olx0aW50XG4xMjU4Olx0dGNmX2FjdGlvbl9kdW1wX29sZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLCBpbnQgYmluZCwgaW50IHJlZilcbjEyNTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBBY3Rpb24gRXhlY3V0aW9uIExvZ2ljKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBhY3Rpb25zIGFyZSBiZWluZyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbiDigJMgd2hlcmUgaXMgaXQgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoZSBzeXN0ZW0/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0JiMzOTtzIHRoZSByb2xlIG9mIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgaW4gdGhpcyB3aG9sZSBwcm9jZXNzPyBJIHN1c3BlY3QgdGhleSYjMzk7cmUgY2xvc2VseSByZWxhdGVkLCBtYXliZSBldmVuIHBhcnQgb2YgYSBsb29wIG9yIHNvbWUgaXRlcmF0aXZlIG9wZXJhdGlvbi4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHF1aWNrIGNvZGUgZGl2ZS4gTGV0JiMzOTtzIGZpcmUgdXAgYGdyZXBgIGFuZCBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBib3RoIG9mIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLiBUaGlzIHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgY2FsbCBzaXRlcyBmb3IgYHRjZl9hY3Rpb25fcHV0X21hbnlgIGFuZCBzaG93IG1lIHdoZXJlIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgaXMgYmVpbmcgdXRpbGl6ZWQsIGdpdmluZyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXppbmcgdGhlIGFjdGlvbiBleGVjdXRpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2FsbHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2FjdGlvbl9wdXRfbWFueSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0xMjE5PXN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEyMjQ6c3RhdGljIHZvaWQgdGNmX2FjdGlvbl9wdXRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjUte1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjAzMT10Y2FfYWN0aW9uX2dkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjA3NTpcdHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucyk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIHRoaXMgY29kZSwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZWZpbml0aW9uIG9mIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpdHMgc2lnbmF0dXJlLCBob3cgaXQmIzM5O3MgdXNlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgaXRzIHJvbGUgaXMgaW4gaXRlcmF0aW5nIHRocm91Z2ggYWN0aW9ucyB3aXRoaW4gdGhlIFRyYWZmaWMgQ29udHJvbCBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIGFjdGlvbnM7IGlzIGl0IGp1c3QgcHJvdmlkaW5nIGl0ZXJhdGlvbiwgb3IgaXMgaXQgcG90ZW50aWFsbHkgbWFuaXB1bGF0aW5nIHRoZW0gaW4gc29tZSB3YXk/CgpOZXh0LCBteSBmb2N1cyBzaGlmdHMgdG8gYHRjYV9hY3Rpb25fZ2RgLiBJIGhhdmUgdG8gY29ubmVjdCB0aGlzIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSBhIGhhbmRsZSwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgb3IgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGFjdGlvbi4gQ29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLCBgZ2RgIGxpa2VseSBtZWFucyAmIzM0O2dlbmVyaWMgZGF0YSYjMzQ7IG9yICYjMzQ7Z2xvYmFsIGRhdGEmIzM0OyBmb3IgYWN0aW9ucywgYW5kIEkgd2FudCB0byBjb25maXJtIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gaXQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBhY3Rpb25zIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgbG9vcC4gVGhlIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBmaWxlIGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlc2UgY3J1Y2lhbCBkZWZpbml0aW9ucyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVsYXRpb25zaGlwIHRob3JvdWdobHkgYmVmb3JlIEkgY2FuIGdvIGFueSBmdXJ0aGVyLiBJIGFsc28ga25vdyB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgb2YgdGhlIEFjdGlvbiBBUEkgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wa3RfY2xzLmg9Mjc5PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y2ZfZXh0c19wdXRfbmV0KHN0cnVjdCB0Y2ZfZXh0cyAqZXh0cylcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjk0LVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjI5NTojZGVmaW5lIHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIFxcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjk2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgKChhKSA9IGFjdGlvbnNbaV0pOyBpJiM0MzsmIzQzOylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWN0aW9uIEl0ZXJhdG9yIGluIFRyYWZmaWMgQ29udHJvbCoqCgpPa2F5LCBzbyBJIHdhcyBkaWdnaW5nIGludG8gdGhlIHRyYWZmaWMgY29udHJvbCBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gLiBJIG5vdGljZWQgc29tZXRoaW5nIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGluIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIGFjdGlvbnMuIFRoZSBtYWNybywgYCNkZWZpbmUgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucylgLCBjbGV2ZXJseSB1c2VzIGBhY3Rpb25zW2ldID09IE5VTExgIGFzIGl0cyB0ZXJtaW5hdGlvbiBjb25kaXRpb24uIEJ1dCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuCgpUaGUgaXNzdWUgYXJpc2VzIGR1cmluZyBiYXRjaCBhY3Rpb24gZGVsZXRpb24sIHdoZW4gYWN0aW9ucyBhcmUgc2V0IHRvIGBOVUxMYCBhZnRlciB0aGV5JiMzOTtyZSByZW1vdmVkIChlaXRoZXIgZHVyaW5nIG9yIGFmdGVyIHRoZSBkZWxldGlvbiBsb29wKS4gSWYgYW4gZXJyb3IgcG9wcyB1cCAqYmVmb3JlKiBhbGwgYWN0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoaXMgZGVsZXRpb24gcHJvY2VzcywgdGhlIGl0ZXJhdG9yIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgd2FzIHByZW1hdHVyZWx5IHN0b3BwaW5nIHdoZW4gaXQgaGl0IHRoYXQgZmlyc3QgYE5VTExgIHBvaW50ZXIuIFRoaXMgd291bGQgbGVhZCB0byBhIG1lbW9yeSBsZWFrIGJlY2F1c2UgdGhlIGFjdGlvbnMgKmFmdGVyKiB0aGF0IGBOVUxMYCBwb2ludGVyIHdlcmUgbmV2ZXIgZGUtcmVmZXJlbmNlZCBvciByZWxlYXNlZCEKClRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCBmcm9tIHRoZSBwYXRjaCwgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIGl0ZXJhdGlvbiBpbiBgdGNmX2FjdGlvbl9wdXRfbWFueWAgc28gdGhhdCBpdCBsb29wcyB0aHJvdWdoICphbGwqIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBlZmZlY3RpdmVseSBza2lwcGluZyBgTlVMTGAgZW50cmllcyAoYGlmICghYSkgY29udGludWU7YCkgcmF0aGVyIHRoYW4gYnJlYWtpbmcgdGhlIGxvb3AgYXQgdGhlIGZpcnN0IGBOVUxMYC4gVGhpcyB3YXksICpldmVyeSogYWN0aW9uIGdldHMgcHJvY2Vzc2VkLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcm1lZGlhdGUgYE5VTExgIHBvaW50ZXJzLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIHdvcmtzLCBJJiMzOTttIGdvaW5nIHRvIHJlYWQgdGhlIGNvZGUgb2YgYHRjYV9hY3Rpb25fZ2RgIGFyb3VuZCBsaW5lIDIwMzAsIHdoZXJlIHRoZSBiYXRjaCBkZWxldGlvbiBsb2dpYyB3b3VsZCBsaWtlbHkgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhY3Rpb25zIGFyZSBhY3R1YWxseSBoYW5kbGVkIGR1cmluZyB0aGlzIGRlbGV0aW9uIHByb2Nlc3MgdG8gc2VlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG9yaWdpbmFsIHByb2JsZW0gYW5kIHRoZSBudWFuY2VzIG9mIHRoZSBwcm9wb3NlZCBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDMwOlx0c3RhdGljIGludFxuMjAzMTpcdHRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcbjIwMzI6XHRcdCAgICAgIHUzMiBwb3J0aWQsIGludCBldmVudCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMjAzMzpcdHtcbjIwMzQ6XHRcdGludCBpLCByZXQ7XG4yMDM1Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfQUNUX01BWF9QUklPICYjNDM7IDFdO1xuMjAzNjpcdFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0O1xuMjAzNzpcdFx0c2l6ZV90IGF0dHJfc2l6ZSA9IDA7XG4yMDM4Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307XG4yMDM5Olx0XG4yMDQwOlx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9BQ1RfTUFYX1BSSU8sIG5sYSwgTlVMTCxcbjIwNDE6XHRcdFx0XHRcdFx0ICBleHRhY2spO1xuMjA0MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIwNDM6XHRcdFx0cmV0dXJuIHJldDtcbjIwNDQ6XHRcbjIwNDU6XHRcdGlmIChldmVudCA9PSBSVE1fREVMQUNUSU9OIFx1MDAyNlx1MDAyNiBuLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9ST09UKSB7XG4yMDQ2Olx0XHRcdGlmICh0YlsxXSlcbjIwNDc6XHRcdFx0XHRyZXR1cm4gdGNhX2FjdGlvbl9mbHVzaChuZXQsIHRiWzFdLCBuLCBwb3J0aWQsIGV4dGFjayk7XG4yMDQ4Olx0XG4yMDQ5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hpbGUgZmx1c2hpbmcgVEMgYWN0aW9uXCYjMzQ7KTtcbjIwNTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMDUxOlx0XHR9XG4yMDUyOlx0XG4yMDUzOlx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgdGJbaV07IGkmIzQzOyYjNDM7KSB7XG4yMDU0Olx0XHRcdGFjdCA9IHRjZl9hY3Rpb25fZ2V0XzEobmV0LCB0YltpXSwgbiwgcG9ydGlkLCBleHRhY2spO1xuMjA1NTpcdFx0XHRpZiAoSVNfRVJSKGFjdCkpIHtcbjIwNTY6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKGFjdCk7XG4yMDU3Olx0XHRcdFx0Z290byBlcnI7XG4yMDU4Olx0XHRcdH1cbjIwNTk6XHRcdFx0YXR0cl9zaXplICYjNDM7PSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xuMjA2MDpcdFx0XHRhY3Rpb25zW2kgLSAxXSA9IGFjdDtcbjIwNjE6XHRcdH1cbjIwNjI6XHRcbjIwNjM6XHRcdGF0dHJfc2l6ZSA9IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKGF0dHJfc2l6ZSk7XG4yMDY0Olx0XG4yMDY1Olx0XHRpZiAoZXZlbnQgPT0gUlRNX0dFVEFDVElPTilcbjIwNjY6XHRcdFx0cmV0ID0gdGNmX2dldF9ub3RpZnkobmV0LCBwb3J0aWQsIG4sIGFjdGlvbnMsIGF0dHJfc2l6ZSwgZXZlbnQsXG4yMDY3Olx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4yMDY4Olx0XHRlbHNlIHsgLyogZGVsZXRlICovXG4yMDY5Olx0XHRcdHJldCA9IHRjZl9kZWxfbm90aWZ5KG5ldCwgbiwgYWN0aW9ucywgcG9ydGlkLCBhdHRyX3NpemUsIGV4dGFjayk7XG4yMDcwOlx0XHRcdGlmIChyZXQpXG4yMDcxOlx0XHRcdFx0Z290byBlcnI7XG4yMDcyOlx0XHRcdHJldHVybiAwO1xuMjA3MzpcdFx0fVxuMjA3NDpcdGVycjpcbjIwNzU6XHRcdHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucyk7XG4yMDc2Olx0XHRyZXR1cm4gcmV0O1xuMjA3NzpcdH1cbjIwNzg6XHRcbjIwNzk6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRjZl9hZGRfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcbjIwODA6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXG4yMDgxOlx0XHRcdFx0XHRcdCAgdTMyIHBvcnRpZCwgc2l6ZV90IGF0dHJfc2l6ZSxcbjIwODI6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMDgzOlx0e1xuMjA4NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjIwODU6XHRcbjIwODY6XHRcdHNrYiA9IGFsbG9jX3NrYihtYXgoYXR0cl9zaXplLCBOTE1TR19HT09EU0laRSksIEdGUF9LRVJORUwpO1xuMjA4NzpcdFx0aWYgKCFza2IpXG4yMDg4Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTtcbjIwODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB0Y2ZfZGVsX25vdGlmeWAgYW5kIGl0cyBJbXBhY3Qgb24gYGFjdGlvbnNbXWAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUgYHRjZl9kZWxfbm90aWZ5YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYGFjdGlvbnNbXWAgYXJyYXkuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBgYWN0aW9uc1tdYCBhcnJheSBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgaG93IHRyYWZmaWMgY29udHJvbCBwb2xpY2llcyBhcmUgZW5mb3JjZWQsIGFuZCBkZWxldGluZyBhIHJ1bGUsIG9yIG1vZGlmeWluZyBhbiBleGlzdGluZyBvbmUgdmlhIHRoZSBmdW5jdGlvbiBiZWluZyBleHBsb3JlZCBoYXMgdG8gaGF2ZSBzcGVjaWZpYyBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgYHRjZl9kZWxfbm90aWZ5YCBtb2RpZmllcyB0aG9zZSBhcnJheSBlbnRyaWVzLiBEb2VzIGl0IHNpbXBseSBjbGVhciB0aGVtPyBEb2VzIGl0IHJlb3JkZXIgdGhlbT8gRG9lcyBpdCBjb21wbGV0ZWx5IHJlbW92ZSB0aGVtPyBEb2VzIGl0IGRvIGEgY29tYmluYXRpb24gb2YgYWxsIG9mIHRoZSBhYm92ZSwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBUaGUgcHJlY2lzZSBtZWNoYW5pY3Mgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgcGFyYW1vdW50IHRvIGRldGVybWluaW5nIGhvdyBydWxlIHJlbW92YWwvbW9kaWZpY2F0aW9uIGlzIGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gYWx0ZXJzIGBhY3Rpb25zW11gIGlzIGdvaW5nIHRvIGJlIGtleSB0byBncmFzcGluZyBpdHMgb3ZlcmFsbCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBvZiB0aGF0IGFycmF5LCBhbmQgdGhlIHBvaW50ZXJzIGl0IGNvbnRhaW5zLCB0byBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZSBkZWxldGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0xOTIzPWludCB0Y2ZfYWN0aW9uX3Jlb2ZmbG9hZF9jYihmbG93X2luZHJfYmxvY2tfYmluZF9jYl90ICpjYixcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE5ODAtXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE5ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE5ODItXHRcdFx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAwMjpzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDAzLVx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLCB1MzIgcG9ydGlkLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMS1cdH0gZWxzZSB7XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwMTI6XHRcdHNrYiA9IHRjZl9kZWxfbm90aWZ5X21zZyhuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDEzLVx0XHRcdFx0XHQgZXh0YWNrKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA2OC1cdGVsc2UgeyAvKiBkZWxldGUgKi9cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjA2OTpcdFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA3MC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTk4MC0yMDI5IG9mIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4gVGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLi4uIHJpZ2h0LCBpdCYjMzk7cyBhYm91dCB0aGUgYWN0aW9uIG1vZHVsZSBBUEksIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3MgaGVyZS4gT2theSwgKnNjcm9sbGluZy4uLiogIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKKipGb2N1c2luZyBvbiB0aGUgQWN0aW9uIE1vZHVsZSBBUEkgU2VjdGlvbioqCgpSaWdodCwgbGluZXMgMTk4MC0yMDI5LiAgTXkgaW5pdGlhbCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBsaWtlbHkgY292ZXJzIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb25zIGZvciBhY3Rpb24gbW9kdWxlcywgYWxvbmcgd2l0aCByZWxhdGVkIHN0cnVjdHVyZXMgb3IgZGF0YS4gV2Ugd2lsbCBmb2N1cyBzcGVjaWZpY2FsbHkgb246IGhvdyB0aGUga2VybmVsIHJlZ2lzdGVycywgdW5yZWdpc3RlcnMgYW5kIGhhbmRsZXMgdGhlIGFjdGlvbnMuICBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gKlJlYWRpbmcuLi4qIEFoLCB0aGVyZSYjMzk7cyBgYWN0X3JlZ2lzdGVyKClgLiBZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBUaGUgYGFjdF91bnJlZ2lzdGVyKClgIGZ1bmN0aW9uIHNob3VsZCBiZSBjbG9zZS4KCkkgYmV0IHdlIGhhdmUgc29tZSBjcml0aWNhbCBzdHJ1Y3R1cmVzIGRlZmluZWQgYXJvdW5kIHRoaXM6IHByb2JhYmx5IHNvbWUgc29ydCBvZiBgc3RydWN0IGFjdF9vcHNgLCBvciBzb21ldGhpbmcgc2ltaWxhciwgZm9yIGRlZmluaW5nIHRoZSBvcGVyYXRpb25zIHRoYXQgYW4gYWN0aW9uIG1vZHVsZSBuZWVkcyB0byBpbXBsZW1lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgYSB3YXkgdGhlIGFjdGlvbiBmcmFtZXdvcmsga25vd3MgYWJvdXQgdGhlIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBmcm9tIHRoZSBzcGVjaWZpYyBhY3Rpb24gbW9kdWxlcy4KCipSZWFkaW5nIGNsb3NlbHkuLi4qIE9rYXksIGxvb2tzIGxpa2UgaXQgcHJvYmFibHkgaGFuZGxlcyByZWdpc3RyYXRpb24uIGBhY3RfcmVnaXN0ZXIoKWAgY2VydGFpbmx5IGxvb2tzIHRvIGJlIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIGBhY3RfdW5yZWdpc3RlcigpYCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuIE5vdywgSSB3YW50IHRvIGZpbmQgdGhlIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgdGhlIGFjdGlvbnMgdGhlbXNlbHZlczsgdGhlIHJlZ2lzdHJhdGlvbiBBUEkgaXMgZ29pbmcgdG8gbmVlZCBhIHdheSB0byBrbm93IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBhY3Rpb24uIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBnbHVlIGJldHdlZW4gdGhlIGFjdGlvbiBtb2R1bGVzIGFuZCB0aGUgdGMgZnJhbWV3b3JrLiBJIGJldCB0aGVyZSBhcmUgc29tZSBjYWxsYmFja3MgaW52b2x2ZWQuCgoqRGl2aW5nIGRlZXBlci4uLiogWWVwLCB0aGVyZSBpdCBpcyEgYHN0cnVjdCBhY3Rfb3BzYC4gSSB3YXMgcmlnaHQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuIFRoaXMgbGlrZWx5IGluY2x1ZGVzIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgbGlrZSBgdGNmX2FjdGlvbl9leGVjKClgLCBhbmQgb3RoZXIgY3J1Y2lhbCBhY3Rpb24tc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlc2Ugc3RydWN0IGVsZW1lbnRzIGNsb3NlbHkgdG8gc2VlIGV4YWN0bHkgd2hhdCBwYXJhbWV0ZXJzIHRoZXkgcmVxdWlyZSBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQuICBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgYWN0aW9uIG1vZHVsZSBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGZyYW1ld29yayBoYW5kbGVzIHRoZSBtb2R1bGVzISBPa2F5LCBnb29kISBJIGNhbiBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzIGFuZCBwb3RlbnRpYWwgdHJhcHMgZm9yIG1vZHVsZSBpbXBsZW1lbnRhdGlvbnMgYW5kIHRoZWlyIGxpZmVjeWNsZSwgYW5kIHdpbGwga2VlcCB0aGF0IGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4MDpcdFxuMTk4MTpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxuMTk4MjpcdFx0XHRcdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcbjE5ODM6XHRcdFx0XHRcdFx0ICB1MzIgcG9ydGlkLCBzaXplX3QgYXR0cl9zaXplLFxuMTk4NDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE5ODU6XHR7XG4xOTg2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTk4NzpcdFxuMTk4ODpcdFx0c2tiID0gYWxsb2Nfc2tiKG1heChhdHRyX3NpemUsIE5MTVNHX0dPT0RTSVpFKSwgR0ZQX0tFUk5FTCk7XG4xOTg5Olx0XHRpZiAoIXNrYilcbjE5OTA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0JVRlMpO1xuMTk5MTpcdFxuMTk5MjpcdFx0aWYgKHRjYV9nZXRfZmlsbChza2IsIGFjdGlvbnMsIHBvcnRpZCwgbi1cdTAwM2VubG1zZ19zZXEsIDAsIFJUTV9ERUxBQ1RJT04sXG4xOTkzOlx0XHRcdFx0IDAsIDIsIGV4dGFjaykgXHUwMDNjPSAwKSB7XG4xOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGZpbGwgbmV0bGluayBUQyBhY3Rpb24gYXR0cmlidXRlc1wmIzM0Oyk7XG4xOTk1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTk5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbjE5OTc6XHRcdH1cbjE5OTg6XHRcbjE5OTk6XHRcdHJldHVybiBza2I7XG4yMDAwOlx0fVxuMjAwMTpcdFxuMjAwMjpcdHN0YXRpYyBpbnQgdGNmX2RlbF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMDAzOlx0XHRcdFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIHUzMiBwb3J0aWQsXG4yMDA0Olx0XHRcdFx0ICBzaXplX3QgYXR0cl9zaXplLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMDA1Olx0e1xuMjAwNjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjIwMDc6XHRcdGludCByZXQ7XG4yMDA4Olx0XG4yMDA5Olx0XHRpZiAoIXJ0bmxfbm90aWZ5X25lZWRlZChuZXQsIG4tXHUwMDNlbmxtc2dfZmxhZ3MsIFJUTkxHUlBfVEMpKSB7XG4yMDEwOlx0XHRcdHNrYiA9IE5VTEw7XG4yMDExOlx0XHR9IGVsc2Uge1xuMjAxMjpcdFx0XHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcbjIwMTM6XHRcdFx0XHRcdFx0IGV4dGFjayk7XG4yMDE0Olx0XHRcdGlmIChJU19FUlIoc2tiKSlcbjIwMTU6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihza2IpO1xuMjAxNjpcdFx0fVxuMjAxNzpcdFxuMjAxODpcdFx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cbjIwMTk6XHRcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIERlbGV0aW9uIExvZ2ljKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIGNhbGxpbmcgZm9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIHN0YXJ0cyB0byBhc3NlbWJsZS4gVGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0mIzM5O3MgbGlmZWN5Y2xlIOKAkyBhIGRlbGV0aW9uIGFjdGlvbiByZWxhdGVkIHRvLCBsaWtlbHksIGEgdHJhbnNhY3Rpb24gY29udHJvbCBmcmFtZXdvcmsgKFRDRiksIGdpdmVuIHRoZSBwcmVmaXguIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGV4YWN0bHkgaXMgYmVpbmcgZGVsZXRlZD8gQSByZWNvcmQ/IEFuIG9iamVjdD8gQW4gZW50aXJlIGRhdGEgc3RydWN0dXJlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZGVsZXRpb24/IEFyZSB0aGVyZSBjYXNjYWRpbmcgZWZmZWN0cyB0byBjb25zaWRlcj8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gbWFuYWdlPyBJcyB0aGlzIGRlbGV0aW9uIHVzZXIgaW5pdGlhdGVkLCBvciBhdXRvbWF0aWM/IFdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZD8gTW9yZSBpbXBvcnRhbnRseSwgaXMgZGF0YSBpbnRlZ3JpdHkgYXQgcmlzaywgYW5kIGlzIHRoZXJlIGFueSByb2xsYmFjayBvciByZWNvdmVyeSBpbXBsZW1lbnRlZD8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0IGFuZCBwdXJwb3NlIG9mIHRoaXMgYWN0aW9uIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgdGhpcyBpcyBiZWluZyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0xNzY3PXN0YXRpYyBpbnQgdGNhX2FjdGlvbl9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE4NDItXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE4NDM6c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg0NC17XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDAyPXN0YXRpYyBpbnQgdGNmX2RlbF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDE4LVx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxOTpcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMjAtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHRjZl9hY3Rpb25fZGVsZXRlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgMTg0My4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbiAtIGRlbGV0ZSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIHN5c3RlbSBhcmUgYWx3YXlzIGNyaXRpY2FsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBtYW5pcHVsYXRlPyBJ4oCZbSBpbW1lZGlhdGVseSBnb2luZyB0byBsb29rIGZvciBhbnkgb2J2aW91cyByYWNlIGNvbmRpdGlvbnMsIGxvY2tzLCBvciBwb3RlbnRpYWwgZm9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXMgb2Z0ZW4gd2hlcmUgc3VidGxlIGJ1dCBkZXZhc3RhdGluZyBidWdzIHJlc2lkZSwgc28gdGhhdOKAmXMgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgaW5pdGlhbCBhbmFseXNpcy4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZywgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gc29tZSBmb3JtIG9mICYjMzQ7dHJhbnNpZW50IGNhY2hlIGZpbGUmIzM0OywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYW5kIHRoZSBzY29wZSBvZiBpdHMgZGVsZXRlIG9wZXJhdGlvbnMuIE5vdywgbGV04oCZcyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F54oCmCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0MDpcdFx0cmV0dXJuIGVycjtcbjE4NDE6XHR9XG4xODQyOlx0XG4xODQzOlx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcbjE4NDQ6XHR7XG4xODQ1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xuMTg0NjpcdFx0aW50IGk7XG4xODQ3Olx0XG4xODQ4Olx0XHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XG4xODQ5Olx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVx1MDAzZW9wcztcbjE4NTA6XHRcdFx0LyogQWN0aW9ucyBjYW4gYmUgZGVsZXRlZCBjb25jdXJyZW50bHkgc28gd2UgbXVzdCBzYXZlIHRoZWlyXG4xODUxOlx0XHRcdCAqIHR5cGUgYW5kIGlkIHRvIHNlYXJjaCBhZ2FpbiBhZnRlciByZWZlcmVuY2UgaXMgcmVsZWFzZWQuXG4xODUyOlx0XHRcdCAqL1xuMTg1MzpcdFx0XHRzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8gPSBhLVx1MDAzZWlkcmluZm87XG4xODU0Olx0XHRcdHUzMiBhY3RfaW5kZXggPSBhLVx1MDAzZXRjZmFfaW5kZXg7XG4xODU1Olx0XG4xODU2Olx0XHRcdGFjdGlvbnNbaV0gPSBOVUxMO1xuMTg1NzpcdFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpIHtcbjE4NTg6XHRcdFx0XHQvKiBsYXN0IHJlZmVyZW5jZSwgYWN0aW9uIHdhcyBkZWxldGVkIGNvbmN1cnJlbnRseSAqL1xuMTg1OTpcdFx0XHRcdG1vZHVsZV9wdXQob3BzLVx1MDAzZW93bmVyKTtcbjE4NjA6XHRcdFx0fSBlbHNlIHtcbjE4NjE6XHRcdFx0XHRpbnQgcmV0O1xuMTg2MjpcdFxuMTg2MzpcdFx0XHRcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXG4xODY0Olx0XHRcdFx0cmV0ID0gdGNmX2lkcl9kZWxldGVfaW5kZXgoaWRyaW5mbywgYWN0X2luZGV4KTtcbjE4NjU6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTg2NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjE4Njc6XHRcdFx0fVxuMTg2ODpcdFx0fVxuMTg2OTpcdFx0cmV0dXJuIDA7XG4xODcwOlx0fVxuMTg3MTpcdFxuMTg3MjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3Jlb2ZmbG9hZF9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsXG4xODczOlx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbilcbjE4NzQ6XHR7XG4xODc1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xuMTg3NjpcdFx0XHRbMF0gPSBhY3Rpb24sXG4xODc3Olx0XHR9O1xuMTg3ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE4Nzk6XHRcdHNpemVfdCBhdHRyX3NpemU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYSBUcmFmZmljIENvbnRyb2wgQWN0aW9uIERlbGV0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQuIEl0IHNlZW1zIGxpa2UgdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24sIGFzIGl0IHByb2Nlc3NlcyBlYWNoIGFjdGlvbiwgc2V0cyBgYWN0aW9uc1tpXWAgdG8gYE5VTExgLiBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiBgdGNmX2lkcl9kZWxldGVfaW5kZXhgIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSwgaW5kaWNhdGluZyBhIGZhaWx1cmUuIEluIHRoYXQgY2FzZSwgYHRjZl9hY3Rpb25fZGVsZXRlYCBhbHNvIHJldHVybnMgYW4gZXJyb3IgKGByZXQgJmx0OyAwYCkuIE5vdywgdGhlIGNvZGUgdGhlbiBoaXRzIGBlcnI6IHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucylgLiBUaGUgb2xkIHZlcnNpb24gb2YgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHVzZWQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCwgd2hpY2ggd291bGQgY2hlY2sgYCgoYSkgPSBhY3Rpb25zW2ldKWAgYW5kIGltbWVkaWF0ZWx5IGJyZWFrIGlmIGl0IGVuY291bnRlcmVkIGEgYE5VTExgIHBvaW50ZXIuIEJlY2F1c2UgYGFjdGlvbnNbaV1gIGhhZCBhbHJlYWR5IGJlZW4gc2V0IHRvIGBOVUxMYCBmb3IgdGhlIGZhaWxpbmcgYWN0aW9uIChvciBldmVuIGFjdGlvbnMgdGhhdCBmYWlsZWQgcHJldmlvdXNseSksIHRoaXMgY2F1c2VkIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgdG8gYmFpbCBvdXQgcHJlbWF0dXJlbHkuIEVzc2VudGlhbGx5LCBpdCB3b3VsZCBzdG9wIGF0IGluZGV4IDAgKG9yIHdoaWNoZXZlciBpbmRleCB3YXMgYE5VTExgKSwgbGVhdmluZyBzdWJzZXF1ZW50IGFjdGlvbnMgaW4gdGhlIGBhY3Rpb25zYCBhcnJheSB1bnRvdWNoZWQsIHJlc3VsdGluZyBpbiBhIG1lbW9yeSBsZWFrLiBOb3csIEkgc2VlIHRoZSBmaXggaXMgdGhhdCBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgY2hhbmdlZCB0byBsb29wIHRocm91Z2ggYWxsIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBwdXR0aW5nIGFueSBub24tYE5VTExgIGFjdGlvbiBwb2ludGVycyBpdCBmaW5kcy4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIGlmIHRoaXMgbWVyaXRzIGZ1enppbmc6CgoxLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBidWcgcmVzaWRlcyBpbiB0cmFmZmljIGNvbnRyb2wvcGFja2V0IHNjaGVkdWxpbmcgY29kZSAoYG5ldC9zY2hlZC9hY3RfYXBpLmNgKSwgd2hpY2ggaXMgY29yZSB0byB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgaXMgcHJpbWUgcmVhbC1lc3RhdGUgZm9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCjIuICAqKkFjY2VzczoqKiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChgUlRNX0RFTEFDVElPTmAsIGBydG5ldGxpbmtgLCBhbmQgYE5FVExJTktfUk9VVEVgKSwgd2hpY2ggaXMgc29tZXRoaW5nIFN5emthbGxlciBoYXMgYmVlbiBoYW1tZXJpbmcgb24gZm9yIHNvbWUgdGltZS4KMy4gICoqRXhlY3V0aW9uOioqIEkgY2FuIGRlZmluaXRlbHkgZ2V0IHRoaXMgcnVubmluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWwgbWFjaGluZSAobGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSkgd2l0aCBhIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBhIG5ldGxpbmsgc29ja2V0LCBtYWtpbmcgaXQgZWFzeSB0byB0ZXN0LgoKQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgSSB3YW50IHRvIGZ1enouIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBUaW1lIHRvIHNlYXJjaCBmb3IgYGFjdF9hcGlgIHdpdGhpbiBgbmV0L3NjaGVkL01ha2VmaWxlYCBvciBgbmV0L3NjaGVkL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfYXBpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX05FVF9DTFMpXHRcdCYjNDM7PSBjbHNfYXBpLm9cbm5ldC9zY2hlZC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkVUX0NMU19BQ1QpXHQmIzQzOz0gYWN0X2FwaS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX05FVF9BQ1RfUE9MSUNFKVx0JiM0Mzs9IGFjdF9wb2xpY2Uub1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMi0vKlxubmV0L3NjaGVkL2FjdF9hcGkuYzozOiAqIG5ldC9zY2hlZC9hY3RfYXBpLmNcdFBhY2tldCBhY3Rpb24gQVBJLlxubmV0L3NjaGVkL2FjdF9hcGkuYy00LSAqXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3BlZGl0LmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjM6I2luY2x1ZGUgXHUwMDNjbmV0L2FjdF9hcGkuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jOjE5OiNpbmNsdWRlIFx1MDAzY25ldC9hY3RfYXBpLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfY29ubm1hcmsuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jc3VtLmMtMjktXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzozMDojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy0zMS0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2FjdF9jdC5jLTIzLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjUtI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9jdGluZm8uYzoxNzojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X2N0aW5mby5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjEzOiNpbmNsdWRlIFx1MDAzY25ldC9hY3RfYXBpLmhcdTAwM2Vcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE0LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X25hdC5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjX2FjdC90Y19uYXQuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9uYXQuYzoxOTojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X25hdC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYzoxODojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvYWN0X3BvbGljZS5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9nc28uaFx1MDAzZVxuLS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0xOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0bGluay5oXHUwMDNlXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L2FjdF9hcGkuaFx1MDAzZVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2Vcbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmMtMjAtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3NjaGVkL2Nsc19mdy5jOjIxOiNpbmNsdWRlIFx1MDAzY25ldC9hY3RfYXBpLmhcdTAwM2Vcbm5ldC9zY2hlZC9jbHNfZncuYy0yMi0jaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2Vcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzoxODojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMTktI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMzgtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGxpbmsuaFx1MDAzZVxubmV0L3NjaGVkL2Nsc191MzIuYzozOTojaW5jbHVkZSBcdTAwM2NuZXQvYWN0X2FwaS5oXHUwMDNlXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTQwLSNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNzkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBORVRfQ0xTX0FDVGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gc3BvdCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmFyaW91cyBuZXR3b3JrIHNjaGVkdWxlciBvcHRpb25zIGFyZSBjb250cm9sbGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGNsZWFyIGRlZmluaXRpb24gdGhlcmUsIGhvcGVmdWxseSB3aXRoIHRoZSB1c3VhbCBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHNwZWxsIG91dCB0aGUgcHJlcmVxdWlzaXRlcy4gSSYjMzk7bSByZWFsbHkgY3VyaW91cyB0byBzZWUgd2hpY2ggZmVhdHVyZXMgb3IgdW5kZXJseWluZyBzdWJzeXN0ZW1zICptdXN0KiBiZSBlbmFibGVkIGJlZm9yZSBgTkVUX0NMU19BQ1RgIGJlY29tZXMgYXZhaWxhYmxlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHJlbGF0aW9uc2hpcHMgaXMgY3JpdGljYWwgZm9yIHByb3BlciBrZXJuZWwgY29uZmlndXJhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGN1c3RvbWl6aW5nIHRoZSBuZXR3b3JrIHN0YWNrIGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIG5lZWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTY5MD1jb25maWcgTkVUX0VNQVRDSF9JUFRcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXG5uZXQvc2NoZWQvS2NvbmZpZzo3MDI6Y29uZmlnIE5FVF9DTFNfQUNUXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXHRib29sIFwmIzM0O0FjdGlvbnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBUcmFmZmljIENvbnRyb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3NjaGVkL0tjb25maWdgLiBMaW5lIDcwMi4uLiB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBzcGVjaWZpYyBmZWF0dXJlIG9yIG9wdGlvbiBiZWdpbnMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBzY2hlZHVsaW5nIGRpc2NpcGxpbmVzIGFuZCBxdWV1aW5nIGFsZ29yaXRobXMuIEkmIzM5O2xsIGV4cGVjdCB0byBmaW5kIHRoZSB0eXBpY2FsIGBjb25maWdgIGJsb2NrcywgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFuZCBtYXliZSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMgaW5mbHVlbmNpbmcgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLiBEZXBlbmRpbmcgb24gd2hhdCBJIHNlZSB0aGVyZSBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggb3RoZXIgcmVsYXRlZCBmaWxlcywgbGlrZSB0aGUgaGVhZGVyIGZpbGVzLiBJJiMzOTttIGludGVyZXN0ZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBjZXJ0YWluIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnksIGFuZCBob3cgdGhlIGtlcm5lbCBpcyBzZXQgdXAgb3ZlcmFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0XHQgIG1hdGNoZXMuXG4gNjk2Olx0XHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFwmIzM0O3BvbGljeVwmIzM0OyB3aGljaCBhbGxvd3MgcGFja2V0IGNsYXNzaWZpY2F0aW9uXG4gNjk3Olx0XHQgIGJhc2VkIG9uIElQc2VjIHBvbGljeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBkZWNhcHN1bGF0aW9uXG4gNjk4Olx0XG4gNjk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4gNzE1Olx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXG4gNzE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFmZmljIFBvbGljaW5nXCYjMzQ7XG4gNzE3Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gNzE4Olx0XHRoZWxwXG4gNzE5Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZG8gdHJhZmZpYyBwb2xpY2luZywgaS5lLiBzdHJpY3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5FVF9DTFNfQUNUIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgTkVUX0NMU19BQ1RgIGlzIGFwcGFyZW50bHkgZGVmaW5lZCB3aXRoaW4gYG5ldC9zY2hlZC9LY29uZmlnYC4gVGltZSB0byBjb25maXJtIHRoYXQgYW5kIHVuZGVyc3RhbmQgaXRzIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHRvcC1sZXZlbCBkZXBlbmRlbmN5IGZvciBgbmV0L3NjaGVkL0tjb25maWdgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgYnVpbGQuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY3ksIGxpa2VseSBpbiB0aGUgYG1lbnVjb25maWcgTkVUX1NDSEVEYCBibG9jay4gTm93LCBJIHNob3VsZCBleGFtaW5lIHRoZSBiZWdpbm5pbmcgb2YgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGZpcnN0IDQwIGxpbmVzLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBpbml0aWFsIG92ZXJ2aWV3IGFuZCBhbnkgaW50cm9kdWN0b3J5IGNvbW1lbnRzIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgYE5FVF9DTFNfQUNUYCBpcyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdGVsbHMgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBORVRfU0NIRURcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTkVUX1NDSF9GSUZPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXG4gIDExOlx0XHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cbiAgMTI6XHRcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcbiAgMTM6XHRcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXG4gIDE0Olx0XHQgIFwmIzM0O2ZhaXJseVwmIzM0OyBoYXZlIGJlZW4gcHJvcG9zZWQuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXG4gIDE3Olx0XHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXG4gIDE4Olx0XHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxuICAxOTpcdFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxuICAyMDpcdFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcbiAgMjE6XHRcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXG4gIDIyOlx0XHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXG4gIDIzOlx0XHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cbiAgMjQ6XHRcbiAgMjU6XHRcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UmIzM5O2xsIG5lZWQgdGhlIHVzZXItbGV2ZWwgdXRpbGl0aWVzXG4gIDI2Olx0XHQgIGZyb20gdGhlIHBhY2thZ2UgaXByb3V0ZTImIzQzO3RjIGF0XG4gIDI3Olx0XHQgIFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi9cdTAwM2UuICBUaGF0IHBhY2thZ2VcbiAgMjg6XHRcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcbiAgMjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlx1MDAzZS5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXG4gIDMyOlx0XHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXG4gIDMzOlx0XHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xuICAzNDpcdFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly9kaWZmc2Vydi5zb3VyY2Vmb3JnZS5uZXQvXHUwMDNlLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgdG8gXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW1cJiMzNDsgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcbiAgMzg6XHRcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxuICAzOTpcdFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAxNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbmV0d29ya2luZyBjb25maWd1cmF0aW9uLgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY29uZmlybSB0aGUgc3RhdHVzIG9mIGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19BQ1RgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkmIzM5O3JlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgZXhwZWN0ZWQsIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGN1cnJlbnQgc2V0dGluZ3MuIEJ1dCB0aGF0JiMzOTtzIG5vdCBlbm91Z2gg4oCTIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIGBORVRfU0NIRURgIHRvIGV2ZW4gYmUgKmF2YWlsYWJsZSogaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UuKm5ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTI2OT1zb3VyY2UgXCYjMzQ7bmV0L21hYzgwMjE1NC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNzA6c291cmNlIFwmIzM0O25ldC9zY2hlZC9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNzEtc291cmNlIFwmIzM0O25ldC9kY2IvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI5MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWcqKgoKT2theSwgc28gSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nLCBhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4gSW5zdGVhZCBvZiBibGluZGx5IGdyZXBwaW5nLCBsZXQmIzM5O3MgdGFrZSBhIHRhcmdldGVkIGFwcHJvYWNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgbmV0L0tjb25maWdgIGFyb3VuZCBsaW5lIDI3MC4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aC4uLiB3ZWxsLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlIGFuZCBnZW5lcmFsIGtub3dsZWRnZSBvZiB0aGUgcHJvamVjdCYjMzk7cyBzdHJ1Y3R1cmUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIHRoYXQgcmVsYXRlIHRvIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBvciBzb21lIGFzcGVjdCBvZiBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLiBJdCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gYSBkcml2ZXImIzM5O3MgZW5hYmxlbWVudC4gVGltZSB0byBnbyBodW50aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG4gMjYxOlx0c291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xuIDI2MjpcdHNvdXJjZSBcJiMzNDtuZXQvODAyMXEvS2NvbmZpZ1wmIzM0O1xuIDI2MzpcdHNvdXJjZSBcJiMzNDtuZXQvbGxjL0tjb25maWdcJiMzNDtcbiAyNjQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3gyNS9LY29uZmlnXCYjMzQ7XG4gMjY1Olx0c291cmNlIFwmIzM0O25ldC9sYXBiL0tjb25maWdcJiMzNDtcbiAyNjY6XHRzb3VyY2UgXCYjMzQ7bmV0L3Bob25ldC9LY29uZmlnXCYjMzQ7XG4gMjY3Olx0c291cmNlIFwmIzM0O25ldC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAyNjg6XHRzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuIDI2OTpcdHNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbiAyNzA6XHRzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbiAyNzE6XHRzb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG4gMjcyOlx0c291cmNlIFwmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wmIzM0O1xuIDI3MzpcdHNvdXJjZSBcJiMzNDtuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCYjMzQ7XG4gMjc0Olx0c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG4gMjc1Olx0c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xuIDI3NjpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG4gMjc3Olx0c291cmNlIFwmIzM0O25ldC9tcGxzL0tjb25maWdcJiMzNDtcbiAyNzg6XHRzb3VyY2UgXCYjMzQ7bmV0L25zaC9LY29uZmlnXCYjMzQ7XG4gMjc5Olx0c291cmNlIFwmIzM0O25ldC9oc3IvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXR3b3JrIFNjaGVkdWxpbmcgYW5kIEFjdGlvbiBEZWxldGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGtleXdvcmRzIGp1bXAgb3V0OiBgTkVUX1NDSEVEYCwgYE5FVF9DTFNfQUNUYCwgYW5kIG9mIGNvdXJzZSwganVzdCBgTkVUYCDigJMgc3RhbmRhcmQgbmV0d29ya2luZyBzdHVmZi4gUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayBzY2hlZHVsaW5nIGFuZCBjbGFzcyBhY3Rpb25zLCBzcGVjaWZpY2FsbHkuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hhdCYjMzk7cyBhZmZlY3RlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBIbW0sIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFsdGVyZWQgaXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBJbnRlcmVzdGluZy4KCk15IGFwcHJvYWNoIGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHRjZl9hY3Rpb25fcHV0X21hbnlgLCBpcyB1c2VkLiBMZXQmIzM5O3Mgc2VlIHRoZSBjYWxsZXJzIG9mIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBhbmQgd2hhdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGUgJiMzNDt0YyBhY3Rpb24gZGVsZXRlL2dldCBiYXRjaCBvcGVyYXRpb25zJiMzNDsgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4KClNwZWNpZmljYWxseSwgaGVyZSYjMzk7cyB3aGF0IHNlZW1zIGRpcmVjdGx5IHJlbGV2YW50OgoqICAgYHRjZl9hY3Rpb25fcHV0X21hbnlgIOKAkyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXRzZWxmLgoqICAgYHRjYV9hY3Rpb25fZ2RgIOKAkyB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IHRoYXQgY2FsbHMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFsbCBjb21pbmcgZnJvbS4KKiAgIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAg4oCTIExvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIGxvb3AgdGhhdCBjbGVhcnMgYWN0aW9uIGVudHJpZXMuCiogICBgdGNmX2RlbF9ub3RpZnlgIOKAkyBUaGlzIGNhbGxzIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAsIHNvIGRlbGV0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZCBoZXJlLgoqICAgYHRjX2N0bF9hY3Rpb25gIOKAkyBUaGlzIG9uZSBoYW5kbGVzIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGZvciBhY3Rpb24gcmVxdWVzdHMgKFJUTVxfTkVXQUNUSU9OLCBSVE1cX0RFTEFDVElPTiwgUlRNXF9HRVRBQ1RJT04pLiBUaGUgc3RhbmRhcmQgQ1JVRCBvcGVyYXRpb25zLgoKU28sIG5leHQgSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGB0Y2FfYWN0aW9uX2dkYCBhbmQgYHRjX2N0bF9hY3Rpb25gLCBhbmQgdHJhY2UgdGhlaXIgcmVzcGVjdGl2ZSBjYWxsZXJzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGZsb3cgb2YgYWN0aW9uIGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIGFuZCBkZWxldGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNfY3RsX2FjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYz0yMTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB0Y2FhX3BvbGljeVtUQ0FfUk9PVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTUxLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMTUyOnN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIxNTMtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIzMTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2FjdGlvbl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMzE1Olx0ey5tc2d0eXBlID0gUlRNX05FV0FDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjMxNjpcdHsubXNndHlwZSA9IFJUTV9ERUxBQ1RJT04sIC5kb2l0ID0gdGNfY3RsX2FjdGlvbn0sXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTc6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUQUNUSU9OLCAuZG9pdCA9IHRjX2N0bF9hY3Rpb24sXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIzMTgtXHQgLmR1bXBpdCA9IHRjX2R1bXBfYWN0aW9ufSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGNfY3RsX2FjdGlvbmAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHRjX2N0bF9hY3Rpb25gIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3RhY2sgaXMgZnVuY3Rpb25pbmcuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWN0aW9uIGlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgcGFyYW1ldGVycyBpdCYjMzk7cyByZWx5aW5nIG9uLCBzcGVjaWZpY2FsbHkuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGNvbnRyb2wgZmxvdyDigJMgZW5zdXJlIGl0IGhhbmRsZXMgdmFyaW91cyBjb25kaXRpb25zIHJvYnVzdGx5IGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBsdXJraW5nIGluIHRoZXJlLiBJdCYjMzk7cyBhbHNvIGltcG9ydGFudCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdCwgYXJlIHdlIG9wdGltaXppbmcgZm9yIHRoZSBleHBlY3RlZCB1c2UgY2FzZT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgZW50cnkgcG9pbnRzIGFuZCB3b3JrIG15IHdheSB0aHJvdWdoIHRoZSBjb3JlIGxvZ2ljLCB0YWtpbmcgZGV0YWlsZWQgbm90ZXMgYW5kIHBvc3NpYmx5IHNldHRpbmcgdXAgc29tZSBxdWljayB0ZXN0cyB0byB2YWxpZGF0ZSB0aGUgYXNzdW1wdGlvbnMgSSYjMzk7bSBtYWtpbmcgYWJvdXQgaXRzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNTA6XHR9O1xuMjE1MTpcdFxuMjE1MjpcdHN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMTUzOlx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIxNTQ6XHR7XG4yMTU1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjE1NjpcdFx0c3RydWN0IG5sYXR0ciAqdGNhW1RDQV9ST09UX01BWCAmIzQzOyAxXTtcbjIxNTc6XHRcdHUzMiBwb3J0aWQgPSBORVRMSU5LX0NCKHNrYikucG9ydGlkO1xuMjE1ODpcdFx0dTMyIGZsYWdzID0gMDtcbjIxNTk6XHRcdGludCByZXQgPSAwO1xuMjE2MDpcdFxuMjE2MTpcdFx0aWYgKChuLVx1MDAzZW5sbXNnX3R5cGUgIT0gUlRNX0dFVEFDVElPTikgXHUwMDI2XHUwMDI2XG4yMTYyOlx0XHQgICAgIW5ldGxpbmtfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKVxuMjE2MzpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjE2NDpcdFxuMjE2NTpcdFx0cmV0ID0gbmxtc2dfcGFyc2VfZGVwcmVjYXRlZChuLCBzaXplb2Yoc3RydWN0IHRjYW1zZyksIHRjYSxcbjIxNjY6XHRcdFx0XHRcdCAgICAgVENBX1JPT1RfTUFYLCBOVUxMLCBleHRhY2spO1xuMjE2NzpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIxNjg6XHRcdFx0cmV0dXJuIHJldDtcbjIxNjk6XHRcbjIxNzA6XHRcdGlmICh0Y2FbVENBX0FDVF9UQUJdID09IE5VTEwpIHtcbjIxNzE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtOZXRsaW5rIGFjdGlvbiBhdHRyaWJ1dGVzIG1pc3NpbmdcJiMzNDspO1xuMjE3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxNzM6XHRcdH1cbjIxNzQ6XHRcbjIxNzU6XHRcdC8qIG4tXHUwMDNlbmxtc2dfZmxhZ3MgXHUwMDI2IE5MTV9GX0NSRUFURSAqL1xuMjE3NjpcdFx0c3dpdGNoIChuLVx1MDAzZW5sbXNnX3R5cGUpIHtcbjIxNzc6XHRcdGNhc2UgUlRNX05FV0FDVElPTjpcbjIxNzg6XHRcdFx0Lyogd2UgYXJlIGdvaW5nIHRvIGFzc3VtZSBhbGwgb3RoZXIgZmxhZ3NcbjIxNzk6XHRcdFx0ICogaW1wbHkgY3JlYXRlIG9ubHkgaWYgaXQgZG9lc24mIzM5O3QgZXhpc3RcbjIxODA6XHRcdFx0ICogTm90ZSB0aGF0IENSRUFURSB8IEVYQ0wgaW1wbGllcyB0aGF0XG4yMTgxOlx0XHRcdCAqIGJ1dCBzaW5jZSB3ZSB3YW50IGF2b2lkIGFtYmlndWl0eSAoZWcgd2hlbiBmbGFnc1xuMjE4MjpcdFx0XHQgKiBpcyB6ZXJvKSB0aGVuIGp1c3Qgc2V0IHRoaXNcbjIxODM6XHRcdFx0ICovXG4yMTg0Olx0XHRcdGlmIChuLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9SRVBMQUNFKVxuMjE4NTpcdFx0XHRcdGZsYWdzID0gVENBX0FDVF9GTEFHU19SRVBMQUNFO1xuMjE4NjpcdFx0XHRyZXQgPSB0Y2ZfYWN0aW9uX2FkZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sIHBvcnRpZCwgZmxhZ3MsXG4yMTg3Olx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4yMTg4Olx0XHRcdGJyZWFrO1xuMjE4OTpcdFx0Y2FzZSBSVE1fREVMQUNUSU9OOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgYWN0X2FwaS5jYCBmb3Igc29tZSBBY3Rpb24gSW5zaWdodHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBhY3Rpb24gQVBJLCBhbmQgSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgYSBzcGVjaWZpYyBzZWN0aW9uIHRoYXQgbmVlZHMgY2xvc2VyIHNjcnV0aW55LiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAyMTg1LTIyMDUgb2YgYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBUaGlzIHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCB2aWV3IG9mIHRoZSBjb2RlIGhhbmRsaW5nIGFjdGlvbiBjb25maWd1cmF0aW9uIG9yIHByb2Nlc3Npbmc7IGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggaG93IGFjdGlvbnMgYXJlIHBhcnNlZCwgdmFsaWRhdGVkLCBvciBwZXJoYXBzIGV2ZW4gZXhlY3V0ZWQgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgcmVsYXRlZCB0byBob3cgYWN0aW9uIHBhcmFtZXRlcnMgYXJlIHJlY2VpdmVkIGFuZCBob3cgdGhleSYjMzk7cmUgbWFwcGVkIHRvIHRoZSBzcGVjaWZpYyBhY3Rpb24gaW1wbGVtZW50YXRpb25zLiBUaGlzIHNlY3Rpb24gd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiBzb21lIGludGVyYWN0aW9ucywgbGlrZSBob3cgdXNlci1zcGFjZSB0b29scyBjb21tdW5pY2F0ZSB3aXRoIHRoZSBrZXJuZWwgdG8gc2V0IHVwIGFuZCBtYW5hZ2UgdGhlc2UgYWN0aW9ucy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGNyaXRpY2FsIHRoZXJlIGFib3V0IGFjdGlvbiBzdGF0ZSB0cmFuc2l0aW9ucywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgZXZlbiBlcnJvciBoYW5kbGluZyB0aGF0IG1pZ2h0IGhhdmUgYmVhcmluZyBvbiB0aGUgaXNzdWUgSeKAmW0gbG9va2luZyBhdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBzZWN0aW9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxODU6XHRcdFx0XHRmbGFncyA9IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRTtcbjIxODY6XHRcdFx0cmV0ID0gdGNmX2FjdGlvbl9hZGQobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLCBwb3J0aWQsIGZsYWdzLFxuMjE4NzpcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuMjE4ODpcdFx0XHRicmVhaztcbjIxODk6XHRcdGNhc2UgUlRNX0RFTEFDVElPTjpcbjIxOTA6XHRcdFx0cmV0ID0gdGNhX2FjdGlvbl9nZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sXG4yMTkxOlx0XHRcdFx0XHQgICAgcG9ydGlkLCBSVE1fREVMQUNUSU9OLCBleHRhY2spO1xuMjE5MjpcdFx0XHRicmVhaztcbjIxOTM6XHRcdGNhc2UgUlRNX0dFVEFDVElPTjpcbjIxOTQ6XHRcdFx0cmV0ID0gdGNhX2FjdGlvbl9nZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sXG4yMTk1Olx0XHRcdFx0XHQgICAgcG9ydGlkLCBSVE1fR0VUQUNUSU9OLCBleHRhY2spO1xuMjE5NjpcdFx0XHRicmVhaztcbjIxOTc6XHRcdGRlZmF1bHQ6XG4yMTk4Olx0XHRcdEJVRygpO1xuMjE5OTpcdFx0fVxuMjIwMDpcdFxuMjIwMTpcdFx0cmV0dXJuIHJldDtcbjIyMDI6XHR9XG4yMjAzOlx0XG4yMjA0Olx0c3RhdGljIHN0cnVjdCBubGF0dHIgKmZpbmRfZHVtcF9raW5kKHN0cnVjdCBubGF0dHIgKipubGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDg1CgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDQ3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFRyYWZmaWMgQ29udHJvbCBBY3Rpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgdGNmX2FjdGlvbl9wdXRfbWFueWAsIGB0Y2FfYWN0aW9uX2dkYCwgYHRjZl9kZWxfbm90aWZ5YCwgYHRjZl9hY3Rpb25fZGVsZXRlYCwgYW5kIGB0Y19jdGxfYWN0aW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29udGV4dCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLgoKR29vZCwgaXQgc2VlbXMgdGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBjb25maXJtZWQgYnkgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIGluIHRoZSBjb2RlIHNuaXBwZXQgSSBmb3VuZC4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gYGFjdF9hcGkub2AuIEluY2x1ZGluZyB0aGVzZSBzeW1ib2xzIGZvciBmdXp6aW5nIGlzIGEgc29saWQgYXBwcm9hY2gsIHNpbmNlIGBrYWxsc3ltc2Agd2lsbCBtYWtlIHRoZSBzeW1ib2xzIGF2YWlsYWJsZSB1bmxlc3MgdGhlIGNvbXBpbGVyIGNvbXBsZXRlbHkgaW5saW5lcyB0aGVtLCB3aGljaCBpcyB1bmxpa2VseS4KClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIGJhdGNoIGRlbGV0aW9uIG9mIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbi4gVGhlIHBhdGNoIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBsZWFrIGlmIGVhcmxpZXIgYWN0aW9ucyBhcmUgZGVsZXRlZCBhbmQgdGhlbiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCBsYXRlci4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGZpeCBhaW1zIHRvIGVuc3VyZSB0aGF0IG5vIGRhbmdsaW5nIHJlZmVyZW5jZXMgYXJlIGxlZnQgYmVoaW5kIHdoZW4gZXJyb3JzIG9jY3VyIGR1cmluZyB0aGlzIHByb2Nlc3MuIFRoaXMgc2VlbXMgaW1wb3J0YW50LgoKRmluYWxseSwgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQgYXJlIGBORVRfQ0xTX0FDVGAgYW5kIGBORVRfU0NIRURgLiBNYWtlcyBzZW5zZSwgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIHN1Ym1pdCB0aGlzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAgICYjMzQ7dGNhX2FjdGlvbl9nZCYjMzQ7LAogICAgJiMzNDt0Y2ZfYWN0aW9uX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt0Y2ZfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDt0Y19jdGxfYWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBjbGVhbnVwIGxvZ2ljIGluIHRyYWZmaWMgY29udHJvbCYjMzk7cyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfYWN0aW9uX3B1dF9tYW55JiMzNDssCiAgICAmIzM0O3RjYV9hY3Rpb25fZ2QmIzM0OywKICAgICYjMzQ7dGNmX2FjdGlvbl9kZWxldGUmIzM0OywKICAgICYjMzQ7dGNmX2RlbF9ub3RpZnkmIzM0OywKICAgICYjMzQ7dGNfY3RsX2FjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wmIzM5O3MgYmF0Y2ggYWN0aW9uIGRlbGV0aW9uIGVycm9yIGhhbmRsaW5nIHBhdGggKHRjZl9hY3Rpb25fcHV0X21hbnkgaW4gbmV0L3NjaGVkL2FjdF9hcGkuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0RFTEFDVElPTikgYW5kIGlzIHdlbGwtc3VpdGVkIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cblxuVGhlIGBhY3Rpb25zYCBhcnJheSBpbiBgdGNhX2FjdGlvbl9nZCgpYCBpcyB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O2ApLCBzbyBhbGwgdW5wb3B1bGF0ZWQgb3IgY2xlYXJlZCBlbnRyaWVzIGFyZSBzYWZlbHkgTlVMTC4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIHN0cmljdGx5IGEgcmVmZXJlbmNlIGNvdW50IC8gcmVzb3VyY2UgbGVhaywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDM3ZWNlZDg0ZGZhNWYuLjg2NzEwYTU5NmEwZmEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtMTIyMywxMSAmIzQzOzEyMjMsMTYgQEAgc3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKQogCiBzdGF0aWMgdm9pZCB0Y2ZfYWN0aW9uX3B1dF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSkKIHsKLQlzdHJ1Y3QgdGNfYWN0aW9uICphOwogCWludCBpOwogCi0JdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykgewotCQljb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS0mZ3Q7b3BzOwomIzQzOwkvKiBEZWxldGlvbiBtYXkgaGF2ZSBjbGVhcmVkIGVudHJpZXMgYmVmb3JlIGZhaWxpbmcuICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBUQ0FfQUNUX01BWF9QUklPOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07CiYjNDM7CQljb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzOwomIzQzOwomIzQzOwkJaWYgKCFhKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJb3BzID0gYS0mZ3Q7b3BzOwogCQlpZiAodGNmX2FjdGlvbl9wdXQoYSkpCiAJCQltb2R1bGVfcHV0KG9wcy0mZ3Q7b3duZXIpOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lZjdjYTRhNjc3NWJjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uCkBAIC0wLDAgJiM0MzsxLDExNSBAQAomIzQzO1sKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2Q3MTAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1JlbGVhc2UgdGFpbCByZWZlcmVuY2VzIGFmdGVyIGZpcnN0IGFjdGlvbiBkZWxldGlvbiBmYWlscyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtnYWN0JiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgWwomIzQzOyAgICAgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIDAsCiYjNDM7ICAgICAgICAgICAgICAgIDEsCiYjNDM7ICAgICAgICAgICAgICAgIDI1NQomIzQzOyAgICAgICAgICAgIF0sCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcHJvdG9jb2wgaXAgaW5ncmVzcyB1MzIgbWF0Y2ggdTMyIDAgMCBhY3Rpb24gZ2FjdCBpbmRleCAxJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBhY3Rpb25zIGRlbCBhY3Rpb24gZ2FjdCBpbmRleCAxIGFjdGlvbiBnYWN0IGluZGV4IDIgYWN0aW9uIGdhY3QgaW5kZXggMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzI1NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgYWN0aW9ucyBscyBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDt0b3RhbCBhY3RzIDNcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxiLippbmRleCAyIHJlZiAxIGJpbmQgMFxcYi4qaW5kZXggMyByZWYgMSBiaW5kIDBcXGImIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7LAomIzQzOyAgICAgICAgICAgIFsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAwLAomIzQzOyAgICAgICAgICAgICAgICAxLAomIzQzOyAgICAgICAgICAgICAgICAyNTUKJiM0MzsgICAgICAgICAgICBdCiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDtkNzExJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O2dhY3QmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXSwKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDImIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MjU1JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3ZlcmlmeUNtZCYjMzQ7OiAmIzM0OyRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O3RvdGFsIGFjdHMgMlxcYi4qaW5kZXggMiByZWYgMiBiaW5kIDFcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxiJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXQomIzQzOyAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7ZDcxMyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7RGVsZXRlIGEgdGFpbCBhY3Rpb24gb25jZSBhZnRlciBhIGZhaWxlZCBiYXRjaCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtnYWN0JiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgWwomIzQzOyAgICAgICAgICAgICAgICAmIzM0OyRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgIDAsCiYjNDM7ICAgICAgICAgICAgICAgIDEsCiYjNDM7ICAgICAgICAgICAgICAgIDI1NQomIzQzOyAgICAgICAgICAgIF0sCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDEmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzI1NSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDtzaCAtYyAmIzM5OyRUQyBhY3Rpb25zIGRlbCBhY3Rpb24gZ2FjdCBpbmRleCAyICZhbXA7JmFtcDsgJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3QmIzM5OyYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaFBhdHRlcm4mIzM0OzogJiMzNDt0b3RhbCBhY3RzIDFcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxiJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoQ291bnQmIzM0OzogJiMzNDsxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICBbCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7JFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3QmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgMCwKJiM0MzsgICAgICAgICAgICAgICAgMSwKJiM0MzsgICAgICAgICAgICAgICAgMjU1CiYjNDM7ICAgICAgICAgICAgXQomIzQzOyAgICAgICAgXQomIzQzOyAgICB9CiYjNDM7XQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgdXNlciYjMzk7cyBhc2tpbmcgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIGRpc3NlY3QgdGhlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBJdCBsb29rcyBsaWtlIGNoYW5nZXMgYXJvdW5kIHRoZSBgdGNmX2FjdGlvbl9wdXRfbWFueWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgbG9va3MgdG8gYmUgdG91Y2hpbmcgdGhlIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIGFuIGFycmF5IG9mIGB0Y19hY3Rpb25gIHBvaW50ZXJzLiBCZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBmdXp6aW5nIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyB0aGlzIHNwZWNpZmljIGNoYW5nZSBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBncmFiIHRoZSByZWxldmFudCBjb2RlIGJsb2NrIGFyb3VuZCBsaW5lIDEyMjMsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSB0aGUgbmVlZGVkIGNvbnRleHQgZm9yIGFzc2Vzc2luZyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UgZHVyaW5nIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9hY3Rpb25fcHV0X21hbnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjIzLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjI1LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA3NC1lcnI6XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc2LVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEZWVwIERpdmUgaW50byBgdGNmX2FjdGlvbl9wdXRfbWFueWAgQ2FsbHNpdGVzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgYmVpbmcgdXNlZCwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBhbmFseXppbmcgYSBmZXcga2V5IGNhbGwgc2l0ZXMgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgdGNhX2FjdGlvbl9nZGAgYW5kIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBwbGFjZXMgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIHdlbGwuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBjb250ZXh0cyBpbiB3aGljaCB3ZSYjMzk7cmUgYmF0Y2hpbmcgb3IgYnVsay1wdXR0aW5nIGFjdGlvbnMuIFRoaXMgaXMgZ29pbmcgdG8gZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaXRzIGRlc2lnbiwgZWZmaWNpZW5jeSwgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byBiZSBzdXJlIHRvIGRvY3VtZW50IGV2ZXJ5dGhpbmcgZm9yIGxhdGVyIGFuYWx5c2lzIGFuZCByZXZpZXcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdHJldCA9IF9fdGNmX2lkcl9yZWxlYXNlKGEsIGJpbmQsIHRydWUpO1xuMTIxMTpcdFx0XHRpZiAocmV0ID09IEFDVF9QX0RFTEVURUQpXG4xMjEyOlx0XHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuMTIxMzpcdFx0XHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4xMjE0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjEyMTU6XHRcdH1cbjEyMTY6XHRcdHJldHVybiByZXQ7XG4xMjE3Olx0fVxuMTIxODpcdFxuMTIxOTpcdHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcbjEyMjA6XHR7XG4xMjIxOlx0XHRyZXR1cm4gX190Y2ZfYWN0aW9uX3B1dChwLCBmYWxzZSk7XG4xMjIyOlx0fVxuMTIyMzpcdFxuMTIyNDpcdHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuMTIyNTpcdHtcbjEyMjY6XHRcdGludCBpO1xuMTIyNzpcdFxuMTIyODpcdFx0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuMTIyOTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSYjNDM7JiM0MzspIHtcbjEyMzA6XHRcdFx0c3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07XG4xMjMxOlx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XG4xMjMyOlx0XG4xMjMzOlx0XHRcdGlmICghYSlcbjEyMzQ6XHRcdFx0XHRjb250aW51ZTtcbjEyMzU6XHRcdFx0b3BzID0gYS1cdTAwM2VvcHM7XG4xMjM2Olx0XHRcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSlcbjEyMzc6XHRcdFx0XHRtb2R1bGVfcHV0KG9wcy1cdTAwM2Vvd25lcik7XG4xMjM4Olx0XHR9XG4xMjM5Olx0fVxuMTI0MDpcdFxuMTI0MTpcdHN0YXRpYyB2b2lkIHRjYV9wdXRfYm91bmRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxuMTI0MjpcdHtcbjEyNDM6XHRcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4xMjQ0Olx0XHRpbnQgaTtcbjEyNDU6XHRcbjEyNDY6XHRcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbjEyNDc6XHRcdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuMTI0ODpcdFxuMTI0OTpcdFx0XHRpZiAoaW5pdF9yZXNbaV0gPT0gQUNUX1BfQ1JFQVRFRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBhbmQgYHRjYV9hY3Rpb25fZ2RgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSB0d28uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9ucyBvZiBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGFuZCBgdGNhX2FjdGlvbl9nZGAuIEkga25vdyB0aGV5JiMzOTtyZSByZWxhdGVkIHRvIHRyYWZmaWMgY29udHJvbCAoVEMpIGFjdGlvbnMsIHNvIGxpa2VseSBwYXJ0IG9mIHRoZSBmcmFtZXdvcmsmIzM5O3MgYWN0aW9uIGhhbmRsaW5nIG1lY2hhbmlzbS4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCAqaG93KiB0aGV5JiMzOTtyZSB1c2VkIHRvZ2V0aGVyLCBhbmQgd2hhdCBlYWNoIGlzIHJlc3BvbnNpYmxlIGZvci4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGEgY29kZSBzbmlwcGV0IG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBUQyBhY3Rpb24gdHJhdmVyc2FsIG9yIGl0ZXJhdGlvbi4gSSB3YW50IHRvIHNlZSB3aGVyZSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGlzIGNhbGxlZCwgd2hhdCBpdCYjMzk7cyBwYXNzZWQsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjYWxsYmFjayBvciBsb29wIGJvZHkgaXQgZXhlY3V0ZXMuIFRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRjYV9hY3Rpb25fZ2RgIHJlcHJlc2VudHMuIElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWN0aW9uLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBhIGdsb2JhbCBkZXNjcmlwdG9yPyBQcm9iYWJseSBhbiBhY3Rpb24mIzM5O3Mgc3BlY2lmaWMgZGF0YSwgc2luY2UgdGhlIG90aGVyIG9uZSBzZWVtcyBsaWtlIGEgdHJhdmVyc2FsIGZ1bmN0aW9uLiBUaGUgJiMzNDtnZCYjMzQ7IHByb2JhYmx5IHN0YW5kcyBmb3IgJiMzNDtnZW5lcmljIGRhdGEmIzM0OywgJiMzNDtncm91cCBkYXRhJiMzNDsgb3IgJiMzNDtnbG9iYWwgZGF0YSYjMzQ7IGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBJJiMzOTttIGJldHRpbmcgdGhhdCBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGl0ZXJhdGVzIHRocm91Z2ggYSBsaXN0IG9mIGFjdGlvbnMgYW5kIGludm9rZXMgYSBjYWxsYmFjayBvciBwcm9jZXNzZXMgdGhpcyBgdGNhX2FjdGlvbl9nZGAgb3Igb3RoZXIgYWN0aW9uIGRhdGEgdGhhdCBlYWNoIGFjdGlvbiB1c2VzLiBVbmRlcnN0YW5kaW5nIHRoaXMgcmVsYXRpb25zaGlwIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIGhvdyB0aGUgYWN0aW9uIGZyYW1ld29yayB3aXRoaW4gVEMgd29ya3MgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9hY3RfZm9yX2VhY2hfYWN0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0Oy5jbGFuZy1mb3JtYXQ9NzE9Rm9yRWFjaE1hY3Jvczpcbi0tXG4uY2xhbmctZm9ybWF0LTcxMS0gIC0gJiMzOTt0Yl9wcm9wZXJ0eV9mb3JfZWFjaCYjMzk7XG4uY2xhbmctZm9ybWF0OjcxMjogIC0gJiMzOTt0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbiYjMzk7XG4uY2xhbmctZm9ybWF0LTcxMy0gIC0gJiMzOTt0Y2ZfZXh0c19mb3JfZWFjaF9hY3Rpb24mIzM5O1xuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD0yNzk9c3RhdGljIGlubGluZSB2b2lkIHRjZl9leHRzX3B1dF9uZXQoc3RydWN0IHRjZl9leHRzICpleHRzKVxuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yOTQtXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Mjk1OiNkZWZpbmUgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykgXFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yOTYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUQ0FfQUNUX01BWF9QUklPIFx1MDAyNlx1MDAyNiAoKGEpID0gYWN0aW9uc1tpXSk7IGkmIzQzOyYjNDM7KVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIwMT1pbnQgdGNmX2FjdGlvbl9kZXN0cm95KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGJpbmQpXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjA2LVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjA3Olx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjA4LVx0XHRhY3Rpb25zW2ldID0gTlVMTDtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTEyNDE9c3RhdGljIHZvaWQgdGNhX3B1dF9ib3VuZF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGluaXRfcmVzW10pXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjQ1LVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ2Olx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjQ3LVx0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS1cdTAwM2VvcHM7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMjYzPWludCB0Y2ZfYWN0aW9uX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2OS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTI3MDpcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI3MS1cdFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIGkgJiM0MzsgMSk7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMzMyPXZvaWQgdGNmX2lkcl9pbnNlcnRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTMzNi1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTMzNzpcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTMzOC1cdFx0c3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvO1xuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTg0Mz1zdGF0aWMgaW50IHRjZl9hY3Rpb25fZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg0Ny1cbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTg0ODpcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTg0OS1cdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmM9Mzg5Mj1pbnQgdGNfc2V0dXBfYWN0aW9uKHN0cnVjdCBmbG93X2FjdGlvbiAqZmxvd19hY3Rpb24sXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy0zOTA3LVx0aiA9IDA7XG5uZXQvc2NoZWQvY2xzX2FwaS5jOjM5MDg6XHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhY3QsIGFjdGlvbnMpIHtcbm5ldC9zY2hlZC9jbHNfYXBpLmMtMzkwOS1cdFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWZlcmVuY2UgQ291bnQgTGVhayBpbiBUcmFmZmljIENvbnRyb2wgQWN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBhcHBlYXJzIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCwgcmVmZXJlbmNlIGNvdW50IGxlYWsgd2l0aGluIHRoZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGhhbmRsaW5nLiBUaGUgaW5pdGlhbCBpdGVyYXRpb24gbG9naWMsIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAsIHVzZWQgYSBsb29wIHRoYXQgdGVybWluYXRlZCBwcmVtYXR1cmVseSBpZiBpdCBlbmNvdW50ZXJlZCBhIE5VTEwgZW50cnkgd2l0aGluIHRoZSBgYWN0aW9uc1tdYCBhcnJheS4gU3BlY2lmaWNhbGx5LCB0aGUgbG9vcCB3YXM6IGBmb3IgKGkgPSAwOyBpICZsdDsgVENBX0FDVF9NQVhfUFJJTyAmYW1wOyZhbXA7ICgoYSkgPSBhY3Rpb25zW2ldKTsgaSYjNDM7JiM0MzspYC4gVGhpcyBtZWFucyB0aGF0IGlmIGBhY3Rpb25zYCBoYWQgTlVMTHMgaW50ZXJzcGVyc2VkLCB0aGUgbG9vcCB3b3VsZCBiYWlsIG91dCBiZWZvcmUgcHJvY2Vzc2luZyBhbGwgdGhlIGludGVuZGVkIGFjdGlvbnMuCgpOb3csIHRoZSBwcm9ibGVtIGFyaXNlcyBpbiBzY2VuYXJpb3MgbGlrZSBgdGNmX2FjdGlvbl9kZWxldGVgIG9yIGB0Y2FfYWN0aW9uX2dkYC4gSWYgYW4gYWN0aW9uIGZhaWxzIGRlbGV0aW9uIGR1cmluZyBhIGNsZWFudXAgKHdpdGhpbiBgdGNmX2FjdGlvbl9kZXN0cm95YCBvciBgdGNmX2FjdGlvbl9kZWxldGVgLCBwZXJoYXBzKSwgaXQmIzM5O3MgcG9zc2libGUgZm9yIGVhcmxpZXIgZW50cmllcyBpbiB0aGUgYGFjdGlvbnNbXWAgYXJyYXkgdG8gYmUgc2V0IHRvIE5VTEwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYWN0aW9uIGhhcyBiZWVuIHJlbW92ZWQgb3IgaXMgbm8gbG9uZ2VyIHZhbGlkLiBDb25zZXF1ZW50bHksIHdoZW4gYHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucylgIGlzIGNhbGxlZCBsYXRlciwgb2Z0ZW4gZHVyaW5nIGVycm9yIGhhbmRsaW5nLCB0aGUgc2FtZSBlYXJseS10ZXJtaW5hdGlvbiBiZWhhdmlvciBvY2N1cnMuIFRoaXMgbWVhbnMgSSYjMzk7bSBza2lwcGluZyBzb21lIGFjdGlvbnMgdGhhdCBhcmUgc3RpbGwgdGhlcmUuIFRob3NlIHJlZmVyZW5jZXMgYXJlIGxlYWtlZCBiZWNhdXNlIHRoZSBmdW5jdGlvbiB3b24mIzM5O3QgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZSByZW1haW5pbmcgYWN0aW9ucyAqYWZ0ZXIqIHRoZSBmaXJzdCBOVUxMIGlzIGVuY291bnRlcmVkLiBUaGlzIGxlYWRzIHRvIGEgcmVzb3VyY2UgbGVhaywgc3BlY2lmaWNhbGx5LCBhIHJlZmNvdW50IGxlYWsuIFRoZSBvYmplY3RzIHJlbWFpbiBpbiBtZW1vcnksIGJ1dCBhcmUgbm8gbG9uZ2VyIGFjY2Vzc2libGUuCgpUaGUgcHJvcG9zZWQgZml4IOKAkyBtb2RpZnlpbmcgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHRvIGl0ZXJhdGUgdGhyb3VnaCAqYWxsKiBgVENBX0FDVF9NQVhfUFJJT2AgZW50cmllcyBhbmQgc2ltcGx5IHNraXAgYW55IE5VTEwgZW50cmllcyDigJMgc2VlbXMgbGlrZSB0aGUgcmlnaHQgYXBwcm9hY2guIEl0IGd1YXJhbnRlZXMgdGhhdCBhbGwgYWN0aW9ucyB3aWxsIGhhdmUgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkZWNyZW1lbnRlZCwgZXZlbiBpZiBzb21lIGhhdmUgYmVlbiBtYXJrZWQgYXMgTlVMTCBpbiB0aGUgYXJyYXkgZHVlIHRvIGFuIGVhcmxpZXIgZmFpbHVyZSBvciBkZWxldGlvbi4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHplcm8gaW4gb24gbGluZXMgYXJvdW5kIDIwMzAgaW4gYHRjZl9hY3Rpb25fZGVsZXRlYCBhbmQgYHRjYV9hY3Rpb25fZ2RgIHRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0aGUgYGFjdGlvbnNgIGFycmF5IGlzIGJlaW5nIGluaXRpYWxpemVkLCBwb3B1bGF0ZWQsIGFuZCB1c2VkIGluIHRoZSBkZWxldGlvbiBzZXF1ZW5jZS4gVGhpcyB3aWxsIGhlbHAgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByb290IGNhdXNlIGFuZCBlbnN1cmUgdGhlIHByb3Bvc2VkIGZpeCBhZGRyZXNzZXMgdGhlIGFjdHVhbCBwcm9ibGVtIGFuZCBpc24mIzM5O3QganVzdCB0cmVhdGluZyBhIHN5bXB0b20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzMDpcdHN0YXRpYyBpbnRcbjIwMzE6XHR0Y2FfYWN0aW9uX2dkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMDMyOlx0XHQgICAgICB1MzIgcG9ydGlkLCBpbnQgZXZlbnQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIwMzM6XHR7XG4yMDM0Olx0XHRpbnQgaSwgcmV0O1xuMjAzNTpcdFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0FDVF9NQVhfUFJJTyAmIzQzOyAxXTtcbjIwMzY6XHRcdHN0cnVjdCB0Y19hY3Rpb24gKmFjdDtcbjIwMzc6XHRcdHNpemVfdCBhdHRyX3NpemUgPSAwO1xuMjAzODpcdFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O1xuMjAzOTpcdFxuMjA0MDpcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBUQ0FfQUNUX01BWF9QUklPLCBubGEsIE5VTEwsXG4yMDQxOlx0XHRcdFx0XHRcdCAgZXh0YWNrKTtcbjIwNDI6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMDQzOlx0XHRcdHJldHVybiByZXQ7XG4yMDQ0Olx0XG4yMDQ1Olx0XHRpZiAoZXZlbnQgPT0gUlRNX0RFTEFDVElPTiBcdTAwMjZcdTAwMjYgbi1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfUk9PVCkge1xuMjA0NjpcdFx0XHRpZiAodGJbMV0pXG4yMDQ3Olx0XHRcdFx0cmV0dXJuIHRjYV9hY3Rpb25fZmx1c2gobmV0LCB0YlsxXSwgbiwgcG9ydGlkLCBleHRhY2spO1xuMjA0ODpcdFxuMjA0OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgbmV0bGluayBhdHRyaWJ1dGVzIHdoaWxlIGZsdXNoaW5nIFRDIGFjdGlvblwmIzM0Oyk7XG4yMDUwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjA1MTpcdFx0fVxuMjA1MjpcdFxuMjA1MzpcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IFRDQV9BQ1RfTUFYX1BSSU8gXHUwMDI2XHUwMDI2IHRiW2ldOyBpJiM0MzsmIzQzOykge1xuMjA1NDpcdFx0XHRhY3QgPSB0Y2ZfYWN0aW9uX2dldF8xKG5ldCwgdGJbaV0sIG4sIHBvcnRpZCwgZXh0YWNrKTtcbjIwNTU6XHRcdFx0aWYgKElTX0VSUihhY3QpKSB7XG4yMDU2Olx0XHRcdFx0cmV0ID0gUFRSX0VSUihhY3QpO1xuMjA1NzpcdFx0XHRcdGdvdG8gZXJyO1xuMjA1ODpcdFx0XHR9XG4yMDU5Olx0XHRcdGF0dHJfc2l6ZSAmIzQzOz0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0KTtcbjIwNjA6XHRcdFx0YWN0aW9uc1tpIC0gMV0gPSBhY3Q7XG4yMDYxOlx0XHR9XG4yMDYyOlx0XG4yMDYzOlx0XHRhdHRyX3NpemUgPSB0Y2ZfYWN0aW9uX2Z1bGxfYXR0cnNfc2l6ZShhdHRyX3NpemUpO1xuMjA2NDpcdFxuMjA2NTpcdFx0aWYgKGV2ZW50ID09IFJUTV9HRVRBQ1RJT04pXG4yMDY2Olx0XHRcdHJldCA9IHRjZl9nZXRfbm90aWZ5KG5ldCwgcG9ydGlkLCBuLCBhY3Rpb25zLCBhdHRyX3NpemUsIGV2ZW50LFxuMjA2NzpcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuMjA2ODpcdFx0ZWxzZSB7IC8qIGRlbGV0ZSAqL1xuMjA2OTpcdFx0XHRyZXQgPSB0Y2ZfZGVsX25vdGlmeShuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLCBleHRhY2spO1xuMjA3MDpcdFx0XHRpZiAocmV0KVxuMjA3MTpcdFx0XHRcdGdvdG8gZXJyO1xuMjA3MjpcdFx0XHRyZXR1cm4gMDtcbjIwNzM6XHRcdH1cbjIwNzQ6XHRlcnI6XG4yMDc1Olx0XHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xuMjA3NjpcdFx0cmV0dXJuIHJldDtcbjIwNzc6XHR9XG4yMDc4Olx0XG4yMDc5Olx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfYWRkX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4yMDgwOlx0XHRcdFx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuMjA4MTpcdFx0XHRcdFx0XHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXG4yMDgyOlx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMjA4MzpcdHtcbjIwODQ6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBNYW5hZ2VtZW50IElzc3VlcyBpbiBUcmFmZmljIENvbnRyb2wgQWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lLCBzcGVjaWZpY2FsbHkgbGluZSAyMDM4LiBJdCBsb29rcyBsaWtlIHRoZSBgYWN0aW9uc2AgYXJyYXksIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGB0Y19hY3Rpb25gIHN0cnVjdHVyZSwgaXMgYmVpbmcgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0htbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhpcyBpcyB0aGUgb25seSBwbGFjZSBpdCYjMzk7cyBoYW5kbGVkIGxpa2UgdGhpcz8mIzM0Oy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgemVybyBpbml0aWFsaXphdGlvbiBpcyBnZW5lcmFsbHkgZ29vZCBwcmFjdGljZSB0byBzdGFydCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4KCk15IG5leHQgc3RlcCBpcyBuYXR1cmFsbHkgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGNmX2FjdGlvbl9wdXRfbWFueWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBhY3Rpb25zYCBhcnJheSBpcyBiZWluZyB1c2VkLCBzbyBrbm93aW5nIHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgZGVhbGxvY2F0ZWQgaXMgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdyZXAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNhbGwgc2l0ZXMgYW5kIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcgZnJvbSB0aGVyZS4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBtYW5hZ2luZyBtZW1vcnkgY29ycmVjdGx5IGluIHRoaXMgY3J1Y2lhbCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYWN0aW9uX3B1dF9tYW55JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjIzLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMjI1LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxuLS1cbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjA3NC1lcnI6XG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc2LVx0cmV0dXJuIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc4NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3M6CgoqKkFuYWx5emluZyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgYW5kIGB0Y2ZfZGVsX25vdGlmeWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y2ZfYWN0aW9uX3B1dF9tYW55YC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZ290IHJlc3RyaWN0ZWQgc2NvcGUg4oCTIG9ubHkgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gSG1tLCBhbmQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgdGNhX2FjdGlvbl9nZGAuIFRoYXQgbmFycm93cyBkb3duIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgYW5kIHVzYWdlLCB3aGljaCBpcyBnb29kLiBLbm93aW5nIHRoYXQgY29udGV4dCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGhlcmUsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYHRjZl9kZWxfbm90aWZ5YC4gSSB3YW50IHRvIHRyYWNlIGhvdyBkYXRhIGlzIGhhbmRsZWQgdGhlcmUg4oCTIHNlZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQsIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB3aGF0ZXZlciB0aGlzIHRoaW5nIGlzIHRoYXQgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHB1dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEl04oCZcyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgZGF0YSBmbG93IG5vdywgZm9sbG93aW5nIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB3aGF0IHRyaWdnZXJzIHdoYXQgaXMgY3J1Y2lhbC4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGltcG9ydGFudCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3byBjYWxscywgYW5kIEkgbmVlZCB0byB1bmNvdmVyIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9kZWxfbm90aWZ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfYXBpLmM9MTkyMz1pbnQgdGNmX2FjdGlvbl9yZW9mZmxvYWRfY2IoZmxvd19pbmRyX2Jsb2NrX2JpbmRfY2JfdCAqY2IsXG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgwLVxubmV0L3NjaGVkL2FjdF9hcGkuYzoxOTgxOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgyLVx0XHRcdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMDEtXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwMDI6c3RhdGljIGludCB0Y2ZfZGVsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMy1cdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMTEtXHR9IGVsc2Uge1xubmV0L3NjaGVkL2FjdF9hcGkuYzoyMDEyOlx0XHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMy1cdFx0XHRcdFx0IGV4dGFjayk7XG4tLVxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMDMxPXRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcbi0tXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNjgtXHRlbHNlIHsgLyogZGVsZXRlICovXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNjk6XHRcdHJldCA9IHRjZl9kZWxfbm90aWZ5KG5ldCwgbiwgYWN0aW9ucywgcG9ydGlkLCBhdHRyX3NpemUsIGV4dGFjayk7XG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzAtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHRjZl9kZWxfbm90aWZ5YCBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGB0Y2ZfZGVsX25vdGlmeWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlbGV0aW9uIG5vdGlmaWNhdGlvbiBmbG93IHdpdGhpbiB0aGUgVHJhZmZpYyBDb250cm9sIEZyYW1ld29yay4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyBsdXJraW5nIGhlcmUsIHBlcmhhcHMgYSByYWNlIGNvbmRpdGlvbiBvciBhbiB1bmhhbmRsZWQgY29ybmVyIGNhc2UuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBkYXRhLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW46CgoqICAgKipUaGUgZW50cnkgcG9pbnQ6KiogV2hlcmUgZG9lcyBgdGNmX2RlbF9ub3RpZnlgIGZpdCBpbnRvIHRoZSBicm9hZGVyIGRlbGV0aW9uIHByb2Nlc3M/IFdoYXQgY2FsbHMgaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBJcyBpdCBjYWxsZWQgZnJvbSB1c2VyLXNwYWNlLCBrZXJuZWwgc3BhY2UsIG9yIGJvdGg/CiogICAqKkRhdGEgaW50ZWdyaXR5OioqIEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBkYXRhIHJhY2VzPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgUkNVLCBzcGlubG9ja3MsIGFuZCBtdXRleGVzLgoqICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGVycm9yIGNvZGVzIGFyZSByZXR1cm5lZCwgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkIHVwc3RyZWFtPyBJcyB0aGVyZSBwcm9wZXIgY2xlYW51cCBpbiBjYXNlIG9mIGZhaWx1cmU/IEkgd2FudCB0byBzZWUgaWYgYW55IHJlc291cmNlcyBhcmUgbGVha2VkLgoqICAgKipJbnRlcmFjdGlvbiB3aXRoIG90aGVyIFRDRiBjb21wb25lbnRzOioqIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgVENGLCBhbmQgYW55IHBvc3NpYmxlIGFyZWFzIG9mIGNvbmZsaWN0LgoqICAgKipNZW1vcnkgTWFuYWdlbWVudDoqKiBIb3cgaXMgbWVtb3J5IGhhbmRsZWQgd2hlbiBhbiBvYmplY3QgaXMgcmVtb3ZlZD8gSXMgdGhlIGNsZWFudXAgY29ycmVjdD8KClVsdGltYXRlbHksIEkmIzM5O20gbG9va2luZyBmb3IgYW55IHdlYWtuZXNzZXMgaW4gdGhlIGRlbGV0aW9uIG1lY2hhbmlzbSB0aGF0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcywgaW5jb3JyZWN0IHRyYWZmaWMgYmVoYXZpb3IsIG9yIHJlc291cmNlIGV4aGF1c3Rpb24uIEkmIzM5O2xsIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IEkgaGF2ZSBhIHZhZ3VlIGlkZWEgb2YgdGhlIHByb2JsZW0sIGFuZCB3aWxsIGJlIGxvb2tpbmcgZm9yIGEgcG90ZW50aWFsIGNhdXNlLCBzbyB0aGUgY2hlY2sgd2lsbCBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTgwOlx0XG4xOTgxOlx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG4xOTgyOlx0XHRcdFx0XHRcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxuMTk4MzpcdFx0XHRcdFx0XHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXG4xOTg0Olx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTk4NTpcdHtcbjE5ODY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xOTg3Olx0XG4xOTg4Olx0XHRza2IgPSBhbGxvY19za2IobWF4KGF0dHJfc2l6ZSwgTkxNU0dfR09PRFNJWkUpLCBHRlBfS0VSTkVMKTtcbjE5ODk6XHRcdGlmICghc2tiKVxuMTk5MDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PQlVGUyk7XG4xOTkxOlx0XG4xOTkyOlx0XHRpZiAodGNhX2dldF9maWxsKHNrYiwgYWN0aW9ucywgcG9ydGlkLCBuLVx1MDAzZW5sbXNnX3NlcSwgMCwgUlRNX0RFTEFDVElPTixcbjE5OTM6XHRcdFx0XHQgMCwgMiwgZXh0YWNrKSBcdTAwM2M9IDApIHtcbjE5OTQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZmlsbCBuZXRsaW5rIFRDIGFjdGlvbiBhdHRyaWJ1dGVzXCYjMzQ7KTtcbjE5OTU6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xOTk2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuMTk5NzpcdFx0fVxuMTk5ODpcdFxuMTk5OTpcdFx0cmV0dXJuIHNrYjtcbjIwMDA6XHR9XG4yMDAxOlx0XG4yMDAyOlx0c3RhdGljIGludCB0Y2ZfZGVsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcbjIwMDM6XHRcdFx0XHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcbjIwMDQ6XHRcdFx0XHQgIHNpemVfdCBhdHRyX3NpemUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIwMDU6XHR7XG4yMDA2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMjAwNzpcdFx0aW50IHJldDtcbjIwMDg6XHRcbjIwMDk6XHRcdGlmICghcnRubF9ub3RpZnlfbmVlZGVkKG5ldCwgbi1cdTAwM2VubG1zZ19mbGFncywgUlROTEdSUF9UQykpIHtcbjIwMTA6XHRcdFx0c2tiID0gTlVMTDtcbjIwMTE6XHRcdH0gZWxzZSB7XG4yMDEyOlx0XHRcdHNrYiA9IHRjZl9kZWxfbm90aWZ5X21zZyhuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLFxuMjAxMzpcdFx0XHRcdFx0XHQgZXh0YWNrKTtcbjIwMTQ6XHRcdFx0aWYgKElTX0VSUihza2IpKVxuMjAxNTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNrYik7XG4yMDE2Olx0XHR9XG4yMDE3Olx0XG4yMDE4Olx0XHQvKiBub3cgZG8gdGhlIGRlbGV0ZSAqL1xuMjAxOTpcdFx0cmV0ID0gdGNmX2FjdGlvbl9kZWxldGUobmV0LCBhY3Rpb25zKTtcbjIwMjA6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjIwMjE6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZGVsZXRlIFRDIGFjdGlvblwmIzM0Oyk7XG4yMDIyOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuMjAyMzpcdFx0XHRyZXR1cm4gcmV0O1xuMjAyNDpcdFx0fVxuMjAyNTpcdFxuMjAyNjpcdFx0cmV0dXJuIHJ0bmV0bGlua19tYXliZV9zZW5kKHNrYiwgbmV0LCBwb3J0aWQsIFJUTkxHUlBfVEMsXG4yMDI3Olx0XHRcdFx0XHQgICAgbi1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfRUNITyk7XG4yMDI4Olx0fVxuMjAyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gRGVsZXRpb24gTG9naWMqKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MgY2FsbGluZyBmb3IgYHRjZl9hY3Rpb25fZGVsZXRlYC4gTXkgaW1tZWRpYXRlIG1lbnRhbCBtYXAgc3RhcnRzIHRvIGFzc2VtYmxlLiBUaGlzIHN1Z2dlc3RzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbSYjMzk7cyBsaWZlY3ljbGUg4oCTIGEgZGVsZXRpb24gYWN0aW9uIHJlbGF0ZWQgdG8sIGxpa2VseSwgYSB0cmFuc2FjdGlvbiBjb250cm9sIGZyYW1ld29yayAoVENGKSwgZ2l2ZW4gdGhlIHByZWZpeC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBiZWluZyBkZWxldGVkPyBBIHJlY29yZD8gQW4gb2JqZWN0PyBBbiBlbnRpcmUgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWxldGlvbj8gQXJlIHRoZXJlIGNhc2NhZGluZyBlZmZlY3RzIHRvIGNvbnNpZGVyPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBtYW5hZ2U/IElzIHRoaXMgZGVsZXRpb24gdXNlciBpbml0aWF0ZWQsIG9yIGF1dG9tYXRpYz8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkPyBNb3JlIGltcG9ydGFudGx5LCBpcyBkYXRhIGludGVncml0eSBhdCByaXNrLCBhbmQgaXMgdGhlcmUgYW55IHJvbGxiYWNrIG9yIHJlY292ZXJ5IGltcGxlbWVudGVkPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBhY3Rpb24gdG8gcHJvcGVybHkgZXZhbHVhdGUgaXQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyB0aGlzIGlzIGJlaW5nIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0MDpcdFx0cmV0dXJuIGVycjtcbjE4NDE6XHR9XG4xODQyOlx0XG4xODQzOlx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcbjE4NDQ6XHR7XG4xODQ1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xuMTg0NjpcdFx0aW50IGk7XG4xODQ3Olx0XG4xODQ4Olx0XHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XG4xODQ5Olx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVx1MDAzZW9wcztcbjE4NTA6XHRcdFx0LyogQWN0aW9ucyBjYW4gYmUgZGVsZXRlZCBjb25jdXJyZW50bHkgc28gd2UgbXVzdCBzYXZlIHRoZWlyXG4xODUxOlx0XHRcdCAqIHR5cGUgYW5kIGlkIHRvIHNlYXJjaCBhZ2FpbiBhZnRlciByZWZlcmVuY2UgaXMgcmVsZWFzZWQuXG4xODUyOlx0XHRcdCAqL1xuMTg1MzpcdFx0XHRzdHJ1Y3QgdGNmX2lkcmluZm8gKmlkcmluZm8gPSBhLVx1MDAzZWlkcmluZm87XG4xODU0Olx0XHRcdHUzMiBhY3RfaW5kZXggPSBhLVx1MDAzZXRjZmFfaW5kZXg7XG4xODU1Olx0XG4xODU2Olx0XHRcdGFjdGlvbnNbaV0gPSBOVUxMO1xuMTg1NzpcdFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpIHtcbjE4NTg6XHRcdFx0XHQvKiBsYXN0IHJlZmVyZW5jZSwgYWN0aW9uIHdhcyBkZWxldGVkIGNvbmN1cnJlbnRseSAqL1xuMTg1OTpcdFx0XHRcdG1vZHVsZV9wdXQob3BzLVx1MDAzZW93bmVyKTtcbjE4NjA6XHRcdFx0fSBlbHNlIHtcbjE4NjE6XHRcdFx0XHRpbnQgcmV0O1xuMTg2MjpcdFxuMTg2MzpcdFx0XHRcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXG4xODY0Olx0XHRcdFx0cmV0ID0gdGNmX2lkcl9kZWxldGVfaW5kZXgoaWRyaW5mbywgYWN0X2luZGV4KTtcbjE4NjU6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTg2NjpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjE4Njc6XHRcdFx0fVxuMTg2ODpcdFx0fVxuMTg2OTpcdFx0cmV0dXJuIDA7XG4xODcwOlx0fVxuMTg3MTpcdFxuMTg3MjpcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3Jlb2ZmbG9hZF9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsXG4xODczOlx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbilcbjE4NzQ6XHR7XG4xODc1Olx0XHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xuMTg3NjpcdFx0XHRbMF0gPSBhY3Rpb24sXG4xODc3Olx0XHR9O1xuMTg3ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE4Nzk6XHRcdHNpemVfdCBhdHRyX3NpemU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTkzCgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDgyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZXNvdXJjZSBMZWFrIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGZvY3VzZXMgb24gdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUsIGlmIGB0Y2ZfaWRyX2RlbGV0ZV9pbmRleGAgZmFpbHMgYXQgaW5kZXggMCwgdGhlIGNvZGUgc2V0cyBgYWN0aW9uc1swXWAgdG8gYE5VTExgIGJ1dCBkb2VzbiYjMzk7dCBoYW5kbGUgdGhlIHJlbWFpbmluZyBhY3Rpb25zIHByb3Blcmx5LiBUaGlzIGxlYWRzIHRvIGEgcmVmZXJlbmNlIGNvdW50IGxlYWssIGEgY2xhc3NpYyByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLiBUaGUgc3Vic2VxdWVudCBlcnJvciBoYW5kbGluZyBwYXRoIGluIGB0Y2FfYWN0aW9uX2dkYCwgdXBvbiBlbmNvdW50ZXJpbmcgdGhlIGVycm9yLCBjYWxscyBgdGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKWAsIGJ1dCBiZWNhdXNlIGBhY3Rpb25zWzBdYCBpcyBub3cgYE5VTExgLCB0aGUgaXRlcmF0aW9uIHN0b3BzIHByZW1hdHVyZWx5LCBsZWF2aW5nIHJlZmVyZW5jZXMgdG8gbGF0ZXIgYWN0aW9ucyBpbiB0aGUgYXJyYXkgbGVha2VkLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQuIEl0IG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGVudGlyZSBgYWN0aW9uc2AgYXJyYXksIGZyb20gMCB0byBgVENBX0FDVF9NQVhfUFJJTyAtIDFgLCByZWdhcmRsZXNzIG9mIGBOVUxMYCBlbnRyaWVzLCBjb3JyZWN0bHkgcmVsZWFzaW5nIGFsbCByZWZlcmVuY2VzLiBUaGlzIGlzIGEgdGFyZ2V0ZWQgZml4IGZvciBhIHNwZWNpZmljIHJlc291cmNlIGxlYWsgZHVyaW5nIGVycm9yIGhhbmRsaW5nLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJJiMzOTttIGNhcmVmdWxseSBldmFsdWF0aW5nIHdoZXRoZXIgdGhlIHBhdGNoIGNvdWxkIGludHJvZHVjZSBuZXcgdnVsbmVyYWJpbGl0aWVzLgoKKiAgICoqVXNlciBTcGFjZSBMZWFrYWdlOioqIEFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgbWlnaHQgbGVhaz8gTm8sIHRoaXMgY29kZSBkb2VzbiYjMzk7dCBpbnRlcmFjdCB3aXRoIHVzZXIgc3BhY2UgZGlyZWN0bHkgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIHRoaXMgcG9zc2liaWxpdHkuCiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgQnJhbmNoaW5nOioqIERvZXMgaXQgaW50cm9kdWNlIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGBhY3Rpb25zYCBhcnJheSBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgKGA9IHt9YCksIHNvIGVhY2ggZW50cnkgaXMgZWl0aGVyIGEgdmFsaWQgcG9pbnRlciBvciBgTlVMTGAuIFRoaXMgaW5pdGlhbGl6YXRpb24gcHJldmVudHMgYW55IHBvdGVudGlhbCBtaXN1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuCiogICAqKkJ1ZmZlciBFcnJvcnM6KiogRG9lcyBpdCBpbnZvbHZlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgdW5pbml0aWFsaXplZCBidWZmZXJzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQ/IE5vcGUuCiogICAqKkJvdW5kcyBDaGVja3M6KiogRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KCkdpdmVuIHRoZXNlIG9ic2VydmF0aW9ucywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IGFib3V0IGZpeGluZyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBhbGwgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSByZWxlYXNlZCwgbm90IGFib3V0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKSGVyZSYjMzk7cyBteSByYXRpb25hbGU6CgpLTVNBTiBmb2N1c2VzIG9uIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gSW4gY29udHJhc3QsIHRoaXMgcGF0Y2ggaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgYW4gYXJyYXkgb2YgYWN0aW9ucyBhZnRlciBhIGRlbGV0aW9uIGZhaWx1cmUuIENydWNpYWxseSwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gemVyby1pbml0aWFsaXplcyB0aGUgYGFjdGlvbnNgIGFycmF5IChgPSB7fWApLiBUaGlzIGluaXRpYWxpemF0aW9uIG1lYW5zIHRoYXQgdGhlIGNvZGUgb25seSB3b3JrcyB3aXRoIGVpdGhlciB2YWxpZCBwb2ludGVycyBvciBgTlVMTGAgZW50cmllcy4gS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBmaXggYWRkcmVzc2VzIGEgcmVzb3VyY2UgbGVhayAocmVmZXJlbmNlIGNvdW50IGJ1ZykgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBpZGVudGlmeSBhbnkgaXNzdWVzIGluIHRoaXMgYXJlYS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBgVENBX0FDVF9NQVhfUFJJT2Agc2xvdHMgcmF0aGVyIHRoYW4gdGVybWluYXRpbmcgYXQgdGhlIGZpcnN0IE5VTEwgZW50cnkgdmlhIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcmVtYWluaW5nIGFjdGlvbiByZWZlcmVuY2VzIGFyZSByZWxlYXNlZCB3aGVuIGFuIGVhcmxpZXIgYWN0aW9uIGRlbGV0aW9uIGluIGEgYmF0Y2ggZmFpbHMgYWZ0ZXIgY2xlYXJpbmcgaXRzIHNsb3QuXG5cblRoZSBgYWN0aW9uc2AgYXJyYXkgaW4gYHRjYV9hY3Rpb25fZ2QoKWAgaXMgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbVENBX0FDVF9NQVhfUFJJT10gPSB7fTtgKSwgc28gYWxsIHVucG9wdWxhdGVkIG9yIGNsZWFyZWQgZW50cmllcyBhcmUgc2FmZWx5IE5VTEwuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBzdHJpY3RseSBhIHJlZmVyZW5jZSBjb3VudCAvIHJlc291cmNlIGxlYWssIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBgVENBX0FDVF9NQVhfUFJJT2Agc2xvdHMgcmF0aGVyIHRoYW4gdGVybWluYXRpbmcgYXQgdGhlIGZpcnN0IE5VTEwgZW50cnkgdmlhIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcmVtYWluaW5nIGFjdGlvbiByZWZlcmVuY2VzIGFyZSByZWxlYXNlZCB3aGVuIGFuIGVhcmxpZXIgYWN0aW9uIGRlbGV0aW9uIGluIGEgYmF0Y2ggZmFpbHMgYWZ0ZXIgY2xlYXJpbmcgaXRzIHNsb3QuXG5cblRoZSBgYWN0aW9uc2AgYXJyYXkgaW4gYHRjYV9hY3Rpb25fZ2QoKWAgaXMgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbVENBX0FDVF9NQVhfUFJJT10gPSB7fTtgKSwgc28gYWxsIHVucG9wdWxhdGVkIG9yIGNsZWFyZWQgZW50cmllcyBhcmUgc2FmZWx5IE5VTEwuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWFkLCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBpc3N1ZSBpcyBzdHJpY3RseSBhIHJlZmVyZW5jZSBjb3VudCAvIHJlc291cmNlIGxlYWssIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUyOjUzLjAwNTcwNDE1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc3ODM1NzQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2FjdGlvbl9wdXRfbWFueVwiLFxuICAgIFwidGNhX2FjdGlvbl9nZFwiLFxuICAgIFwidGNmX2FjdGlvbl9kZWxldGVcIixcbiAgICBcInRjZl9kZWxfbm90aWZ5XCIsXG4gICAgXCJ0Y19jdGxfYWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBgVENBX0FDVF9NQVhfUFJJT2Agc2xvdHMgcmF0aGVyIHRoYW4gdGVybWluYXRpbmcgYXQgdGhlIGZpcnN0IE5VTEwgZW50cnkgdmlhIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbigpYC4gVGhpcyBlbnN1cmVzIHRoYXQgcmVtYWluaW5nIGFjdGlvbiByZWZlcmVuY2VzIGFyZSByZWxlYXNlZCB3aGVuIGFuIGVhcmxpZXIgYWN0aW9uIGRlbGV0aW9uIGluIGEgYmF0Y2ggZmFpbHMgYWZ0ZXIgY2xlYXJpbmcgaXRzIHNsb3QuXFxuXFxuVGhlIGBhY3Rpb25zYCBhcnJheSBpbiBgdGNhX2FjdGlvbl9nZCgpYCBpcyB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O2ApLCBzbyBhbGwgdW5wb3B1bGF0ZWQgb3IgY2xlYXJlZCBlbnRyaWVzIGFyZSBzYWZlbHkgTlVMTC4gTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlIGlzc3VlIGlzIHN0cmljdGx5IGEgcmVmZXJlbmNlIGNvdW50IC8gcmVzb3VyY2UgbGVhaywgd2hpY2ggZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mjo1My4wMDU3MTIyMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ1MzM1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZjY1ZjYwMTMwODVkMzcyY2Q1NWRkYmRjYzc0YzI1ZmU5ZjY0NmU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA5OjUyOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXFxuaW5kZXggMzdlY2VkODRkZmE1Zi4uODY3MTBhNTk2YTBmYSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jXFxuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xcbkBAIC0xMjIzLDExICsxMjIzLDE2IEBAIHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9wdXQoc3RydWN0IHRjX2FjdGlvbiAqcClcXG4gXFxuIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbiB7XFxuLVxcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzID0gYS1cXHUwMDNlb3BzO1xcbitcXHQvKiBEZWxldGlvbiBtYXkgaGF2ZSBjbGVhcmVkIGVudHJpZXMgYmVmb3JlIGZhaWxpbmcuICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUQ0FfQUNUX01BWF9QUklPOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYSA9IGFjdGlvbnNbaV07XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XFxuK1xcbitcXHRcXHRpZiAoIWEpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRvcHMgPSBhLVxcdTAwM2VvcHM7XFxuIFxcdFxcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSlcXG4gXFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2FjdGlvbnMvYmF0Y2gtZGVsZXRlLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2FjdGlvbnMvYmF0Y2gtZGVsZXRlLmpzb25cXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9hY3Rpb25zL2JhdGNoLWRlbGV0ZS5qc29uXFxuQEAgLTAsMCArMSwxMTUgQEBcXG4rW1xcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkNzEwXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcImFjdGlvbnNcXFwiLFxcbisgICAgICAgICAgICBcXFwiZ2FjdFxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXFxuKyAgICAgICAgICAgIFtcXG4rICAgICAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFxcXCIsXFxuKyAgICAgICAgICAgICAgICAwLFxcbisgICAgICAgICAgICAgICAgMSxcXG4rICAgICAgICAgICAgICAgIDI1NVxcbisgICAgICAgICAgICBdLFxcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMVxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMlxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcHJvdG9jb2wgaXAgaW5ncmVzcyB1MzIgbWF0Y2ggdTMyIDAgMCBhY3Rpb24gZ2FjdCBpbmRleCAxXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIyNTVcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaFBhdHRlcm5cXFwiOiBcXFwidG90YWwgYWN0cyAzXFxcXFxcXFxiLippbmRleCAxIHJlZiAyIGJpbmQgMVxcXFxcXFxcYi4qaW5kZXggMiByZWYgMSBiaW5kIDBcXFxcXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXFxcXFxiXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXFxcIixcXG4rICAgICAgICAgICAgW1xcbisgICAgICAgICAgICAgICAgXFxcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XFxcIixcXG4rICAgICAgICAgICAgICAgIDAsXFxuKyAgICAgICAgICAgICAgICAxLFxcbisgICAgICAgICAgICAgICAgMjU1XFxuKyAgICAgICAgICAgIF1cXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkNzExXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJhY3Rpb25zXFxcIixcXG4rICAgICAgICAgICAgXFxcImdhY3RcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgMCxcXG4rICAgICAgICAgICAgICAgIDEsXFxuKyAgICAgICAgICAgICAgICAyNTVcXG4rICAgICAgICAgICAgXSxcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDNcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMlxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMjU1XFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInRvdGFsIGFjdHMgMlxcXFxcXFxcYi4qaW5kZXggMiByZWYgMiBiaW5kIDFcXFxcXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXFxcXFxiXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hDb3VudFxcXCI6IFxcXCIxXFxcIixcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXFxcIixcXG4rICAgICAgICAgICAgW1xcbisgICAgICAgICAgICAgICAgXFxcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XFxcIixcXG4rICAgICAgICAgICAgICAgIDAsXFxuKyAgICAgICAgICAgICAgICAxLFxcbisgICAgICAgICAgICAgICAgMjU1XFxuKyAgICAgICAgICAgIF1cXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCJkNzEzXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJEZWxldGUgYSB0YWlsIGFjdGlvbiBvbmNlIGFmdGVyIGEgZmFpbGVkIGJhdGNoXFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJhY3Rpb25zXFxcIixcXG4rICAgICAgICAgICAgXFxcImdhY3RcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgMCxcXG4rICAgICAgICAgICAgICAgIDEsXFxuKyAgICAgICAgICAgICAgICAyNTVcXG4rICAgICAgICAgICAgXSxcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMlxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjI1NVxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCJzaCAtYyAnJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXFx1MDAyNlxcdTAwMjYgJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3QnXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcInRvdGFsIGFjdHMgMVxcXFxcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcXFxcXGJcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaENvdW50XFxcIjogXFxcIjFcXFwiLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBbXFxuKyAgICAgICAgICAgICAgICBcXFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgMCxcXG4rICAgICAgICAgICAgICAgIDEsXFxuKyAgICAgICAgICAgICAgICAyNTVcXG4rICAgICAgICAgICAgXVxcbisgICAgICAgIF1cXG4rICAgIH1cXG4rXVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mjo1NC42NTEyMjI1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkwODE5Njk5NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCIsXG4gICAgXCJ0Y2FfYWN0aW9uX2dkXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICAgIFwidGNmX2RlbF9ub3RpZnlcIixcbiAgICBcInRjX2N0bF9hY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5pbmRleCAzN2VjZWQ4NGRmYTVmLi44NjcxMGE1OTZhMGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuQEAgLTEyMjMsMTEgKzEyMjMsMTYgQEAgc3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKVxuIFxuIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuIHtcbi1cdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4gXHRpbnQgaTtcbiBcbi1cdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuK1x0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSsrKSB7XG4rXHRcdHN0cnVjdCB0Y19hY3Rpb24gKmEgPSBhY3Rpb25zW2ldO1xuK1x0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzO1xuK1xuK1x0XHRpZiAoIWEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG9wcyA9IGEtXHUwMDNlb3BzO1xuIFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXG4gXHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxuQEAgLTAsMCArMSwxMTUgQEBcbitbXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzEwXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiYWN0aW9uc1wiLFxuKyAgICAgICAgICAgIFwiZ2FjdFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdLFxuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyNTVcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3RcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwidG90YWwgYWN0cyAzXFxcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzExXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImFjdGlvbnNcIixcbisgICAgICAgICAgICBcImdhY3RcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXSxcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDNcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDJcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMjU1XCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInRvdGFsIGFjdHMgMlxcXFxiLippbmRleCAyIHJlZiAyIGJpbmQgMVxcXFxiLippbmRleCAzIHJlZiAxIGJpbmQgMFxcXFxiXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXVxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiZDcxM1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiRGVsZXRlIGEgdGFpbCBhY3Rpb24gb25jZSBhZnRlciBhIGZhaWxlZCBiYXRjaFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJhY3Rpb25zXCIsXG4rICAgICAgICAgICAgXCJnYWN0XCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF0sXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDFcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMlwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjI1NVwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCJzaCAtYyAnJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXHUwMDI2XHUwMDI2ICRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0J1wiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJ0b3RhbCBhY3RzIDFcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcYlwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF1cbisgICAgICAgIF1cbisgICAgfVxuK11cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUyOjU0LjY1MTIyNTU3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NDk5OTAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG5ldC9zY2hlZC9hY3RfYXBpLmNgIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIGZpbGUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBpcyBgbmV0L3NjaGVkL2FjdF9hcGkuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbiwgYXMgaWRlbnRpZmllZCBieSB0aGUgZGlmZi4gVGhpcyBhcmVhIGhhbmRsZXMgdGhlIGFjdGlvbiBBUEkgd2l0aGluIHRoZSBuZXR3b3JraW5nIHNjaGVkdWxlciwgd2hpY2ggaXMgc29tZXRoaW5nIEknbSB2ZXJ5IGZhbWlsaWFyIHdpdGguIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb2RlIHRoYXQgaGFzIGJlZW4gY2hhbmdlZCwgd2hpY2ggaW4gdGhpcyBjYXNlIHNlZW1zIHRvIGJlIGFyb3VuZCBsaW5lIDEyMjMgb2YgdGhlIG1lbnRpb25lZCBmaWxlLiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIGxpbmUgaW4gb3JkZXIgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgYWx0ZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjAwLjUwMTIxOTM1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0XFx0XFx0cmV0ID0gX190Y2ZfaWRyX3JlbGVhc2UoYSwgYmluZCwgdHJ1ZSk7XFxuMTIxMTpcXHRcXHRcXHRpZiAocmV0ID09IEFDVF9QX0RFTEVURUQpXFxuMTIxMjpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KG9wcy1cXHUwMDNlb3duZXIpO1xcbjEyMTM6XFx0XFx0XFx0ZWxzZSBpZiAocmV0IFxcdTAwM2MgMClcXG4xMjE0OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTIxNTpcXHRcXHR9XFxuMTIxNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMTc6XFx0fVxcbjEyMTg6XFx0XFxuMTIxOTpcXHRzdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuMTIyMDpcXHR7XFxuMTIyMTpcXHRcXHRyZXR1cm4gX190Y2ZfYWN0aW9uX3B1dChwLCBmYWxzZSk7XFxuMTIyMjpcXHR9XFxuMTIyMzpcXHRcXG4xMjI0OlxcdHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbjEyMjU6XFx0e1xcbjEyMjY6XFx0XFx0aW50IGk7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdC8qIERlbGV0aW9uIG1heSBoYXZlIGNsZWFyZWQgZW50cmllcyBiZWZvcmUgZmFpbGluZy4gKi9cXG4xMjI5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUQ0FfQUNUX01BWF9QUklPOyBpKyspIHtcXG4xMjMwOlxcdFxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmEgPSBhY3Rpb25zW2ldO1xcbjEyMzE6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcztcXG4xMjMyOlxcdFxcbjEyMzM6XFx0XFx0XFx0aWYgKCFhKVxcbjEyMzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTIzNTpcXHRcXHRcXHRvcHMgPSBhLVxcdTAwM2VvcHM7XFxuMTIzNjpcXHRcXHRcXHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXFxuMTIzNzpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KG9wcy1cXHUwMDNlb3duZXIpO1xcbjEyMzg6XFx0XFx0fVxcbjEyMzk6XFx0fVxcbjEyNDA6XFx0XFxuMTI0MTpcXHRzdGF0aWMgdm9pZCB0Y2FfcHV0X2JvdW5kX21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLCBpbnQgaW5pdF9yZXNbXSlcXG4xMjQyOlxcdHtcXG4xMjQzOlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XFxuMTI0NDpcXHRcXHRpbnQgaTtcXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbjEyNDc6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXFx1MDAzZW9wcztcXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0XFx0aWYgKGluaXRfcmVzW2ldID09IEFDVF9QX0NSRUFURUQpXFxuMTI1MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjUxOlxcdFxcbjEyNTI6XFx0XFx0XFx0aWYgKHRjZl9hY3Rpb25fcHV0KGEpKVxcbjEyNTM6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4xMjU0OlxcdFxcdH1cXG4xMjU1OlxcdH1cXG4xMjU2OlxcdFxcbjEyNTc6XFx0aW50XFxuMTI1ODpcXHR0Y2ZfYWN0aW9uX2R1bXBfb2xkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBiaW5kLCBpbnQgcmVmKVxcbjEyNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzowMC41MDEzODI0MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDk1NTY0MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQWN0aW9uIEV4ZWN1dGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGVzZSBhY3Rpb25zIGFyZSBiZWluZyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBmdW5jdGlvbiDigJMgd2hlcmUgaXMgaXQgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoZSBzeXN0ZW0/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0J3MgdGhlIHJvbGUgb2YgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBpbiB0aGlzIHdob2xlIHByb2Nlc3M/IEkgc3VzcGVjdCB0aGV5J3JlIGNsb3NlbHkgcmVsYXRlZCwgbWF5YmUgZXZlbiBwYXJ0IG9mIGEgbG9vcCBvciBzb21lIGl0ZXJhdGl2ZSBvcGVyYXRpb24uXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBkaXZlLiBMZXQncyBmaXJlIHVwIGBncmVwYCBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgYm90aCBvZiB0aGVzZSBmdW5jdGlvbiBuYW1lcy4gVGhpcyBzaG91bGQgcXVpY2tseSBoaWdobGlnaHQgdGhlIGNhbGwgc2l0ZXMgZm9yIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCBhbmQgc2hvdyBtZSB3aGVyZSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIGlzIGJlaW5nIHV0aWxpemVkLCBnaXZpbmcgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgYW5hbHl6aW5nIHRoZSBhY3Rpb24gZXhlY3V0aW9uLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZXNlIGNhbGxzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjIwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzowMy41OTY5NDg3MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMjk1MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdGlvbl9wdXRfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTIyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MDMuNjcwMTg1MDEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMzNjI1MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGlzIGNvZGUsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlZmluaXRpb24gb2YgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYC4gSSdsbCBuZWVkIHRvIGtub3cgaXRzIHNpZ25hdHVyZSwgaG93IGl0J3MgdXNlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgaXRzIHJvbGUgaXMgaW4gaXRlcmF0aW5nIHRocm91Z2ggYWN0aW9ucyB3aXRoaW4gdGhlIFRyYWZmaWMgQ29udHJvbCBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nIHdpdGggYWN0aW9uczsgaXMgaXQganVzdCBwcm92aWRpbmcgaXRlcmF0aW9uLCBvciBpcyBpdCBwb3RlbnRpYWxseSBtYW5pcHVsYXRpbmcgdGhlbSBpbiBzb21lIHdheT9cblxuTmV4dCwgbXkgZm9jdXMgc2hpZnRzIHRvIGB0Y2FfYWN0aW9uX2dkYC4gSSBoYXZlIHRvIGNvbm5lY3QgdGhpcyB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBiZSBhIGhhbmRsZSwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgb3IgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGFjdGlvbi4gQ29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLCBgZ2RgIGxpa2VseSBtZWFucyBcImdlbmVyaWMgZGF0YVwiIG9yIFwiZ2xvYmFsIGRhdGFcIiBmb3IgYWN0aW9ucywgYW5kIEkgd2FudCB0byBjb25maXJtIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gaXQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBhY3Rpb25zIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgbG9vcC4gVGhlIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBmaWxlIGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlc2UgY3J1Y2lhbCBkZWZpbml0aW9ucyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcmVsYXRpb25zaGlwIHRob3JvdWdobHkgYmVmb3JlIEkgY2FuIGdvIGFueSBmdXJ0aGVyLiBJIGFsc28ga25vdyB0aGF0IHRoaXMgZmlsZSBsaWtlbHkgY29udGFpbnMgdGhlIGNvcmUgb2YgdGhlIEFjdGlvbiBBUEkgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzowOC4wMDY0Mzk0NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMTk2MjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BrdF9jbHMuaD0yNzk9c3RhdGljIGlubGluZSB2b2lkIHRjZl9leHRzX3B1dF9uZXQoc3RydWN0IHRjZl9leHRzICpleHRzKVxcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI5NC1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Mjk1OiNkZWZpbmUgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykgXFxcXFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yOTYtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRDQV9BQ1RfTUFYX1BSSU8gXFx1MDAyNlxcdTAwMjYgKChhKSA9IGFjdGlvbnNbaV0pOyBpKyspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjEwLjUxODQwNzgyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NDAxMjU2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBY3Rpb24gSXRlcmF0b3IgaW4gVHJhZmZpYyBDb250cm9sKipcblxuT2theSwgc28gSSB3YXMgZGlnZ2luZyBpbnRvIHRoZSB0cmFmZmljIGNvbnRyb2wgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYC4gSSBub3RpY2VkIHNvbWV0aGluZyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBpbiBob3cgaXQgaXRlcmF0ZXMgdGhyb3VnaCBhY3Rpb25zLiBUaGUgbWFjcm8sIGAjZGVmaW5lIHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpYCwgY2xldmVybHkgdXNlcyBgYWN0aW9uc1tpXSA9PSBOVUxMYCBhcyBpdHMgdGVybWluYXRpb24gY29uZGl0aW9uLiBCdXQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuXG5cblRoZSBpc3N1ZSBhcmlzZXMgZHVyaW5nIGJhdGNoIGFjdGlvbiBkZWxldGlvbiwgd2hlbiBhY3Rpb25zIGFyZSBzZXQgdG8gYE5VTExgIGFmdGVyIHRoZXkncmUgcmVtb3ZlZCAoZWl0aGVyIGR1cmluZyBvciBhZnRlciB0aGUgZGVsZXRpb24gbG9vcCkuIElmIGFuIGVycm9yIHBvcHMgdXAgKmJlZm9yZSogYWxsIGFjdGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGlzIGRlbGV0aW9uIHByb2Nlc3MsIHRoZSBpdGVyYXRvciBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gIHdhcyBwcmVtYXR1cmVseSBzdG9wcGluZyB3aGVuIGl0IGhpdCB0aGF0IGZpcnN0IGBOVUxMYCBwb2ludGVyLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBtZW1vcnkgbGVhayBiZWNhdXNlIHRoZSBhY3Rpb25zICphZnRlciogdGhhdCBgTlVMTGAgcG9pbnRlciB3ZXJlIG5ldmVyIGRlLXJlZmVyZW5jZWQgb3IgcmVsZWFzZWQhXG5cblRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCBmcm9tIHRoZSBwYXRjaCwgaW52b2x2ZXMgY2hhbmdpbmcgdGhlIGl0ZXJhdGlvbiBpbiBgdGNmX2FjdGlvbl9wdXRfbWFueWAgc28gdGhhdCBpdCBsb29wcyB0aHJvdWdoICphbGwqIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBlZmZlY3RpdmVseSBza2lwcGluZyBgTlVMTGAgZW50cmllcyAoYGlmICghYSkgY29udGludWU7YCkgcmF0aGVyIHRoYW4gYnJlYWtpbmcgdGhlIGxvb3AgYXQgdGhlIGZpcnN0IGBOVUxMYC4gVGhpcyB3YXksICpldmVyeSogYWN0aW9uIGdldHMgcHJvY2Vzc2VkLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcm1lZGlhdGUgYE5VTExgIHBvaW50ZXJzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgd29ya3MsIEknbSBnb2luZyB0byByZWFkIHRoZSBjb2RlIG9mIGB0Y2FfYWN0aW9uX2dkYCBhcm91bmQgbGluZSAyMDMwLCB3aGVyZSB0aGUgYmF0Y2ggZGVsZXRpb24gbG9naWMgd291bGQgbGlrZWx5IGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWN0aW9ucyBhcmUgYWN0dWFsbHkgaGFuZGxlZCBkdXJpbmcgdGhpcyBkZWxldGlvbiBwcm9jZXNzIHRvIHNlZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvcmlnaW5hbCBwcm9ibGVtIGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgcHJvcG9zZWQgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MTcuMTU4NTM1Mzc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzA6XFx0c3RhdGljIGludFxcbjIwMzE6XFx0dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjIwMzI6XFx0XFx0ICAgICAgdTMyIHBvcnRpZCwgaW50IGV2ZW50LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMjAzMzpcXHR7XFxuMjAzNDpcXHRcXHRpbnQgaSwgcmV0O1xcbjIwMzU6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0FDVF9NQVhfUFJJTyArIDFdO1xcbjIwMzY6XFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0O1xcbjIwMzc6XFx0XFx0c2l6ZV90IGF0dHJfc2l6ZSA9IDA7XFxuMjAzODpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307XFxuMjAzOTpcXHRcXG4yMDQwOlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX0FDVF9NQVhfUFJJTywgbmxhLCBOVUxMLFxcbjIwNDE6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbjIwNDI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjA0MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIwNDQ6XFx0XFxuMjA0NTpcXHRcXHRpZiAoZXZlbnQgPT0gUlRNX0RFTEFDVElPTiBcXHUwMDI2XFx1MDAyNiBuLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX1JPT1QpIHtcXG4yMDQ2OlxcdFxcdFxcdGlmICh0YlsxXSlcXG4yMDQ3OlxcdFxcdFxcdFxcdHJldHVybiB0Y2FfYWN0aW9uX2ZsdXNoKG5ldCwgdGJbMV0sIG4sIHBvcnRpZCwgZXh0YWNrKTtcXG4yMDQ4OlxcdFxcbjIwNDk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBuZXRsaW5rIGF0dHJpYnV0ZXMgd2hpbGUgZmx1c2hpbmcgVEMgYWN0aW9uXFxcIik7XFxuMjA1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yMDUxOlxcdFxcdH1cXG4yMDUyOlxcdFxcbjIwNTM6XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBUQ0FfQUNUX01BWF9QUklPIFxcdTAwMjZcXHUwMDI2IHRiW2ldOyBpKyspIHtcXG4yMDU0OlxcdFxcdFxcdGFjdCA9IHRjZl9hY3Rpb25fZ2V0XzEobmV0LCB0YltpXSwgbiwgcG9ydGlkLCBleHRhY2spO1xcbjIwNTU6XFx0XFx0XFx0aWYgKElTX0VSUihhY3QpKSB7XFxuMjA1NjpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGFjdCk7XFxuMjA1NzpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4yMDU4OlxcdFxcdFxcdH1cXG4yMDU5OlxcdFxcdFxcdGF0dHJfc2l6ZSArPSB0Y2ZfYWN0aW9uX2ZpbGxfc2l6ZShhY3QpO1xcbjIwNjA6XFx0XFx0XFx0YWN0aW9uc1tpIC0gMV0gPSBhY3Q7XFxuMjA2MTpcXHRcXHR9XFxuMjA2MjpcXHRcXG4yMDYzOlxcdFxcdGF0dHJfc2l6ZSA9IHRjZl9hY3Rpb25fZnVsbF9hdHRyc19zaXplKGF0dHJfc2l6ZSk7XFxuMjA2NDpcXHRcXG4yMDY1OlxcdFxcdGlmIChldmVudCA9PSBSVE1fR0VUQUNUSU9OKVxcbjIwNjY6XFx0XFx0XFx0cmV0ID0gdGNmX2dldF9ub3RpZnkobmV0LCBwb3J0aWQsIG4sIGFjdGlvbnMsIGF0dHJfc2l6ZSwgZXZlbnQsXFxuMjA2NzpcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuMjA2ODpcXHRcXHRlbHNlIHsgLyogZGVsZXRlICovXFxuMjA2OTpcXHRcXHRcXHRyZXQgPSB0Y2ZfZGVsX25vdGlmeShuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLCBleHRhY2spO1xcbjIwNzA6XFx0XFx0XFx0aWYgKHJldClcXG4yMDcxOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjIwNzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA3MzpcXHRcXHR9XFxuMjA3NDpcXHRlcnI6XFxuMjA3NTpcXHRcXHR0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpO1xcbjIwNzY6XFx0XFx0cmV0dXJuIHJldDtcXG4yMDc3OlxcdH1cXG4yMDc4OlxcdFxcbjIwNzk6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfYWRkX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMjA4MDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcXG4yMDgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgdTMyIHBvcnRpZCwgc2l6ZV90IGF0dHJfc2l6ZSxcXG4yMDgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwODM6XFx0e1xcbjIwODQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4yMDg1OlxcdFxcbjIwODY6XFx0XFx0c2tiID0gYWxsb2Nfc2tiKG1heChhdHRyX3NpemUsIE5MTVNHX0dPT0RTSVpFKSwgR0ZQX0tFUk5FTCk7XFxuMjA4NzpcXHRcXHRpZiAoIXNrYilcXG4yMDg4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTtcXG4yMDg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1MzoxNy4xNTg3MDEzODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY5ODcwNTExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHRjZl9kZWxfbm90aWZ5YCBhbmQgaXRzIEltcGFjdCBvbiBgYWN0aW9uc1tdYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUgYHRjZl9kZWxfbm90aWZ5YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYGFjdGlvbnNbXWAgYXJyYXkuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBgYWN0aW9uc1tdYCBhcnJheSBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgaG93IHRyYWZmaWMgY29udHJvbCBwb2xpY2llcyBhcmUgZW5mb3JjZWQsIGFuZCBkZWxldGluZyBhIHJ1bGUsIG9yIG1vZGlmeWluZyBhbiBleGlzdGluZyBvbmUgdmlhIHRoZSBmdW5jdGlvbiBiZWluZyBleHBsb3JlZCBoYXMgdG8gaGF2ZSBzcGVjaWZpYyBlZmZlY3RzLiBJIG5lZWQgdG8gdHJhY2UgZXhhY3RseSBob3cgYHRjZl9kZWxfbm90aWZ5YCBtb2RpZmllcyB0aG9zZSBhcnJheSBlbnRyaWVzLiBEb2VzIGl0IHNpbXBseSBjbGVhciB0aGVtPyBEb2VzIGl0IHJlb3JkZXIgdGhlbT8gRG9lcyBpdCBjb21wbGV0ZWx5IHJlbW92ZSB0aGVtPyBEb2VzIGl0IGRvIGEgY29tYmluYXRpb24gb2YgYWxsIG9mIHRoZSBhYm92ZSwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHNjZW5hcmlvPyBUaGUgcHJlY2lzZSBtZWNoYW5pY3Mgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgcGFyYW1vdW50IHRvIGRldGVybWluaW5nIGhvdyBydWxlIHJlbW92YWwvbW9kaWZpY2F0aW9uIGlzIGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gYWx0ZXJzIGBhY3Rpb25zW11gIGlzIGdvaW5nIHRvIGJlIGtleSB0byBncmFzcGluZyBpdHMgb3ZlcmFsbCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHRoYXQgYXJyYXksIGFuZCB0aGUgcG9pbnRlcnMgaXQgY29udGFpbnMsIHRvIGVuc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlIGRlbGV0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjI2Ljg1NzQwODc2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MzQ3MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9kZWxfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuYz0xOTIzPWludCB0Y2ZfYWN0aW9uX3Jlb2ZmbG9hZF9jYihmbG93X2luZHJfYmxvY2tfYmluZF9jYl90ICpjYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTk4MC1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE5ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDAxLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAwMjpzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMy1cXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMS1cXHR9IGVsc2Uge1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxMjpcXHRcXHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMTMtXFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDY4LVxcdGVsc2UgeyAvKiBkZWxldGUgKi9cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNjk6XFx0XFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MjYuOTc2NzYwODM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTU3NTE4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDE5ODAtMjAyOSBvZiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFRoaXMgc2VjdGlvbiBvZiB0aGUgY29kZS4uLiByaWdodCwgaXQncyBhYm91dCB0aGUgYWN0aW9uIG1vZHVsZSBBUEksIGlzbid0IGl0PyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBoZXJlLiBPa2F5LCAqc2Nyb2xsaW5nLi4uKiAgTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG4qKkZvY3VzaW5nIG9uIHRoZSBBY3Rpb24gTW9kdWxlIEFQSSBTZWN0aW9uKipcblxuUmlnaHQsIGxpbmVzIDE5ODAtMjAyOS4gIE15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyB0aGF0IHRoaXMgbGlrZWx5IGNvdmVycyB0aGUgY29yZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBmb3IgYWN0aW9uIG1vZHVsZXMsIGFsb25nIHdpdGggcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGRhdGEuIFdlIHdpbGwgZm9jdXMgc3BlY2lmaWNhbGx5IG9uOiBob3cgdGhlIGtlcm5lbCByZWdpc3RlcnMsIHVucmVnaXN0ZXJzIGFuZCBoYW5kbGVzIHRoZSBhY3Rpb25zLiAgSSdsbCBzdGFydCBieSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucy4gKlJlYWRpbmcuLi4qIEFoLCB0aGVyZSdzIGBhY3RfcmVnaXN0ZXIoKWAuIFllcCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gVGhlIGBhY3RfdW5yZWdpc3RlcigpYCBmdW5jdGlvbiBzaG91bGQgYmUgY2xvc2UuXG5cbkkgYmV0IHdlIGhhdmUgc29tZSBjcml0aWNhbCBzdHJ1Y3R1cmVzIGRlZmluZWQgYXJvdW5kIHRoaXM6IHByb2JhYmx5IHNvbWUgc29ydCBvZiBgc3RydWN0IGFjdF9vcHNgLCBvciBzb21ldGhpbmcgc2ltaWxhciwgZm9yIGRlZmluaW5nIHRoZSBvcGVyYXRpb25zIHRoYXQgYW4gYWN0aW9uIG1vZHVsZSBuZWVkcyB0byBpbXBsZW1lbnQuIEknbSBsb29raW5nIGZvciBhIHdheSB0aGUgYWN0aW9uIGZyYW1ld29yayBrbm93cyBhYm91dCB0aGUgbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGZyb20gdGhlIHNwZWNpZmljIGFjdGlvbiBtb2R1bGVzLlxuXG4qUmVhZGluZyBjbG9zZWx5Li4uKiBPa2F5LCBsb29rcyBsaWtlIGl0IHByb2JhYmx5IGhhbmRsZXMgcmVnaXN0cmF0aW9uLiBgYWN0X3JlZ2lzdGVyKClgIGNlcnRhaW5seSBsb29rcyB0byBiZSBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBgYWN0X3VucmVnaXN0ZXIoKWAgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBOb3csIEkgd2FudCB0byBmaW5kIHRoZSBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIHRoZSBhY3Rpb25zIHRoZW1zZWx2ZXM7IHRoZSByZWdpc3RyYXRpb24gQVBJIGlzIGdvaW5nIHRvIG5lZWQgYSB3YXkgdG8ga25vdyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYWN0aW9uLiBJdCdzIHByb2JhYmx5IHRoZSBnbHVlIGJldHdlZW4gdGhlIGFjdGlvbiBtb2R1bGVzIGFuZCB0aGUgdGMgZnJhbWV3b3JrLiBJIGJldCB0aGVyZSBhcmUgc29tZSBjYWxsYmFja3MgaW52b2x2ZWQuXG5cbipEaXZpbmcgZGVlcGVyLi4uKiBZZXAsIHRoZXJlIGl0IGlzISBgc3RydWN0IGFjdF9vcHNgLiBJIHdhcyByaWdodC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gVGhpcyBsaWtlbHkgaW5jbHVkZXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBsaWtlIGB0Y2ZfYWN0aW9uX2V4ZWMoKWAsIGFuZCBvdGhlciBjcnVjaWFsIGFjdGlvbi1zcGVjaWZpYyBvcGVyYXRpb25zLiBJIG5lZWQgdG8gZXhhbWluZSB0aGVzZSBzdHJ1Y3QgZWxlbWVudHMgY2xvc2VseSB0byBzZWUgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgdGhleSByZXF1aXJlIGFuZCBob3cgdGhleSdyZSB1c2VkLiAgVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGFjdGlvbiBtb2R1bGUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZSBmcmFtZXdvcmsgaGFuZGxlcyB0aGUgbW9kdWxlcyEgT2theSwgZ29vZCEgSSBjYW4gc2VlIHRoZSB1c3VhbCBzdXNwZWN0cyBhbmQgcG90ZW50aWFsIHRyYXBzIGZvciBtb2R1bGUgaW1wbGVtZW50YXRpb25zIGFuZCB0aGVpciBsaWZlY3ljbGUsIGFuZCB3aWxsIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6MzcuOTM0Mjg0MTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5ODA6XFx0XFxuMTk4MTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRjZl9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4xOTgyOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbjE5ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICB1MzIgcG9ydGlkLCBzaXplX3QgYXR0cl9zaXplLFxcbjE5ODQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTk4NTpcXHR7XFxuMTk4NjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjE5ODc6XFx0XFxuMTk4ODpcXHRcXHRza2IgPSBhbGxvY19za2IobWF4KGF0dHJfc2l6ZSwgTkxNU0dfR09PRFNJWkUpLCBHRlBfS0VSTkVMKTtcXG4xOTg5OlxcdFxcdGlmICghc2tiKVxcbjE5OTA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0JVRlMpO1xcbjE5OTE6XFx0XFxuMTk5MjpcXHRcXHRpZiAodGNhX2dldF9maWxsKHNrYiwgYWN0aW9ucywgcG9ydGlkLCBuLVxcdTAwM2VubG1zZ19zZXEsIDAsIFJUTV9ERUxBQ1RJT04sXFxuMTk5MzpcXHRcXHRcXHRcXHQgMCwgMiwgZXh0YWNrKSBcXHUwMDNjPSAwKSB7XFxuMTk5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gZmlsbCBuZXRsaW5rIFRDIGFjdGlvbiBhdHRyaWJ1dGVzXFxcIik7XFxuMTk5NTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xOTk2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbjE5OTc6XFx0XFx0fVxcbjE5OTg6XFx0XFxuMTk5OTpcXHRcXHRyZXR1cm4gc2tiO1xcbjIwMDA6XFx0fVxcbjIwMDE6XFx0XFxuMjAwMjpcXHRzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjIwMDM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIHUzMiBwb3J0aWQsXFxuMjAwNDpcXHRcXHRcXHRcXHQgIHNpemVfdCBhdHRyX3NpemUsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMDA1OlxcdHtcXG4yMDA2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMjAwNzpcXHRcXHRpbnQgcmV0O1xcbjIwMDg6XFx0XFxuMjAwOTpcXHRcXHRpZiAoIXJ0bmxfbm90aWZ5X25lZWRlZChuZXQsIG4tXFx1MDAzZW5sbXNnX2ZsYWdzLCBSVE5MR1JQX1RDKSkge1xcbjIwMTA6XFx0XFx0XFx0c2tiID0gTlVMTDtcXG4yMDExOlxcdFxcdH0gZWxzZSB7XFxuMjAxMjpcXHRcXHRcXHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcXG4yMDEzOlxcdFxcdFxcdFxcdFxcdFxcdCBleHRhY2spO1xcbjIwMTQ6XFx0XFx0XFx0aWYgKElTX0VSUihza2IpKVxcbjIwMTU6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc2tiKTtcXG4yMDE2OlxcdFxcdH1cXG4yMDE3OlxcdFxcbjIwMTg6XFx0XFx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cXG4yMDE5OlxcdFxcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjM3LjkzNDUyODc5NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTIyODQ0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gRGVsZXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSdzIGNhbGxpbmcgZm9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIHN0YXJ0cyB0byBhc3NlbWJsZS4gVGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0ncyBsaWZlY3ljbGUg4oCTIGEgZGVsZXRpb24gYWN0aW9uIHJlbGF0ZWQgdG8sIGxpa2VseSwgYSB0cmFuc2FjdGlvbiBjb250cm9sIGZyYW1ld29yayAoVENGKSwgZ2l2ZW4gdGhlIHByZWZpeC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBiZWluZyBkZWxldGVkPyBBIHJlY29yZD8gQW4gb2JqZWN0PyBBbiBlbnRpcmUgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWxldGlvbj8gQXJlIHRoZXJlIGNhc2NhZGluZyBlZmZlY3RzIHRvIGNvbnNpZGVyPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBtYW5hZ2U/IElzIHRoaXMgZGVsZXRpb24gdXNlciBpbml0aWF0ZWQsIG9yIGF1dG9tYXRpYz8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkPyBNb3JlIGltcG9ydGFudGx5LCBpcyBkYXRhIGludGVncml0eSBhdCByaXNrLCBhbmQgaXMgdGhlcmUgYW55IHJvbGxiYWNrIG9yIHJlY292ZXJ5IGltcGxlbWVudGVkPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBhY3Rpb24gdG8gcHJvcGVybHkgZXZhbHVhdGUgaXQuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6NDAuMDU3Mzc3MDU1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg3MjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTc2Nz1zdGF0aWMgaW50IHRjYV9hY3Rpb25fZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTE4NDItXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxODQzOnN0YXRpYyBpbnQgdGNmX2FjdGlvbl9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xODQ0LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MjAwMj1zdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDE4LVxcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMDE5OlxcdHJldCA9IHRjZl9hY3Rpb25fZGVsZXRlKG5ldCwgYWN0aW9ucyk7XFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDIwLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjQwLjE0OTI1NzY3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzkzMzE4NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgdGNmX2FjdGlvbl9kZWxldGVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYHRjZl9hY3Rpb25fZGVsZXRlYCBmdW5jdGlvbiBhcm91bmQgbGluZSAxODQzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIC0gZGVsZXRlIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgc3lzdGVtIGFyZSBhbHdheXMgY3JpdGljYWwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IG1hbmlwdWxhdGU/IEnigJltIGltbWVkaWF0ZWx5IGdvaW5nIHRvIGxvb2sgZm9yIGFueSBvYnZpb3VzIHJhY2UgY29uZGl0aW9ucywgbG9ja3MsIG9yIHBvdGVudGlhbCBmb3IgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBvZnRlbiB3aGVyZSBzdWJ0bGUgYnV0IGRldmFzdGF0aW5nIGJ1Z3MgcmVzaWRlLCBzbyB0aGF04oCZcyB3aGVyZSBJJ2xsIGZvY3VzIG15IGluaXRpYWwgYW5hbHlzaXMuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWluZywgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gc29tZSBmb3JtIG9mIFwidHJhbnNpZW50IGNhY2hlIGZpbGVcIiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYW5kIHRoZSBzY29wZSBvZiBpdHMgZGVsZXRlIG9wZXJhdGlvbnMuIE5vdywgbGV04oCZcyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F54oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6NDMuOTQyNTc5MjgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDA6XFx0XFx0cmV0dXJuIGVycjtcXG4xODQxOlxcdH1cXG4xODQyOlxcdFxcbjE4NDM6XFx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcXG4xODQ0OlxcdHtcXG4xODQ1OlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmE7XFxuMTg0NjpcXHRcXHRpbnQgaTtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbjE4NDk6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXFx1MDAzZW9wcztcXG4xODUwOlxcdFxcdFxcdC8qIEFjdGlvbnMgY2FuIGJlIGRlbGV0ZWQgY29uY3VycmVudGx5IHNvIHdlIG11c3Qgc2F2ZSB0aGVpclxcbjE4NTE6XFx0XFx0XFx0ICogdHlwZSBhbmQgaWQgdG8gc2VhcmNoIGFnYWluIGFmdGVyIHJlZmVyZW5jZSBpcyByZWxlYXNlZC5cXG4xODUyOlxcdFxcdFxcdCAqL1xcbjE4NTM6XFx0XFx0XFx0c3RydWN0IHRjZl9pZHJpbmZvICppZHJpbmZvID0gYS1cXHUwMDNlaWRyaW5mbztcXG4xODU0OlxcdFxcdFxcdHUzMiBhY3RfaW5kZXggPSBhLVxcdTAwM2V0Y2ZhX2luZGV4O1xcbjE4NTU6XFx0XFxuMTg1NjpcXHRcXHRcXHRhY3Rpb25zW2ldID0gTlVMTDtcXG4xODU3OlxcdFxcdFxcdGlmICh0Y2ZfYWN0aW9uX3B1dChhKSkge1xcbjE4NTg6XFx0XFx0XFx0XFx0LyogbGFzdCByZWZlcmVuY2UsIGFjdGlvbiB3YXMgZGVsZXRlZCBjb25jdXJyZW50bHkgKi9cXG4xODU5OlxcdFxcdFxcdFxcdG1vZHVsZV9wdXQob3BzLVxcdTAwM2Vvd25lcik7XFxuMTg2MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NjE6XFx0XFx0XFx0XFx0aW50IHJldDtcXG4xODYyOlxcdFxcbjE4NjM6XFx0XFx0XFx0XFx0Lyogbm93IGRvIHRoZSBkZWxldGUgKi9cXG4xODY0OlxcdFxcdFxcdFxcdHJldCA9IHRjZl9pZHJfZGVsZXRlX2luZGV4KGlkcmluZm8sIGFjdF9pbmRleCk7XFxuMTg2NTpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xODY2OlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTg2NzpcXHRcXHRcXHR9XFxuMTg2ODpcXHRcXHR9XFxuMTg2OTpcXHRcXHRyZXR1cm4gMDtcXG4xODcwOlxcdH1cXG4xODcxOlxcdFxcbjE4NzI6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfcmVvZmZsb2FkX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCxcXG4xODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb24pXFxuMTg3NDpcXHR7XFxuMTg3NTpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge1xcbjE4NzY6XFx0XFx0XFx0WzBdID0gYWN0aW9uLFxcbjE4Nzc6XFx0XFx0fTtcXG4xODc4OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTg3OTpcXHRcXHRzaXplX3QgYXR0cl9zaXplO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo0My45NDI3NTcwMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc0ODU2NDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGEgVHJhZmZpYyBDb250cm9sIEFjdGlvbiBEZWxldGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkndmUgYmVlbiBsb29raW5nIGF0LiBJdCBzZWVtcyBsaWtlIHRoZSBgdGNmX2FjdGlvbl9kZWxldGVgIGZ1bmN0aW9uLCBhcyBpdCBwcm9jZXNzZXMgZWFjaCBhY3Rpb24sIHNldHMgYGFjdGlvbnNbaV1gIHRvIGBOVUxMYC4gVGhlIHByb2JsZW0gYXJpc2VzIHdoZW4gYHRjZl9pZHJfZGVsZXRlX2luZGV4YCByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUsIGluZGljYXRpbmcgYSBmYWlsdXJlLiBJbiB0aGF0IGNhc2UsIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgYWxzbyByZXR1cm5zIGFuIGVycm9yIChgcmV0IFx1MDAzYyAwYCkuIE5vdywgdGhlIGNvZGUgdGhlbiBoaXRzIGBlcnI6IHRjZl9hY3Rpb25fcHV0X21hbnkoYWN0aW9ucylgLiBUaGUgb2xkIHZlcnNpb24gb2YgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHVzZWQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCwgd2hpY2ggd291bGQgY2hlY2sgYCgoYSkgPSBhY3Rpb25zW2ldKWAgYW5kIGltbWVkaWF0ZWx5IGJyZWFrIGlmIGl0IGVuY291bnRlcmVkIGEgYE5VTExgIHBvaW50ZXIuIEJlY2F1c2UgYGFjdGlvbnNbaV1gIGhhZCBhbHJlYWR5IGJlZW4gc2V0IHRvIGBOVUxMYCBmb3IgdGhlIGZhaWxpbmcgYWN0aW9uIChvciBldmVuIGFjdGlvbnMgdGhhdCBmYWlsZWQgcHJldmlvdXNseSksIHRoaXMgY2F1c2VkIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgdG8gYmFpbCBvdXQgcHJlbWF0dXJlbHkuIEVzc2VudGlhbGx5LCBpdCB3b3VsZCBzdG9wIGF0IGluZGV4IDAgKG9yIHdoaWNoZXZlciBpbmRleCB3YXMgYE5VTExgKSwgbGVhdmluZyBzdWJzZXF1ZW50IGFjdGlvbnMgaW4gdGhlIGBhY3Rpb25zYCBhcnJheSB1bnRvdWNoZWQsIHJlc3VsdGluZyBpbiBhIG1lbW9yeSBsZWFrLiBOb3csIEkgc2VlIHRoZSBmaXggaXMgdGhhdCBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgY2hhbmdlZCB0byBsb29wIHRocm91Z2ggYWxsIGAwLi5UQ0FfQUNUX01BWF9QUklPYCBpbmRpY2VzLCBwdXR0aW5nIGFueSBub24tYE5VTExgIGFjdGlvbiBwb2ludGVycyBpdCBmaW5kcy5cblxuTm93LCBsZXQncyBjb25zaWRlciBpZiB0aGlzIG1lcml0cyBmdXp6aW5nOlxuXG4xLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBidWcgcmVzaWRlcyBpbiB0cmFmZmljIGNvbnRyb2wvcGFja2V0IHNjaGVkdWxpbmcgY29kZSAoYG5ldC9zY2hlZC9hY3RfYXBpLmNgKSwgd2hpY2ggaXMgY29yZSB0byB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgaXMgcHJpbWUgcmVhbC1lc3RhdGUgZm9yIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG4yLiAgKipBY2Nlc3M6KiogSXQncyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChgUlRNX0RFTEFDVElPTmAsIGBydG5ldGxpbmtgLCBhbmQgYE5FVExJTktfUk9VVEVgKSwgd2hpY2ggaXMgc29tZXRoaW5nIFN5emthbGxlciBoYXMgYmVlbiBoYW1tZXJpbmcgb24gZm9yIHNvbWUgdGltZS5cbjMuICAqKkV4ZWN1dGlvbjoqKiBJIGNhbiBkZWZpbml0ZWx5IGdldCB0aGlzIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsIG1hY2hpbmUgKGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUpIHdpdGggYSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYSBuZXRsaW5rIHNvY2tldCwgbWFraW5nIGl0IGVhc3kgdG8gdGVzdC5cblxuQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgSSB3YW50IHRvIGZ1enouIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFRpbWUgdG8gc2VhcmNoIGZvciBgYWN0X2FwaWAgd2l0aGluIGBuZXQvc2NoZWQvTWFrZWZpbGVgIG9yIGBuZXQvc2NoZWQvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTM6NDguNjkxMzI2NjM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDU5MDg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3RfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19ORVRfQ0xTKVxcdFxcdCs9IGNsc19hcGkub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkVUX0NMU19BQ1QpXFx0Kz0gYWN0X2FwaS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19ORVRfQUNUX1BPTElDRSlcXHQrPSBhY3RfcG9saWNlLm9cXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMi0vKlxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MzogKiBuZXQvc2NoZWQvYWN0X2FwaS5jXFx0UGFja2V0IGFjdGlvbiBBUEkuXFxubmV0L3NjaGVkL2FjdF9hcGkuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIyLSNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX3BlZGl0LmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoyMzojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9jb25ubWFyay5jOjE5OiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY29ubm1hcmsuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTI5LVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jOjMwOiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTMxLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jLTIzLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3QuYzoyNDojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvYWN0X2N0LmMtMjUtI2luY2x1ZGUgXFx1MDAzY25ldC9pcC5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0xNi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfY3RpbmZvLmM6MTc6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9jdGluZm8uYy0xOC0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTM6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTQtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvYWN0X25hdC5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90Y19hY3QvdGNfbmF0LmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9uYXQuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvYWN0X25hdC5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbm5ldC9zY2hlZC9hY3RfcG9saWNlLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2FjdF9wb2xpY2UuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L2dzby5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bGluay5oXFx1MDAzZVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxOTojaW5jbHVkZSBcXHUwMDNjbmV0L2FjdF9hcGkuaFxcdTAwM2VcXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxubmV0L3NjaGVkL2Nsc19mdy5jOjIxOiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9jbHNfZncuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6MTg6I2luY2x1ZGUgXFx1MDAzY25ldC9hY3RfYXBpLmhcXHUwMDNlXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0zOC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGxpbmsuaFxcdTAwM2VcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjM5OiNpbmNsdWRlIFxcdTAwM2NuZXQvYWN0X2FwaS5oXFx1MDAzZVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtNDAtI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjQ4Ljc4NTkyMjM1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjgwNDY5NzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9DTFNfQUNUYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIHRoZSBgbmV0L3NjaGVkL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZ28tdG8gc3BvdCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdmFyaW91cyBuZXR3b3JrIHNjaGVkdWxlciBvcHRpb25zIGFyZSBjb250cm9sbGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY2xlYXIgZGVmaW5pdGlvbiB0aGVyZSwgaG9wZWZ1bGx5IHdpdGggdGhlIHVzdWFsIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgc3BlbGwgb3V0IHRoZSBwcmVyZXF1aXNpdGVzLiBJJ20gcmVhbGx5IGN1cmlvdXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIG9yIHVuZGVybHlpbmcgc3Vic3lzdGVtcyAqbXVzdCogYmUgZW5hYmxlZCBiZWZvcmUgYE5FVF9DTFNfQUNUYCBiZWNvbWVzIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNyaXRpY2FsIGZvciBwcm9wZXIga2VybmVsIGNvbmZpZ3VyYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBjdXN0b21pemluZyB0aGUgbmV0d29yayBzdGFjayBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbCBuZWVkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1MS40NjYzOTQ1MjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODY3NzM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19BQ1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1MS41NzUwNzY1MThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3ODY2OTA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIExpbmUgNzAyLi4uIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24gYmVnaW5zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24uIEknbSBsb29raW5nIGZvciB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHNjaGVkdWxpbmcgZGlzY2lwbGluZXMgYW5kIHF1ZXVpbmcgYWxnb3JpdGhtcy4gSSdsbCBleHBlY3QgdG8gZmluZCB0aGUgdHlwaWNhbCBgY29uZmlnYCBibG9ja3MsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbmQgbWF5YmUgc29tZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIGluZmx1ZW5jaW5nIGhvdyB0aGlzIGlzIGFsbCB3aXJlZCB0b2dldGhlci4gRGVwZW5kaW5nIG9uIHdoYXQgSSBzZWUgdGhlcmUgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIG90aGVyIHJlbGF0ZWQgZmlsZXMsIGxpa2UgdGhlIGhlYWRlciBmaWxlcy4gSSdtIGludGVyZXN0ZWQgdG8gaWRlbnRpZnkgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBjZXJ0YWluIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnksIGFuZCBob3cgdGhlIGtlcm5lbCBpcyBzZXQgdXAgb3ZlcmFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1NS4zNTM3NDc1MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjk1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk1OlxcdFxcdCAgbWF0Y2hlcy5cXG4gNjk2OlxcdFxcdCAgQ3VycmVudCBzdXBwb3J0ZWQgbWF0Y2ggaXMgXFxcInBvbGljeVxcXCIgd2hpY2ggYWxsb3dzIHBhY2tldCBjbGFzc2lmaWNhdGlvblxcbiA2OTc6XFx0XFx0ICBiYXNlZCBvbiBJUHNlYyBwb2xpY3kgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGVjYXBzdWxhdGlvblxcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNzAwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cXG4gNzAxOlxcdFxcbiA3MDI6XFx0Y29uZmlnIE5FVF9DTFNfQUNUXFxuIDcwMzpcXHRcXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcbiA3MDQ6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNzA1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXFxuIDcwODpcXHRcXHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXFxuIDcwOTpcXHRcXHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cXG4gNzEwOlxcdFxcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXFxuIDcxMTpcXHRcXG4gNzEyOlxcdFxcdCAgQSByZWNlbnQgdmVyc2lvbiBvZiB0aGUgaXByb3V0ZTIgcGFja2FnZSBpcyByZXF1aXJlZCB0byB1c2VcXG4gNzEzOlxcdFxcdCAgZXh0ZW5kZWQgbWF0Y2hlcy5cXG4gNzE0OlxcdFxcbiA3MTU6XFx0Y29uZmlnIE5FVF9BQ1RfUE9MSUNFXFxuIDcxNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhZmZpYyBQb2xpY2luZ1xcXCJcXG4gNzE3OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gNzE4OlxcdFxcdGhlbHBcXG4gNzE5OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBkbyB0cmFmZmljIHBvbGljaW5nLCBpLmUuIHN0cmljdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1NS4zNTM4MzYxMDFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxMDEwODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5FVF9DTFNfQUNUIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBORVRfQ0xTX0FDVGAgaXMgYXBwYXJlbnRseSBkZWZpbmVkIHdpdGhpbiBgbmV0L3NjaGVkL0tjb25maWdgLiBUaW1lIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgdG9wLWxldmVsIGRlcGVuZGVuY3kgZm9yIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBidWlsZC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmN5LCBsaWtlbHkgaW4gdGhlIGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAgYmxvY2suIE5vdywgSSBzaG91bGQgZXhhbWluZSB0aGUgYmVnaW5uaW5nIG9mIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBmaXJzdCA0MCBsaW5lcy4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgaW5pdGlhbCBvdmVydmlldyBhbmQgYW55IGludHJvZHVjdG9yeSBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gaG93IGBORVRfQ0xTX0FDVGAgaXMgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1OC4wNjM5NDc1MDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUX1NDSEVEXFxuICAgNzpcXHRcXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX1NDSF9GSUZPXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFdoZW4gdGhlIGtlcm5lbCBoYXMgc2V2ZXJhbCBwYWNrZXRzIHRvIHNlbmQgb3V0IG92ZXIgYSBuZXR3b3JrXFxuICAxMTpcXHRcXHQgIGRldmljZSwgaXQgaGFzIHRvIGRlY2lkZSB3aGljaCBvbmVzIHRvIHNlbmQgZmlyc3QsIHdoaWNoIG9uZXMgdG9cXG4gIDEyOlxcdFxcdCAgZGVsYXksIGFuZCB3aGljaCBvbmVzIHRvIGRyb3AuIFRoaXMgaXMgdGhlIGpvYiBvZiB0aGUgcXVldWVpbmdcXG4gIDEzOlxcdFxcdCAgZGlzY2lwbGluZXMsIHNldmVyYWwgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGhvdyB0byBkbyB0aGlzXFxuICAxNDpcXHRcXHQgIFxcXCJmYWlybHlcXFwiIGhhdmUgYmVlbiBwcm9wb3NlZC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxcbiAgMTc6XFx0XFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxcbiAgMTg6XFx0XFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cXG4gIDE5OlxcdFxcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDIwOlxcdFxcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XFxuICAyMTpcXHRcXHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxcbiAgMjI6XFx0XFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxcbiAgMjM6XFx0XFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgVG8gYWRtaW5pc3RlciB0aGVzZSBzY2hlZHVsZXJzLCB5b3UnbGwgbmVlZCB0aGUgdXNlci1sZXZlbCB1dGlsaXRpZXNcXG4gIDI2OlxcdFxcdCAgZnJvbSB0aGUgcGFja2FnZSBpcHJvdXRlMit0YyBhdFxcbiAgMjc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyL1xcdTAwM2UuICBUaGF0IHBhY2thZ2VcXG4gIDI4OlxcdFxcdCAgYWxzbyBjb250YWlucyBzb21lIGRvY3VtZW50YXRpb247IGZvciBtb3JlLCBjaGVjayBvdXRcXG4gIDI5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcXHUwMDNlLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxcbiAgMzI6XFx0XFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxcbiAgMzM6XFx0XFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIDM0OlxcdFxcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxcbiAgMzU6XFx0XFx0ICBcXHUwMDNjaHR0cDovL2RpZmZzZXJ2LnNvdXJjZWZvcmdlLm5ldC9cXHUwMDNlLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB0byBcXFwiL3Byb2MgZmlsZSBzeXN0ZW1cXFwiIGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXFxuICAzODpcXHRcXHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcXG4gIDM5OlxcdFxcdCAgL3Byb2MvbmV0L3BzY2hlZC5cXG4gIDQwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1Mzo1OC4wNjQwNDE1NjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3ODg1NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgbmV0d29ya2luZyBjb25maWd1cmF0aW9uLlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfQUNUYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5J3JlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgZXhwZWN0ZWQsIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGN1cnJlbnQgc2V0dGluZ3MuIEJ1dCB0aGF0J3Mgbm90IGVub3VnaCDigJMgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciBgTkVUX1NDSEVEYCB0byBldmVuIGJlICphdmFpbGFibGUqIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjUzOjU5Ljk0MjkwMjQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI5ODgxMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZS4qbmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjY5PXNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI3MS1zb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MDIuNTcyNzkwMDkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjIwMjAzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZywgYW5kIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4gSW5zdGVhZCBvZiBibGluZGx5IGdyZXBwaW5nLCBsZXQncyB0YWtlIGEgdGFyZ2V0ZWQgYXBwcm9hY2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBuZXQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMjcwLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoLi4uIHdlbGwsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UgYW5kIGdlbmVyYWwga25vd2xlZGdlIG9mIHRoZSBwcm9qZWN0J3Mgc3RydWN0dXJlLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIHRoYXQgcmVsYXRlIHRvIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBvciBzb21lIGFzcGVjdCBvZiBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLiBJdCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgc3BlY2lmaWMgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gYSBkcml2ZXIncyBlbmFibGVtZW50LiBUaW1lIHRvIGdvIGh1bnRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MDQuOTM0ODE0NTE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0c291cmNlIFxcXCJuZXQvYnJpZGdlL0tjb25maWdcXFwiXFxuIDI2MTpcXHRzb3VyY2UgXFxcIm5ldC9kc2EvS2NvbmZpZ1xcXCJcXG4gMjYyOlxcdHNvdXJjZSBcXFwibmV0LzgwMjFxL0tjb25maWdcXFwiXFxuIDI2MzpcXHRzb3VyY2UgXFxcIm5ldC9sbGMvS2NvbmZpZ1xcXCJcXG4gMjY0OlxcdHNvdXJjZSBcXFwibmV0L3gyNS9LY29uZmlnXFxcIlxcbiAyNjU6XFx0c291cmNlIFxcXCJuZXQvbGFwYi9LY29uZmlnXFxcIlxcbiAyNjY6XFx0c291cmNlIFxcXCJuZXQvcGhvbmV0L0tjb25maWdcXFwiXFxuIDI2NzpcXHRzb3VyY2UgXFxcIm5ldC82bG93cGFuL0tjb25maWdcXFwiXFxuIDI2ODpcXHRzb3VyY2UgXFxcIm5ldC9pZWVlODAyMTU0L0tjb25maWdcXFwiXFxuIDI2OTpcXHRzb3VyY2UgXFxcIm5ldC9tYWM4MDIxNTQvS2NvbmZpZ1xcXCJcXG4gMjcwOlxcdHNvdXJjZSBcXFwibmV0L3NjaGVkL0tjb25maWdcXFwiXFxuIDI3MTpcXHRzb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG4gMjcyOlxcdHNvdXJjZSBcXFwibmV0L2Ruc19yZXNvbHZlci9LY29uZmlnXFxcIlxcbiAyNzM6XFx0c291cmNlIFxcXCJuZXQvYmF0bWFuLWFkdi9LY29uZmlnXFxcIlxcbiAyNzQ6XFx0c291cmNlIFxcXCJuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1xcXCJcXG4gMjc1OlxcdHNvdXJjZSBcXFwibmV0L3Ztd192c29jay9LY29uZmlnXFxcIlxcbiAyNzY6XFx0c291cmNlIFxcXCJuZXQvbmV0bGluay9LY29uZmlnXFxcIlxcbiAyNzc6XFx0c291cmNlIFxcXCJuZXQvbXBscy9LY29uZmlnXFxcIlxcbiAyNzg6XFx0c291cmNlIFxcXCJuZXQvbnNoL0tjb25maWdcXFwiXFxuIDI3OTpcXHRzb3VyY2UgXFxcIm5ldC9oc3IvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MDQuOTM0OTM0MTc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNDI3MDQ4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBTY2hlZHVsaW5nIGFuZCBBY3Rpb24gRGVsZXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5d29yZHMganVtcCBvdXQ6IGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgb2YgY291cnNlLCBqdXN0IGBORVRgIOKAkyBzdGFuZGFyZCBuZXR3b3JraW5nIHN0dWZmLiBSaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgc2NoZWR1bGluZyBhbmQgY2xhc3MgYWN0aW9ucywgc3BlY2lmaWNhbGx5LlxuXG5Ob3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhlIGlzc3VlLCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IHdoYXQncyBjaGFuZ2VkIGFuZCB3aGF0J3MgYWZmZWN0ZWQuIExldCdzIHNlZS4uLiB0aGUgcGF0Y2ggbW9kaWZpZXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBIbW0sIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFsdGVyZWQgaXMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBJbnRlcmVzdGluZy5cblxuTXkgYXBwcm9hY2ggaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgdGNmX2FjdGlvbl9wdXRfbWFueWAsIGlzIHVzZWQuIExldCdzIHNlZSB0aGUgY2FsbGVycyBvZiBgdGNmX2FjdGlvbl9wdXRfbWFueWAgYW5kIHdoYXQncyBpbnZvbHZlZCBpbiB0aGUgXCJ0YyBhY3Rpb24gZGVsZXRlL2dldCBiYXRjaCBvcGVyYXRpb25zXCIgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYC5cblxuU3BlY2lmaWNhbGx5LCBoZXJlJ3Mgd2hhdCBzZWVtcyBkaXJlY3RseSByZWxldmFudDpcbiogICBgdGNmX2FjdGlvbl9wdXRfbWFueWAg4oCTIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpdHNlbGYuXG4qICAgYHRjYV9hY3Rpb25fZ2RgIOKAkyB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IHRoYXQgY2FsbHMgYHRjZl9hY3Rpb25fcHV0X21hbnlgLiBUaGF0J3Mgd2hlcmUgaXQncyBhbGwgY29taW5nIGZyb20uXG4qICAgYHRjZl9hY3Rpb25fZGVsZXRlYCDigJMgTG9va3MgbGlrZSBpdCdzIHRoZSBsb29wIHRoYXQgY2xlYXJzIGFjdGlvbiBlbnRyaWVzLlxuKiAgIGB0Y2ZfZGVsX25vdGlmeWAg4oCTIFRoaXMgY2FsbHMgYHRjZl9hY3Rpb25fZGVsZXRlYCwgc28gZGVsZXRpb24gaXMgYmVpbmcgdHJpZ2dlcmVkIGhlcmUuXG4qICAgYHRjX2N0bF9hY3Rpb25gIOKAkyBUaGlzIG9uZSBoYW5kbGVzIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGZvciBhY3Rpb24gcmVxdWVzdHMgKFJUTVxcX05FV0FDVElPTiwgUlRNXFxfREVMQUNUSU9OLCBSVE1cXF9HRVRBQ1RJT04pLiBUaGUgc3RhbmRhcmQgQ1JVRCBvcGVyYXRpb25zLlxuXG5TbywgbmV4dCBJJ2xsIGdvIHRocm91Z2ggdGhlIGRlY2xhcmF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBgdGNhX2FjdGlvbl9nZGAgYW5kIGB0Y19jdGxfYWN0aW9uYCwgYW5kIHRyYWNlIHRoZWlyIHJlc3BlY3RpdmUgY2FsbGVycy4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoZSBmbG93IG9mIGFjdGlvbiBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uLCBhbmQgZGVsZXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDoxNC4yNzc2NDA5MzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2Mzg4OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2N0bF9hY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jPTIxNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHRjYWFfcG9saWN5W1RDQV9ST09UX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMTUxLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjE1MjpzdGF0aWMgaW50IHRjX2N0bF9hY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjE1My1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0yMzE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciB0Y19hY3Rpb25fcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTU6XFx0ey5tc2d0eXBlID0gUlRNX05FV0FDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTY6XFx0ey5tc2d0eXBlID0gUlRNX0RFTEFDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9ufSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIzMTc6XFx0ey5tc2d0eXBlID0gUlRNX0dFVEFDVElPTiwgLmRvaXQgPSB0Y19jdGxfYWN0aW9uLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjMxOC1cXHQgLmR1bXBpdCA9IHRjX2R1bXBfYWN0aW9ufSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MTQuMzc0MDM2MDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY4NDE4NDY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRjX2N0bF9hY3Rpb25gIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHRjX2N0bF9hY3Rpb25gIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3RhY2sgaXMgZnVuY3Rpb25pbmcuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWN0aW9uIGlzIHRyaWdnZXJlZCwgYW5kIHdoYXQgcGFyYW1ldGVycyBpdCdzIHJlbHlpbmcgb24sIHNwZWNpZmljYWxseS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IHRoZSBjb250cm9sIGZsb3cg4oCTIGVuc3VyZSBpdCBoYW5kbGVzIHZhcmlvdXMgY29uZGl0aW9ucyByb2J1c3RseSBhbmQgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG9idmlvdXMgcmFjZSBjb25kaXRpb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBsdXJraW5nIGluIHRoZXJlLiBJdCdzIGFsc28gaW1wb3J0YW50IHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LCBhcmUgd2Ugb3B0aW1pemluZyBmb3IgdGhlIGV4cGVjdGVkIHVzZSBjYXNlPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGVudHJ5IHBvaW50cyBhbmQgd29yayBteSB3YXkgdGhyb3VnaCB0aGUgY29yZSBsb2dpYywgdGFraW5nIGRldGFpbGVkIG5vdGVzIGFuZCBwb3NzaWJseSBzZXR0aW5nIHVwIHNvbWUgcXVpY2sgdGVzdHMgdG8gdmFsaWRhdGUgdGhlIGFzc3VtcHRpb25zIEknbSBtYWtpbmcgYWJvdXQgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk1OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjE3LjA1ODIyMjk2M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTUwOlxcdH07XFxuMjE1MTpcXHRcXG4yMTUyOlxcdHN0YXRpYyBpbnQgdGNfY3RsX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMjE1MzpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIxNTQ6XFx0e1xcbjIxNTU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMjE1NjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX1JPT1RfTUFYICsgMV07XFxuMjE1NzpcXHRcXHR1MzIgcG9ydGlkID0gTkVUTElOS19DQihza2IpLnBvcnRpZDtcXG4yMTU4OlxcdFxcdHUzMiBmbGFncyA9IDA7XFxuMjE1OTpcXHRcXHRpbnQgcmV0ID0gMDtcXG4yMTYwOlxcdFxcbjIxNjE6XFx0XFx0aWYgKChuLVxcdTAwM2VubG1zZ190eXBlICE9IFJUTV9HRVRBQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxuMjE2MjpcXHRcXHQgICAgIW5ldGxpbmtfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKVxcbjIxNjM6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yMTY0OlxcdFxcbjIxNjU6XFx0XFx0cmV0ID0gbmxtc2dfcGFyc2VfZGVwcmVjYXRlZChuLCBzaXplb2Yoc3RydWN0IHRjYW1zZyksIHRjYSxcXG4yMTY2OlxcdFxcdFxcdFxcdFxcdCAgICAgVENBX1JPT1RfTUFYLCBOVUxMLCBleHRhY2spO1xcbjIxNjc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjE2ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIxNjk6XFx0XFxuMjE3MDpcXHRcXHRpZiAodGNhW1RDQV9BQ1RfVEFCXSA9PSBOVUxMKSB7XFxuMjE3MTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOZXRsaW5rIGFjdGlvbiBhdHRyaWJ1dGVzIG1pc3NpbmdcXFwiKTtcXG4yMTcyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxNzM6XFx0XFx0fVxcbjIxNzQ6XFx0XFxuMjE3NTpcXHRcXHQvKiBuLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0NSRUFURSAqL1xcbjIxNzY6XFx0XFx0c3dpdGNoIChuLVxcdTAwM2VubG1zZ190eXBlKSB7XFxuMjE3NzpcXHRcXHRjYXNlIFJUTV9ORVdBQ1RJT046XFxuMjE3ODpcXHRcXHRcXHQvKiB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGFsbCBvdGhlciBmbGFnc1xcbjIxNzk6XFx0XFx0XFx0ICogaW1wbHkgY3JlYXRlIG9ubHkgaWYgaXQgZG9lc24ndCBleGlzdFxcbjIxODA6XFx0XFx0XFx0ICogTm90ZSB0aGF0IENSRUFURSB8IEVYQ0wgaW1wbGllcyB0aGF0XFxuMjE4MTpcXHRcXHRcXHQgKiBidXQgc2luY2Ugd2Ugd2FudCBhdm9pZCBhbWJpZ3VpdHkgKGVnIHdoZW4gZmxhZ3NcXG4yMTgyOlxcdFxcdFxcdCAqIGlzIHplcm8pIHRoZW4ganVzdCBzZXQgdGhpc1xcbjIxODM6XFx0XFx0XFx0ICovXFxuMjE4NDpcXHRcXHRcXHRpZiAobi1cXHUwMDNlbmxtc2dfZmxhZ3MgXFx1MDAyNiBOTE1fRl9SRVBMQUNFKVxcbjIxODU6XFx0XFx0XFx0XFx0ZmxhZ3MgPSBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0U7XFxuMjE4NjpcXHRcXHRcXHRyZXQgPSB0Y2ZfYWN0aW9uX2FkZChuZXQsIHRjYVtUQ0FfQUNUX1RBQl0sIG4sIHBvcnRpZCwgZmxhZ3MsXFxuMjE4NzpcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuMjE4ODpcXHRcXHRcXHRicmVhaztcXG4yMTg5OlxcdFxcdGNhc2UgUlRNX0RFTEFDVElPTjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MTcuMDU4MzUxODYzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjk5MzY4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgYWN0X2FwaS5jYCBmb3Igc29tZSBBY3Rpb24gSW5zaWdodHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGUgYWN0aW9uIEFQSSwgYW5kIEkndmUgZ290IGEgaHVuY2ggYWJvdXQgYSBzcGVjaWZpYyBzZWN0aW9uIHRoYXQgbmVlZHMgY2xvc2VyIHNjcnV0aW55LiBMZXQncyB6ZXJvIGluIG9uIGxpbmVzIDIxODUtMjIwNSBvZiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuIFRoaXMgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIHZpZXcgb2YgdGhlIGNvZGUgaGFuZGxpbmcgYWN0aW9uIGNvbmZpZ3VyYXRpb24gb3IgcHJvY2Vzc2luZzsgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIGhvdyBhY3Rpb25zIGFyZSBwYXJzZWQsIHZhbGlkYXRlZCwgb3IgcGVyaGFwcyBldmVuIGV4ZWN1dGVkIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGRldGFpbHMgcmVsYXRlZCB0byBob3cgYWN0aW9uIHBhcmFtZXRlcnMgYXJlIHJlY2VpdmVkIGFuZCBob3cgdGhleSdyZSBtYXBwZWQgdG8gdGhlIHNwZWNpZmljIGFjdGlvbiBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgc2VjdGlvbiB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHNvbWUgaW50ZXJhY3Rpb25zLCBsaWtlIGhvdyB1c2VyLXNwYWNlIHRvb2xzIGNvbW11bmljYXRlIHdpdGggdGhlIGtlcm5lbCB0byBzZXQgdXAgYW5kIG1hbmFnZSB0aGVzZSBhY3Rpb25zLiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgY3JpdGljYWwgdGhlcmUgYWJvdXQgYWN0aW9uIHN0YXRlIHRyYW5zaXRpb25zLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBvciBldmVuIGVycm9yIGhhbmRsaW5nIHRoYXQgbWlnaHQgaGF2ZSBiZWFyaW5nIG9uIHRoZSBpc3N1ZSBJ4oCZbSBsb29raW5nIGF0LiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoaXMgc2VjdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjE5LjQyODI5MjE3NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTg1OlxcdFxcdFxcdFxcdGZsYWdzID0gVENBX0FDVF9GTEFHU19SRVBMQUNFO1xcbjIxODY6XFx0XFx0XFx0cmV0ID0gdGNmX2FjdGlvbl9hZGQobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLCBwb3J0aWQsIGZsYWdzLFxcbjIxODc6XFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbjIxODg6XFx0XFx0XFx0YnJlYWs7XFxuMjE4OTpcXHRcXHRjYXNlIFJUTV9ERUxBQ1RJT046XFxuMjE5MDpcXHRcXHRcXHRyZXQgPSB0Y2FfYWN0aW9uX2dkKG5ldCwgdGNhW1RDQV9BQ1RfVEFCXSwgbixcXG4yMTkxOlxcdFxcdFxcdFxcdFxcdCAgICBwb3J0aWQsIFJUTV9ERUxBQ1RJT04sIGV4dGFjayk7XFxuMjE5MjpcXHRcXHRcXHRicmVhaztcXG4yMTkzOlxcdFxcdGNhc2UgUlRNX0dFVEFDVElPTjpcXG4yMTk0OlxcdFxcdFxcdHJldCA9IHRjYV9hY3Rpb25fZ2QobmV0LCB0Y2FbVENBX0FDVF9UQUJdLCBuLFxcbjIxOTU6XFx0XFx0XFx0XFx0XFx0ICAgIHBvcnRpZCwgUlRNX0dFVEFDVElPTiwgZXh0YWNrKTtcXG4yMTk2OlxcdFxcdFxcdGJyZWFrO1xcbjIxOTc6XFx0XFx0ZGVmYXVsdDpcXG4yMTk4OlxcdFxcdFxcdEJVRygpO1xcbjIxOTk6XFx0XFx0fVxcbjIyMDA6XFx0XFxuMjIwMTpcXHRcXHRyZXR1cm4gcmV0O1xcbjIyMDI6XFx0fVxcbjIyMDM6XFx0XFxuMjIwNDpcXHRzdGF0aWMgc3RydWN0IG5sYXR0ciAqZmluZF9kdW1wX2tpbmQoc3RydWN0IG5sYXR0ciAqKm5sYSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MTkuNDI4NDgyMTM1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5MjMzODgwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBUcmFmZmljIENvbnRyb2wgQWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCwgYHRjYV9hY3Rpb25fZ2RgLCBgdGNmX2RlbF9ub3RpZnlgLCBgdGNmX2FjdGlvbl9kZWxldGVgLCBhbmQgYHRjX2N0bF9hY3Rpb25gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0IHdpdGhpbiB0aGUga2VybmVsJ3MgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay5cblxuR29vZCwgaXQgc2VlbXMgdGhlc2UgYXJlIGFsbCBzdGF0aWMgZnVuY3Rpb25zLCBjb25maXJtZWQgYnkgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIGluIHRoZSBjb2RlIHNuaXBwZXQgSSBmb3VuZC4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gYGFjdF9hcGkub2AuIEluY2x1ZGluZyB0aGVzZSBzeW1ib2xzIGZvciBmdXp6aW5nIGlzIGEgc29saWQgYXBwcm9hY2gsIHNpbmNlIGBrYWxsc3ltc2Agd2lsbCBtYWtlIHRoZSBzeW1ib2xzIGF2YWlsYWJsZSB1bmxlc3MgdGhlIGNvbXBpbGVyIGNvbXBsZXRlbHkgaW5saW5lcyB0aGVtLCB3aGljaCBpcyB1bmxpa2VseS5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBlcnJvciBoYW5kbGluZyBkdXJpbmcgYmF0Y2ggZGVsZXRpb24gb2YgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgYHRjZl9hY3Rpb25fcHV0X21hbnlgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmVmZXJlbmNlIGxlYWsgaWYgZWFybGllciBhY3Rpb25zIGFyZSBkZWxldGVkIGFuZCB0aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIGxhdGVyLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoaXMgZml4IGFpbXMgdG8gZW5zdXJlIHRoYXQgbm8gZGFuZ2xpbmcgcmVmZXJlbmNlcyBhcmUgbGVmdCBiZWhpbmQgd2hlbiBlcnJvcnMgb2NjdXIgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gVGhpcyBzZWVtcyBpbXBvcnRhbnQuXG5cbkZpbmFsbHksIHRoZSBjb25maWd1cmF0aW9ucyB0byBiZSBlbmFibGVkIGFyZSBgTkVUX0NMU19BQ1RgIGFuZCBgTkVUX1NDSEVEYC4gTWFrZXMgc2Vuc2UsIHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBpbiBgbmV0L3NjaGVkL2FjdF9hcGkuY2AuXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gc3VibWl0IHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ4NSwiT3V0cHV0VG9rZW5zIjoxNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDoyNS4zNTE4NzI5MjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwNDY0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCIsXG4gICAgXCJ0Y2FfYWN0aW9uX2dkXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICAgIFwidGNmX2RlbF9ub3RpZnlcIixcbiAgICBcInRjX2N0bF9hY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCIsXG4gICAgXCJ0Y2FfYWN0aW9uX2dkXCIsXG4gICAgXCJ0Y2ZfYWN0aW9uX2RlbGV0ZVwiLFxuICAgIFwidGNmX2RlbF9ub3RpZnlcIixcbiAgICBcInRjX2N0bF9hY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgY2xlYW51cCBsb2dpYyBpbiB0cmFmZmljIGNvbnRyb2wncyBiYXRjaCBhY3Rpb24gZGVsZXRpb24gZXJyb3IgaGFuZGxpbmcgcGF0aCAodGNmX2FjdGlvbl9wdXRfbWFueSBpbiBuZXQvc2NoZWQvYWN0X2FwaS5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMQUNUSU9OKSBhbmQgaXMgd2VsbC1zdWl0ZWQgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDoyNS40NzA5MjU5NjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMzEzMTIzMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MjUuNDcxMzc3MDE4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODAzMTI2NjY0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cXG5cXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmNjVmNjAxMzA4NWQzNzJjZDU1ZGRiZGNjNzRjMjVmZTlmNjQ2ZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwOTo1Mjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jXG5pbmRleCAzN2VjZWQ4NGRmYTVmLi44NjcxMGE1OTZhMGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuY1xuQEAgLTEyMjMsMTEgKzEyMjMsMTYgQEAgc3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKVxuIFxuIHN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxuIHtcbi1cdHN0cnVjdCB0Y19hY3Rpb24gKmE7XG4gXHRpbnQgaTtcbiBcbi1cdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcbi1cdFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXHUwMDNlb3BzO1xuK1x0LyogRGVsZXRpb24gbWF5IGhhdmUgY2xlYXJlZCBlbnRyaWVzIGJlZm9yZSBmYWlsaW5nLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSsrKSB7XG4rXHRcdHN0cnVjdCB0Y19hY3Rpb24gKmEgPSBhY3Rpb25zW2ldO1xuK1x0XHRjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzO1xuK1xuK1x0XHRpZiAoIWEpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdG9wcyA9IGEtXHUwMDNlb3BzO1xuIFx0XHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpXG4gXHRcdFx0bW9kdWxlX3B1dChvcHMtXHUwMDNlb3duZXIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmVmN2NhNGE2Nzc1YmNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvYWN0aW9ucy9iYXRjaC1kZWxldGUuanNvblxuQEAgLTAsMCArMSwxMTUgQEBcbitbXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzEwXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBmaXJzdCBhY3Rpb24gZGVsZXRpb24gZmFpbHNcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiYWN0aW9uc1wiLFxuKyAgICAgICAgICAgIFwiZ2FjdFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdLFxuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDFcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAyXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggM1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHByb3RvY29sIGlwIGluZ3Jlc3MgdTMyIG1hdGNoIHUzMiAwIDAgYWN0aW9uIGdhY3QgaW5kZXggMVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgYWN0aW9ucyBkZWwgYWN0aW9uIGdhY3QgaW5kZXggMSBhY3Rpb24gZ2FjdCBpbmRleCAyIGFjdGlvbiBnYWN0IGluZGV4IDNcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIyNTVcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIGFjdGlvbnMgbHMgYWN0aW9uIGdhY3RcIixcbisgICAgICAgIFwibWF0Y2hQYXR0ZXJuXCI6IFwidG90YWwgYWN0cyAzXFxcXGIuKmluZGV4IDEgcmVmIDIgYmluZCAxXFxcXGIuKmluZGV4IDIgcmVmIDEgYmluZCAwXFxcXGIuKmluZGV4IDMgcmVmIDEgYmluZCAwXFxcXGJcIixcbisgICAgICAgIFwibWF0Y2hDb3VudFwiOiBcIjFcIixcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFtcbisgICAgICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBmbHVzaCBhY3Rpb24gZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAwLFxuKyAgICAgICAgICAgICAgICAxLFxuKyAgICAgICAgICAgICAgICAyNTVcbisgICAgICAgICAgICBdXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJkNzExXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZWxlYXNlIHRhaWwgcmVmZXJlbmNlcyBhZnRlciBtaWRkbGUgYWN0aW9uIGRlbGV0aW9uIGZhaWxzXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImFjdGlvbnNcIixcbisgICAgICAgICAgICBcImdhY3RcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXSxcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGFkZCBhY3Rpb24gcGFzcyBpbmRleCAxXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDNcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDJcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMiBhY3Rpb24gZ2FjdCBpbmRleCAzXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMjU1XCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcInRvdGFsIGFjdHMgMlxcXFxiLippbmRleCAyIHJlZiAyIGJpbmQgMVxcXFxiLippbmRleCAzIHJlZiAxIGJpbmQgMFxcXFxiXCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBbXG4rICAgICAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgZmx1c2ggYWN0aW9uIGdhY3RcIixcbisgICAgICAgICAgICAgICAgMCxcbisgICAgICAgICAgICAgICAgMSxcbisgICAgICAgICAgICAgICAgMjU1XG4rICAgICAgICAgICAgXVxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiZDcxM1wiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiRGVsZXRlIGEgdGFpbCBhY3Rpb24gb25jZSBhZnRlciBhIGZhaWxlZCBiYXRjaFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJhY3Rpb25zXCIsXG4rICAgICAgICAgICAgXCJnYWN0XCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF0sXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgYWN0aW9ucyBhZGQgYWN0aW9uIHBhc3MgaW5kZXggMVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGFjdGlvbnMgYWRkIGFjdGlvbiBwYXNzIGluZGV4IDJcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwcm90b2NvbCBpcCBpbmdyZXNzIHUzMiBtYXRjaCB1MzIgMCAwIGFjdGlvbiBnYWN0IGluZGV4IDFcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDEgYWN0aW9uIGdhY3QgaW5kZXggMlwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjI1NVwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCJzaCAtYyAnJFRDIGFjdGlvbnMgZGVsIGFjdGlvbiBnYWN0IGluZGV4IDIgXHUwMDI2XHUwMDI2ICRUQyBhY3Rpb25zIGxzIGFjdGlvbiBnYWN0J1wiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJ0b3RhbCBhY3RzIDFcXFxcYi4qaW5kZXggMSByZWYgMiBiaW5kIDFcXFxcYlwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgW1xuKyAgICAgICAgICAgICAgICBcIiRUQyBhY3Rpb25zIGZsdXNoIGFjdGlvbiBnYWN0XCIsXG4rICAgICAgICAgICAgICAgIDAsXG4rICAgICAgICAgICAgICAgIDEsXG4rICAgICAgICAgICAgICAgIDI1NVxuKyAgICAgICAgICAgIF1cbisgICAgICAgIF1cbisgICAgfVxuK11cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjI1LjQ3MTM3ODA2N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTQ1NzU5NDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyJ3MgYXNraW5nIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBkaXNzZWN0IHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9hY3RfYXBpLmNgLiBJdCBsb29rcyBsaWtlIGNoYW5nZXMgYXJvdW5kIHRoZSBgdGNmX2FjdGlvbl9wdXRfbWFueWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhlIGRpZmYgbG9va3MgdG8gYmUgdG91Y2hpbmcgdGhlIGxvb3AgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIGFuIGFycmF5IG9mIGB0Y19hY3Rpb25gIHBvaW50ZXJzLiBCZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucyBhYm91dCBmdXp6aW5nIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGhvdyB0aGlzIHNwZWNpZmljIGNoYW5nZSBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGdyYWIgdGhlIHJlbGV2YW50IGNvZGUgYmxvY2sgYXJvdW5kIGxpbmUgMTIyMywgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBuZWVkZWQgY29udGV4dCBmb3IgYXNzZXNzaW5nIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIG1pZ2h0IGV4cG9zZSBkdXJpbmcgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjM2LjkyODk3NTA0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjkyMjUzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdGlvbl9wdXRfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTIyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6MzcuODU4MjEwMTI1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTYzNzg5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqRGVlcCBEaXZlIGludG8gYHRjZl9hY3Rpb25fcHV0X21hbnlgIENhbGxzaXRlcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgaXMgYmVpbmcgdXNlZCwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGFuYWx5emluZyBhIGZldyBrZXkgY2FsbCBzaXRlcyB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgdGNhX2FjdGlvbl9nZGAgYW5kIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAuIEknbSBnb2luZyB0byBsb29rIGF0IG90aGVyIHBsYWNlcyB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgYXMgd2VsbC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIHdlJ3JlIGJhdGNoaW5nIG9yIGJ1bGstcHV0dGluZyBhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBkZXNpZ24sIGVmZmljaWVuY3ksIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBkb2N1bWVudCBldmVyeXRoaW5nIGZvciBsYXRlciBhbmFseXNpcyBhbmQgcmV2aWV3LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjQxLjU1NDU5MTgzMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcdFxcdHJldCA9IF9fdGNmX2lkcl9yZWxlYXNlKGEsIGJpbmQsIHRydWUpO1xcbjEyMTE6XFx0XFx0XFx0aWYgKHJldCA9PSBBQ1RfUF9ERUxFVEVEKVxcbjEyMTI6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4xMjEzOlxcdFxcdFxcdGVsc2UgaWYgKHJldCBcXHUwMDNjIDApXFxuMTIxNDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEyMTU6XFx0XFx0fVxcbjEyMTY6XFx0XFx0cmV0dXJuIHJldDtcXG4xMjE3OlxcdH1cXG4xMjE4OlxcdFxcbjEyMTk6XFx0c3RhdGljIGludCB0Y2ZfYWN0aW9uX3B1dChzdHJ1Y3QgdGNfYWN0aW9uICpwKVxcbjEyMjA6XFx0e1xcbjEyMjE6XFx0XFx0cmV0dXJuIF9fdGNmX2FjdGlvbl9wdXQocCwgZmFsc2UpO1xcbjEyMjI6XFx0fVxcbjEyMjM6XFx0XFxuMTIyNDpcXHRzdGF0aWMgdm9pZCB0Y2ZfYWN0aW9uX3B1dF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSlcXG4xMjI1OlxcdHtcXG4xMjI2OlxcdFxcdGludCBpO1xcbjEyMjc6XFx0XFxuMTIyODpcXHRcXHQvKiBEZWxldGlvbiBtYXkgaGF2ZSBjbGVhcmVkIGVudHJpZXMgYmVmb3JlIGZhaWxpbmcuICovXFxuMTIyOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVENBX0FDVF9NQVhfUFJJTzsgaSsrKSB7XFxuMTIzMDpcXHRcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphID0gYWN0aW9uc1tpXTtcXG4xMjMxOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHM7XFxuMTIzMjpcXHRcXG4xMjMzOlxcdFxcdFxcdGlmICghYSlcXG4xMjM0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyMzU6XFx0XFx0XFx0b3BzID0gYS1cXHUwMDNlb3BzO1xcbjEyMzY6XFx0XFx0XFx0aWYgKHRjZl9hY3Rpb25fcHV0KGEpKVxcbjEyMzc6XFx0XFx0XFx0XFx0bW9kdWxlX3B1dChvcHMtXFx1MDAzZW93bmVyKTtcXG4xMjM4OlxcdFxcdH1cXG4xMjM5OlxcdH1cXG4xMjQwOlxcdFxcbjEyNDE6XFx0c3RhdGljIHZvaWQgdGNhX3B1dF9ib3VuZF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGluaXRfcmVzW10pXFxuMTI0MjpcXHR7XFxuMTI0MzpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xcbjEyNDQ6XFx0XFx0aW50IGk7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdFxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG4xMjQ3OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVxcdTAwM2VvcHM7XFxuMTI0ODpcXHRcXG4xMjQ5OlxcdFxcdFxcdGlmIChpbml0X3Jlc1tpXSA9PSBBQ1RfUF9DUkVBVEVEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDo0MS41NTQ3NTIwNDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1NjgzNDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIHR3by4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIG9mIGB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbmAgYW5kIGB0Y2FfYWN0aW9uX2dkYC4gSSBrbm93IHRoZXkncmUgcmVsYXRlZCB0byB0cmFmZmljIGNvbnRyb2wgKFRDKSBhY3Rpb25zLCBzbyBsaWtlbHkgcGFydCBvZiB0aGUgZnJhbWV3b3JrJ3MgYWN0aW9uIGhhbmRsaW5nIG1lY2hhbmlzbS4gTXkgZ29hbCBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCAqaG93KiB0aGV5J3JlIHVzZWQgdG9nZXRoZXIsIGFuZCB3aGF0IGVhY2ggaXMgcmVzcG9uc2libGUgZm9yLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIGNvZGUgc25pcHBldCBvciBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gVEMgYWN0aW9uIHRyYXZlcnNhbCBvciBpdGVyYXRpb24uIEkgd2FudCB0byBzZWUgd2hlcmUgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBpcyBjYWxsZWQsIHdoYXQgaXQncyBwYXNzZWQsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBjYWxsYmFjayBvciBsb29wIGJvZHkgaXQgZXhlY3V0ZXMuIFRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHRjYV9hY3Rpb25fZ2RgIHJlcHJlc2VudHMuIElzIGl0IGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWN0aW9uLXNwZWNpZmljIGluZm9ybWF0aW9uPyBPciBhIGdsb2JhbCBkZXNjcmlwdG9yPyBQcm9iYWJseSBhbiBhY3Rpb24ncyBzcGVjaWZpYyBkYXRhLCBzaW5jZSB0aGUgb3RoZXIgb25lIHNlZW1zIGxpa2UgYSB0cmF2ZXJzYWwgZnVuY3Rpb24uIFRoZSBcImdkXCIgcHJvYmFibHkgc3RhbmRzIGZvciBcImdlbmVyaWMgZGF0YVwiLCBcImdyb3VwIGRhdGFcIiBvciBcImdsb2JhbCBkYXRhXCIgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuIEknbSBiZXR0aW5nIHRoYXQgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uYCBpdGVyYXRlcyB0aHJvdWdoIGEgbGlzdCBvZiBhY3Rpb25zIGFuZCBpbnZva2VzIGEgY2FsbGJhY2sgb3IgcHJvY2Vzc2VzIHRoaXMgYHRjYV9hY3Rpb25fZ2RgIG9yIG90aGVyIGFjdGlvbiBkYXRhIHRoYXQgZWFjaCBhY3Rpb24gdXNlcy4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyBob3cgdGhlIGFjdGlvbiBmcmFtZXdvcmsgd2l0aGluIFRDIHdvcmtzIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTUwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NDo0NC45MTE1ODkwNjFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjQ4MDQ5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC03MTEtICAtICd0Yl9wcm9wZXJ0eV9mb3JfZWFjaCdcXG4uY2xhbmctZm9ybWF0OjcxMjogIC0gJ3RjZl9hY3RfZm9yX2VhY2hfYWN0aW9uJ1xcbi5jbGFuZy1mb3JtYXQtNzEzLSAgLSAndGNmX2V4dHNfZm9yX2VhY2hfYWN0aW9uJ1xcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTI3OT1zdGF0aWMgaW5saW5lIHZvaWQgdGNmX2V4dHNfcHV0X25ldChzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpXFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjk0LVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyOTU6I2RlZmluZSB0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSBcXFxcXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTI5Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiAoKGEpID0gYWN0aW9uc1tpXSk7IGkrKylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIwMT1pbnQgdGNmX2FjdGlvbl9kZXN0cm95KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGJpbmQpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMDYtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjA3OlxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMDgtXFx0XFx0YWN0aW9uc1tpXSA9IE5VTEw7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTEyNDE9c3RhdGljIHZvaWQgdGNhX3B1dF9ib3VuZF9tYW55KHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgaW50IGluaXRfcmVzW10pXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDUtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjQ2OlxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyNDctXFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbl9vcHMgKm9wcyA9IGEtXFx1MDAzZW9wcztcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTI2Mz1pbnQgdGNmX2FjdGlvbl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI2OS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjEyNzA6XFx0dGNmX2FjdF9mb3JfZWFjaF9hY3Rpb24oaSwgYSwgYWN0aW9ucykge1xcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTI3MS1cXHRcXHRuZXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgaSArIDEpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYz0xMzMyPXZvaWQgdGNmX2lkcl9pbnNlcnRfbWFueShzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sIGludCBpbml0X3Jlc1tdKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMzM2LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTMzNzpcXHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xMzM4LVxcdFxcdHN0cnVjdCB0Y2ZfaWRyaW5mbyAqaWRyaW5mbztcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM9MTg0Mz1zdGF0aWMgaW50IHRjZl9hY3Rpb25fZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xODQ3LVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MTg0ODpcXHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhLCBhY3Rpb25zKSB7XFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xODQ5LVxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVxcdTAwM2VvcHM7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTM4OTI9aW50IHRjX3NldHVwX2FjdGlvbihzdHJ1Y3QgZmxvd19hY3Rpb24gKmZsb3dfYWN0aW9uLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0zOTA3LVxcdGogPSAwO1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MzkwODpcXHR0Y2ZfYWN0X2Zvcl9lYWNoX2FjdGlvbihpLCBhY3QsIGFjdGlvbnMpIHtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTM5MDktXFx0XFx0c3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6NDcuMDc2Mzk4MDM1WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MjE4NjU0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVmZXJlbmNlIENvdW50IExlYWsgaW4gVHJhZmZpYyBDb250cm9sIEFjdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGFwcGVhcnMgSSd2ZSBpZGVudGlmaWVkIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIHJlZmVyZW5jZSBjb3VudCBsZWFrIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBoYW5kbGluZy4gVGhlIGluaXRpYWwgaXRlcmF0aW9uIGxvZ2ljLCBgdGNmX2FjdF9mb3JfZWFjaF9hY3Rpb25gLCB1c2VkIGEgbG9vcCB0aGF0IHRlcm1pbmF0ZWQgcHJlbWF0dXJlbHkgaWYgaXQgZW5jb3VudGVyZWQgYSBOVUxMIGVudHJ5IHdpdGhpbiB0aGUgYGFjdGlvbnNbXWAgYXJyYXkuIFNwZWNpZmljYWxseSwgdGhlIGxvb3Agd2FzOiBgZm9yIChpID0gMDsgaSBcdTAwM2MgVENBX0FDVF9NQVhfUFJJTyBcdTAwMjZcdTAwMjYgKChhKSA9IGFjdGlvbnNbaV0pOyBpKyspYC4gVGhpcyBtZWFucyB0aGF0IGlmIGBhY3Rpb25zYCBoYWQgTlVMTHMgaW50ZXJzcGVyc2VkLCB0aGUgbG9vcCB3b3VsZCBiYWlsIG91dCBiZWZvcmUgcHJvY2Vzc2luZyBhbGwgdGhlIGludGVuZGVkIGFjdGlvbnMuXG5cbk5vdywgdGhlIHByb2JsZW0gYXJpc2VzIGluIHNjZW5hcmlvcyBsaWtlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgb3IgYHRjYV9hY3Rpb25fZ2RgLiBJZiBhbiBhY3Rpb24gZmFpbHMgZGVsZXRpb24gZHVyaW5nIGEgY2xlYW51cCAod2l0aGluIGB0Y2ZfYWN0aW9uX2Rlc3Ryb3lgIG9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAsIHBlcmhhcHMpLCBpdCdzIHBvc3NpYmxlIGZvciBlYXJsaWVyIGVudHJpZXMgaW4gdGhlIGBhY3Rpb25zW11gIGFycmF5IHRvIGJlIHNldCB0byBOVUxMIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjdGlvbiBoYXMgYmVlbiByZW1vdmVkIG9yIGlzIG5vIGxvbmdlciB2YWxpZC4gQ29uc2VxdWVudGx5LCB3aGVuIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpYCBpcyBjYWxsZWQgbGF0ZXIsIG9mdGVuIGR1cmluZyBlcnJvciBoYW5kbGluZywgdGhlIHNhbWUgZWFybHktdGVybWluYXRpb24gYmVoYXZpb3Igb2NjdXJzLiBUaGlzIG1lYW5zIEknbSBza2lwcGluZyBzb21lIGFjdGlvbnMgdGhhdCBhcmUgc3RpbGwgdGhlcmUuIFRob3NlIHJlZmVyZW5jZXMgYXJlIGxlYWtlZCBiZWNhdXNlIHRoZSBmdW5jdGlvbiB3b24ndCBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIHJlbWFpbmluZyBhY3Rpb25zICphZnRlciogdGhlIGZpcnN0IE5VTEwgaXMgZW5jb3VudGVyZWQuIFRoaXMgbGVhZHMgdG8gYSByZXNvdXJjZSBsZWFrLCBzcGVjaWZpY2FsbHksIGEgcmVmY291bnQgbGVhay4gVGhlIG9iamVjdHMgcmVtYWluIGluIG1lbW9yeSwgYnV0IGFyZSBubyBsb25nZXIgYWNjZXNzaWJsZS5cblxuVGhlIHByb3Bvc2VkIGZpeCDigJMgbW9kaWZ5aW5nIGB0Y2ZfYWN0aW9uX3B1dF9tYW55YCB0byBpdGVyYXRlIHRocm91Z2ggKmFsbCogYFRDQV9BQ1RfTUFYX1BSSU9gIGVudHJpZXMgYW5kIHNpbXBseSBza2lwIGFueSBOVUxMIGVudHJpZXMg4oCTIHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJdCBndWFyYW50ZWVzIHRoYXQgYWxsIGFjdGlvbnMgd2lsbCBoYXZlIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZGVjcmVtZW50ZWQsIGV2ZW4gaWYgc29tZSBoYXZlIGJlZW4gbWFya2VkIGFzIE5VTEwgaW4gdGhlIGFycmF5IGR1ZSB0byBhbiBlYXJsaWVyIGZhaWx1cmUgb3IgZGVsZXRpb24uXG5cbkknbSBub3cgZ29pbmcgdG8gemVybyBpbiBvbiBsaW5lcyBhcm91bmQgMjAzMCBpbiBgdGNmX2FjdGlvbl9kZWxldGVgIGFuZCBgdGNhX2FjdGlvbl9nZGAgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IHRoZSBgYWN0aW9uc2AgYXJyYXkgaXMgYmVpbmcgaW5pdGlhbGl6ZWQsIHBvcHVsYXRlZCwgYW5kIHVzZWQgaW4gdGhlIGRlbGV0aW9uIHNlcXVlbmNlLiBUaGlzIHdpbGwgaGVscCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJvb3QgY2F1c2UgYW5kIGVuc3VyZSB0aGUgcHJvcG9zZWQgZml4IGFkZHJlc3NlcyB0aGUgYWN0dWFsIHByb2JsZW0gYW5kIGlzbid0IGp1c3QgdHJlYXRpbmcgYSBzeW1wdG9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTE2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjUxLjg5ODI2NjM2NloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDMwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDMwOlxcdHN0YXRpYyBpbnRcXG4yMDMxOlxcdHRjYV9hY3Rpb25fZ2Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsIHN0cnVjdCBubG1zZ2hkciAqbixcXG4yMDMyOlxcdFxcdCAgICAgIHUzMiBwb3J0aWQsIGludCBldmVudCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwMzM6XFx0e1xcbjIwMzQ6XFx0XFx0aW50IGksIHJldDtcXG4yMDM1OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9BQ1RfTUFYX1BSSU8gKyAxXTtcXG4yMDM2OlxcdFxcdHN0cnVjdCB0Y19hY3Rpb24gKmFjdDtcXG4yMDM3OlxcdFxcdHNpemVfdCBhdHRyX3NpemUgPSAwO1xcbjIwMzg6XFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHt9O1xcbjIwMzk6XFx0XFxuMjA0MDpcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9BQ1RfTUFYX1BSSU8sIG5sYSwgTlVMTCxcXG4yMDQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKTtcXG4yMDQyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIwNDM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yMDQ0OlxcdFxcbjIwNDU6XFx0XFx0aWYgKGV2ZW50ID09IFJUTV9ERUxBQ1RJT04gXFx1MDAyNlxcdTAwMjYgbi1cXHUwMDNlbmxtc2dfZmxhZ3MgXFx1MDAyNiBOTE1fRl9ST09UKSB7XFxuMjA0NjpcXHRcXHRcXHRpZiAodGJbMV0pXFxuMjA0NzpcXHRcXHRcXHRcXHRyZXR1cm4gdGNhX2FjdGlvbl9mbHVzaChuZXQsIHRiWzFdLCBuLCBwb3J0aWQsIGV4dGFjayk7XFxuMjA0ODpcXHRcXG4yMDQ5OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgbmV0bGluayBhdHRyaWJ1dGVzIHdoaWxlIGZsdXNoaW5nIFRDIGFjdGlvblxcXCIpO1xcbjIwNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjA1MTpcXHRcXHR9XFxuMjA1MjpcXHRcXG4yMDUzOlxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gVENBX0FDVF9NQVhfUFJJTyBcXHUwMDI2XFx1MDAyNiB0YltpXTsgaSsrKSB7XFxuMjA1NDpcXHRcXHRcXHRhY3QgPSB0Y2ZfYWN0aW9uX2dldF8xKG5ldCwgdGJbaV0sIG4sIHBvcnRpZCwgZXh0YWNrKTtcXG4yMDU1OlxcdFxcdFxcdGlmIChJU19FUlIoYWN0KSkge1xcbjIwNTY6XFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihhY3QpO1xcbjIwNTc6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMjA1ODpcXHRcXHRcXHR9XFxuMjA1OTpcXHRcXHRcXHRhdHRyX3NpemUgKz0gdGNmX2FjdGlvbl9maWxsX3NpemUoYWN0KTtcXG4yMDYwOlxcdFxcdFxcdGFjdGlvbnNbaSAtIDFdID0gYWN0O1xcbjIwNjE6XFx0XFx0fVxcbjIwNjI6XFx0XFxuMjA2MzpcXHRcXHRhdHRyX3NpemUgPSB0Y2ZfYWN0aW9uX2Z1bGxfYXR0cnNfc2l6ZShhdHRyX3NpemUpO1xcbjIwNjQ6XFx0XFxuMjA2NTpcXHRcXHRpZiAoZXZlbnQgPT0gUlRNX0dFVEFDVElPTilcXG4yMDY2OlxcdFxcdFxcdHJldCA9IHRjZl9nZXRfbm90aWZ5KG5ldCwgcG9ydGlkLCBuLCBhY3Rpb25zLCBhdHRyX3NpemUsIGV2ZW50LFxcbjIwNjc6XFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbjIwNjg6XFx0XFx0ZWxzZSB7IC8qIGRlbGV0ZSAqL1xcbjIwNjk6XFx0XFx0XFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcXG4yMDcwOlxcdFxcdFxcdGlmIChyZXQpXFxuMjA3MTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4yMDcyOlxcdFxcdFxcdHJldHVybiAwO1xcbjIwNzM6XFx0XFx0fVxcbjIwNzQ6XFx0ZXJyOlxcbjIwNzU6XFx0XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG4yMDc2OlxcdFxcdHJldHVybiByZXQ7XFxuMjA3NzpcXHR9XFxuMjA3ODpcXHRcXG4yMDc5OlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2FkZF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjIwODA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuMjA4MTpcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXFxuMjA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMDgzOlxcdHtcXG4yMDg0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjUxLjg5ODUxNzkxN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODUyMjY2MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IE1hbmFnZW1lbnQgSXNzdWVzIGluIFRyYWZmaWMgQ29udHJvbCBBY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcganVtcHMgb3V0IGF0IG1lLCBzcGVjaWZpY2FsbHkgbGluZSAyMDM4LiBJdCBsb29rcyBsaWtlIHRoZSBgYWN0aW9uc2AgYXJyYXksIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIGB0Y19hY3Rpb25gIHN0cnVjdHVyZSwgaXMgYmVpbmcgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2suIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIGl0J3MgaGFuZGxlZCBsaWtlIHRoaXM/XCIuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHplcm8gaW5pdGlhbGl6YXRpb24gaXMgZ2VuZXJhbGx5IGdvb2QgcHJhY3RpY2UgdG8gc3RhcnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuXG5cbk15IG5leHQgc3RlcCBpcyBuYXR1cmFsbHkgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY2FsbCBgdGNmX2FjdGlvbl9wdXRfbWFueWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBhY3Rpb25zYCBhcnJheSBpcyBiZWluZyB1c2VkLCBzbyBrbm93aW5nIHdoZXJlIGFuZCBob3cgaXQncyBiZWluZyBkZWFsbG9jYXRlZCBpcyBjcml0aWNhbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBncmVwIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNhbGwgc2l0ZXMgYW5kIGJ1aWxkIG15IHVuZGVyc3RhbmRpbmcgZnJvbSB0aGVyZS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG1hbmFnaW5nIG1lbW9yeSBjb3JyZWN0bHkgaW4gdGhpcyBjcnVjaWFsIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU0OjU1Ljc1MDc4NjUwOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3Mzc4NTQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYWN0aW9uX3B1dF9tYW55XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmM9MTIxOT1zdGF0aWMgaW50IHRjZl9hY3Rpb25fcHV0KHN0cnVjdCB0Y19hY3Rpb24gKnApXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTEyMjMtXFxubmV0L3NjaGVkL2FjdF9hcGkuYzoxMjI0OnN0YXRpYyB2b2lkIHRjZl9hY3Rpb25fcHV0X21hbnkoc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdKVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTIyNS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDc0LWVycjpcXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNzU6XFx0dGNmX2FjdGlvbl9wdXRfbWFueShhY3Rpb25zKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzYtXFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTQ6NTcuOTI0NTc4OTkxWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3Mzc1NTYzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzOlxuXG4qKkFuYWx5emluZyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgYW5kIGB0Y2ZfZGVsX25vdGlmeWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGNmX2FjdGlvbl9wdXRfbWFueWAuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXQncyBnb3QgcmVzdHJpY3RlZCBzY29wZSDigJMgb25seSB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiBIbW0sIGFuZCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYHRjYV9hY3Rpb25fZ2RgLiBUaGF0IG5hcnJvd3MgZG93biB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIGFuZCB1c2FnZSwgd2hpY2ggaXMgZ29vZC4gS25vd2luZyB0aGF0IGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgaGVyZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgdGNmX2RlbF9ub3RpZnlgLiBJIHdhbnQgdG8gdHJhY2UgaG93IGRhdGEgaXMgaGFuZGxlZCB0aGVyZSDigJMgc2VlIHdoZXJlIGl0J3MgY2FsbGVkLCB3aGF0IGl0J3MgZG9pbmcgd2l0aCB3aGF0ZXZlciB0aGlzIHRoaW5nIGlzIHRoYXQgYHRjZl9hY3Rpb25fcHV0X21hbnlgIHB1dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzaWRlIGVmZmVjdHMuIEl04oCZcyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgZGF0YSBmbG93IG5vdywgZm9sbG93aW5nIHRoZSBleGVjdXRpb24gcGF0aC4gVW5kZXJzdGFuZGluZyB3aGF0IHRyaWdnZXJzIHdoYXQgaXMgY3J1Y2lhbC4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGltcG9ydGFudCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHR3byBjYWxscywgYW5kIEkgbmVlZCB0byB1bmNvdmVyIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NTowMC42NjIxMzg3ODdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzAxMTcxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2RlbF9ub3RpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuYz0xOTIzPWludCB0Y2ZfYWN0aW9uX3Jlb2ZmbG9hZF9jYihmbG93X2luZHJfYmxvY2tfYmluZF9jYl90ICpjYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMTk4MC1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjE5ODE6c3RhdGljIHN0cnVjdCBza19idWZmICp0Y2ZfZGVsX25vdGlmeV9tc2coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0xOTgyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tdLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDAxLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAwMjpzdGF0aWMgaW50IHRjZl9kZWxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAwMy1cXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfYXBpLmMtMjAxMS1cXHR9IGVsc2Uge1xcbm5ldC9zY2hlZC9hY3RfYXBpLmM6MjAxMjpcXHRcXHRza2IgPSB0Y2ZfZGVsX25vdGlmeV9tc2cobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSxcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwMTMtXFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2FwaS5jPTIwMzE9dGNhX2FjdGlvbl9nZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwgc3RydWN0IG5sbXNnaGRyICpuLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9hcGkuYy0yMDY4LVxcdGVsc2UgeyAvKiBkZWxldGUgKi9cXG5uZXQvc2NoZWQvYWN0X2FwaS5jOjIwNjk6XFx0XFx0cmV0ID0gdGNmX2RlbF9ub3RpZnkobmV0LCBuLCBhY3Rpb25zLCBwb3J0aWQsIGF0dHJfc2l6ZSwgZXh0YWNrKTtcXG5uZXQvc2NoZWQvYWN0X2FwaS5jLTIwNzAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTU6MDMuMDMyMjYzOTg5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxOTQ2OTkxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgdGNmX2RlbF9ub3RpZnlgIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgdGNmX2RlbF9ub3RpZnlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZWxldGlvbiBub3RpZmljYXRpb24gZmxvdyB3aXRoaW4gdGhlIFRyYWZmaWMgQ29udHJvbCBGcmFtZXdvcmsuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgbHVya2luZyBoZXJlLCBwZXJoYXBzIGEgcmFjZSBjb25kaXRpb24gb3IgYW4gdW5oYW5kbGVkIGNvcm5lciBjYXNlLiBJJ2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBkYXRhLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW46XG5cbiogICAqKlRoZSBlbnRyeSBwb2ludDoqKiBXaGVyZSBkb2VzIGB0Y2ZfZGVsX25vdGlmeWAgZml0IGludG8gdGhlIGJyb2FkZXIgZGVsZXRpb24gcHJvY2Vzcz8gV2hhdCBjYWxscyBpdD8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgY29udGV4dHM/IElzIGl0IGNhbGxlZCBmcm9tIHVzZXItc3BhY2UsIGtlcm5lbCBzcGFjZSwgb3IgYm90aD9cbiogICAqKkRhdGEgaW50ZWdyaXR5OioqIEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBkYXRhIHJhY2VzPyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBSQ1UsIHNwaW5sb2NrcywgYW5kIG11dGV4ZXMuXG4qICAgKipFcnJvciBoYW5kbGluZzoqKiBXaGF0IGVycm9yIGNvZGVzIGFyZSByZXR1cm5lZCwgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkIHVwc3RyZWFtPyBJcyB0aGVyZSBwcm9wZXIgY2xlYW51cCBpbiBjYXNlIG9mIGZhaWx1cmU/IEkgd2FudCB0byBzZWUgaWYgYW55IHJlc291cmNlcyBhcmUgbGVha2VkLlxuKiAgICoqSW50ZXJhY3Rpb24gd2l0aCBvdGhlciBUQ0YgY29tcG9uZW50czoqKiBJJ2xsIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgVENGLCBhbmQgYW55IHBvc3NpYmxlIGFyZWFzIG9mIGNvbmZsaWN0LlxuKiAgICoqTWVtb3J5IE1hbmFnZW1lbnQ6KiogSG93IGlzIG1lbW9yeSBoYW5kbGVkIHdoZW4gYW4gb2JqZWN0IGlzIHJlbW92ZWQ/IElzIHRoZSBjbGVhbnVwIGNvcnJlY3Q/XG5cblVsdGltYXRlbHksIEknbSBsb29raW5nIGZvciBhbnkgd2Vha25lc3NlcyBpbiB0aGUgZGVsZXRpb24gbWVjaGFuaXNtIHRoYXQgbWlnaHQgbGVhZCB0byBjcmFzaGVzLCBpbmNvcnJlY3QgdHJhZmZpYyBiZWhhdmlvciwgb3IgcmVzb3VyY2UgZXhoYXVzdGlvbi4gSSdsbCBhcHByb2FjaCB0aGlzIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBJIGhhdmUgYSB2YWd1ZSBpZGVhIG9mIHRoZSBwcm9ibGVtLCBhbmQgd2lsbCBiZSBsb29raW5nIGZvciBhIHBvdGVudGlhbCBjYXVzZSwgc28gdGhlIGNoZWNrIHdpbGwgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NTowOC4yMjY5NjYyMTNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk4MDpcXHRcXG4xOTgxOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX2RlbF9ub3RpZnlfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sbXNnaGRyICpuLFxcbjE5ODI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10sXFxuMTk4MzpcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBwb3J0aWQsIHNpemVfdCBhdHRyX3NpemUsXFxuMTk4NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xOTg1OlxcdHtcXG4xOTg2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTk4NzpcXHRcXG4xOTg4OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihtYXgoYXR0cl9zaXplLCBOTE1TR19HT09EU0laRSksIEdGUF9LRVJORUwpO1xcbjE5ODk6XFx0XFx0aWYgKCFza2IpXFxuMTk5MDpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PQlVGUyk7XFxuMTk5MTpcXHRcXG4xOTkyOlxcdFxcdGlmICh0Y2FfZ2V0X2ZpbGwoc2tiLCBhY3Rpb25zLCBwb3J0aWQsIG4tXFx1MDAzZW5sbXNnX3NlcSwgMCwgUlRNX0RFTEFDVElPTixcXG4xOTkzOlxcdFxcdFxcdFxcdCAwLCAyLCBleHRhY2spIFxcdTAwM2M9IDApIHtcXG4xOTk0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCB0byBmaWxsIG5ldGxpbmsgVEMgYWN0aW9uIGF0dHJpYnV0ZXNcXFwiKTtcXG4xOTk1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE5OTY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuMTk5NzpcXHRcXHR9XFxuMTk5ODpcXHRcXG4xOTk5OlxcdFxcdHJldHVybiBza2I7XFxuMjAwMDpcXHR9XFxuMjAwMTpcXHRcXG4yMDAyOlxcdHN0YXRpYyBpbnQgdGNmX2RlbF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxuMjAwMzpcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y19hY3Rpb24gKmFjdGlvbnNbXSwgdTMyIHBvcnRpZCxcXG4yMDA0OlxcdFxcdFxcdFxcdCAgc2l6ZV90IGF0dHJfc2l6ZSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIwMDU6XFx0e1xcbjIwMDY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4yMDA3OlxcdFxcdGludCByZXQ7XFxuMjAwODpcXHRcXG4yMDA5OlxcdFxcdGlmICghcnRubF9ub3RpZnlfbmVlZGVkKG5ldCwgbi1cXHUwMDNlbmxtc2dfZmxhZ3MsIFJUTkxHUlBfVEMpKSB7XFxuMjAxMDpcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjIwMTE6XFx0XFx0fSBlbHNlIHtcXG4yMDEyOlxcdFxcdFxcdHNrYiA9IHRjZl9kZWxfbm90aWZ5X21zZyhuZXQsIG4sIGFjdGlvbnMsIHBvcnRpZCwgYXR0cl9zaXplLFxcbjIwMTM6XFx0XFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuMjAxNDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpXFxuMjAxNTpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihza2IpO1xcbjIwMTY6XFx0XFx0fVxcbjIwMTc6XFx0XFxuMjAxODpcXHRcXHQvKiBub3cgZG8gdGhlIGRlbGV0ZSAqL1xcbjIwMTk6XFx0XFx0cmV0ID0gdGNmX2FjdGlvbl9kZWxldGUobmV0LCBhY3Rpb25zKTtcXG4yMDIwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMjAyMTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJGYWlsZWQgdG8gZGVsZXRlIFRDIGFjdGlvblxcXCIpO1xcbjIwMjI6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMjAyMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjIwMjQ6XFx0XFx0fVxcbjIwMjU6XFx0XFxuMjAyNjpcXHRcXHRyZXR1cm4gcnRuZXRsaW5rX21heWJlX3NlbmQoc2tiLCBuZXQsIHBvcnRpZCwgUlROTEdSUF9UQyxcXG4yMDI3OlxcdFxcdFxcdFxcdFxcdCAgICBuLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0VDSE8pO1xcbjIwMjg6XFx0fVxcbjIwMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU1OjA4LjIyNzE3MjgzM1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzI5NDY1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gRGVsZXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSdzIGNhbGxpbmcgZm9yIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAuIE15IGltbWVkaWF0ZSBtZW50YWwgbWFwIHN0YXJ0cyB0byBhc3NlbWJsZS4gVGhpcyBzdWdnZXN0cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0ncyBsaWZlY3ljbGUg4oCTIGEgZGVsZXRpb24gYWN0aW9uIHJlbGF0ZWQgdG8sIGxpa2VseSwgYSB0cmFuc2FjdGlvbiBjb250cm9sIGZyYW1ld29yayAoVENGKSwgZ2l2ZW4gdGhlIHByZWZpeC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBiZWluZyBkZWxldGVkPyBBIHJlY29yZD8gQW4gb2JqZWN0PyBBbiBlbnRpcmUgZGF0YSBzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZWxldGlvbj8gQXJlIHRoZXJlIGNhc2NhZGluZyBlZmZlY3RzIHRvIGNvbnNpZGVyPyBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBtYW5hZ2U/IElzIHRoaXMgZGVsZXRpb24gdXNlciBpbml0aWF0ZWQsIG9yIGF1dG9tYXRpYz8gV2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkPyBNb3JlIGltcG9ydGFudGx5LCBpcyBkYXRhIGludGVncml0eSBhdCByaXNrLCBhbmQgaXMgdGhlcmUgYW55IHJvbGxiYWNrIG9yIHJlY292ZXJ5IGltcGxlbWVudGVkPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBhY3Rpb24gdG8gcHJvcGVybHkgZXZhbHVhdGUgaXQuIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA5OjU1OjEwLjU1NjY0MDg2MVoiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQwOlxcdFxcdHJldHVybiBlcnI7XFxuMTg0MTpcXHR9XFxuMTg0MjpcXHRcXG4xODQzOlxcdHN0YXRpYyBpbnQgdGNmX2FjdGlvbl9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW10pXFxuMTg0NDpcXHR7XFxuMTg0NTpcXHRcXHRzdHJ1Y3QgdGNfYWN0aW9uICphO1xcbjE4NDY6XFx0XFx0aW50IGk7XFxuMTg0NzpcXHRcXG4xODQ4OlxcdFxcdHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKGksIGEsIGFjdGlvbnMpIHtcXG4xODQ5OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb25fb3BzICpvcHMgPSBhLVxcdTAwM2VvcHM7XFxuMTg1MDpcXHRcXHRcXHQvKiBBY3Rpb25zIGNhbiBiZSBkZWxldGVkIGNvbmN1cnJlbnRseSBzbyB3ZSBtdXN0IHNhdmUgdGhlaXJcXG4xODUxOlxcdFxcdFxcdCAqIHR5cGUgYW5kIGlkIHRvIHNlYXJjaCBhZ2FpbiBhZnRlciByZWZlcmVuY2UgaXMgcmVsZWFzZWQuXFxuMTg1MjpcXHRcXHRcXHQgKi9cXG4xODUzOlxcdFxcdFxcdHN0cnVjdCB0Y2ZfaWRyaW5mbyAqaWRyaW5mbyA9IGEtXFx1MDAzZWlkcmluZm87XFxuMTg1NDpcXHRcXHRcXHR1MzIgYWN0X2luZGV4ID0gYS1cXHUwMDNldGNmYV9pbmRleDtcXG4xODU1OlxcdFxcbjE4NTY6XFx0XFx0XFx0YWN0aW9uc1tpXSA9IE5VTEw7XFxuMTg1NzpcXHRcXHRcXHRpZiAodGNmX2FjdGlvbl9wdXQoYSkpIHtcXG4xODU4OlxcdFxcdFxcdFxcdC8qIGxhc3QgcmVmZXJlbmNlLCBhY3Rpb24gd2FzIGRlbGV0ZWQgY29uY3VycmVudGx5ICovXFxuMTg1OTpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KG9wcy1cXHUwMDNlb3duZXIpO1xcbjE4NjA6XFx0XFx0XFx0fSBlbHNlIHtcXG4xODYxOlxcdFxcdFxcdFxcdGludCByZXQ7XFxuMTg2MjpcXHRcXG4xODYzOlxcdFxcdFxcdFxcdC8qIG5vdyBkbyB0aGUgZGVsZXRlICovXFxuMTg2NDpcXHRcXHRcXHRcXHRyZXQgPSB0Y2ZfaWRyX2RlbGV0ZV9pbmRleChpZHJpbmZvLCBhY3RfaW5kZXgpO1xcbjE4NjU6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTg2NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4Njc6XFx0XFx0XFx0fVxcbjE4Njg6XFx0XFx0fVxcbjE4Njk6XFx0XFx0cmV0dXJuIDA7XFxuMTg3MDpcXHR9XFxuMTg3MTpcXHRcXG4xODcyOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3Jlb2ZmbG9hZF9kZWxfbm90aWZ5X21zZyhzdHJ1Y3QgbmV0ICpuZXQsXFxuMTg3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uKVxcbjE4NzQ6XFx0e1xcbjE4NzU6XFx0XFx0c3RydWN0IHRjX2FjdGlvbiAqYWN0aW9uc1tUQ0FfQUNUX01BWF9QUklPXSA9IHtcXG4xODc2OlxcdFxcdFxcdFswXSA9IGFjdGlvbixcXG4xODc3OlxcdFxcdH07XFxuMTg3ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjE4Nzk6XFx0XFx0c2l6ZV90IGF0dHJfc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDk6NTU6MTAuNTU2ODUxMDExWiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MjI3MTY3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlc291cmNlIExlYWsgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGZvY3VzZXMgb24gdGhlIGB0Y2ZfYWN0aW9uX2RlbGV0ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUsIGlmIGB0Y2ZfaWRyX2RlbGV0ZV9pbmRleGAgZmFpbHMgYXQgaW5kZXggMCwgdGhlIGNvZGUgc2V0cyBgYWN0aW9uc1swXWAgdG8gYE5VTExgIGJ1dCBkb2Vzbid0IGhhbmRsZSB0aGUgcmVtYWluaW5nIGFjdGlvbnMgcHJvcGVybHkuIFRoaXMgbGVhZHMgdG8gYSByZWZlcmVuY2UgY291bnQgbGVhaywgYSBjbGFzc2ljIHJlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUuIFRoZSBzdWJzZXF1ZW50IGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYHRjYV9hY3Rpb25fZ2RgLCB1cG9uIGVuY291bnRlcmluZyB0aGUgZXJyb3IsIGNhbGxzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KGFjdGlvbnMpYCwgYnV0IGJlY2F1c2UgYGFjdGlvbnNbMF1gIGlzIG5vdyBgTlVMTGAsIHRoZSBpdGVyYXRpb24gc3RvcHMgcHJlbWF0dXJlbHksIGxlYXZpbmcgcmVmZXJlbmNlcyB0byBsYXRlciBhY3Rpb25zIGluIHRoZSBhcnJheSBsZWFrZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgc3RyYWlnaHRmb3J3YXJkLiBJdCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueWAgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbnRpcmUgYGFjdGlvbnNgIGFycmF5LCBmcm9tIDAgdG8gYFRDQV9BQ1RfTUFYX1BSSU8gLSAxYCwgcmVnYXJkbGVzcyBvZiBgTlVMTGAgZW50cmllcywgY29ycmVjdGx5IHJlbGVhc2luZyBhbGwgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIHRhcmdldGVkIGZpeCBmb3IgYSBzcGVjaWZpYyByZXNvdXJjZSBsZWFrIGR1cmluZyBlcnJvciBoYW5kbGluZy5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEknbSBjYXJlZnVsbHkgZXZhbHVhdGluZyB3aGV0aGVyIHRoZSBwYXRjaCBjb3VsZCBpbnRyb2R1Y2UgbmV3IHZ1bG5lcmFiaWxpdGllcy5cblxuKiAgICoqVXNlciBTcGFjZSBMZWFrYWdlOioqIEFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgbWlnaHQgbGVhaz8gTm8sIHRoaXMgY29kZSBkb2Vzbid0IGludGVyYWN0IHdpdGggdXNlciBzcGFjZSBkaXJlY3RseSBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyBwb3NzaWJpbGl0eS5cbiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgQnJhbmNoaW5nOioqIERvZXMgaXQgaW50cm9kdWNlIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gVGhlIGBhY3Rpb25zYCBhcnJheSBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgKGA9IHt9YCksIHNvIGVhY2ggZW50cnkgaXMgZWl0aGVyIGEgdmFsaWQgcG9pbnRlciBvciBgTlVMTGAuIFRoaXMgaW5pdGlhbGl6YXRpb24gcHJldmVudHMgYW55IHBvdGVudGlhbCBtaXN1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG4qICAgKipCdWZmZXIgRXJyb3JzOioqIERvZXMgaXQgaW52b2x2ZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkPyBOb3BlLlxuKiAgICoqQm91bmRzIENoZWNrczoqKiBEb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLlxuXG5HaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGlzIHN0cmljdGx5IGFib3V0IGZpeGluZyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrLiBJdCdzIGFib3V0IGVuc3VyaW5nIGFsbCByZXNvdXJjZXMgYXJlIHByb3Blcmx5IHJlbGVhc2VkLCBub3QgYWJvdXQgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuSGVyZSdzIG15IHJhdGlvbmFsZTpcblxuS01TQU4gZm9jdXNlcyBvbiBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIEluIGNvbnRyYXN0LCB0aGlzIHBhdGNoIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCBtb2RpZmllcyBgdGNmX2FjdGlvbl9wdXRfbWFueSgpYCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIGFuIGFycmF5IG9mIGFjdGlvbnMgYWZ0ZXIgYSBkZWxldGlvbiBmYWlsdXJlLiBDcnVjaWFsbHksIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHplcm8taW5pdGlhbGl6ZXMgdGhlIGBhY3Rpb25zYCBhcnJheSAoYD0ge31gKS4gVGhpcyBpbml0aWFsaXphdGlvbiBtZWFucyB0aGF0IHRoZSBjb2RlIG9ubHkgd29ya3Mgd2l0aCBlaXRoZXIgdmFsaWQgcG9pbnRlcnMgb3IgYE5VTExgIGVudHJpZXMuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgZml4IGFkZHJlc3NlcyBhIHJlc291cmNlIGxlYWsgKHJlZmVyZW5jZSBjb3VudCBidWcpIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgYW55IGlzc3VlcyBpbiB0aGlzIGFyZWEuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5MywiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwOTo1NTo0NS43ODQwMjA0OTVaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cXG5cXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Y2ZfYWN0aW9uX3B1dF9tYW55KClgIGluIGBuZXQvc2NoZWQvYWN0X2FwaS5jYCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGBUQ0FfQUNUX01BWF9QUklPYCBzbG90cyByYXRoZXIgdGhhbiB0ZXJtaW5hdGluZyBhdCB0aGUgZmlyc3QgTlVMTCBlbnRyeSB2aWEgYHRjZl9hY3RfZm9yX2VhY2hfYWN0aW9uKClgLiBUaGlzIGVuc3VyZXMgdGhhdCByZW1haW5pbmcgYWN0aW9uIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkIHdoZW4gYW4gZWFybGllciBhY3Rpb24gZGVsZXRpb24gaW4gYSBiYXRjaCBmYWlscyBhZnRlciBjbGVhcmluZyBpdHMgc2xvdC5cXG5cXG5UaGUgYGFjdGlvbnNgIGFycmF5IGluIGB0Y2FfYWN0aW9uX2dkKClgIGlzIHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdGNfYWN0aW9uICphY3Rpb25zW1RDQV9BQ1RfTUFYX1BSSU9dID0ge307YCksIHNvIGFsbCB1bnBvcHVsYXRlZCBvciBjbGVhcmVkIGVudHJpZXMgYXJlIHNhZmVseSBOVUxMLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVhZCwgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBUaGUgaXNzdWUgaXMgc3RyaWN0bHkgYSByZWZlcmVuY2UgY291bnQgLyByZXNvdXJjZSBsZWFrLCB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt898t[1] Phase: Succeeded StartedAt: 2026-09-10 09:55:57 +0000 UTC FinishedAt: 2026-09-10 09:55:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 09:55:57 +0000 UTC FinishedAt: 2026-09-10 09:55:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2] Phase: Succeeded StartedAt: 2026-09-10 09:55:57 +0000 UTC FinishedAt: 2026-09-10 13:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 09:55:57 +0000 UTC FinishedAt: 2026-09-10 13:41:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 09:55:57 +0000 UTC FinishedAt: 2026-09-10 09:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 09:55:57 +0000 UTC FinishedAt: 2026-09-10 09:56:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowt898t/series-workflowt898t-convert-artifact-4179971724/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 09:56:25 +0000 UTC FinishedAt: 2026-09-10 10:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 09:56:25 +0000 UTC FinishedAt: 2026-09-10 10:16:32 +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:*7bdf08a2-99f5-4bf8-b026-f8c71a9399ba,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-workflowt898t/series-workflowt898t-convert-artifact-4179971724/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": "c385d77c-b2a4-498c-8b13-8ed16fc926b7", "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-workflowt898t/series-workflowt898t-build-action-264508602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 09:56:25 +0000 UTC FinishedAt: 2026-09-10 10:16:22 +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:*7bdf08a2-99f5-4bf8-b026-f8c71a9399ba,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-workflowt898t/series-workflowt898t-convert-artifact-4179971724/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": "c385d77c-b2a4-498c-8b13-8ed16fc926b7", "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-workflowt898t/series-workflowt898t-build-action-264508602/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 10:16:32 +0000 UTC FinishedAt: 2026-09-10 10:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 10:16:32 +0000 UTC FinishedAt: 2026-09-10 10:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 10:16:32 +0000 UTC FinishedAt: 2026-09-10 10:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 10:16:32 +0000 UTC FinishedAt: 2026-09-10 10:16:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowt898t/series-workflowt898t-convert-artifact-1694717643/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 10:16:42 +0000 UTC FinishedAt: 2026-09-10 10:18:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 10:16:42 +0000 UTC FinishedAt: 2026-09-10 10:18:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c385d77c-b2a4-498c-8b13-8ed16fc926b7,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-workflowt898t/series-workflowt898t-build-action-264508602/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-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 10:18:36 +0000 UTC FinishedAt: 2026-09-10 10:18:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 10:18:36 +0000 UTC FinishedAt: 2026-09-10 10:18:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 10:18:36 +0000 UTC FinishedAt: 2026-09-10 10:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 10:18:36 +0000 UTC FinishedAt: 2026-09-10 10:37:05 +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:*7bdf08a2-99f5-4bf8-b026-f8c71a9399ba,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-workflowt898t/series-workflowt898t-convert-artifact-1694717643/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": "3d2b8e89-13b5-4d5f-b35d-82a1644d03bb", "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-workflowt898t/series-workflowt898t-build-action-276921199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 10:18:36 +0000 UTC FinishedAt: 2026-09-10 10:36:55 +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:*7bdf08a2-99f5-4bf8-b026-f8c71a9399ba,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-workflowt898t/series-workflowt898t-convert-artifact-1694717643/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": "3d2b8e89-13b5-4d5f-b35d-82a1644d03bb", "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-workflowt898t/series-workflowt898t-build-action-276921199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 10:37:05 +0000 UTC FinishedAt: 2026-09-10 10:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 10:37:05 +0000 UTC FinishedAt: 2026-09-10 10:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 10:37:05 +0000 UTC FinishedAt: 2026-09-10 10:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 10:37:05 +0000 UTC FinishedAt: 2026-09-10 10:38:53 +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:*3d2b8e89-13b5-4d5f-b35d-82a1644d03bb,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-workflowt898t/series-workflowt898t-build-action-276921199/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-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 10:39:03 +0000 UTC FinishedAt: 2026-09-10 13:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 10:39:03 +0000 UTC FinishedAt: 2026-09-10 13:41:53 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"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:*c385d77c-b2a4-498c-8b13-8ed16fc926b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d2b8e89-13b5-4d5f-b35d-82a1644d03bb,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-workflowt898t/series-workflowt898t-build-action-264508602/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-workflowt898t/series-workflowt898t-build-action-276921199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 10:39:03 +0000 UTC FinishedAt: 2026-09-10 10:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 10:39:03 +0000 UTC FinishedAt: 2026-09-10 10:39:19 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"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-workflowt898t/series-workflowt898t-convert-artifact-2985057892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 10:39:03 +0000 UTC FinishedAt: 2026-09-10 10:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 10:39:03 +0000 UTC FinishedAt: 2026-09-10 10:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 10:39:04 +0000 UTC FinishedAt: 2026-09-10 10:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 10:39:26 +0000 UTC FinishedAt: 2026-09-10 13:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt898t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_action_put_many","tca_action_gd","tcf_action_delete","tcf_del_notify","tc_ctl_action"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f26a5e8040b4957ef4dbdfcde6cc7ba2db53937","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_ACT"],"series_id":"abc1d2eb-df75-4665-afd7-02fdf758e66b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 10:39:26 +0000 UTC FinishedAt: 2026-09-10 13:41:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c385d77c-b2a4-498c-8b13-8ed16fc926b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d2b8e89-13b5-4d5f-b35d-82a1644d03bb,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-workflowt898t/series-workflowt898t-build-action-264508602/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-workflowt898t/series-workflowt898t-build-action-276921199/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-workflowt898t/series-workflowt898t-convert-artifact-2985057892/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,}